-
Notifications
You must be signed in to change notification settings - Fork 49
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fatal: -L invalid line number: 0 #41
Comments
Very strange! Thanks for the great bug report! I'll take a look but running with |
49f9429911b13dc43bc93ea6fd4f5f38dfddb8ee does not exist in the upstream repo. Where are you getting it from? |
Ah.I guess that's the problem. That's a already cherry-picked commit from another branch. With the original id ( |
I think i have learned how to reproduce this error.
|
New files in patch are shown as 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. Fixes aspiers#41 Ref aspiers#108
New files in patch are shown as 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. Fixes aspiers#41 Ref aspiers#108
While trying to backport a commit for oslo.messaging (commit
49f9429911b13dc43bc93ea6fd4f5f38dfddb8ee
to stable branch1.4.1
), I got the following error:Reproducable with:
The text was updated successfully, but these errors were encountered: