Skip to content
GitLab
Menu
Why GitLab
Pricing
Contact Sales
Explore
Why GitLab
Pricing
Contact Sales
Explore
Sign in
Get free trial
Primary navigation
Search or go to…
Project
buildgrid
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Container registry
Model registry
Operate
Environments
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Privacy statement
Keyboard shortcuts
?
What's new
6
Snippets
Groups
Projects
Show more breadcrumbs
BuildGrid
buildgrid
Compare revisions
09931a329c6211d3606a4713b2c2ace896e7eecf to 3512e0bb41c9a2fbc1f03d5cfa5915709da2a802
Compare revisions
Changes are shown as if the
source
revision was being merged into the
target
revision.
Learn more about comparing revisions.
Source
BuildGrid/buildgrid
Select target project
No results found
3512e0bb41c9a2fbc1f03d5cfa5915709da2a802
Select Git revision
Branches
coverity
master
sminskyprimu/blake3
sotk/consolidate-leases-and-jobs/p2-write-only-leases
sotk/consolidate-leases-and-jobs/p3-drop-leases-table
sotk/features/lease-audit-table
sotk/logstream-testing
zchen723/skip-scheduler-metrics
Tags
0.0.10
0.0.11
0.0.12
0.0.13
0.0.14
0.0.16
0.0.17
0.0.19
0.0.2
0.0.20
0.0.21
0.0.23
0.0.25
0.0.26
0.0.27
0.0.28
0.0.29
0.0.3
0.0.30
0.0.31
0.0.32
0.0.33
0.0.34
0.0.35
0.0.36
0.0.37
0.0.38
0.0.39
0.0.4
0.0.40
0.0.41
0.0.42
0.0.43
0.0.44
0.0.45
0.0.46
0.0.47
0.0.48
0.0.49
0.0.5
0.0.50
0.0.51
0.0.52
0.0.53
0.0.54
0.0.55
0.0.56
0.0.57
0.0.58
0.0.59
0.0.6
0.0.60
0.0.61
0.0.62
0.0.63
0.0.64
0.0.65
0.0.66
0.0.67
0.0.68
0.0.69
0.0.7
0.0.70
0.0.71
0.0.72
0.0.73
0.0.74
0.0.75
0.0.76
0.0.78
0.0.79
0.0.8
0.0.80
0.0.81
0.0.82
0.0.83
0.0.84
0.0.85
0.0.86
0.0.87
0.0.88
0.0.89
0.0.9
0.0.90
0.0.91
0.0.92
0.0.93
0.0.94
0.0.95
0.0.96
0.0.97
0.0.98
0.1.0
0.1.1
0.1.10
0.1.11
0.1.12
0.1.13
0.1.14
0.1.15
108 results
Swap
Target
BuildGrid/buildgrid
Select target project
edbaunton/buildgrid
BuildGrid/buildgrid
bloomberg/buildgrid
devcurmudgeon/buildgrid
mhadjimichael/buildgrid
jmacarthur/buildgrid
rkothur/buildgrid
valentindavid/buildgrid
jjardon/buildgrid
RichKen/buildgrid
jbonney/buildgrid
onsha_alexander/buildgrid
santigl/buildgrid
mostynb/buildgrid
hoffbrinkle/buildgrid
Malinskiy/buildgrid
coldtom/buildgrid
azeemb_a/buildgrid
pointswaves/buildgrid
BenjaminSchubert/buildgrid
michaellee8/buildgrid
anil-anil/buildgrid
seanborg/buildgrid
jdelong12/buildgrid
jclay/buildgrid
bweston92/buildgrid
zchen723/buildgrid
cpratt34/buildgrid
armbiant/apache-buildgrid
armbiant/android-buildgrid
itsme300/buildgrid
sbairoliya/buildgrid
32 results
09931a329c6211d3606a4713b2c2ace896e7eecf
Select Git revision
Branches
coverity
master
sminskyprimu/blake3
sotk/consolidate-leases-and-jobs/p2-write-only-leases
sotk/consolidate-leases-and-jobs/p3-drop-leases-table
sotk/features/lease-audit-table
sotk/logstream-testing
zchen723/skip-scheduler-metrics
Tags
0.0.10
0.0.11
0.0.12
0.0.13
0.0.14
0.0.16
0.0.17
0.0.19
0.0.2
0.0.20
0.0.21
0.0.23
0.0.25
0.0.26
0.0.27
0.0.28
0.0.29
0.0.3
0.0.30
0.0.31
0.0.32
0.0.33
0.0.34
0.0.35
0.0.36
0.0.37
0.0.38
0.0.39
0.0.4
0.0.40
0.0.41
0.0.42
0.0.43
0.0.44
0.0.45
0.0.46
0.0.47
0.0.48
0.0.49
0.0.5
0.0.50
0.0.51
0.0.52
0.0.53
0.0.54
0.0.55
0.0.56
0.0.57
0.0.58
0.0.59
0.0.6
0.0.60
0.0.61
0.0.62
0.0.63
0.0.64
0.0.65
0.0.66
0.0.67
0.0.68
0.0.69
0.0.7
0.0.70
0.0.71
0.0.72
0.0.73
0.0.74
0.0.75
0.0.76
0.0.78
0.0.79
0.0.8
0.0.80
0.0.81
0.0.82
0.0.83
0.0.84
0.0.85
0.0.86
0.0.87
0.0.88
0.0.89
0.0.9
0.0.90
0.0.91
0.0.92
0.0.93
0.0.94
0.0.95
0.0.96
0.0.97
0.0.98
0.1.0
0.1.1
0.1.10
0.1.11
0.1.12
0.1.13
0.1.14
0.1.15
108 results
Show changes
Only incoming changes from source
Include changes to target since source was created
Compare
Commits on Source (2)
client/cas.py: Preserve file executability on download
· 6ca668f8
Martin Blanchard
authored
6 years ago
#134
6ca668f8
tests/cas/test_client.py: Add a test file for executability
· 3512e0bb
Martin Blanchard
authored
6 years ago
#134
3512e0bb
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
buildgrid/client/cas.py
+16
-9
16 additions, 9 deletions
buildgrid/client/cas.py
tests/cas/data/hello/hello.sh
+3
-0
3 additions, 0 deletions
tests/cas/data/hello/hello.sh
with
19 additions
and
9 deletions
buildgrid/client/cas.py
View file @
3512e0bb
...
...
@@ -171,7 +171,7 @@ class Downloader:
return
messages
def
download_file
(
self
,
digest
,
file_path
,
queue
=
True
):
def
download_file
(
self
,
digest
,
file_path
,
is_executable
=
False
,
queue
=
True
):
"""
Retrieves a file from the remote CAS server.
If queuing is allowed (`queue=True`), the download request **may** be
...
...
@@ -181,6 +181,7 @@ class Downloader:
Args:
digest (:obj:`Digest`): the file
'
s digest to fetch.
file_path (str): absolute or relative path to the local file to write.
is_executable (bool): whether the file is executable or not.
queue (bool, optional): whether or not the download request may be
queued and submitted as part of a batch upload request. Defaults
to True.
...
...
@@ -193,9 +194,9 @@ class Downloader:
file_path
=
os
.
path
.
abspath
(
file_path
)
if
not
queue
or
digest
.
size_bytes
>
FILE_SIZE_THRESHOLD
:
self
.
_fetch_file
(
digest
,
file_path
)
self
.
_fetch_file
(
digest
,
file_path
,
is_executable
=
is_executable
)
else
:
self
.
_queue_file
(
digest
,
file_path
)
self
.
_queue_file
(
digest
,
file_path
,
is_executable
=
is_executable
)
def
download_directory
(
self
,
digest
,
directory_path
):
"""
Retrieves a :obj:`Directory` from the remote CAS server.
...
...
@@ -311,7 +312,7 @@ class Downloader:
return
read_blobs
def
_fetch_file
(
self
,
digest
,
file_path
):
def
_fetch_file
(
self
,
digest
,
file_path
,
is_executable
=
False
):
"""
Fetches a file using ByteStream.Read()
"""
if
self
.
instance_name
:
resource_name
=
'
/
'
.
join
([
self
.
instance_name
,
'
blobs
'
,
...
...
@@ -332,7 +333,10 @@ class Downloader:
assert
byte_file
.
tell
()
==
digest
.
size_bytes
def
_queue_file
(
self
,
digest
,
file_path
):
if
is_executable
:
os
.
chmod
(
file_path
,
0o755
)
# rwxr-xr-x / 755
def
_queue_file
(
self
,
digest
,
file_path
,
is_executable
=
False
):
"""
Queues a file for later batch download
"""
if
self
.
__file_request_size
+
digest
.
ByteSize
()
>
MAX_REQUEST_SIZE
:
self
.
flush
()
...
...
@@ -341,22 +345,25 @@ class Downloader:
elif
self
.
__file_request_count
>=
MAX_REQUEST_COUNT
:
self
.
flush
()
self
.
__file_requests
[
digest
.
hash
]
=
(
digest
,
file_path
)
self
.
__file_requests
[
digest
.
hash
]
=
(
digest
,
file_path
,
is_executable
)
self
.
__file_request_count
+=
1
self
.
__file_request_size
+=
digest
.
ByteSize
()
self
.
__file_response_size
+=
digest
.
size_bytes
def
_fetch_file_batch
(
self
,
batch
):
"""
Sends queued data using ContentAddressableStorage.BatchReadBlobs()
"""
batch_digests
=
[
digest
for
digest
,
_
in
batch
.
values
()]
batch_digests
=
[
digest
for
digest
,
_
,
_
in
batch
.
values
()]
batch_blobs
=
self
.
_fetch_blob_batch
(
batch_digests
)
for
(
_
,
file_path
),
file_blob
in
zip
(
batch
.
values
(),
batch_blobs
):
for
(
_
,
file_path
,
is_executable
),
file_blob
in
zip
(
batch
.
values
(),
batch_blobs
):
os
.
makedirs
(
os
.
path
.
dirname
(
file_path
),
exist_ok
=
True
)
with
open
(
file_path
,
'
wb
'
)
as
byte_file
:
byte_file
.
write
(
file_blob
)
if
is_executable
:
os
.
chmod
(
file_path
,
0o755
)
# rwxr-xr-x / 755
def
_fetch_directory
(
self
,
digest
,
directory_path
):
"""
Fetches a file using ByteStream.GetTree()
"""
# Better fail early if the local root path cannot be created:
...
...
@@ -414,7 +421,7 @@ class Downloader:
for
file_node
in
root_directory
.
files
:
file_path
=
os
.
path
.
join
(
root_path
,
file_node
.
name
)
self
.
_queue_file
(
file_node
.
digest
,
file_path
)
self
.
_queue_file
(
file_node
.
digest
,
file_path
,
is_executable
=
file_node
.
is_executable
)
for
directory_node
in
root_directory
.
directories
:
directory_path
=
os
.
path
.
join
(
root_path
,
directory_node
.
name
)
...
...
This diff is collapsed.
Click to expand it.
tests/cas/data/hello/hello.sh
0 → 100755
View file @
3512e0bb
#!/bin/bash
echo
"Hello, World!"
This diff is collapsed.
Click to expand it.