# HG changeset patch # User Patrick Mezard # Date 1290182833 -3600 # Node ID 76ebfc41f490dcf651abd19b5ab65094619a7dfb # Parent 6e18d9ab6557254aeb7c73ea01df1e362f08e7ad svnexternals: hide .hgsvnexternals parsing in parse() diff --git a/hgsubversion/pushmod.py b/hgsubversion/pushmod.py --- a/hgsubversion/pushmod.py +++ b/hgsubversion/pushmod.py @@ -84,13 +84,6 @@ def _getdirchanges(svn, branchpath, pare return added, deleted -def _externals(ctx): - ext = svnexternals.externalsfile() - if '.hgsvnexternals' in ctx: - ext.read(ctx['.hgsvnexternals'].data()) - return ext - - def commit(ui, repo, rev_ctx, meta, base_revision, svn): """Build and send a commit from Mercurial to Subversion. """ @@ -104,8 +97,8 @@ def commit(ui, repo, rev_ctx, meta, base elif parent_branch and parent_branch != 'default': branch_path = 'branches/%s' % parent_branch - extchanges = list(svnexternals.diff(_externals(parent), - _externals(rev_ctx))) + extchanges = list(svnexternals.diff(svnexternals.parse(parent), + svnexternals.parse(rev_ctx))) addeddirs, deleteddirs = _getdirchanges(svn, branch_path, parent, rev_ctx, rev_ctx.files(), extchanges) deleteddirs = set(deleteddirs) diff --git a/hgsubversion/replay.py b/hgsubversion/replay.py --- a/hgsubversion/replay.py +++ b/hgsubversion/replay.py @@ -35,16 +35,10 @@ def updateexternals(ui, meta, current): p, b, bp = meta.split_branch_path(path) if bp not in branches: - external = svnexternals.externalsfile() parent = meta.get_parent_revision(revnum, b) pctx = meta.repo[parent] - if '.hgsvnexternals' in pctx: - external.read(pctx['.hgsvnexternals'].data()) - branches[bp] = (external, pctx) - else: - external = branches[bp][0] - - external[p] = entry + branches[bp] = (svnexternals.parse(pctx), pctx) + branches[bp][0][p] = entry # register externals file changes for bp, (external, pctx) in branches.iteritems(): diff --git a/hgsubversion/stupid.py b/hgsubversion/stupid.py --- a/hgsubversion/stupid.py +++ b/hgsubversion/stupid.py @@ -349,9 +349,7 @@ def fetch_externals(svn, branchpath, r, Return an externalsfile instance or None if there are no externals to convert and never were. """ - externals = svnexternals.externalsfile() - if '.hgsvnexternals' in parentctx: - externals.read(parentctx['.hgsvnexternals'].data()) + externals = svnexternals.parse(parentctx) # Detect property additions only, changes are handled by checking # existing entries individually. Projects are unlikely to store # externals on many different root directories, so we trade code diff --git a/hgsubversion/svnexternals.py b/hgsubversion/svnexternals.py --- a/hgsubversion/svnexternals.py +++ b/hgsubversion/svnexternals.py @@ -310,3 +310,12 @@ def getchanges(ui, repo, parentctx, exts if fn in parentctx: updates[fn] = None return updates + +def parse(ctx): + """Return the externals definitions stored in ctx as a (possibly empty) + externalsfile(). + """ + external = externalsfile() + if '.hgsvnexternals' in ctx: + external.read(ctx['.hgsvnexternals'].data()) + return external