view unixSoft/bin/havepatch @ 378:20e47bc8eea9

hgrc: disable hg-git and hgsubversion It hasn't been common for me to use either of these extensions for some time, so just drop both of them from the main hgrc. Instead I'll enable them as-needed in individual repositories.
author Augie Fackler <durin42@gmail.com>
date Thu, 09 Jun 2011 20:20:04 -0500
parents ce87db9038f5
children d81eb79e4f4c
line wrap: on
line source

#!/usr/bin/env python
"""Detect if a patch is already applied in a Mercurial repository."""
import sys
import subprocess
import os
import re

from mercurial import util

def main(argv):
    os.chdir(util.expandpath('~/Programming/hg/crew'))
    os.environ['EDITOR'] = 'true'
    pp = subprocess.Popen(['patchpipe'], stdin=sys.stdin,
                          stdout=subprocess.PIPE)
    patchdata = pp.stdout.read()
    summary = (l for l in patchdata.splitlines()
               if not l.startswith('#')).next()
    # First pass: look for exact summary matches after tag 3.5
    ret = subprocess.call(['hg', 'log', '-r',
                           '(not ::3.5) and grep(%r)' % summary])
    if ret != 0:
        # Failing that, look for obsmarkers that might be relevant. If
        # we could actually do something like 'hg log -r
        # successors($NODE)', that'd be preferable to even the
        # summary-matching from above.
        print 'no exact match in hg log, checking obsmarkers'
        nodematch = re.search('# Node ID ([0-9a-f]{40})', patchdata)
        if nodematch:
            os.system('hg debugobsolete | grep %s' % nodematch.group(1))
    sys.exit(ret)

if __name__ == '__main__':
    main(sys.argv)