Mercurial > dotfiles
view unixSoft/bin/havepatch @ 383:887566d21cd8
fill-paragraph: steal kf-fill-paragraph from kfogel
author | Augie Fackler <raf@durin42.com> |
---|---|
date | Mon, 14 Mar 2016 21:30:37 -0400 |
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)