Skip to content
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

Closed
toabctl opened this issue Feb 26, 2015 · 4 comments · May be fixed by #130
Closed

fatal: -L invalid line number: 0 #41

toabctl opened this issue Feb 26, 2015 · 4 comments · May be fixed by #130
Labels

Comments

@toabctl
Copy link
Contributor

toabctl commented Feb 26, 2015

While trying to backport a commit for oslo.messaging (commit 49f9429911b13dc43bc93ea6fd4f5f38dfddb8ee to stable branch 1.4.1), I got the following error:

[snipped]
293a34c1560425bf963c9079a3f38e58fbef9423 8a8685b62ff3e17e3f3ff4042ac828ae88b0151c
95119398e29eae0fcb613e404697ee46a2a6f23a 48a1cfae8ab1cf873ecd2f4146d87c9f001c7e0d
fatal: -L invalid line number: 0
Traceback (most recent call last):
  File "/home/tom/bin/git-deps", line 787, in <module>
    main()
  File "/home/tom/bin/git-deps", line 781, in main
    cli(options, args)
  File "/home/tom/bin/git-deps", line 668, in cli
    detector.find_dependencies(dependent_rev)
  File "/home/tom/bin/git-deps", line 402, in find_dependencies
    self.find_dependencies_with_parent(dependent, parent)
  File "/home/tom/bin/git-deps", line 426, in find_dependencies_with_parent
    self.blame_hunk(dependent, parent, path, hunk)
  File "/home/tom/bin/git-deps", line 452, in blame_hunk
    blame = subprocess.check_output(cmd)
  File "/usr/lib64/python2.7/subprocess.py", line 573, in check_output
    raise CalledProcessError(retcode, cmd, output=output)
subprocess.CalledProcessError: Command '['git', 'blame', '--porcelain', '-L', '0,+0', '7ca7fed9ea7b85089158c2e026e6c3c0864552b3', '--', 'openstack/common/messaging/_executors/__init__.py']' returned non-zero exit status 128

Reproducable with:

git checkout -b 141 1.4.1
git deps -r 49f9429911b13dc43bc93ea6fd4f5f38dfddb8ee
@aspiers
Copy link
Owner

aspiers commented Feb 26, 2015

Very strange! Thanks for the great bug report! I'll take a look but running with --debug might shed more light.

@aspiers
Copy link
Owner

aspiers commented Feb 26, 2015

49f9429911b13dc43bc93ea6fd4f5f38dfddb8ee does not exist in the upstream repo. Where are you getting it from?

@aspiers aspiers added the bug label Feb 26, 2015
@toabctl
Copy link
Contributor Author

toabctl commented Feb 26, 2015

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 (434b5c8781b36cd65b7b642d723c0502e7093795) it works. sorry for the noise.

@pb-new-username
Copy link

I think i have learned how to reproduce this error.

1. Cd into any git repo in the master branch.
2. touch test.txt
3. git add test.txt
4. git commit -m "First commit"
5. echo "First mod" > test.txt
6. git add test.txt
7. git commit -m "First mod"
8. git deps --recurse --exclude-commits master HEAD^!

Werkov added a commit to Werkov/git-deps that referenced this issue Jul 4, 2024
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
Werkov added a commit to Werkov/git-deps that referenced this issue Jul 4, 2024
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants