From e200cec39fac8a8ebb1c7d7690c00d5cb15f0c30 Mon Sep 17 00:00:00 2001 From: Frej Drejhammar Date: Fri, 11 May 2018 13:15:41 +0200 Subject: [PATCH] Adapt to changes in Mercurial 4.6 Starting with Mercurial 4.6 repo.lookup() no longer accepts raw hashes for lookups. --- README.md | 6 +++--- hg-fast-export.py | 9 +++++---- hg2git.py | 13 ++++++++++++- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index b0dd613..702c7f6 100644 --- a/README.md +++ b/README.md @@ -27,9 +27,9 @@ first time. System Requirements ------------------- -This project depends on Python 2.7 and the Python mercurial package. -If Python is not installed, install it before proceeding. The -mercurial package can be installed with `pip install mercurial`. +This project depends on Python 2.7 and the Mercurial 4.6 package. If +Python is not installed, install it before proceeding. The Mercurial +package can be installed with `pip install mercurial`. If you're on Windows, run the following commands in git bash (Git for Windows). diff --git a/hg-fast-export.py b/hg-fast-export.py index ff00de6..0714b30 100755 --- a/hg-fast-export.py +++ b/hg-fast-export.py @@ -4,6 +4,7 @@ # 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 @@ -78,7 +79,7 @@ def get_filechanges(repo,revision,parents,mleft): l,c,r=[],[],[] for p in parents: if p<0: continue - mright=repo.changectx(p).manifest() + mright=revsymbol(repo,str(p)).manifest() l,c,r=split_dict(mleft,mright,l,c,r) l.sort() c.sort() @@ -210,7 +211,7 @@ def export_commit(ui,repo,revision,old_marks,max,count,authors, wr(desc) wr() - ctx=repo.changectx(str(revision)) + ctx=revsymbol(repo,str(revision)) man=ctx.manifest() added,changed,removed,type=[],[],[],'' @@ -225,7 +226,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(repo.lookup(parents[0]),revnode)[:3] + f=repo.status(parents[0],revnode)[:3] added,changed,removed=f[1],f[0],f[2] type='simple delta' else: # a merge with two parents @@ -262,7 +263,7 @@ def export_note(ui,repo,revision,count,authors,encoding,is_first): if is_first: wr('from refs/notes/hg^0') wr('N inline :%d' % (revision+1)) - hg_hash=repo.changectx(str(revision)).hex() + hg_hash=revsymbol(repo,str(revision)).hex() wr('data %d' % (len(hg_hash))) wr_no_nl(hg_hash) wr() diff --git a/hg2git.py b/hg2git.py index 6634521..ba5cd4c 100755 --- a/hg2git.py +++ b/hg2git.py @@ -4,6 +4,9 @@ # License: MIT from mercurial import hg,util,ui,templatefilters +from mercurial import error as hgerror +from mercurial.scmutil import revsymbol,binnode + import re import os import sys @@ -69,7 +72,15 @@ def get_branch(name): return name def get_changeset(ui,repo,revision,authors={},encoding=''): - node=repo.lookup(revision) + # 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 hgerror.ProgrammingError: + node=binnode(revsymbol(repo,str(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) if encoding: user=user.decode(encoding).encode('utf8') -- 2.11.4.GIT