diff --git a/benchmark/gitlab-extract.py b/benchmark/gitlab-extract.py index 63a3a176ab5760028a80ea84933dabb59b26e6b0..93cb1c1c16823526f29ba5cca25b0584ad986ce8 100755 --- a/benchmark/gitlab-extract.py +++ b/benchmark/gitlab-extract.py @@ -4,7 +4,7 @@ import requests import parse_log def last(it): - r = first(it) # errors out if it is empty + r = None for i in it: r = i return r @@ -12,7 +12,7 @@ def last(it): def first(it): for i in it: return i - raise Exception("The iterator is empty") + return None def req(path): url = '%s/api/v3/%s' % (args.server, path) @@ -47,20 +47,29 @@ if args.commits is None: projects = req("projects") project = first(filter(lambda p: p['path_with_namespace'] == args.project, projects.json())) +if project is None: + sys.stderr.write("Project not found.\n") + sys.exit(1) for commit in parse_log.parse_git_commits(args.commits): print("Fetching {}...".format(commit)) + commit_data = req("/projects/{}/repository/commits/{}".format(project['id'], commit)) + if commit_data.status_code != 200: + raise Exception("Commit not found?") builds = req("/projects/{}/repository/commits/{}/builds".format(project['id'], commit)) if builds.status_code != 200: - continue - try: - build = first(sorted(builds.json(), key = lambda b: -int(b['id']))) - except Exception: # no build continue + build = first(sorted(builds.json(), key = lambda b: -int(b['id']))) + assert build is not None + if build['status'] == 'failed': + # build failed + continue + # now fetch the build times build_times = requests.get("{}/builds/{}/artifacts/file/build-time.txt".format(project['web_url'], build['id'])) if build_times.status_code != 200: - continue + raise Exception("No artifact at build?") # Output in the log file format log_file.write("# {}\n".format(commit)) log_file.write(build_times.text) + log_file.flush() diff --git a/benchmark/parse_log.py b/benchmark/parse_log.py index 82da2030ae242802c509b5cbc98150a92756b7fa..46a9ec82c3e31f7aa774f00c401c044561f159aa 100644 --- a/benchmark/parse_log.py +++ b/benchmark/parse_log.py @@ -35,7 +35,7 @@ def parse(file, parse_times = True): # nothing else we know about raise Exception("Unexpected line: {}".format(line)) # end of file. previous commit, if any, is done now. - if times is not None: + if commit is not None: yield Result(commit, times) def parse_git_commits(commits):