Mercurial > evolve
view tests/testlib/check-compat-strings.py @ 6655:81fe0a498447 stable
topic: internal config option to fix hg pick behavior (issue6406)
After some consideration, hg pick was made to always use current topic (and
topic namespace), even if it's not set, in which case the resulting changeset
will not have any topic.
Previously the intended behavior was to only update topic if there was an
active topic, and not touch commit extras at all otherwise. That wasn't ideal,
since pick doesn't change active topic, and amending the just-picked commit
would unset its topic without clear user's intent to do so and to their
surprise.
author | Anton Shestakov <av6@dwimlabs.net> |
---|---|
date | Sat, 27 Jan 2024 17:36:39 -0300 |
parents | 73cd416a1653 |
children |
line wrap: on
line source
#!/usr/bin/env python """ This script finds compatibility-related comments with a node hash specified in all files in a given directory (. by default) and looks up the hash in a repo (~/hg by default) to determine if each of the comments is correct and, if not, it suggests the correct release. This can prevent accidentally removing a piece of code that was misattributed to a different (earlier) release of core hg. Usage: $0 WDIR HGREPO where WDIR is usually evolve/hgext3rd/ and HGREPO is the place with core Mercurial repo (not just checkout). Said repo has to be sufficiently up-to-date, otherwise this script may not work correctly. """ from __future__ import print_function import argparse import os import re from subprocess import check_output def grepall(workdir, linere): for root, dirs, files in os.walk(workdir): for fname in files: if not fname.endswith('.py'): continue path = os.path.join(root, fname) with open(path, 'r') as src: for lineno, line in enumerate(src, 1): for groups in linere.findall(line): yield path, lineno, line, groups def main(): ap = argparse.ArgumentParser() ap.add_argument('workdir', nargs='?', default='.') ap.add_argument('hgdir', nargs='?', default=os.path.expanduser('~/hg')) opts = ap.parse_args() linere = re.compile(r'hg <= ([0-9.]+) \(([0-9a-f+]+)\)') basecmd = ['hg', '--cwd', opts.hgdir, 'log', '-T', '{tags}'] hgenv = {'HGPLAIN': '1', 'HGENCODING': 'UTF-8'} relcache = {} for path, lineno, line, match in grepall(opts.workdir, linere): expected, revset = match if revset not in relcache: tagrevset = 'max(tag("re:^[0-9]\\.[0-9]$") - (%s)::)' % revset cmd = basecmd + ['-r', tagrevset] relcache[revset] = check_output(cmd, env=hgenv).decode('UTF-8') lastrel = relcache[revset] if lastrel != expected: print('%s:%d:%s' % (path, lineno, line.rstrip('\r\n'))) print('\\ actual last major release without %s is %s' % (revset, lastrel)) print() if __name__ == '__main__': main()