Remove variables for genius
[integration/test.git] / tools / distchanges / distcompare.py
1 import argparse
2 from changes import Changes
3
4 # assumes that the new/current and older distributions are unzipped in /tmp/distro_new and
5 # /tmp_distro_old respectively
6
7
8 class DistCompare(object):
9     def __init__(self, remote_url):
10
11         self.remote_url = remote_url
12
13     @staticmethod
14     def get_project_names():
15         # TODO: when autorelease starts publishing the dependencies.log artifact, this function (or the consumer
16         # of this tool) can take the latest dependencies.log from jenkins lastSuccessfulArtifacts and put it
17         # in /tmp/ For now the functionality to read the projects from that file are commented.
18         """
19         projects = []
20         with open("/tmp/dependencies.log") as dep_file:
21             for line in dep_file:
22                 if line != "\n":
23                     projects.append(line.split(":")[0])
24
25         return projects
26         """
27         # this hard coded list of projects was taken from Oxygen dependencies.log - late January 2018
28         return [
29             "integration/distribution",
30             "mdsal",
31             "alto",
32             "sfc",
33             "bier",
34             "serviceutils",
35             "usc",
36             "ovsdb",
37             "lispflowmapping",
38             "groupbasedpolicy",
39             "snmp4sdn",
40             "aaa",
41             "honeycomb/vbd",
42             "openflowplugin",
43             "of-config",
44             "daexim",
45             "dluxapps",
46             "coe",
47             "packetcable",
48             "yangtools",
49             "infrautils",
50             "netvirt",
51             "neutron",
52             "snmp",
53             "bgpcep",
54             "nemo",
55             "netconf",
56             "tsdr",
57             "sxp",
58             "jsonrpc",
59             "p4plugin",
60             "odlparent",
61             "l2switch",
62             "dlux",
63             "controller",
64         ]
65
66     def run_cmd(self):
67         query_limit = 100
68         num_to_display = 50
69         branch = "master"
70         project_names = self.get_project_names()
71         extracted_distro_locations = {
72             "new": "/tmp/distro_new",
73             "old": "/tmp/distro_old",
74         }
75
76         new_changes = Changes(
77             branch,
78             extracted_distro_locations["new"],
79             num_to_display,
80             query_limit,
81             project_names,
82             self.remote_url,
83         )
84
85         new_projects = new_changes.run_cmd()
86         new_changes.pretty_print_projects(new_projects)
87
88         old_changes = Changes(
89             branch,
90             extracted_distro_locations["old"],
91             num_to_display,
92             query_limit,
93             project_names,
94             self.remote_url,
95         )
96
97         old_projects = old_changes.run_cmd()
98         old_changes.pretty_print_projects(old_projects)
99
100         patchset_diff = []
101         print("\nPatch differences:\n------------------")
102         for project_name, values in new_projects.items():
103             new_gerrits = values["includes"]
104             for gerrit in new_gerrits:
105                 if gerrit not in old_projects[project_name]["includes"]:
106                     patchset_diff.append(gerrit)
107                     print(
108                         "{:<20}{}\t{}".format(
109                             project_name, gerrit["url"], gerrit["subject"]
110                         )
111                     )
112
113         print("\n%s different patches between the two distros." % len(patchset_diff))
114
115
116 def main():
117
118     parser = argparse.ArgumentParser(
119         description="Returns the list of patches found in the unzipped distribution at "
120         "/tmp/distro_new that are not found in the distribution at "
121         "/tmp/distro_old. This should result in a listing of what new changes "
122         "were made between the two distributions."
123     )
124     parser.add_argument(
125         "-r",
126         "--remote",
127         dest="remote_url",
128         default=Changes.REMOTE_URL,
129         help="git remote url to use for gerrit",
130     )
131     options = parser.parse_args()
132
133     distc = DistCompare(options.remote_url)
134     distc.run_cmd()
135
136
137 if __name__ == "__main__":
138     main()