|
5 | 5 | import re |
6 | 6 | import git |
7 | 7 |
|
| 8 | +def find_common_tag(old_tags, new_tags): |
| 9 | + for tag in old_tags: |
| 10 | + if tag in new_tags: |
| 11 | + return tag |
| 12 | + return None |
| 13 | + |
| 14 | +def get_branch_tag_sha_list(repo, branch): |
| 15 | + print('[rolling release update] Checking out branch: ', branch) |
| 16 | + repo.git.checkout(branch) |
| 17 | + results = subprocess.run(['git', 'log', '--decorate', '--oneline'], stderr=subprocess.PIPE, stdout=subprocess.PIPE, |
| 18 | + cwd=repo.working_dir) |
| 19 | + if results.returncode != 0: |
| 20 | + print(results.stderr) |
| 21 | + exit(1) |
| 22 | + |
| 23 | + print('[rolling release update] Gathering all the RESF kernel Tags') |
| 24 | + tags = [] |
| 25 | + for line in results.stdout.split(b'\n'): |
| 26 | + if b'tag: resf_kernel' in line: |
| 27 | + print(line) |
| 28 | + tags.append(line.split(b' ')[0]) |
| 29 | + return tags |
| 30 | + |
8 | 31 | if __name__ == '__main__': |
9 | 32 | parser = argparse.ArgumentParser(description='Rolling release update') |
10 | 33 | parser.add_argument('--repo', help='Repository path', required=True) |
11 | 34 | parser.add_argument('--new-base-branch', help='Branch name', required=True) |
12 | 35 | parser.add_argument('--old-rolling-branch', help='Branch name for old rolling release: ex: sig-cloud-8/4.18.0-553.33.1.el8_10', required=True) |
13 | 36 | args = parser.parse_args() |
14 | 37 |
|
| 38 | + repo = git.Repo(args.repo) |
15 | 39 |
|
16 | 40 | rolling_product = args.old_rolling_branch.split('/')[0] |
17 | 41 | print('[rolling release update] Rolling Product: ', rolling_product) |
18 | 42 |
|
19 | | - repo = git.Repo(args.repo) |
20 | | - print('[rolling release update] Checking out old Rolling Branch: ', args.old_rolling_branch) |
21 | | - repo.git.checkout(args.old_rolling_branch) |
22 | | - print('[rolling release update] Finding the last resf_kernel tag the rolling release was based') |
23 | | - results = subprocess.run(['git', 'log', '--decorate', '--oneline'], stderr=subprocess.PIPE, stdout=subprocess.PIPE, |
24 | | - cwd=args.repo) |
25 | | - if results.returncode != 0: |
26 | | - print(results.stderr) |
27 | | - exit(1) |
28 | | - latest_resf_sha = '' |
29 | | - for line in results.stdout.split(b'\n'): |
30 | | - if b'tag: resf_kernel' in line: |
31 | | - print(line) |
32 | | - latest_resf_sha = line.split(b' ')[0] |
33 | | - break |
34 | | - print('[rolling release update] Last RESF tag sha: ', latest_resf_sha) |
| 43 | + old_rolling_branch_tags = get_branch_tag_sha_list(repo, args.old_rolling_branch) |
| 44 | + print('[rolling release update] Old Rolling Branch Tags: ', old_rolling_branch_tags) |
35 | 45 |
|
| 46 | + new_base_branch_tags = get_branch_tag_sha_list(repo, args.new_base_branch) |
| 47 | + print('[rolling release update] New Base Branch Tags: ', new_base_branch_tags) |
| 48 | + |
| 49 | + latest_resf_sha = find_common_tag(old_rolling_branch_tags, new_base_branch_tags) |
| 50 | + print('[rolling release update] Latest RESF tag sha: ', latest_resf_sha) |
| 51 | + print(repo.git.show('--pretty="%H %s"', '-s', latest_resf_sha.decode())) |
| 52 | + |
| 53 | + |
| 54 | + print('[rolling release update] Checking out old rolling branch: ', args.old_rolling_branch) |
| 55 | + repo.git.checkout(args.old_rolling_branch) |
36 | 56 | print('[rolling release update] Finding the CIQ Kernel and Associated Upstream commits between the last resf tag and HEAD') |
37 | 57 | rolling_commit_map = {} |
38 | 58 | rollint_commit_map_rev = {} |
|
46 | 66 | rolling_commit_map[ciq_commit] = upstream_commit |
47 | 67 | rollint_commit_map_rev[upstream_commit] = ciq_commit |
48 | 68 |
|
| 69 | + print('[rolling release update] Last RESF tag sha: ', latest_resf_sha) |
| 70 | + |
49 | 71 | print('{ "CIQ COMMMIT" : "UPSTREAM COMMMIT" }') |
50 | 72 | print(json.dumps(rolling_commit_map, indent=2)) |
51 | 73 |
|
52 | | - |
53 | 74 | print('[rolling release update] Checking out new base branch: ', args.new_base_branch) |
54 | 75 | repo.git.checkout(args.new_base_branch) |
55 | 76 |
|
56 | | - print('[rolling release update] Finding the new resf_kernel tag the rolling release is based') |
57 | 77 | results = subprocess.run(['git', 'log', '--decorate', '--oneline'], stderr=subprocess.PIPE, stdout=subprocess.PIPE, |
58 | | - cwd=args.repo) |
59 | | - if results.returncode != 0: |
60 | | - print(results.stderr) |
61 | | - exit(1) |
62 | | - |
| 78 | + cwd=repo.working_dir) |
| 79 | + |
63 | 80 | print('[rolling release update] Finding the kernel version for the new rolling release') |
64 | 81 | new_rolling_branch_kernel = '' |
65 | 82 | for line in results.stdout.split(b'\n'): |
|
0 commit comments