|
11 | 11 | description="Update files containing hard-coded aws-crt-java version numbers.")
|
12 | 12 | parser.add_argument('version', nargs='?',
|
13 | 13 | help='version to use (i.e. "0.1.2"). default: automatically detect latest version')
|
| 14 | +parser.add_argument('--check-consistency', action='store_true', |
| 15 | + help='Exit with error if version is inconsistent between files') |
14 | 16 | args = parser.parse_args()
|
15 | 17 |
|
16 | 18 |
|
17 | 19 | def main():
|
18 |
| - if args.version is None: |
19 |
| - args.version = get_latest_crt_version() |
20 |
| - print(f'Latest version: {args.version}') |
| 20 | + if args.check_consistency: |
| 21 | + # we'll find the version from the first file we scan |
| 22 | + args.version = None |
| 23 | + else: |
| 24 | + if args.version is None: |
| 25 | + args.version = get_latest_crt_version() |
| 26 | + print(f'Latest version: {args.version}') |
21 | 27 |
|
22 |
| - if re.fullmatch(VERSION_PATTERN, args.version) is None: |
23 |
| - exit(f'Invalid version: "{args.version}". Must look like "0.1.2"') |
| 28 | + if re.fullmatch(VERSION_PATTERN, args.version) is None: |
| 29 | + exit(f'Invalid version: "{args.version}". Must look like "0.1.2"') |
24 | 30 |
|
25 | 31 | os.chdir(os.path.dirname(__file__))
|
26 | 32 |
|
@@ -51,17 +57,30 @@ def update(*, filepath, preceded_by, followed_by):
|
51 | 57 | with open(filepath, 'r+') as f:
|
52 | 58 | txt_old = f.read()
|
53 | 59 |
|
54 |
| - full_pattern = rf'({preceded_by}){VERSION_PATTERN}({followed_by})' |
55 |
| - full_replacement = rf'\g<1>{args.version}\g<2>' |
| 60 | + full_pattern = rf'({preceded_by})({VERSION_PATTERN})({followed_by})' |
| 61 | + full_replacement = rf'\g<1>{args.version}\g<3>' |
56 | 62 |
|
57 |
| - if len(re.findall(full_pattern, txt_old)) == 0: |
| 63 | + matches = re.findall(full_pattern, txt_old) |
| 64 | + if len(matches) == 0: |
58 | 65 | exit(f'Version not found in: {filepath}\n' +
|
59 | 66 | f'Preceded by: "{preceded_by}"')
|
60 | 67 |
|
61 |
| - txt_new = re.sub(full_pattern, full_replacement, txt_old) |
62 |
| - f.seek(0) |
63 |
| - f.write(txt_new) |
64 |
| - f.truncate() |
| 68 | + if args.check_consistency: |
| 69 | + # in --check-consistency mode we remember the version from the first |
| 70 | + # file we scan, and then ensure all subsequent files use that version too |
| 71 | + for match in matches: |
| 72 | + found_version = match[1] |
| 73 | + if args.version is None: |
| 74 | + print(f'Found version {found_version} in: {filepath}') |
| 75 | + args.version = found_version |
| 76 | + elif found_version != args.version: |
| 77 | + exit(f'Found different version {found_version} in: {filepath}') |
| 78 | + else: |
| 79 | + # running in normal mode, update the file |
| 80 | + txt_new = re.sub(full_pattern, full_replacement, txt_old) |
| 81 | + f.seek(0) |
| 82 | + f.write(txt_new) |
| 83 | + f.truncate() |
65 | 84 |
|
66 | 85 |
|
67 | 86 | def get_latest_crt_version():
|
|
0 commit comments