Mercurial > dotfiles
view unixSoft/bin/havepatch @ 456:258e6e7a72fb
hg: enable the show extension
author | Augie Fackler <raf@durin42.com> |
---|---|
date | Wed, 10 Jan 2018 20:53:10 -0500 |
parents | 97f12f43f73b |
children |
line wrap: on
line source
#!/usr/bin/env python """Detect if a patch is already applied in a Mercurial repository.""" import json import os import re import subprocess import sys # Always load hg libraries from the hg we can find on $PATH. hglib = json.loads(subprocess.check_output( ['hg', 'debuginstall', '-Tjson']))[0]['hgmodules'] sys.path.insert(0, os.path.dirname(hglib)) 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)