annotate unixSoft/bin/havepatch @ 521:6cc5a0550281

tools: port hg utility scripts to python 3
author Augie Fackler <raf@durin42.com>
date Thu, 14 Jul 2022 14:09:04 -0400
parents 97f12f43f73b
children
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."""
436
97f12f43f73b havepatch: always import hg libs from the hg we're using
Augie Fackler <raf@durin42.com>
parents: 435
diff changeset
3 import json
372
ce87db9038f5 havepatch: new script to easily check if a mailed patch is applied
Augie Fackler <raf@durin42.com>
parents:
diff changeset
4 import os
ce87db9038f5 havepatch: new script to easily check if a mailed patch is applied
Augie Fackler <raf@durin42.com>
parents:
diff changeset
5 import re
435
d81eb79e4f4c havepatch: sort stdlib imports
Augie Fackler <raf@durin42.com>
parents: 372
diff changeset
6 import subprocess
d81eb79e4f4c havepatch: sort stdlib imports
Augie Fackler <raf@durin42.com>
parents: 372
diff changeset
7 import sys
372
ce87db9038f5 havepatch: new script to easily check if a mailed patch is applied
Augie Fackler <raf@durin42.com>
parents:
diff changeset
8
436
97f12f43f73b havepatch: always import hg libs from the hg we're using
Augie Fackler <raf@durin42.com>
parents: 435
diff changeset
9 # Always load hg libraries from the hg we can find on $PATH.
97f12f43f73b havepatch: always import hg libs from the hg we're using
Augie Fackler <raf@durin42.com>
parents: 435
diff changeset
10 hglib = json.loads(subprocess.check_output(
97f12f43f73b havepatch: always import hg libs from the hg we're using
Augie Fackler <raf@durin42.com>
parents: 435
diff changeset
11 ['hg', 'debuginstall', '-Tjson']))[0]['hgmodules']
97f12f43f73b havepatch: always import hg libs from the hg we're using
Augie Fackler <raf@durin42.com>
parents: 435
diff changeset
12 sys.path.insert(0, os.path.dirname(hglib))
97f12f43f73b havepatch: always import hg libs from the hg we're using
Augie Fackler <raf@durin42.com>
parents: 435
diff changeset
13
372
ce87db9038f5 havepatch: new script to easily check if a mailed patch is applied
Augie Fackler <raf@durin42.com>
parents:
diff changeset
14 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
15
ce87db9038f5 havepatch: new script to easily check if a mailed patch is applied
Augie Fackler <raf@durin42.com>
parents:
diff changeset
16 def main(argv):
ce87db9038f5 havepatch: new script to easily check if a mailed patch is applied
Augie Fackler <raf@durin42.com>
parents:
diff changeset
17 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
18 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
19 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
20 stdout=subprocess.PIPE)
ce87db9038f5 havepatch: new script to easily check if a mailed patch is applied
Augie Fackler <raf@durin42.com>
parents:
diff changeset
21 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
22 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
23 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
24 # 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
25 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
26 '(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
27 if ret != 0:
ce87db9038f5 havepatch: new script to easily check if a mailed patch is applied
Augie Fackler <raf@durin42.com>
parents:
diff changeset
28 # 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
29 # 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
30 # 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
31 # 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
32 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
33 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
34 if nodematch:
ce87db9038f5 havepatch: new script to easily check if a mailed patch is applied
Augie Fackler <raf@durin42.com>
parents:
diff changeset
35 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
36 sys.exit(ret)
ce87db9038f5 havepatch: new script to easily check if a mailed patch is applied
Augie Fackler <raf@durin42.com>
parents:
diff changeset
37
ce87db9038f5 havepatch: new script to easily check if a mailed patch is applied
Augie Fackler <raf@durin42.com>
parents:
diff changeset
38 if __name__ == '__main__':
ce87db9038f5 havepatch: new script to easily check if a mailed patch is applied
Augie Fackler <raf@durin42.com>
parents:
diff changeset
39 main(sys.argv)