Handle changed files with non-ASCII names
Git was quoting them for us, which was not what we wanted. So call
diff-index with the -z flag, so that it doesn't.
Signed-off-by: Karl Hasselström <kha@treskal.com>
diff --git a/stgit/git.py b/stgit/git.py
index 6140fd9..8c637d5 100644
--- a/stgit/git.py
+++ b/stgit/git.py
@@ -242,13 +242,21 @@
args = diff_flags + [tree_id]
if files_left:
args += ['--'] + files_left
- for line in GRun('diff-index', *args).output_lines():
- fs = tuple(line.rstrip().split(' ',4)[-1].split('\t',1))
- # the condition is needed in case files is emtpy and
- # diff-index lists those already reported
- if fs[1] not in reported_files:
- cache_files.append(fs)
- reported_files.add(fs[1])
+ t = None
+ for line in GRun('diff-index', '-z', *args).raw_output().split('\0'):
+ if not line:
+ # There's a zero byte at the end of the output, which
+ # gives us an empty string as the last "line".
+ continue
+ if t == None:
+ mode_a, mode_b, sha1_a, sha1_b, t = line.split(' ')
+ else:
+ # the condition is needed in case files is emtpy and
+ # diff-index lists those already reported
+ if not line in reported_files:
+ cache_files.append((t, line))
+ reported_files.add(line)
+ t = None
files_left = [f for f in files if f not in reported_files]
# files in the index but changed on (or removed from) disk. Only
diff --git a/t/t3200-non-ascii-filenames.sh b/t/t3200-non-ascii-filenames.sh
index 1d82a9f..a04ead8 100755
--- a/t/t3200-non-ascii-filenames.sh
+++ b/t/t3200-non-ascii-filenames.sh
@@ -20,7 +20,7 @@
stg push
'
-test_expect_failure 'Rebase onto changed non-ASCII file' '
+test_expect_success 'Rebase onto changed non-ASCII file' '
stg rebase upstream
'