Skip to content

Commit cc1374b

Browse files
authored
Merge pull request github#6646 from tamasvajk/fix/csv-timeseries
Fix CSV timeseries script to create DB with scheme from correct git SHA
2 parents 0abfb00 + cc7471f commit cc1374b

File tree

2 files changed

+37
-20
lines changed

2 files changed

+37
-20
lines changed

misc/scripts/library-coverage/generate-timeseries.py

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,15 @@ def get_previous_sha(sha, date):
4141
return (parent_sha, parent_date)
4242

4343

44-
def get_packages(lang, query, search_path):
44+
def get_packages(config, search_path):
4545
try:
46-
db = "empty_" + lang
47-
ql_output = "output-" + lang + ".csv"
46+
db = "empty_" + config.lang
47+
ql_output = "output-" + config.lang + ".csv"
4848
if os.path.isdir(db):
4949
shutil.rmtree(db)
50-
utils.create_empty_database(lang, ".java", db)
51-
utils.run_codeql_query(query, db, ql_output, search_path)
50+
utils.create_empty_database(
51+
config.lang, config.ext, db, config.dbscheme)
52+
utils.run_codeql_query(config.ql_path, db, ql_output, search_path)
5253

5354
return pack.PackageCollection(ql_output)
5455
except:
@@ -71,9 +72,9 @@ def get_packages(lang, query, search_path):
7172

7273
configs = [
7374
utils.LanguageConfig(
74-
"java", "Java", ".java", "java/ql/src/meta/frameworks/Coverage.ql"),
75+
"java", "Java", ".java", "java/ql/src/meta/frameworks/Coverage.ql", ["java/ql/lib/config/semmlecode.dbscheme", "java/ql/src/config/semmlecode.dbscheme"]),
7576
utils.LanguageConfig(
76-
"csharp", "C#", ".cs", "csharp/ql/src/meta/frameworks/Coverage.ql")
77+
"csharp", "C#", ".cs", "csharp/ql/src/meta/frameworks/Coverage.ql", ["csharp/ql/lib/semmlecode.csharp.dbscheme", "csharp/ql/src/semmlecode.csharp.dbscheme"])
7778
]
7879

7980
output_prefix = "framework-coverage-timeseries-"
@@ -102,7 +103,8 @@ def get_packages(lang, query, search_path):
102103
"file_total": file_total,
103104
"file_packages": file_packages,
104105
"csvwriter_total": csvwriter_total,
105-
"csvwriter_packages": csvwriter_packages
106+
"csvwriter_packages": csvwriter_packages,
107+
"last_row": (None, None, None)
106108
}
107109

108110
try:
@@ -141,15 +143,20 @@ def get_packages(lang, query, search_path):
141143
frameworks: fr.FrameworkCollection = language_utils[lang]["frameworks"]
142144
csvwriter_total = language_utils[lang]["csvwriter_total"]
143145
csvwriter_packages = language_utils[lang]["csvwriter_packages"]
146+
last_row = language_utils[lang]["last_row"]
144147

145-
packages = get_packages(lang, config.ql_path, ".")
148+
packages = get_packages(config, ".")
146149

147-
csvwriter_total.writerow([
148-
current_sha,
149-
current_date,
150-
packages.get_part_count("source"),
151-
packages.get_part_count("sink"),
152-
packages.get_part_count("summary")])
150+
new_row = (packages.get_part_count("source"),
151+
packages.get_part_count("sink"),
152+
packages.get_part_count("summary"))
153+
154+
if last_row != new_row:
155+
csvwriter_total.writerow([
156+
current_sha,
157+
current_date,
158+
new_row[0], new_row[1], new_row[2]])
159+
language_utils[lang]["last_row"] = new_row
153160

154161
matched_packages = set()
155162

@@ -158,7 +165,7 @@ def get_packages(lang, query, search_path):
158165
framework: fr.Framework = framework
159166

160167
row = [current_sha, current_date,
161-
framework.name, framework.package_pattern]
168+
framework.name, ", ".join(sorted(framework.package_pattern.split(" ")))]
162169

163170
sources = 0
164171
sinks = 0

misc/scripts/library-coverage/utils.py

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,23 @@ def subprocess_check_output(cmd):
1717
return subprocess.check_output(cmd, text=True, env=os.environ.copy())
1818

1919

20-
def create_empty_database(lang, extension, database):
20+
def create_empty_database(lang, extension, database, dbscheme=None):
2121
"""Creates an empty database for the given language."""
2222
subprocess_run(["codeql", "database", "init", "--language=" + lang,
2323
"--source-root=/tmp/empty", "--allow-missing-source-root", database])
2424
subprocess_run(["mkdir", "-p", database + "/src/tmp/empty"])
2525
subprocess_run(["touch", database + "/src/tmp/empty/empty" + extension])
26-
subprocess_run(["codeql", "database", "finalize",
27-
database, "--no-pre-finalize"])
26+
27+
finalize_cmd = ["codeql", "database", "finalize",
28+
database, "--no-pre-finalize"]
29+
if dbscheme is not None:
30+
for scheme in dbscheme:
31+
if os.path.exists(scheme):
32+
finalize_cmd.append("--dbscheme")
33+
finalize_cmd.append(scheme)
34+
break
35+
36+
subprocess_run(finalize_cmd)
2837

2938

3039
def run_codeql_query(query, database, output, search_path):
@@ -38,11 +47,12 @@ def run_codeql_query(query, database, output, search_path):
3847

3948

4049
class LanguageConfig:
41-
def __init__(self, lang, capitalized_lang, ext, ql_path):
50+
def __init__(self, lang, capitalized_lang, ext, ql_path, dbscheme=None):
4251
self.lang = lang
4352
self.capitalized_lang = capitalized_lang
4453
self.ext = ext
4554
self.ql_path = ql_path
55+
self.dbscheme = dbscheme
4656

4757

4858
def read_cwes(path):

0 commit comments

Comments
 (0)