@@ -54,20 +54,33 @@ def get_stats(lang, query):
54
54
sinks = 0
55
55
summaries = 0
56
56
57
+ packages = {}
58
+
57
59
with open (ql_output ) as csvfile :
58
60
reader = csv .reader (csvfile )
59
61
for row in reader :
60
62
# row: "android.util",1,"remote","source",16
63
+ package = row [0 ]
64
+ if package not in packages :
65
+ packages [package ] = {
66
+ "sources" : 0 ,
67
+ "sinks" : 0 ,
68
+ "summaries" : 0
69
+ }
70
+
61
71
if row [3 ] == "source" :
62
72
sources += int (row [4 ])
73
+ packages [package ]["sources" ] += int (row [4 ])
63
74
if row [3 ] == "sink" :
64
75
sinks += int (row [4 ])
76
+ packages [package ]["sinks" ] += int (row [4 ])
65
77
if row [3 ] == "summary" :
66
78
summaries += int (row [4 ])
79
+ packages [package ]["summaries" ] += int (row [4 ])
67
80
68
81
os .remove (ql_output )
69
82
70
- return (sources , sinks , summaries )
83
+ return (sources , sinks , summaries , packages )
71
84
except :
72
85
print ("Unexpected error:" , sys .exc_info ()[0 ])
73
86
raise Exception ()
@@ -88,35 +101,44 @@ def get_stats(lang, query):
88
101
# todo: change this when we cover multiple languages. We should compute the SHAs
89
102
# only once and not per language
90
103
for config in configs :
91
- with open ("timeseries-" + config .lang + ".csv" , 'w' , newline = '' ) as csvfile :
92
- csvwriter = csv .writer (csvfile )
93
- csvwriter .writerow (["SHA" , "Date" , "Sources" , "Sinks" , "Summaries" ])
104
+ with open ("timeseries-" + config .lang + ".csv" , 'w' , newline = '' ) as csvfile_total :
105
+ with open ("timeseries-" + config .lang + "-packages.csv" , 'w' , newline = '' ) as csvfile_packages :
106
+ csvwriter_total = csv .writer (csvfile_total )
107
+ csvwriter_packages = csv .writer (csvfile_packages )
108
+ csvwriter_total .writerow (
109
+ ["SHA" , "Date" , "Sources" , "Sinks" , "Summaries" ])
110
+ csvwriter_packages .writerow (
111
+ ["SHA" , "Date" , "Package" , "Sources" , "Sinks" , "Summaries" ])
112
+
113
+ os .chdir (working_dir )
94
114
95
- os . chdir ( working_dir )
115
+ utils . subprocess_run ([ "git" , "checkout" , "main" ] )
96
116
97
- utils .subprocess_run (["git" , "checkout" , "main" ])
117
+ current_sha = get_str_output (["git" , "rev-parse" , "HEAD" ])
118
+ current_date = get_date (current_sha )
98
119
99
- current_sha = get_str_output (["git" , "rev-parse" , "HEAD" ])
100
- current_date = get_date (current_sha )
120
+ while True :
121
+ print ("Getting stats for " + current_sha )
122
+ utils .subprocess_run (["git" , "checkout" , current_sha ])
101
123
102
- while True :
103
- print ("Getting stats for " + current_sha )
104
- utils .subprocess_run (["git" , "checkout" , current_sha ])
124
+ try :
125
+ stats = get_stats (config .lang , config .ql_path )
105
126
106
- try :
107
- stats = get_stats ( config . lang , config . ql_path )
127
+ csvwriter_total . writerow (
128
+ [ current_sha , current_date , stats [ 0 ], stats [ 1 ], stats [ 2 ]] )
108
129
109
- csvwriter .writerow (
110
- [current_sha , current_date , stats [0 ], stats [1 ], stats [2 ]])
130
+ for package in stats [3 ]:
131
+ csvwriter_packages .writerow (
132
+ [current_sha , current_date , package , stats [3 ][package ]["sources" ], stats [3 ][package ]["sinks" ], stats [3 ][package ]["summaries" ]])
111
133
112
- print ("Collected stats for " + current_sha +
113
- " at " + current_date .isoformat ())
114
- except :
115
- print ("Error getting stats for " +
116
- current_sha + ". Stopping iteration." )
117
- break
134
+ print ("Collected stats for " + current_sha +
135
+ " at " + current_date .isoformat ())
136
+ except :
137
+ print ("Error getting stats for " +
138
+ current_sha + ". Stopping iteration." )
139
+ break
118
140
119
- current_sha , current_date = get_previous_sha (
120
- current_sha , current_date )
141
+ current_sha , current_date = get_previous_sha (
142
+ current_sha , current_date )
121
143
122
144
utils .subprocess_run (["git" , "checkout" , "main" ])
0 commit comments