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:
Stephanie Kim
2024-05-01 21:58:45 +00:00
committed by LUCI CQ
parent c0366630f7
commit 497e8167a4
2 changed files with 47 additions and 1 deletions

View File

@@ -787,6 +787,29 @@ def _GetVarName(node):
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):
if not isinstance(gclient_dict, _NodeDict) or gclient_dict.tokens is None:
raise ValueError(