summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--project.py17
-rw-r--r--subcmds/upload.py21
2 files changed, 25 insertions, 13 deletions
diff --git a/project.py b/project.py
index 4e8fa0e0..1b5d9a67 100644
--- a/project.py
+++ b/project.py
@@ -149,10 +149,11 @@ class ReviewableBranch(object):
149 R_HEADS + self.name, 149 R_HEADS + self.name,
150 '--') 150 '--')
151 151
152 def UploadForReview(self, people): 152 def UploadForReview(self, people, auto_topic=False):
153 self.project.UploadForReview(self.name, 153 self.project.UploadForReview(self.name,
154 self.replace_changes, 154 self.replace_changes,
155 people) 155 people,
156 auto_topic=auto_topic)
156 157
157 def GetPublishedRefs(self): 158 def GetPublishedRefs(self):
158 refs = {} 159 refs = {}
@@ -555,7 +556,10 @@ class Project(object):
555 return rb 556 return rb
556 return None 557 return None
557 558
558 def UploadForReview(self, branch=None, replace_changes=None, people=([],[])): 559 def UploadForReview(self, branch=None,
560 replace_changes=None,
561 people=([],[]),
562 auto_topic=False):
559 """Uploads the named branch for code review. 563 """Uploads the named branch for code review.
560 """ 564 """
561 if branch is None: 565 if branch is None:
@@ -587,10 +591,15 @@ class Project(object):
587 for e in people[1]: 591 for e in people[1]:
588 rp.append('--cc=%s' % sq(e)) 592 rp.append('--cc=%s' % sq(e))
589 593
594 ref_spec = '%s:refs/for/%s' % (R_HEADS + branch.name, dest_branch)
595 if auto_topic:
596 ref_spec = ref_spec + '/' + branch.name
597
590 cmd = ['push'] 598 cmd = ['push']
591 cmd.append('--receive-pack=%s' % " ".join(rp)) 599 cmd.append('--receive-pack=%s' % " ".join(rp))
592 cmd.append(branch.remote.SshReviewUrl(self.UserEmail)) 600 cmd.append(branch.remote.SshReviewUrl(self.UserEmail))
593 cmd.append('%s:refs/for/%s' % (R_HEADS + branch.name, dest_branch)) 601 cmd.append(ref_spec)
602
594 if replace_changes: 603 if replace_changes:
595 for change_id,commit_id in replace_changes.iteritems(): 604 for change_id,commit_id in replace_changes.iteritems():
596 cmd.append('%s:refs/changes/%s/new' % (commit_id, change_id)) 605 cmd.append('%s:refs/changes/%s/new' % (commit_id, change_id))
diff --git a/subcmds/upload.py b/subcmds/upload.py
index 5a426113..569e31c1 100644
--- a/subcmds/upload.py
+++ b/subcmds/upload.py
@@ -111,6 +111,9 @@ Gerrit Code Review: http://code.google.com/p/gerrit/
111""" 111"""
112 112
113 def _Options(self, p): 113 def _Options(self, p):
114 p.add_option('-t',
115 dest='auto_topic', action='store_true',
116 help='Send local branch name to Gerrit Code Review')
114 p.add_option('--replace', 117 p.add_option('--replace',
115 dest='replace', action='store_true', 118 dest='replace', action='store_true',
116 help='Upload replacement patchesets from this branch') 119 help='Upload replacement patchesets from this branch')
@@ -121,7 +124,7 @@ Gerrit Code Review: http://code.google.com/p/gerrit/
121 type='string', action='append', dest='cc', 124 type='string', action='append', dest='cc',
122 help='Also send email to these email addresses.') 125 help='Also send email to these email addresses.')
123 126
124 def _SingleBranch(self, branch, people): 127 def _SingleBranch(self, opt, branch, people):
125 project = branch.project 128 project = branch.project
126 name = branch.name 129 name = branch.name
127 remote = project.GetBranch(name).remote 130 remote = project.GetBranch(name).remote
@@ -154,11 +157,11 @@ Gerrit Code Review: http://code.google.com/p/gerrit/
154 answer = _ConfirmManyUploads() 157 answer = _ConfirmManyUploads()
155 158
156 if answer: 159 if answer:
157 self._UploadAndReport([branch], people) 160 self._UploadAndReport(opt, [branch], people)
158 else: 161 else:
159 _die("upload aborted by user") 162 _die("upload aborted by user")
160 163
161 def _MultipleBranches(self, pending, people): 164 def _MultipleBranches(self, opt, pending, people):
162 projects = {} 165 projects = {}
163 branches = {} 166 branches = {}
164 167
@@ -227,7 +230,7 @@ Gerrit Code Review: http://code.google.com/p/gerrit/
227 if not _ConfirmManyUploads(multiple_branches=True): 230 if not _ConfirmManyUploads(multiple_branches=True):
228 _die("upload aborted by user") 231 _die("upload aborted by user")
229 232
230 self._UploadAndReport(todo, people) 233 self._UploadAndReport(opt, todo, people)
231 234
232 def _AppendAutoCcList(self, branch, people): 235 def _AppendAutoCcList(self, branch, people):
233 """ 236 """
@@ -311,9 +314,9 @@ Gerrit Code Review: http://code.google.com/p/gerrit/
311 _die("upload aborted by user") 314 _die("upload aborted by user")
312 315
313 branch.replace_changes = to_replace 316 branch.replace_changes = to_replace
314 self._UploadAndReport([branch], people) 317 self._UploadAndReport(opt, [branch], people)
315 318
316 def _UploadAndReport(self, todo, original_people): 319 def _UploadAndReport(self, opt, todo, original_people):
317 have_errors = False 320 have_errors = False
318 for branch in todo: 321 for branch in todo:
319 try: 322 try:
@@ -335,7 +338,7 @@ Gerrit Code Review: http://code.google.com/p/gerrit/
335 branch.error = 'User aborted' 338 branch.error = 'User aborted'
336 continue 339 continue
337 340
338 branch.UploadForReview(people) 341 branch.UploadForReview(people, auto_topic=opt.auto_topic)
339 branch.uploaded = True 342 branch.uploaded = True
340 except UploadError, e: 343 except UploadError, e:
341 branch.error = e 344 branch.error = e
@@ -391,6 +394,6 @@ Gerrit Code Review: http://code.google.com/p/gerrit/
391 if not pending: 394 if not pending:
392 print >>sys.stdout, "no branches ready for upload" 395 print >>sys.stdout, "no branches ready for upload"
393 elif len(pending) == 1 and len(pending[0][1]) == 1: 396 elif len(pending) == 1 and len(pending[0][1]) == 1:
394 self._SingleBranch(pending[0][1][0], people) 397 self._SingleBranch(opt, pending[0][1][0], people)
395 else: 398 else:
396 self._MultipleBranches(pending, people) 399 self._MultipleBranches(opt, pending, people)