From: Karl Hasselström Date: Mon, 2 Jun 2008 23:45:08 +0000 (+0200) Subject: Handle changed files with non-ASCII names X-Git-Tag: v0.14.3~3 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/stgit/commitdiff_plain/fb9b3c0243657a2cf520e5bd5ccfe4aab94799c8 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 --- 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 @@ def tree_status(files = None, tree_id = 'HEAD', unknown = False, 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 @@ test_expect_success 'Setup' ' stg push ' -test_expect_failure 'Rebase onto changed non-ASCII file' ' +test_expect_success 'Rebase onto changed non-ASCII file' ' stg rebase upstream '