Mercurial > hgsubversion
view diff_cmd.py @ 134:22248b34b15a
Add notes on how metadata is stored and recovered. Note that at this point,
none of this has actually been implemented. This is documentation of the
improved system to be used in the future.
author | Augie Fackler <durin42@gmail.com> |
---|---|
date | Mon, 01 Dec 2008 11:13:01 -0600 |
parents | 91ce18fa0375 |
children | 40474f6c1f84 |
line wrap: on
line source
#!/usr/bin/env python import re from mercurial import patch import util import hg_delta_editor b_re = re.compile(r'^\+\+\+ b\/([^\n]*)', re.MULTILINE) a_re = re.compile(r'^--- a\/([^\n]*)', re.MULTILINE) devnull_re = re.compile(r'^([-+]{3}) /dev/null', re.MULTILINE) header_re = re.compile(r'^diff --git .* b\/(.*)', re.MULTILINE) newfile_devnull_re = re.compile(r'^--- /dev/null\n\+\+\+ b/([^\n]*)', re.MULTILINE) def filterdiff(diff, base_revision): diff = newfile_devnull_re.sub(r'--- \1\t(revision 0)' '\n' r'+++ \1\t(working copy)', diff) diff = a_re.sub(r'--- \1'+ ('\t(revision %d)' % base_revision), diff) diff = b_re.sub(r'+++ \1' + '\t(working copy)', diff) diff = devnull_re.sub(r'\1 /dev/null' '\t(working copy)', diff) diff = header_re.sub(r'Index: \1' + '\n' + ('=' * 67), diff) return diff @util.register_subcommand('diff') def diff_command(ui, repo, hg_repo_path, **opts): """Show a diff of the most recent revision against its parent from svn. """ hge = hg_delta_editor.HgChangeReceiver(hg_repo_path, ui_=ui) svn_commit_hashes = dict(zip(hge.revmap.itervalues(), hge.revmap.iterkeys())) o_r = util.outgoing_revisions(ui, repo, hge, svn_commit_hashes) parent = repo.parents()[0] if o_r: parent = repo[o_r[-1]].parents()[0] base_rev, _junk = svn_commit_hashes[parent.node()] it = patch.diff(repo, parent.node(), None, opts=patch.diffopts(ui, opts)) ui.write(filterdiff(''.join(it), base_rev))