Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Pierre-Marie Pédrot
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
Show whitespace changes
Inline
Side-by-side
benchmark/gitlab-extract.py
View file @
a0855325
...
@@ -4,7 +4,7 @@ import requests
...
@@ -4,7 +4,7 @@ import requests
import
parse_log
import
parse_log
def
last
(
it
):
def
last
(
it
):
r
=
first
(
it
)
# errors out if it is empty
r
=
None
for
i
in
it
:
for
i
in
it
:
r
=
i
r
=
i
return
r
return
r
...
@@ -12,7 +12,7 @@ def last(it):
...
@@ -12,7 +12,7 @@ def last(it):
def
first
(
it
):
def
first
(
it
):
for
i
in
it
:
for
i
in
it
:
return
i
return
i
r
aise
Exception
(
"The iterator is empty"
)
r
eturn
None
def
req
(
path
):
def
req
(
path
):
url
=
'%s/api/v3/%s'
%
(
args
.
server
,
path
)
url
=
'%s/api/v3/%s'
%
(
args
.
server
,
path
)
...
@@ -47,20 +47,29 @@ if args.commits is None:
...
@@ -47,20 +47,29 @@ if args.commits is None:
projects
=
req
(
"projects"
)
projects
=
req
(
"projects"
)
project
=
first
(
filter
(
lambda
p
:
p
[
'path_with_namespace'
]
==
args
.
project
,
projects
.
json
()))
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
):
for
commit
in
parse_log
.
parse_git_commits
(
args
.
commits
):
print
(
"Fetching {}..."
.
format
(
commit
))
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
))
builds
=
req
(
"/projects/{}/repository/commits/{}/builds"
.
format
(
project
[
'id'
],
commit
))
if
builds
.
status_code
!=
200
:
if
builds
.
status_code
!=
200
:
# no build
continue
continue
try
:
build
=
first
(
sorted
(
builds
.
json
(),
key
=
lambda
b
:
-
int
(
b
[
'id'
])))
build
=
first
(
sorted
(
builds
.
json
(),
key
=
lambda
b
:
-
int
(
b
[
'id'
])))
except
Exception
:
assert
build
is
not
None
# no build
if
build
[
'status'
]
==
'failed'
:
# build failed
continue
continue
# now fetch the build times
build_times
=
requests
.
get
(
"{}/builds/{}/artifacts/file/build-time.txt"
.
format
(
project
[
'web_url'
],
build
[
'id'
]))
build_times
=
requests
.
get
(
"{}/builds/{}/artifacts/file/build-time.txt"
.
format
(
project
[
'web_url'
],
build
[
'id'
]))
if
build_times
.
status_code
!=
200
:
if
build_times
.
status_code
!=
200
:
continue
raise
Exception
(
"No artifact at build?"
)
# Output in the log file format
# Output in the log file format
log_file
.
write
(
"# {}
\n
"
.
format
(
commit
))
log_file
.
write
(
"# {}
\n
"
.
format
(
commit
))
log_file
.
write
(
build_times
.
text
)
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):
...
@@ -35,7 +35,7 @@ def parse(file, parse_times = True):
# nothing else we know about
# nothing else we know about
raise
Exception
(
"Unexpected line: {}"
.
format
(
line
))
raise
Exception
(
"Unexpected line: {}"
.
format
(
line
))
# end of file. previous commit, if any, is done now.
# end of file. previous commit, if any, is done now.
if
times
is
not
None
:
if
commit
is
not
None
:
yield
Result
(
commit
,
times
)
yield
Result
(
commit
,
times
)
def
parse_git_commits
(
commits
):
def
parse_git_commits
(
commits
):
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a 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