The string indexing when decoding the -r argument for diff made an implicit assumption that the revision string was at least two characters long, which broke on the simple invocation "diff -r/". --- stgit/commands/diff.py | 8 ++++---- stgit/utils.py | 6 ++++++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/stgit/commands/diff.py b/stgit/commands/diff.py index d765784..caa3c5b 100644 --- a/stgit/commands/diff.py +++ b/stgit/commands/diff.py @@ -56,11 +56,11 @@ def func(parser, options, args): rev_list_len = len(rev_list) if rev_list_len == 1: rev = rev_list[0] - if rev[-1] == '/': + if rev.endswith('/'): # the whole patch - rev = rev[:-1] - if rev[-1] == '/': - rev = rev[:-1] + rev = strip_suffix('/', rev) + if rev.endswith('/'): + rev = strip_suffix('/', rev) rev1 = rev + '//bottom' rev2 = rev + '//top' else: diff --git a/stgit/utils.py b/stgit/utils.py index ed6e43c..67431ec 100644 --- a/stgit/utils.py +++ b/stgit/utils.py @@ -109,6 +109,12 @@ def strip_prefix(prefix, string): assert string.startswith(prefix) return string[len(prefix):] +def strip_suffix(suffix, string): + """Return string, without the suffix. Blow up if string doesn't + end with suffix.""" + assert string.endswith(suffix) + return string[:-len(suffix)] + def remove_dirs(basedir, dirs): """Starting at join(basedir, dirs), remove the directory if empty, and try the same with its parent, until we find a nonempty - : send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html