summaryrefslogtreecommitdiff
path: root/contrib/remote-helpers
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/remote-helpers')
-rwxr-xr-xcontrib/remote-helpers/git-remote-bzr51
-rwxr-xr-xcontrib/remote-helpers/test-bzr.sh31
2 files changed, 51 insertions, 31 deletions
diff --git a/contrib/remote-helpers/git-remote-bzr b/contrib/remote-helpers/git-remote-bzr
index fad4a48cdc..aa7bc97bee 100755
--- a/contrib/remote-helpers/git-remote-bzr
+++ b/contrib/remote-helpers/git-remote-bzr
@@ -25,6 +25,7 @@ bzrlib.plugin.load_plugins()
import bzrlib.generate_ids
import bzrlib.transport
+import bzrlib.errors
import sys
import os
@@ -183,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
@@ -223,7 +227,7 @@ def export_files(tree, files):
# is the blog already exported?
if h in filenodes:
mark = filenodes[h]
- final.append((mode, mark, path.encode('utf-8')))
+ final.append((mode, mark, path))
continue
d = tree.get_file_text(fid)
@@ -240,12 +244,12 @@ def export_files(tree, files):
print "data %d" % len(d)
print d
- final.append((mode, mark, path.encode('utf-8')))
+ final.append((mode, mark, path))
return final
def export_branch(branch, name):
- global prefix, dirname
+ global prefix
ref = '%s/heads/%s' % (prefix, name)
tip = marks.get_tip(name)
@@ -331,13 +335,12 @@ def export_branch(branch, name):
marks.set_tip(name, revid)
def export_tag(repo, name):
- global tags
- try:
- print "reset refs/tags/%s" % name
- print "from :%u" % rev_to_mark(tags[name])
- print
- except KeyError:
- warn("TODO: fetch tag '%s'" % name)
+ global tags, prefix
+
+ ref = '%s/tags/%s' % (prefix, name)
+ print "reset %s" % ref
+ print "from :%u" % rev_to_mark(tags[name])
+ print
def do_import(parser):
global dirname
@@ -648,6 +651,7 @@ def do_capabilities(parser):
print "import"
print "export"
print "refspec refs/heads/*:%s/heads/*" % prefix
+ print "refspec refs/tags/*:%s/tags/*" % prefix
path = os.path.join(dirname, 'marks-git')
@@ -657,16 +661,25 @@ def do_capabilities(parser):
print
+def ref_is_valid(name):
+ return not True in [c in name for c in '~^: \\']
+
def do_list(parser):
global tags
print "? refs/heads/%s" % 'master'
- history = parser.repo.revision_history()
- for tag, revid in parser.repo.tags.get_tag_dict().items():
- if revid not in history:
+ branch = parser.repo
+ branch.lock_read()
+ for tag, revid in branch.tags.get_tag_dict().items():
+ try:
+ branch.revision_id_to_dotted_revno(revid)
+ except bzrlib.errors.NoSuchRevision:
+ continue
+ if not ref_is_valid(tag):
continue
print "? refs/tags/%s" % tag
tags[tag] = revid
+ branch.unlock()
print "@refs/heads/%s HEAD" % 'master'
print
diff --git a/contrib/remote-helpers/test-bzr.sh b/contrib/remote-helpers/test-bzr.sh
index f4c77681dd..34666e1d0f 100755
--- a/contrib/remote-helpers/test-bzr.sh
+++ b/contrib/remote-helpers/test-bzr.sh
@@ -169,24 +169,30 @@ 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
-
+ LC_ALL=en_US.UTF-8
+ export LC_ALL
(
bzr init bzrrepo &&
cd bzrrepo &&
- echo test >> "áéíóú" &&
- bzr add "áéíóú" &&
- bzr commit -m utf-8
+ echo test >> "ærø" &&
+ bzr add "ærø" &&
+ echo test >> "ø~?" &&
+ bzr add "ø~?" &&
+ bzr commit -m add-utf-8 &&
+ echo test >> "ærø" &&
+ bzr commit -m test-utf-8 &&
+ bzr rm "ø~?" &&
+ bzr mv "ærø" "ø~?" &&
+ bzr commit -m bzr-mv-utf-8
) &&
(
git clone "bzr::$PWD/bzrrepo" gitrepo &&
cd gitrepo &&
- git ls-files > ../actual
+ git -c core.quotepath=false ls-files > ../actual
) &&
-
- echo "\"\\303\\241\\303\\251\\303\\255\\303\\263\\303\\272\"" > expected &&
+ echo "ø~?" > expected &&
test_cmp expected actual
'
@@ -194,7 +200,8 @@ test_expect_success 'push 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
+ LC_ALL=en_US.UTF-8
+ export LC_ALL
(
bzr init bzrrepo &&
@@ -209,15 +216,15 @@ test_expect_success 'push utf-8 filenames' '
git clone "bzr::$PWD/bzrrepo" gitrepo &&
cd gitrepo &&
- echo test >> "áéíóú" &&
- git add "áéíóú" &&
+ echo test >> "ærø" &&
+ git add "ærø" &&
git commit -m utf-8 &&
git push
) &&
(cd bzrrepo && bzr ls > ../actual) &&
- echo -e "content\náéíóú" > expected &&
+ printf "content\nærø\n" > expected &&
test_cmp expected actual
'