Migrate Get Requests invocations(libraries)
[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             "bier",
33             "serviceutils",
34             "usc",
35             "ovsdb",
36             "lispflowmapping",
37             "snmp4sdn",
38             "aaa",
39             "honeycomb/vbd",
40             "openflowplugin",
41             "of-config",
42             "daexim",
43             "dluxapps",
44             "coe",
45             "packetcable",
46             "yangtools",
47             "infrautils",
48             "neutron",
49             "snmp",
50             "bgpcep",
51             "nemo",
52             "netconf",
53             "sxp",
54             "jsonrpc",
55             "p4plugin",
56             "odlparent",
57             "l2switch",
58             "dlux",
59             "controller",
60         ]
61
62     def run_cmd(self):
63         query_limit = 100
64         num_to_display = 50
65         branch = "master"
66         project_names = self.get_project_names()
67         extracted_distro_locations = {
68             "new": "/tmp/distro_new",
69             "old": "/tmp/distro_old",
70         }
71
72         new_changes = Changes(
73             branch,
74             extracted_distro_locations["new"],
75             num_to_display,
76             query_limit,
77             project_names,
78             self.remote_url,
79         )
80
81         new_projects = new_changes.run_cmd()
82         new_changes.pretty_print_projects(new_projects)
83
84         old_changes = Changes(
85             branch,
86             extracted_distro_locations["old"],
87             num_to_display,
88             query_limit,
89             project_names,
90             self.remote_url,
91         )
92
93         old_projects = old_changes.run_cmd()
94         old_changes.pretty_print_projects(old_projects)
95
96         patchset_diff = []
97         print("\nPatch differences:\n------------------")
98         for project_name, values in new_projects.items():
99             new_gerrits = values["includes"]
100             for gerrit in new_gerrits:
101                 if gerrit not in old_projects[project_name]["includes"]:
102                     patchset_diff.append(gerrit)
103                     print(
104                         "{:<20}{}\t{}".format(
105                             project_name, gerrit["url"], gerrit["subject"]
106                         )
107                     )
108
109         print("\n%s different patches between the two distros." % len(patchset_diff))
110
111
112 def main():
113
114     parser = argparse.ArgumentParser(
115         description="Returns the list of patches found in the unzipped distribution at "
116         "/tmp/distro_new that are not found in the distribution at "
117         "/tmp/distro_old. This should result in a listing of what new changes "
118         "were made between the two distributions."
119     )
120     parser.add_argument(
121         "-r",
122         "--remote",
123         dest="remote_url",
124         default=Changes.REMOTE_URL,
125         help="git remote url to use for gerrit",
126     )
127     options = parser.parse_args()
128
129     distc = DistCompare(options.remote_url)
130     distc.run_cmd()
131
132
133 if __name__ == "__main__":
134     main()