diff --git a/git_deps/blame.py b/git_deps/blame.py
new file mode 100644
index 0000000..41d79fe
--- /dev/null
+++ b/git_deps/blame.py
@@ -0,0 +1,61 @@
This is even visible in pygit2.Diff.patch.
However, when you look at the same diff's
pygit2.Patch.delta.old_file.path it is not '/dev/null' but 'git_deps/blame.py'. This could have been caught up by tree_lookup() in blame_diff_hunk if '/dev/null' was checked. Because old_file.path is a valid filename though, tree_lookup() may succeed. When? Consider case of moving a file and replacing it with a symlink:
diff --git a/some-script b/some-script
deleted file mode 100755
index 21c9f09..0000000
--- a/some-script
+++ /dev/null
@@ -1,3 +0,0 @@ <-- git-deps examines this hunk
-#!/usr/bin/perl
-...
-
diff --git a/some-script b/some-script
new file mode 120000
index 0000000..0098051
--- /dev/null
+++ b/some-script
@@ -0,0 +1 @@ <-- this can be skipped, new file
+newdir/some-script
As a fix look at file mode of each Patch.delta's file and detect new files from old_file.mode, new files don't bring about any deps so they can be skipped in hunk examination.
Without the fix crash like below happes:
fatal: -L invalid line number: 0
subprocess.CalledProcessError: Command '['git', 'blame', '--porcelain', '-L', '0,+0', 'abcde', '--', 'some-script']' returned non-zero exit status 128.
New files in patch are shown as
This is even visible in pygit2.Diff.patch. However, when you look at the same diff's pygit2.Patch.delta.old_file.path it is not '/dev/null' but 'git_deps/blame.py'. This could have been caught up by tree_lookup() in blame_diff_hunk if '/dev/null' was checked. Because old_file.path is a valid filename though, tree_lookup() may succeed. When? Consider case of moving a file and replacing it with a symlink:
As a fix look at file mode of each Patch.delta's file and detect new files from old_file.mode, new files don't bring about any deps so they can be skipped in hunk examination.
Without the fix crash like below happes: fatal: -L invalid line number: 0 subprocess.CalledProcessError: Command '['git', 'blame', '--porcelain', '-L', '0,+0', 'abcde', '--', 'some-script']' returned non-zero exit status 128.
Fixes #41 Ref #108