* stgit error on status command
@ 2008-07-07 15:10 Jon Smirl
2008-07-08 7:02 ` Karl Hasselström
0 siblings, 1 reply; 10+ messages in thread
From: Jon Smirl @ 2008-07-07 15:10 UTC (permalink / raw)
To: Git Mailing List
jonsmirl@terra:~$ stg --version
Stacked GIT 0.14.3.163.g06f9
git version 1.5.6.1
Python version 2.5.2 (r252:60911, Apr 21 2008, 11:17:30)
[GCC 4.2.3 (Ubuntu 4.2.3-2ubuntu7)]
jonsmirl@terra:~$
jonsmirl@terra:~/fs$ stg status
Error: Unhandled exception:
Traceback (most recent call last):
File "/usr/local/lib/python2.5/site-packages/stgit/main.py", line 278, in main
ret = command.func(parser, options, args)
File "/usr/local/lib/python2.5/site-packages/stgit/commands/status.py",
line 119, in func
options.diff_flags)
File "/usr/local/lib/python2.5/site-packages/stgit/commands/status.py",
line 75, in status
diff_flags = diff_flags)
File "/usr/local/lib/python2.5/site-packages/stgit/git.py", line
255, in tree_status
for t, fn in parse_git_ls(GRun('diff-index', '-z', *args).raw_output()):
File "/usr/local/lib/python2.5/site-packages/stgit/git.py", line
201, in parse_git_ls
mode_a, mode_b, sha1_a, sha1_b, t = line.split(' ')
ValueError: need more than 1 value to unpack
jonsmirl@terra:~/fs$
jonsmirl@terra:~/fs$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# renamed: arch/powerpc/boot/dts/digispeaker-alpha.dts ->
arch/powerpc/boot/dts/dspeak01.dts
# renamed: arch/powerpc/platforms/52xx/digispeaker_alpha.c ->
arch/powerpc/platforms/52xx/dspeak0
#
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
#
# modified: arch/powerpc/platforms/52xx/dspeak01.c
--
Jon Smirl
jonsmirl@gmail.com
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: stgit error on status command
2008-07-07 15:10 stgit error on status command Jon Smirl
@ 2008-07-08 7:02 ` Karl Hasselström
2008-07-08 12:06 ` Jon Smirl
0 siblings, 1 reply; 10+ messages in thread
From: Karl Hasselström @ 2008-07-08 7:02 UTC (permalink / raw)
To: Jon Smirl; +Cc: Git Mailing List, Catalin Marinas
Thanks for the report.
The problem is that we mis-parse the output of git diff-index when
rename detection is on (and it prints more than one filename on one
line). This happens if you give stg status the --diff-opts=-M flag,
but you didn't -- but it could also happen if you have the
stgit.diff-opts config variable set.
I'll try to get a patch out tonight. In the mean time, if you like you
should be able to work around the problem by unsetting
stgit.diff-opts.
--
Karl Hasselström, kha@treskal.com
www.treskal.com/kalle
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: stgit error on status command
2008-07-08 7:02 ` Karl Hasselström
@ 2008-07-08 12:06 ` Jon Smirl
2008-07-08 12:25 ` Karl Hasselström
0 siblings, 1 reply; 10+ messages in thread
From: Jon Smirl @ 2008-07-08 12:06 UTC (permalink / raw)
To: Karl Hasselström; +Cc: Git Mailing List, Catalin Marinas
On 7/8/08, Karl Hasselström <kha@treskal.com> wrote:
> Thanks for the report.
>
> The problem is that we mis-parse the output of git diff-index when
> rename detection is on (and it prints more than one filename on one
> line). This happens if you give stg status the --diff-opts=-M flag,
> but you didn't -- but it could also happen if you have the
> stgit.diff-opts config variable set.
I have -M in my config file. If I don't use people on lkml complain
about renames generating piles of output in the patches. I'm able to
work around the problem for the moment.
>
> I'll try to get a patch out tonight. In the mean time, if you like you
> should be able to work around the problem by unsetting
> stgit.diff-opts.
>
>
> --
> Karl Hasselström, kha@treskal.com
> www.treskal.com/kalle
>
--
Jon Smirl
jonsmirl@gmail.com
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: stgit error on status command
2008-07-08 12:06 ` Jon Smirl
@ 2008-07-08 12:25 ` Karl Hasselström
2008-07-08 19:54 ` [StGit PATCH 0/2] stg status rename fix (stable) Karl Hasselström
2008-07-08 19:57 ` [StGit PATCH] stg status rename fix (safe+experimental) Karl Hasselström
0 siblings, 2 replies; 10+ messages in thread
From: Karl Hasselström @ 2008-07-08 12:25 UTC (permalink / raw)
To: Jon Smirl; +Cc: Git Mailing List, Catalin Marinas
On 2008-07-08 08:06:04 -0400, Jon Smirl wrote:
> On 7/8/08, Karl Hasselström <kha@treskal.com> wrote:
>
> > Thanks for the report.
> >
> > The problem is that we mis-parse the output of git diff-index when
> > rename detection is on (and it prints more than one filename on
> > one line). This happens if you give stg status the --diff-opts=-M
> > flag, but you didn't -- but it could also happen if you have the
> > stgit.diff-opts config variable set.
>
> I have -M in my config file. If I don't use people on lkml complain
> about renames generating piles of output in the patches. I'm able to
> work around the problem for the moment.
Oh, I'm certainly not suggesting that you shouldn't have -M in your
stgit.diff-opts -- just that dropping it for the moment is a
workaround to your problem.
Hmm. Another workaround is to pass an explicit --diff-opts="" to stg
status; that'll override your stgit.diff-opts, and avoid triggering
the bug.
But with any luck, I'll have this fixed within 4-6 hours or so.
--
Karl Hasselström, kha@treskal.com
www.treskal.com/kalle
^ permalink raw reply [flat|nested] 10+ messages in thread
* [StGit PATCH 0/2] stg status rename fix (stable)
2008-07-08 12:25 ` Karl Hasselström
@ 2008-07-08 19:54 ` Karl Hasselström
2008-07-08 19:54 ` [StGit PATCH 1/2] Test "stg status" with renames Karl Hasselström
` (2 more replies)
2008-07-08 19:57 ` [StGit PATCH] stg status rename fix (safe+experimental) Karl Hasselström
1 sibling, 3 replies; 10+ messages in thread
From: Karl Hasselström @ 2008-07-08 19:54 UTC (permalink / raw)
To: Catalin Marinas; +Cc: git, Jon Smirl
This fixes the bug on the stable branch. (stgit.diff-opts doesn't
exist there, so it's less of an issue, but still.)
Also available at
git://repo.or.cz/stgit/kha.git safe
---
Karl Hasselström (2):
Don't allow extra diff options with "stg status"
Test "stg status" with renames
stgit/commands/status.py | 16 +++-------------
stgit/git.py | 9 ++++++---
t/t0002-status.sh | 11 +++++++++++
3 files changed, 20 insertions(+), 16 deletions(-)
--
Karl Hasselström, kha@treskal.com
www.treskal.com/kalle
^ permalink raw reply [flat|nested] 10+ messages in thread
* [StGit PATCH 1/2] Test "stg status" with renames
2008-07-08 19:54 ` [StGit PATCH 0/2] stg status rename fix (stable) Karl Hasselström
@ 2008-07-08 19:54 ` Karl Hasselström
2008-07-08 19:54 ` [StGit PATCH 2/2] Don't allow extra diff options with "stg status" Karl Hasselström
2008-07-09 4:05 ` [StGit PATCH 0/2] stg status rename fix (stable) Karl Hasselström
2 siblings, 0 replies; 10+ messages in thread
From: Karl Hasselström @ 2008-07-08 19:54 UTC (permalink / raw)
To: Catalin Marinas; +Cc: git, Jon Smirl
Currently, it only works if -M is not passed to git diff-files, so the
second of the two tests fails.
Signed-off-by: Karl Hasselström <kha@treskal.com>
---
t/t0002-status.sh | 16 ++++++++++++++++
1 files changed, 16 insertions(+), 0 deletions(-)
diff --git a/t/t0002-status.sh b/t/t0002-status.sh
index 43e1ca0..69c29a0 100755
--- a/t/t0002-status.sh
+++ b/t/t0002-status.sh
@@ -171,4 +171,20 @@ test_expect_success 'Status of disappeared newborn' '
diff -u expected.txt output.txt
'
+cat > expected.txt <<EOF
+A fay
+D fie
+EOF
+test_expect_success 'Status after renaming a file' '
+ git rm foo/bar &&
+ git mv fie fay &&
+ stg status > output.txt &&
+ diff -u expected.txt output.txt
+'
+
+test_expect_failure 'Status after renaming a file (with rename detection)' '
+ stg status --diff-opts=-M > output.txt &&
+ diff -u expected.txt output.txt
+'
+
test_done
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [StGit PATCH 2/2] Don't allow extra diff options with "stg status"
2008-07-08 19:54 ` [StGit PATCH 0/2] stg status rename fix (stable) Karl Hasselström
2008-07-08 19:54 ` [StGit PATCH 1/2] Test "stg status" with renames Karl Hasselström
@ 2008-07-08 19:54 ` Karl Hasselström
2008-07-09 4:05 ` [StGit PATCH 0/2] stg status rename fix (stable) Karl Hasselström
2 siblings, 0 replies; 10+ messages in thread
From: Karl Hasselström @ 2008-07-08 19:54 UTC (permalink / raw)
To: Catalin Marinas; +Cc: git, Jon Smirl
The only extra diff options (given either with -O/--diff-opts) that
would affect "stg status" were -C and -M, and those made it crash
because it couldn't handle them. So remove those options.
Signed-off-by: Karl Hasselström <kha@treskal.com>
---
stgit/commands/status.py | 16 +++-------------
stgit/git.py | 9 ++++++---
t/t0002-status.sh | 5 -----
3 files changed, 9 insertions(+), 21 deletions(-)
diff --git a/stgit/commands/status.py b/stgit/commands/status.py
index 20614b0..94d0b57 100644
--- a/stgit/commands/status.py
+++ b/stgit/commands/status.py
@@ -59,22 +59,18 @@ options = [make_option('-m', '--modified',
make_option('-x', '--noexclude',
help = 'do not exclude any files from listing',
action = 'store_true'),
- make_option('-O', '--diff-opts',
- help = 'options to pass to git-diff'),
make_option('--reset',
help = 'reset the current tree changes',
action = 'store_true')]
def status(files = None, modified = False, new = False, deleted = False,
- conflict = False, unknown = False, noexclude = False,
- diff_flags = []):
+ conflict = False, unknown = False, noexclude = False):
"""Show the tree status
"""
cache_files = git.tree_status(files,
unknown = (not files),
- noexclude = noexclude,
- diff_flags = diff_flags)
+ noexclude = noexclude)
filtered = (modified or new or deleted or conflict or unknown)
if filtered:
@@ -116,11 +112,5 @@ def func(parser, options, args):
resolved_all()
git.reset()
else:
- if options.diff_opts:
- diff_flags = options.diff_opts.split()
- else:
- diff_flags = []
-
status(args, options.modified, options.new, options.deleted,
- options.conflict, options.unknown, options.noexclude,
- diff_flags = diff_flags)
+ options.conflict, options.unknown, options.noexclude)
diff --git a/stgit/git.py b/stgit/git.py
index 8e6bdf4..35579d4 100644
--- a/stgit/git.py
+++ b/stgit/git.py
@@ -192,6 +192,9 @@ def ls_files(files, tree = 'HEAD', full_name = True):
'Some of the given paths are either missing or not known to GIT'
def parse_git_ls(output):
+ """Parse the output of git diff-index, diff-files, etc. Doesn't handle
+ rename/copy output, so don't feed it output generated with the -M
+ or -C flags."""
t = None
for line in output.split('\0'):
if not line:
@@ -205,7 +208,7 @@ def parse_git_ls(output):
t = None
def tree_status(files = None, tree_id = 'HEAD', unknown = False,
- noexclude = True, verbose = False, diff_flags = []):
+ noexclude = True, verbose = False):
"""Get the status of all changed files, or of a selected set of
files. Returns a list of pairs - (status, filename).
@@ -252,7 +255,7 @@ def tree_status(files = None, tree_id = 'HEAD', unknown = False,
# specified when calling the function (i.e. report all files) or
# files were specified but already found in the previous step
if not files or files_left:
- args = diff_flags + [tree_id]
+ args = [tree_id]
if files_left:
args += ['--'] + files_left
for t, fn in parse_git_ls(GRun('diff-index', '-z', *args).raw_output()):
@@ -268,7 +271,7 @@ def tree_status(files = None, tree_id = 'HEAD', unknown = False,
# function (i.e. report all files) or files were specified but
# already found in the previous step
if not files or files_left:
- args = list(diff_flags)
+ args = []
if files_left:
args += ['--'] + files_left
for t, fn in parse_git_ls(GRun('diff-files', '-z', *args).raw_output()):
diff --git a/t/t0002-status.sh b/t/t0002-status.sh
index 69c29a0..a030739 100755
--- a/t/t0002-status.sh
+++ b/t/t0002-status.sh
@@ -182,9 +182,4 @@ test_expect_success 'Status after renaming a file' '
diff -u expected.txt output.txt
'
-test_expect_failure 'Status after renaming a file (with rename detection)' '
- stg status --diff-opts=-M > output.txt &&
- diff -u expected.txt output.txt
-'
-
test_done
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [StGit PATCH] stg status rename fix (safe+experimental)
2008-07-08 12:25 ` Karl Hasselström
2008-07-08 19:54 ` [StGit PATCH 0/2] stg status rename fix (stable) Karl Hasselström
@ 2008-07-08 19:57 ` Karl Hasselström
2008-07-08 19:57 ` [StGit PATCH] Test "stg status" with -M in stgit.diff-opts Karl Hasselström
1 sibling, 1 reply; 10+ messages in thread
From: Karl Hasselström @ 2008-07-08 19:57 UTC (permalink / raw)
To: Catalin Marinas; +Cc: git, Jon Smirl
This is just a patch to make sure the bug is gone; the bugfix consists
of a merge of the updated stable branch.
Both safe and experimental at git://repo.or.cz/stgit/kha.git has said
merge, and this test.
---
Karl Hasselström (1):
Test "stg status" with -M in stgit.diff-opts
t/t0002-status.sh | 6 ++++++
1 files changed, 6 insertions(+), 0 deletions(-)
--
Karl Hasselström, kha@treskal.com
www.treskal.com/kalle
^ permalink raw reply [flat|nested] 10+ messages in thread
* [StGit PATCH] Test "stg status" with -M in stgit.diff-opts
2008-07-08 19:57 ` [StGit PATCH] stg status rename fix (safe+experimental) Karl Hasselström
@ 2008-07-08 19:57 ` Karl Hasselström
0 siblings, 0 replies; 10+ messages in thread
From: Karl Hasselström @ 2008-07-08 19:57 UTC (permalink / raw)
To: Catalin Marinas; +Cc: git, Jon Smirl
It used to fail, before the recent merge of the -O/--diff-opts
removal, since the default value of that option was taken from
stgit.diff-opts and passed on to stgit.git.tree_status() which
couldn't handle it.
Signed-off-by: Karl Hasselström <kha@treskal.com>
---
t/t0002-status.sh | 6 ++++++
1 files changed, 6 insertions(+), 0 deletions(-)
diff --git a/t/t0002-status.sh b/t/t0002-status.sh
index 5e1e8ca..86ff419 100755
--- a/t/t0002-status.sh
+++ b/t/t0002-status.sh
@@ -186,4 +186,10 @@ test_expect_success 'Status after renaming a file' '
test_cmp expected.txt output.txt
'
+test_expect_success 'Status after renaming a file (with rename detection)' '
+ git config stgit.diff-opts -M &&
+ stg status > output.txt &&
+ test_cmp expected.txt output.txt
+'
+
test_done
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [StGit PATCH 0/2] stg status rename fix (stable)
2008-07-08 19:54 ` [StGit PATCH 0/2] stg status rename fix (stable) Karl Hasselström
2008-07-08 19:54 ` [StGit PATCH 1/2] Test "stg status" with renames Karl Hasselström
2008-07-08 19:54 ` [StGit PATCH 2/2] Don't allow extra diff options with "stg status" Karl Hasselström
@ 2008-07-09 4:05 ` Karl Hasselström
2 siblings, 0 replies; 10+ messages in thread
From: Karl Hasselström @ 2008-07-09 4:05 UTC (permalink / raw)
To: Catalin Marinas; +Cc: git, Jon Smirl
On 2008-07-08 21:54:19 +0200, Karl Hasselström wrote:
> This fixes the bug on the stable branch. (stgit.diff-opts doesn't
> exist there, so it's less of an issue, but still.)
>
> Also available at
>
> git://repo.or.cz/stgit/kha.git safe
s/safe/stable/ here, of course.
--
Karl Hasselström, kha@treskal.com
www.treskal.com/kalle
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2008-07-09 4:07 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-07-07 15:10 stgit error on status command Jon Smirl
2008-07-08 7:02 ` Karl Hasselström
2008-07-08 12:06 ` Jon Smirl
2008-07-08 12:25 ` Karl Hasselström
2008-07-08 19:54 ` [StGit PATCH 0/2] stg status rename fix (stable) Karl Hasselström
2008-07-08 19:54 ` [StGit PATCH 1/2] Test "stg status" with renames Karl Hasselström
2008-07-08 19:54 ` [StGit PATCH 2/2] Don't allow extra diff options with "stg status" Karl Hasselström
2008-07-09 4:05 ` [StGit PATCH 0/2] stg status rename fix (stable) Karl Hasselström
2008-07-08 19:57 ` [StGit PATCH] stg status rename fix (safe+experimental) Karl Hasselström
2008-07-08 19:57 ` [StGit PATCH] Test "stg status" with -M in stgit.diff-opts Karl Hasselström
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).