annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
372
ce87db9038f5 havepatch: new script to easily check if a mailed patch is applied
Augie Fackler <raf@durin42.com>
parents:
diff changeset
1 #!/usr/bin/env python
ce87db9038f5 havepatch: new script to easily check if a mailed patch is applied
Augie Fackler <raf@durin42.com>
parents:
diff changeset
2 """Detect if a patch is already applied in a Mercurial repository."""
ce87db9038f5 havepatch: new script to easily check if a mailed patch is applied
Augie Fackler <raf@durin42.com>
parents:
diff changeset
3 import sys
ce87db9038f5 havepatch: new script to easily check if a mailed patch is applied
Augie Fackler <raf@durin42.com>
parents:
diff changeset
4 import subprocess
ce87db9038f5 havepatch: new script to easily check if a mailed patch is applied
Augie Fackler <raf@durin42.com>
parents:
diff changeset
5 import os
ce87db9038f5 havepatch: new script to easily check if a mailed patch is applied
Augie Fackler <raf@durin42.com>
parents:
diff changeset
6 import re
ce87db9038f5 havepatch: new script to easily check if a mailed patch is applied
Augie Fackler <raf@durin42.com>
parents:
diff changeset
7
ce87db9038f5 havepatch: new script to easily check if a mailed patch is applied
Augie Fackler <raf@durin42.com>
parents:
diff changeset
8 from mercurial import util
ce87db9038f5 havepatch: new script to easily check if a mailed patch is applied
Augie Fackler <raf@durin42.com>
parents:
diff changeset
9
ce87db9038f5 havepatch: new script to easily check if a mailed patch is applied
Augie Fackler <raf@durin42.com>
parents:
diff changeset
10 def main(argv):
ce87db9038f5 havepatch: new script to easily check if a mailed patch is applied
Augie Fackler <raf@durin42.com>
parents:
diff changeset
11 os.chdir(util.expandpath('~/Programming/hg/crew'))
ce87db9038f5 havepatch: new script to easily check if a mailed patch is applied
Augie Fackler <raf@durin42.com>
parents:
diff changeset
12 os.environ['EDITOR'] = 'true'
ce87db9038f5 havepatch: new script to easily check if a mailed patch is applied
Augie Fackler <raf@durin42.com>
parents:
diff changeset
13 pp = subprocess.Popen(['patchpipe'], stdin=sys.stdin,
ce87db9038f5 havepatch: new script to easily check if a mailed patch is applied
Augie Fackler <raf@durin42.com>
parents:
diff changeset
14 stdout=subprocess.PIPE)
ce87db9038f5 havepatch: new script to easily check if a mailed patch is applied
Augie Fackler <raf@durin42.com>
parents:
diff changeset
15 patchdata = pp.stdout.read()
ce87db9038f5 havepatch: new script to easily check if a mailed patch is applied
Augie Fackler <raf@durin42.com>
parents:
diff changeset
16 summary = (l for l in patchdata.splitlines()
ce87db9038f5 havepatch: new script to easily check if a mailed patch is applied
Augie Fackler <raf@durin42.com>
parents:
diff changeset
17 if not l.startswith('#')).next()
ce87db9038f5 havepatch: new script to easily check if a mailed patch is applied
Augie Fackler <raf@durin42.com>
parents:
diff changeset
18 # First pass: look for exact summary matches after tag 3.5
ce87db9038f5 havepatch: new script to easily check if a mailed patch is applied
Augie Fackler <raf@durin42.com>
parents:
diff changeset
19 ret = subprocess.call(['hg', 'log', '-r',
ce87db9038f5 havepatch: new script to easily check if a mailed patch is applied
Augie Fackler <raf@durin42.com>
parents:
diff changeset
20 '(not ::3.5) and grep(%r)' % summary])
ce87db9038f5 havepatch: new script to easily check if a mailed patch is applied
Augie Fackler <raf@durin42.com>
parents:
diff changeset
21 if ret != 0:
ce87db9038f5 havepatch: new script to easily check if a mailed patch is applied
Augie Fackler <raf@durin42.com>
parents:
diff changeset
22 # Failing that, look for obsmarkers that might be relevant. If
ce87db9038f5 havepatch: new script to easily check if a mailed patch is applied
Augie Fackler <raf@durin42.com>
parents:
diff changeset
23 # we could actually do something like 'hg log -r
ce87db9038f5 havepatch: new script to easily check if a mailed patch is applied
Augie Fackler <raf@durin42.com>
parents:
diff changeset
24 # successors($NODE)', that'd be preferable to even the
ce87db9038f5 havepatch: new script to easily check if a mailed patch is applied
Augie Fackler <raf@durin42.com>
parents:
diff changeset
25 # summary-matching from above.
ce87db9038f5 havepatch: new script to easily check if a mailed patch is applied
Augie Fackler <raf@durin42.com>
parents:
diff changeset
26 print 'no exact match in hg log, checking obsmarkers'
ce87db9038f5 havepatch: new script to easily check if a mailed patch is applied
Augie Fackler <raf@durin42.com>
parents:
diff changeset
27 nodematch = re.search('# Node ID ([0-9a-f]{40})', patchdata)
ce87db9038f5 havepatch: new script to easily check if a mailed patch is applied
Augie Fackler <raf@durin42.com>
parents:
diff changeset
28 if nodematch:
ce87db9038f5 havepatch: new script to easily check if a mailed patch is applied
Augie Fackler <raf@durin42.com>
parents:
diff changeset
29 os.system('hg debugobsolete | grep %s' % nodematch.group(1))
ce87db9038f5 havepatch: new script to easily check if a mailed patch is applied
Augie Fackler <raf@durin42.com>
parents:
diff changeset
30 sys.exit(ret)
ce87db9038f5 havepatch: new script to easily check if a mailed patch is applied
Augie Fackler <raf@durin42.com>
parents:
diff changeset
31
ce87db9038f5 havepatch: new script to easily check if a mailed patch is applied
Augie Fackler <raf@durin42.com>
parents:
diff changeset
32 if __name__ == '__main__':
ce87db9038f5 havepatch: new script to easily check if a mailed patch is applied
Augie Fackler <raf@durin42.com>
parents:
diff changeset
33 main(sys.argv)