mirror of
https://chromium.googlesource.com/chromium/tools/depot_tools.git
synced 2026-01-11 18:51:29 +00:00
Implement setdeps for GCS
The number of revision objects must match the number of current objects
for a given path. The comma separated values for a revision object
must also be in the order of object_name, sha256sum, size_bytes, and
generation.
Example usage:
gclient setdep --revision=src/third_party/js_code_coverage@myobjectname,deadbeef,1223455,9438393984/myobjectname2,deadbefeaef,1223455,9438393984
Resulting diff:
diff --git a/DEPS b/DEPS
index b40bca8cdd89d..c2186185c1db5 100644
--- a/DEPS
+++ b/DEPS
@@ -553,10 +553,10 @@ deps = {
'bucket': 'chromium-nodejs',
'objects': [
{
- 'object_name': 'js_code_coverage/d538975c93eefc7bafd599b50f867e90c1ef17f3',
- 'sha256sum': '646bb00ced0a930b2eb1e4dbcfac18ebbb8f889bb80599e0254d9d6505427914',
- 'size_bytes': 1469185,
- 'generation': 1657780123604338,
+ 'object_name': 'myobjectname',
+ 'sha256sum': 'deadbeef',
+ 'size_bytes': 1223455,
+ 'generation': 9438393984,
},
],
},
Bug: b/324418194
Change-Id: Ibd824f7b51fa88f732c7197e2cc663b58de7479e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/5503101
Commit-Queue: Stephanie Kim <kimstephanie@google.com>
Reviewed-by: Joanna Wang <jojwang@chromium.org>
This commit is contained in:
25
gclient.py
25
gclient.py
@@ -4103,7 +4103,13 @@ def CMDsetdep(parser, args):
|
|||||||
'reference (e.g. src/dep@deadbeef). If it is a CIPD '
|
'reference (e.g. src/dep@deadbeef). If it is a CIPD '
|
||||||
'dependency, dep must be of the form path:package and '
|
'dependency, dep must be of the form path:package and '
|
||||||
'rev must be the package version '
|
'rev must be the package version '
|
||||||
'(e.g. src/pkg:chromium/pkg@2.1-cr0).')
|
'(e.g. src/pkg:chromium/pkg@2.1-cr0). '
|
||||||
|
'If it is a GCS dependency, dep must be of the form '
|
||||||
|
'path@object_name,sha256sum,size_bytes,generation?'
|
||||||
|
'object_name2,sha256sum2,size_bytes2,generation2?... '
|
||||||
|
'The number of revision objects for a given path must '
|
||||||
|
'match the current number of revision objects for that '
|
||||||
|
'path.')
|
||||||
parser.add_option(
|
parser.add_option(
|
||||||
'--deps-file',
|
'--deps-file',
|
||||||
default='DEPS',
|
default='DEPS',
|
||||||
@@ -4171,6 +4177,23 @@ def CMDsetdep(parser, args):
|
|||||||
'Wrong CIPD format: %s:%s should be of the form path:pkg@version.'
|
'Wrong CIPD format: %s:%s should be of the form path:pkg@version.'
|
||||||
% (name, package))
|
% (name, package))
|
||||||
gclient_eval.SetCIPD(local_scope, name, package, value)
|
gclient_eval.SetCIPD(local_scope, name, package, value)
|
||||||
|
elif ',' in value:
|
||||||
|
objects = []
|
||||||
|
raw_objects = value.split('?')
|
||||||
|
for o in raw_objects:
|
||||||
|
object_info = o.split(',')
|
||||||
|
if len(object_info) != 4:
|
||||||
|
parser.error(
|
||||||
|
'All 4 values are required in the revision object: '
|
||||||
|
'object_name, sha256sum, size_bytes, and generation.')
|
||||||
|
object_dict = {
|
||||||
|
'object_name': object_info[0],
|
||||||
|
'sha256sum': object_info[1],
|
||||||
|
'size_bytes': object_info[2],
|
||||||
|
'generation': object_info[3],
|
||||||
|
}
|
||||||
|
objects.append(object_dict)
|
||||||
|
gclient_eval.SetGCS(local_scope, name, objects)
|
||||||
else:
|
else:
|
||||||
# Update DEPS only when `git_dependencies` == DEPS or SYNC.
|
# Update DEPS only when `git_dependencies` == DEPS or SYNC.
|
||||||
# git_dependencies is defaulted to DEPS when not set.
|
# git_dependencies is defaulted to DEPS when not set.
|
||||||
|
|||||||
@@ -787,6 +787,29 @@ def _GetVarName(node):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def SetGCS(gclient_dict, dep_name, new_objects):
|
||||||
|
if not isinstance(gclient_dict, _NodeDict) or gclient_dict.tokens is None:
|
||||||
|
raise ValueError(
|
||||||
|
"Can't use SetGCS for the given gclient dict. It contains no "
|
||||||
|
"formatting information.")
|
||||||
|
tokens = gclient_dict.tokens
|
||||||
|
|
||||||
|
if 'deps' not in gclient_dict or dep_name not in gclient_dict['deps']:
|
||||||
|
raise KeyError("Could not find any dependency called %s." % dep_name)
|
||||||
|
|
||||||
|
node = gclient_dict['deps'][dep_name]
|
||||||
|
objects_node = node.GetNode('objects')
|
||||||
|
if len(objects_node.elts) != len(new_objects):
|
||||||
|
raise ValueError("Number of revision objects must match the current "
|
||||||
|
"number of objects.")
|
||||||
|
|
||||||
|
for index, object_node in enumerate(objects_node.elts):
|
||||||
|
for key, value in zip(object_node.keys, object_node.values):
|
||||||
|
_UpdateAstString(tokens, value, new_objects[index][key.s])
|
||||||
|
|
||||||
|
node.SetNode('objects', new_objects, objects_node)
|
||||||
|
|
||||||
|
|
||||||
def SetCIPD(gclient_dict, dep_name, package_name, new_version):
|
def SetCIPD(gclient_dict, dep_name, package_name, new_version):
|
||||||
if not isinstance(gclient_dict, _NodeDict) or gclient_dict.tokens is None:
|
if not isinstance(gclient_dict, _NodeDict) or gclient_dict.tokens is None:
|
||||||
raise ValueError(
|
raise ValueError(
|
||||||
|
|||||||
Reference in New Issue
Block a user