From af908cb5438ec3c03a9a32d1a9f286aa5657ff88 Mon Sep 17 00:00:00 2001 From: Sean McAllister Date: Mon, 20 Apr 2020 08:41:58 -0600 Subject: [PATCH] When writing manifest, set the dest-branch attribute for projects When generating a revision locked manifest, we need to know what ref to push changes to when doing 'repo upload'. This information is lost when we lock the revision attribute to a particular commit hash, so we need to expose it through the dest-branch attribute. Bug: https://crbug.com/1005103 Test: manual execution Change-Id: Ib31fd77ad8c9379759c4181dac1ea97de43eec35 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/263572 Tested-by: Sean McAllister Reviewed-by: Mike Frysinger --- manifest_xml.py | 9 ++++++++- subcmds/manifest.py | 11 +++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/manifest_xml.py b/manifest_xml.py index edcbadae..b2918cac 100644 --- a/manifest_xml.py +++ b/manifest_xml.py @@ -284,7 +284,7 @@ https://gerrit.googlesource.com/git-repo/+/HEAD/docs/manifest-format.md def _ParseGroups(self, groups): return [x for x in re.split(r'[,\s]+', groups) if x] - def Save(self, fd, peg_rev=False, peg_rev_upstream=True, groups=None): + def Save(self, fd, peg_rev=False, peg_rev_upstream=True, peg_rev_dest_branch=True, groups=None): """Write the current manifest out to the given file descriptor. """ mp = self.manifestProject @@ -389,6 +389,13 @@ https://gerrit.googlesource.com/git-repo/+/HEAD/docs/manifest-format.md # Only save the origin if the origin is not a sha1, and the default # isn't our value e.setAttribute('upstream', p.revisionExpr) + + if peg_rev_dest_branch: + if p.dest_branch: + e.setAttribute('dest-branch', p.dest_branch) + elif value != p.revisionExpr: + e.setAttribute('dest-branch', p.revisionExpr) + else: revision = self.remotes[p.remote.orig_name].revision or d.revisionExpr if not revision or revision != p.revisionExpr: diff --git a/subcmds/manifest.py b/subcmds/manifest.py index 399e241e..fb020d8c 100644 --- a/subcmds/manifest.py +++ b/subcmds/manifest.py @@ -38,7 +38,8 @@ The -r option can be used to generate a manifest file with project revisions set to the current commit hash. These are known as "revision locked manifests", as they don't follow a particular branch. In this case, the 'upstream' attribute is set to the ref we were on -when the manifest was generated. +when the manifest was generated. The 'dest-branch' attribute is set +to indicate the remote ref to push changes to via 'repo upload'. """ @property @@ -62,6 +63,11 @@ when the manifest was generated. help='If in -r mode, do not write the upstream field. ' 'Only of use if the branch names for a sha1 manifest are ' 'sensitive.') + p.add_option('--suppress-dest-branch', dest='peg_rev_dest_branch', + default=True, action='store_false', + help='If in -r mode, do not write the dest-branch field. ' + 'Only of use if the branch names for a sha1 manifest are ' + 'sensitive.') p.add_option('-o', '--output-file', dest='output_file', default='-', @@ -79,7 +85,8 @@ when the manifest was generated. fd = open(opt.output_file, 'w') self.manifest.Save(fd, peg_rev=opt.peg_rev, - peg_rev_upstream=opt.peg_rev_upstream) + peg_rev_upstream=opt.peg_rev_upstream, + peg_rev_dest_branch=opt.peg_rev_dest_branch) fd.close() if opt.output_file != '-': print('Saved manifest to %s' % opt.output_file, file=sys.stderr)