diff options
Diffstat (limited to 'contrib/remote-helpers')
-rwxr-xr-x | contrib/remote-helpers/git-remote-bzr | 51 | ||||
-rwxr-xr-x | contrib/remote-helpers/test-bzr.sh | 31 |
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 ' |