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))