[PATCH v2 6/7] remote-bzr: add utf-8 support for fetching
From: Christophe Simonis <christophe@kn.gl>
Initial patch by Timotheus Pokorra.
[fc: added tests]
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
contrib/remote-helpers/git-remote-bzr | 15 +++++++++------
contrib/remote-helpers/test-bzr.sh | 32 ++++++++++++++++++++++++++++++++
2 files changed, 41 insertions(+), 6 deletions(-)
diff --git a/contrib/remote-helpers/git-remote-bzr b/contrib/remote-helpers/git-remote-bzr
index dc0b757..64b35c7 100755
--- a/contrib/remote-helpers/git-remote-bzr
+++ b/contrib/remote-helpers/git-remote-bzr
@@ -184,21 +184,24 @@ def get_filechanges(cur, prev):
changes = cur.changes_from(prev)
+ def u(s):
+ return s.encode('utf-8')
+
for path, fid, kind in changes.added:
- modified[path] = fid
+ modified[u(path)] = fid
for path, fid, kind in changes.removed:
- removed[path] = None
+ removed[u(path)] = None
for path, fid, kind, mod, _ in changes.modified:
- modified[path] = fid
+ modified[u(path)] = fid
for oldpath, newpath, fid, kind, mod, _ in changes.renamed:
- removed[oldpath] = None
+ removed[u(oldpath)] = None
if kind == 'directory':
lst = cur.list_files(from_dir=newpath, recursive=True)
for path, file_class, kind, fid, entry in lst:
if kind != 'directory':
- modified[newpath + '/' + path] = fid
+ modified[u(newpath + '/' + path)] = fid
else:
- modified[newpath] = fid
+ modified[u(newpath)] = fid
return modified, removed
diff --git a/contrib/remote-helpers/test-bzr.sh b/contrib/remote-helpers/test-bzr.sh
index 68105fc..9a510a8 100755
--- a/contrib/remote-helpers/test-bzr.sh
+++ b/contrib/remote-helpers/test-bzr.sh
@@ -165,4 +165,36 @@ test_expect_success 'different authors' '
test_cmp expected actual
'
+test_expect_success 'fetch utf-8 filenames' '
+ mkdir -p tmp && cd tmp &&
+ test_when_finished "cd .. && rm -rf tmp && LC_ALL=C" &&
+
+ export LC_ALL=en_US.UTF-8
+
+ (
+ bzr init bzrrepo &&
+ cd bzrrepo &&
+
+ echo test >> "áéíóú" &&
+ bzr add "áéíóú" &&
+ echo test >> "îø∫∆" &&
+ bzr add "îø∫∆" &&
+ bzr commit -m utf-8 &&
+ echo test >> "áéíóú" &&
+ bzr commit -m utf-8 &&
+ bzr rm "îø∫∆" &&
+ bzr mv "áéíóú" "åß∂" &&
+ bzr commit -m utf-8
+ ) &&
+
+ (
+ git clone "bzr::$PWD/bzrrepo" gitrepo &&
+ cd gitrepo &&
+ git ls-files > ../actual
+ ) &&
+
+ echo "\"\\303\\245\\303\\237\\342\\210\\202\"" > expected &&
+ test_cmp expected actual
+'
+
test_done
--
1.8.2