Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Jonas Kastberg
iris
Commits
a0855325
Commit
a0855325
authored
Mar 03, 2016
by
Ralf Jung
Browse files
fix gitlab extractor to be more robust
parent
71788212
Changes
2
Hide whitespace changes
Inline
Side-by-side
benchmark/gitlab-extract.py
View file @
a0855325
...
...
@@ -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
r
aise
Exception
(
"The iterator is empty"
)
r
eturn
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
()
benchmark/parse_log.py
View file @
a0855325
...
...
@@ -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
):
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment