diff --git a/hg-fast-export.py b/hg-fast-export.py index bec82ec..0f1726a 100755 --- a/hg-fast-export.py +++ b/hg-fast-export.py @@ -4,7 +4,6 @@ # License: MIT from mercurial import node -from mercurial.scmutil import revsymbol from hg2git import setup_repo,fixup_user,get_branch,get_changeset from hg2git import load_cache,save_cache,get_git_sha1,set_default_branch,set_origin_name from optparse import OptionParser @@ -98,7 +97,7 @@ def get_filechanges(repo,revision,parents,mleft): l,c,r=[],[],[] for p in parents: if p<0: continue - mright=revsymbol(repo,b"%d" %p).manifest() + mright=repo[p].manifest() l,c,r=split_dict(mleft,mright,l,c,r) l.sort() c.sort() @@ -296,15 +295,18 @@ def export_commit(ui,repo,revision,old_marks,max,count,authors, brmap[name]=n return n - (revnode,_,user,(time,timezone),files,desc,branch,extra)=get_changeset(ui,repo,revision,authors,encoding) - if repo[revnode].hidden(): + ctx=repo[revision] + + if ctx.hidden(): return count + (_,user,(time,timezone),files,desc,branch,extra)=get_changeset(ui,repo,revision,authors,encoding) + branch=get_branchname(branch) parents = [p for p in repo.changelog.parentrevs(revision) if p >= 0] author = get_author(desc,user,authors) - hg_hash=revsymbol(repo,b"%d" % revision).hex() + hg_hash=ctx.hex() if plugins and plugins['commit_message_filters']: commit_data = {'branch': branch, 'parents': parents, @@ -329,7 +331,6 @@ def export_commit(ui,repo,revision,old_marks,max,count,authors, wr(b'committer %s %d %s' % (user,time,timezone)) wr_data(desc) - ctx=revsymbol(repo, b"%d" % revision) man=ctx.manifest() added,changed,removed,type=[],[],[],'' @@ -344,7 +345,7 @@ def export_commit(ui,repo,revision,old_marks,max,count,authors, # later non-merge revision: feed in changed manifest # if we have exactly one parent, just take the changes from the # manifest without expensively comparing checksums - f=repo.status(parents[0],revnode) + f=repo.status(parents[0],revision) added,changed,removed=f.added,f.modified,f.removed type='simple delta' else: # a merge with two parents @@ -375,11 +376,12 @@ def export_commit(ui,repo,revision,old_marks,max,count,authors, return checkpoint(count) def export_note(ui,repo,revision,count,authors,encoding,is_first): - (revnode,_,user,(time,timezone),_,_,_,_)=get_changeset(ui,repo,revision,authors,encoding) - if repo[revnode].hidden(): + ctx = repo[revision] + + if ctx.hidden(): return count - parents = [p for p in repo.changelog.parentrevs(revision) if p >= 0] + (_,user,(time,timezone),_,_,_,_)=get_changeset(ui,repo,revision,authors,encoding) wr(b'commit refs/notes/hg') wr(b'committer %s %d %s' % (user,time,timezone)) @@ -387,7 +389,7 @@ def export_note(ui,repo,revision,count,authors,encoding,is_first): if is_first: wr(b'from refs/notes/hg^0') wr(b'N inline :%d' % (revision+1)) - hg_hash=revsymbol(repo,b"%d" % revision).hex() + hg_hash=ctx.hex() wr_data(hg_hash) wr() return checkpoint(count) @@ -514,7 +516,7 @@ def verify_heads(ui,repo,cache,force,ignore_unnamed_heads,branchesmap): t={} unnamed_heads=False for h in repo.filtered(b'visible').heads(): - (_,_,_,_,_,_,branch,_)=get_changeset(ui,repo,h) + branch=get_branch(repo[h].branch()) if t.get(branch,False): stderr_buffer.write( b'Error: repository has an unnamed head: hg r%d\n' @@ -563,15 +565,15 @@ def hg2git(repourl,m,marksfile,mappingfile,headsfile,tipfile, max=tip for rev in range(0,max): - (revnode,_,_,_,_,_,_,_)=get_changeset(ui,repo,rev,authors) - if repo[revnode].hidden(): + ctx=repo[rev] + if ctx.hidden(): continue - mapping_cache[hexlify(revnode)] = b"%d" % rev + mapping_cache[ctx.hex()] = b"%d" % rev if submodule_mappings: # Make sure that all mercurial submodules are registered in the submodule-mappings file for rev in range(0,max): - ctx=revsymbol(repo,b"%d" % rev) + ctx=repo[rev] if ctx.hidden(): continue if ctx.substate: diff --git a/hg2git.py b/hg2git.py index e94270b..74c7205 100755 --- a/hg2git.py +++ b/hg2git.py @@ -5,7 +5,7 @@ from mercurial import hg,util,ui,templatefilters from mercurial import error as hgerror -from mercurial.scmutil import revsymbol,binnode +from mercurial.scmutil import binnode import re import os @@ -81,22 +81,13 @@ def get_branch(name): return name def get_changeset(ui,repo,revision,authors={},encoding=''): - # Starting with Mercurial 4.6 lookup no longer accepts raw hashes - # for lookups. Work around it by changing our behaviour depending on - # how it fails - try: - node=repo.lookup(revision) - except (TypeError, hgerror.ProgrammingError): - node=binnode(revsymbol(repo, b"%d" % revision)) # We were given a numeric rev - except hgerror.RepoLookupError: - node=revision # We got a raw hash - (manifest,user,(time,timezone),files,desc,extra)=repo.changelog.read(node) + (manifest,user,(time,timezone),files,desc,extra)=repo.changelog.read(revision) if encoding: user=user.decode(encoding).encode('utf8') desc=desc.decode(encoding).encode('utf8') tz=b"%+03d%02d" % (-timezone // 3600, ((-timezone % 3600) // 60)) - branch=get_branch(extra.get(b'branch', b'master')) - return (node,manifest,fixup_user(user,authors),(time,tz),files,desc,branch,extra) + branch=get_branch(extra.get(b'branch', b'')) + return (manifest,fixup_user(user,authors),(time,tz),files,desc,branch,extra) def mangle_key(key): return key