diff options
Diffstat (limited to 'subcmds/upload.py')
-rw-r--r-- | subcmds/upload.py | 78 |
1 files changed, 1 insertions, 77 deletions
diff --git a/subcmds/upload.py b/subcmds/upload.py index 153b3ebe..1964bffa 100644 --- a/subcmds/upload.py +++ b/subcmds/upload.py | |||
@@ -47,7 +47,7 @@ class Upload(InteractiveCommand): | |||
47 | common = True | 47 | common = True |
48 | helpSummary = "Upload changes for code review" | 48 | helpSummary = "Upload changes for code review" |
49 | helpUsage=""" | 49 | helpUsage=""" |
50 | %prog [--re --cc] {[<project>]... | --replace <project>} | 50 | %prog [--re --cc] [<project>]... |
51 | """ | 51 | """ |
52 | helpDescription = """ | 52 | helpDescription = """ |
53 | The '%prog' command is used to send changes to the Gerrit Code | 53 | The '%prog' command is used to send changes to the Gerrit Code |
@@ -67,12 +67,6 @@ added to the respective list of users, and emails are sent to any | |||
67 | new users. Users passed as --reviewers must already be registered | 67 | new users. Users passed as --reviewers must already be registered |
68 | with the code review system, or the upload will fail. | 68 | with the code review system, or the upload will fail. |
69 | 69 | ||
70 | If the --replace option is passed the user can designate which | ||
71 | existing change(s) in Gerrit match up to the commits in the branch | ||
72 | being uploaded. For each matched pair of change,commit the commit | ||
73 | will be added as a new patch set, completely replacing the set of | ||
74 | files and description associated with the change in Gerrit. | ||
75 | |||
76 | Configuration | 70 | Configuration |
77 | ------------- | 71 | ------------- |
78 | 72 | ||
@@ -119,9 +113,6 @@ Gerrit Code Review: http://code.google.com/p/gerrit/ | |||
119 | p.add_option('-t', | 113 | p.add_option('-t', |
120 | dest='auto_topic', action='store_true', | 114 | dest='auto_topic', action='store_true', |
121 | help='Send local branch name to Gerrit Code Review') | 115 | help='Send local branch name to Gerrit Code Review') |
122 | p.add_option('--replace', | ||
123 | dest='replace', action='store_true', | ||
124 | help='Upload replacement patchesets from this branch') | ||
125 | p.add_option('--re', '--reviewers', | 116 | p.add_option('--re', '--reviewers', |
126 | type='string', action='append', dest='reviewers', | 117 | type='string', action='append', dest='reviewers', |
127 | help='Request reviews from these people.') | 118 | help='Request reviews from these people.') |
@@ -262,65 +253,6 @@ Gerrit Code Review: http://code.google.com/p/gerrit/ | |||
262 | except: | 253 | except: |
263 | return "" | 254 | return "" |
264 | 255 | ||
265 | def _ReplaceBranch(self, opt, project, people): | ||
266 | branch = project.CurrentBranch | ||
267 | if not branch: | ||
268 | print >>sys.stdout, "no branches ready for upload" | ||
269 | return | ||
270 | branch = project.GetUploadableBranch(branch) | ||
271 | if not branch: | ||
272 | print >>sys.stdout, "no branches ready for upload" | ||
273 | return | ||
274 | |||
275 | script = [] | ||
276 | script.append('# Replacing from branch %s' % branch.name) | ||
277 | |||
278 | if len(branch.commits) == 1: | ||
279 | change = self._FindGerritChange(branch) | ||
280 | script.append('[%-6s] %s' % (change, branch.commits[0])) | ||
281 | else: | ||
282 | for commit in branch.commits: | ||
283 | script.append('[ ] %s' % commit) | ||
284 | |||
285 | script.append('') | ||
286 | script.append('# Insert change numbers in the brackets to add a new patch set.') | ||
287 | script.append('# To create a new change record, leave the brackets empty.') | ||
288 | |||
289 | script = Editor.EditString("\n".join(script)).split("\n") | ||
290 | |||
291 | change_re = re.compile(r'^\[\s*(\d{1,})\s*\]\s*([0-9a-f]{1,}) .*$') | ||
292 | to_replace = dict() | ||
293 | full_hashes = branch.unabbrev_commits | ||
294 | |||
295 | for line in script: | ||
296 | m = change_re.match(line) | ||
297 | if m: | ||
298 | c = m.group(1) | ||
299 | f = m.group(2) | ||
300 | try: | ||
301 | f = full_hashes[f] | ||
302 | except KeyError: | ||
303 | print 'fh = %s' % full_hashes | ||
304 | print >>sys.stderr, "error: commit %s not found" % f | ||
305 | sys.exit(1) | ||
306 | if c in to_replace: | ||
307 | print >>sys.stderr,\ | ||
308 | "error: change %s cannot accept multiple commits" % c | ||
309 | sys.exit(1) | ||
310 | to_replace[c] = f | ||
311 | |||
312 | if not to_replace: | ||
313 | print >>sys.stderr, "error: no replacements specified" | ||
314 | print >>sys.stderr, " use 'repo upload' without --replace" | ||
315 | sys.exit(1) | ||
316 | |||
317 | if len(branch.commits) > UNUSUAL_COMMIT_THRESHOLD: | ||
318 | if not _ConfirmManyUploads(multiple_branches=True): | ||
319 | _die("upload aborted by user") | ||
320 | |||
321 | branch.replace_changes = to_replace | ||
322 | self._UploadAndReport(opt, [branch], people) | ||
323 | |||
324 | def _UploadAndReport(self, opt, todo, original_people): | 256 | def _UploadAndReport(self, opt, todo, original_people): |
325 | have_errors = False | 257 | have_errors = False |
326 | for branch in todo: | 258 | for branch in todo: |
@@ -383,14 +315,6 @@ Gerrit Code Review: http://code.google.com/p/gerrit/ | |||
383 | cc = _SplitEmails(opt.cc) | 315 | cc = _SplitEmails(opt.cc) |
384 | people = (reviewers,cc) | 316 | people = (reviewers,cc) |
385 | 317 | ||
386 | if opt.replace: | ||
387 | if len(project_list) != 1: | ||
388 | print >>sys.stderr, \ | ||
389 | 'error: --replace requires exactly one project' | ||
390 | sys.exit(1) | ||
391 | self._ReplaceBranch(opt, project_list[0], people) | ||
392 | return | ||
393 | |||
394 | for project in project_list: | 318 | for project in project_list: |
395 | avail = project.GetUploadableBranches() | 319 | avail = project.GetUploadableBranches() |
396 | if avail: | 320 | if avail: |