146
147
proposal.source_branch, self.config)
150
approved = proposal.reviewed_revid
151
tip = proposal.source_branch.revision_count
153
raise UnapprovedChanges(
154
'Unapproved changes to branch after approval.')
149
156
self.logger.debug(
150
157
'Merging %(source)s at revision %(revision)s' % {
151
158
'source': proposal.source_branch.display_name,
152
159
'revision': proposal.reviewed_revid,})
155
163
str(proposal.reviewed_revid))
157
except BranchHasConflicts:
159
u"Conflicts merging %(source)s into %(target)s" % {
160
"source": proposal.source_branch.display_name,
161
"target": proposal.target_branch.display_name})
163
u'Attempt to merge %(source)s into %(target)s failed '
164
u'due to merge conflicts:\n\n%(output)s' % {
165
"source": proposal.source_branch.display_name,
166
"target": proposal.target_branch.display_name,
167
"output": target.conflicts})
165
except Exception, failure:
166
subject = u'Re: [Merge] %(source)s into %(target)s' % {
167
"source": proposal.source_branch.display_name,
168
"target": proposal.target_branch.display_name,}
170
if isinstance(BranchHasConflicts, failure):
172
u'Conflicts merging %(source)s into %(target)s' % {
173
"source": proposal.source_branch.display_name,
174
"target": proposal.target_branch.display_name})
176
u'Attempt to merge %(source)s into %(target)s '
177
u'failed due to merge conflicts:\n\n%(output)s' % {
178
"source": proposal.source_branch.display_name,
179
"target": proposal.target_branch.display_name,
180
"output": target.conflicts})
181
elif isinstance(PointlessMerge, failure):
183
'Merging %(source)s into %(target)s would be '
185
'source': proposal.source_branch.display_name,
186
'target': proposal.target_branch.display_name,})
188
u'There is no resulting diff between %(source)s '
189
u'and %(target)s.' % {
190
"source": proposal.source_branch.display_name,
191
"target": proposal.target_branch.display_name,})
192
elif isinstance(TipChangeRejected, failure):
193
comment = failure.msg
194
elif isinstance(UnapprovedChanges, failure):
196
u'Unapproved chagnes to %(source) were made '
197
u'after approval for merge into %(target).' % {
198
"source": proposal.source_branch.display_name,
199
"target": proposal.target_branch.display_name,})
201
u'There are additional revisions which have not '
202
u'been approved in review. Please seek review and '
203
u'approval of these revisions as well.')
168
207
proposal.createComment(subject=subject, content=comment)
169
proposal.setStatus(status=u"Needs review")
208
proposal.setStatus(status=u'Needs review')
170
209
proposal.lp_save()
171
210
self.logger.warn(
172
211
'Conflicts found while merging %(source)s into '
179
except PointlessMerge:
181
'Merging %(source)s into %(target)s would be '
183
'source': proposal.source_branch.display_name,
184
'target': proposal.target_branch.display_name,})
187
u"Pointless merge" % {
188
"source": proposal.source_branch.display_name,
189
"target": proposal.target_branch.display_name})
191
u'There is no resulting diff between %(source)s '
192
u'and %(target)s.' % {
193
"source": proposal.source_branch.display_name,
194
"target": proposal.target_branch.display_name,})
195
proposal.createComment(subject=subject, content=comment)
196
proposal.setStatus(status=u"Needs review")
202
218
urlp = re.compile('http[s]?://api\.(.*)launchpad\.net/beta/')
203
219
merge_url = urlp.sub(
204
220
'http://launchpad.net/', proposal.self_link)