Skip to content

Commit 9a8a66f

Browse files
committed
Add the "--no-all" option to print Linux version without all commits
To check which commits should be backported add the "--no-all" option that prints Linux versions that don't have all the commit and which commits are missing. Change-Id: If414fe9ee681b906e3ce1f80c5b0ee893d0b3e3f
1 parent 197bf75 commit 9a8a66f

2 files changed

Lines changed: 116 additions & 6 deletions

File tree

linux-version-finder

Lines changed: 55 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ def version_key(version: str) -> int:
6666

6767

6868
def find_commits_versions(
69-
commits: list[str], single_script_path: str
69+
commits: list[str], all: bool, single_script_path: str
7070
) -> tuple[list[str], dict[str, list]]:
7171
"""Find all the versions associated to the commits
7272
@@ -78,12 +78,24 @@ def find_commits_versions(
7878
versions = linux_version_finder_single(single_script_path, commit)
7979
for version in versions:
8080
minor_version = get_minor_version(version)
81-
versions_count[minor_version].append(version)
81+
if all:
82+
# If the --no-all option isn't used add the version
83+
# because we need to know the version where the commit
84+
# was merged.
85+
versions_count[minor_version].append(version)
86+
else:
87+
# If the --no-all option is used add the sha1 of the
88+
# commit because we need to know which commit was
89+
# merged/backported.
90+
versions_count[minor_version].append(commit)
8291
if minor_version:
8392
start = minor_versions.index(minor_version) + 1
8493
for i in range(start, len(minor_versions)):
8594
minor_version = minor_versions[i]
86-
versions_count[minor_version].append(minor_version + "-rc0")
95+
if all:
96+
versions_count[minor_version].append(minor_version + "-rc0")
97+
else:
98+
versions_count[minor_version].append(commit)
8799
return minor_versions, versions_count
88100

89101

@@ -106,17 +118,55 @@ def print_versions_with_all_commits(
106118
print("")
107119

108120

121+
def get_short_sha(commit: str) -> str:
122+
"""Get a short unique sha
123+
124+
E.g. 51b6489 instead of 51b6489bbe2d5433993c7e6dcf5a99039760d3b0."""
125+
completedProcess = subprocess.run(
126+
["git", "rev-parse", "--short", commit],
127+
capture_output=True,
128+
check=True,
129+
)
130+
return completedProcess.stdout.decode("utf-8").strip()
131+
132+
133+
def print_versions_without_all_commits(
134+
commits: list[str], minor_versions: list[str], versions_count: dict[str, list]
135+
) -> None:
136+
"""Print Linux versions that don't contain all the commits"""
137+
len_commits = len(commits)
138+
short_sha = {commit: get_short_sha(commit) for commit in commits}
139+
140+
for minor_version in reversed(minor_versions):
141+
minor_version_count = versions_count[minor_version]
142+
if len_commits > len(minor_version_count):
143+
print(f"{minor_version}:\t", end="")
144+
# to speed up the check use a set
145+
set_commits_presents = set(minor_version_count)
146+
missing_commits = [x for x in commits if x not in set_commits_presents]
147+
for commit in missing_commits:
148+
short = short_sha[commit]
149+
print(f" {short}", end="")
150+
print("")
151+
152+
109153
def main(
110154
commits: List[str],
155+
all: bool = typer.Option(True, help="Print the versions with all commits."),
111156
debug: bool = typer.Option(False, help="Print debug info."),
112157
):
113158
if debug:
114159
logging.basicConfig(level=logging.DEBUG)
115160
single_script_path = os.path.dirname(sys.argv[0]) + "/linux-version-finder-single"
116-
minor_versions, versions_count = find_commits_versions(commits, single_script_path)
161+
minor_versions, versions_count = find_commits_versions(
162+
commits, all, single_script_path
163+
)
117164
logging.debug(versions_count)
118165

119-
print_versions_with_all_commits(commits, minor_versions, versions_count)
166+
if all:
167+
print_versions_with_all_commits(commits, minor_versions, versions_count)
168+
else:
169+
print_versions_without_all_commits(commits, minor_versions, versions_count)
120170

121171

122172
if __name__ == "__main__":

test

Lines changed: 61 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,5 +30,65 @@ expect eof
3030

3131
# Return just the first (is reversed respect to the previous one)
3232
spawn $tool 22b106e5355d6e7a9c3b5cb5ed4ef22ae585ea94 2939e1a86f758b55cdba73e29397dd3d94df13bc
33-
expect "v5.10.121 v5.15.46 v5.17.14 v5.18.3 v5.19-rc1\r"
33+
expect "v5.19-rc1 v5.18.3 v5.17.14 v5.15.46 v5.10.121\r"
34+
expect eof
35+
36+
# Check finding version without all commits
37+
spawn $tool --no-all 2939e1a86f758b55cdba73e29397dd3d94df13bc 22b106e5355d6e7a9c3b5cb5ed4ef22ae585ea94
38+
expect "v5.16: 22b106e5355d\r"
39+
expect "v5.14: 22b106e5355d\r"
40+
expect "v5.13: 22b106e5355d\r"
41+
expect "v5.12: 22b106e5355d\r"
42+
expect "v5.11: 22b106e5355d\r"
43+
expect "v5.9: 22b106e5355d\r"
44+
expect "v5.8: 22b106e5355d\r"
45+
expect "v5.7: 22b106e5355d\r"
46+
expect "v5.6: 22b106e5355d\r"
47+
expect "v5.5: 22b106e5355d\r"
48+
expect "v5.3: 22b106e5355d\r"
49+
expect "v5.2: 22b106e5355d\r"
50+
expect "v5.1: 22b106e5355d\r"
51+
expect "v5.0: 22b106e5355d\r"
52+
expect "v4.20: 22b106e5355d\r"
53+
expect "v4.19: 22b106e5355d\r"
54+
expect "v4.18: 22b106e5355d\r"
55+
expect "v4.17: 22b106e5355d\r"
56+
expect "v4.16: 22b106e5355d\r"
57+
expect "v4.15: 22b106e5355d\r"
58+
expect "v4.14: 22b106e5355d\r"
59+
expect "v4.13: 22b106e5355d\r"
60+
expect "v4.12: 22b106e5355d\r"
61+
expect "v4.11: 22b106e5355d\r"
62+
expect "v4.10: 22b106e5355d\r"
63+
expect "v4.9: 22b106e5355d\r"
64+
expect "v4.8: 22b106e5355d\r"
65+
expect "v4.7: 2939e1a86f75 22b106e5355d\r"
66+
expect "v4.6: 2939e1a86f75 22b106e5355d\r"
67+
expect "v4.5: 2939e1a86f75 22b106e5355d\r"
68+
expect "v4.4: 22b106e5355d\r"
69+
expect "v4.3: 2939e1a86f75 22b106e5355d\r"
70+
expect "v4.2: 2939e1a86f75 22b106e5355d\r"
71+
expect "v4.1: 22b106e5355d\r"
72+
expect "v4.0: 2939e1a86f75 22b106e5355d\r"
73+
expect "v3.19: 2939e1a86f75 22b106e5355d\r"
74+
expect "v3.18: 2939e1a86f75 22b106e5355d\r"
75+
expect "v3.17: 2939e1a86f75 22b106e5355d\r"
76+
expect "v3.16: 22b106e5355d\r"
77+
expect "v3.15: 2939e1a86f75 22b106e5355d\r"
78+
expect "v3.14: 2939e1a86f75 22b106e5355d\r"
79+
expect "v3.13: 2939e1a86f75 22b106e5355d\r"
80+
expect "v3.12: 2939e1a86f75 22b106e5355d\r"
81+
expect "v3.11: 2939e1a86f75 22b106e5355d\r"
82+
expect "v3.10: 2939e1a86f75 22b106e5355d\r"
83+
expect "v3.9: 2939e1a86f75 22b106e5355d\r"
84+
expect "v3.8: 2939e1a86f75 22b106e5355d\r"
85+
expect "v3.7: 2939e1a86f75 22b106e5355d\r"
86+
expect "v3.6: 2939e1a86f75 22b106e5355d\r"
87+
expect "v3.5: 2939e1a86f75 22b106e5355d\r"
88+
expect "v3.4: 2939e1a86f75 22b106e5355d\r"
89+
expect "v3.3: 2939e1a86f75 22b106e5355d\r"
90+
expect "v3.2: 2939e1a86f75 22b106e5355d\r"
91+
expect "v3.1: 2939e1a86f75 22b106e5355d\r"
92+
expect "v3.0: 2939e1a86f75 22b106e5355d\r"
93+
expect "v2.6: 2939e1a86f75 22b106e5355d\r"
3494
expect eof

0 commit comments

Comments
 (0)