From cc879a97c3e2614d19b15b4661c3cab4d33139c9 Mon Sep 17 00:00:00 2001 From: LaMont Jones Date: Thu, 18 Nov 2021 22:40:18 +0000 Subject: Add multi-manifest support with element To be addressed in another change: - a partial `repo sync` (with a list of projects/paths to sync) requires `--this-tree-only`. Change-Id: I6c7400bf001540e9d7694fa70934f8f204cb5f57 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/322657 Tested-by: LaMont Jones Reviewed-by: Mike Frysinger --- subcmds/upload.py | 44 +++++++++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 17 deletions(-) (limited to 'subcmds/upload.py') diff --git a/subcmds/upload.py b/subcmds/upload.py index c48deab6..ef3d8e9d 100644 --- a/subcmds/upload.py +++ b/subcmds/upload.py @@ -226,7 +226,8 @@ Gerrit Code Review: https://www.gerritcodereview.com/ destination = opt.dest_branch or project.dest_branch or project.revisionExpr print('Upload project %s/ to remote branch %s%s:' % - (project.relpath, destination, ' (private)' if opt.private else '')) + (project.RelPath(local=opt.this_manifest_only), destination, + ' (private)' if opt.private else '')) print(' branch %s (%2d commit%s, %s):' % ( name, len(commit_list), @@ -262,7 +263,7 @@ Gerrit Code Review: https://www.gerritcodereview.com/ script.append('# Uncomment the branches to upload:') for project, avail in pending: script.append('#') - script.append('# project %s/:' % project.relpath) + script.append('# project %s/:' % project.RelPath(local=opt.this_manifest_only)) b = {} for branch in avail: @@ -285,7 +286,7 @@ Gerrit Code Review: https://www.gerritcodereview.com/ script.append('# %s' % commit) b[name] = branch - projects[project.relpath] = project + projects[project.RelPath(local=opt.this_manifest_only)] = project branches[project.name] = b script.append('') @@ -313,7 +314,7 @@ Gerrit Code Review: https://www.gerritcodereview.com/ _die('project for branch %s not in script', name) branch = branches[project.name].get(name) if not branch: - _die('branch %s not in %s', name, project.relpath) + _die('branch %s not in %s', name, project.RelPath(local=opt.this_manifest_only)) todo.append(branch) if not todo: _die("nothing uncommented for upload") @@ -481,7 +482,7 @@ Gerrit Code Review: https://www.gerritcodereview.com/ else: fmt = '\n (%s)' print(('[FAILED] %-15s %-15s' + fmt) % ( - branch.project.relpath + '/', + branch.project.RelPath(local=opt.this_manifest_only) + '/', branch.name, str(branch.error)), file=sys.stderr) @@ -490,7 +491,7 @@ Gerrit Code Review: https://www.gerritcodereview.com/ for branch in todo: if branch.uploaded: print('[OK ] %-15s %s' % ( - branch.project.relpath + '/', + branch.project.RelPath(local=opt.this_manifest_only) + '/', branch.name), file=sys.stderr) @@ -524,7 +525,7 @@ Gerrit Code Review: https://www.gerritcodereview.com/ return (project, avail) def Execute(self, opt, args): - projects = self.GetProjects(args) + projects = self.GetProjects(args, all_manifests=not opt.this_manifest_only) def _ProcessResults(_pool, _out, results): pending = [] @@ -534,7 +535,8 @@ Gerrit Code Review: https://www.gerritcodereview.com/ print('repo: error: %s: Unable to upload branch "%s". ' 'You might be able to fix the branch by running:\n' ' git branch --set-upstream-to m/%s' % - (project.relpath, project.CurrentBranch, self.manifest.branch), + (project.RelPath(local=opt.this_manifest_only), project.CurrentBranch, + project.manifest.branch), file=sys.stderr) elif avail: pending.append(result) @@ -554,15 +556,23 @@ Gerrit Code Review: https://www.gerritcodereview.com/ (opt.branch,), file=sys.stderr) return 1 - pending_proj_names = [project.name for (project, available) in pending] - pending_worktrees = [project.worktree for (project, available) in pending] - hook = RepoHook.FromSubcmd( - hook_type='pre-upload', manifest=self.manifest, - opt=opt, abort_if_user_denies=True) - if not hook.Run( - project_list=pending_proj_names, - worktree_list=pending_worktrees): - return 1 + manifests = {project.manifest.topdir: project.manifest + for (project, available) in pending} + ret = 0 + for manifest in manifests.values(): + pending_proj_names = [project.name for (project, available) in pending + if project.manifest.topdir == manifest.topdir] + pending_worktrees = [project.worktree for (project, available) in pending + if project.manifest.topdir == manifest.topdir] + hook = RepoHook.FromSubcmd( + hook_type='pre-upload', manifest=manifest, + opt=opt, abort_if_user_denies=True) + if not hook.Run( + project_list=pending_proj_names, + worktree_list=pending_worktrees): + ret = 1 + if ret: + return ret reviewers = _SplitEmails(opt.reviewers) if opt.reviewers else [] cc = _SplitEmails(opt.cc) if opt.cc else [] -- cgit v1.2.3-54-g00ecf