/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to breezy/plugins/propose/github.py

  • Committer: Breezy landing bot
  • Author(s): Jelmer Vernooij
  • Date: 2019-01-08 22:04:13 UTC
  • mfrom: (7233.3.7 my-proposals)
  • Revision ID: breezy.the.bot@gmail.com-20190108220413-jnk79i8o4wk0h52j
Add 'bzr my-proposals' command.

Merged from https://code.launchpad.net/~jelmer/brz/my-proposals/+merge/361363

Show diffs side-by-side

added added

removed removed

Lines of Context:
25
25
    MergeProposal,
26
26
    MergeProposalBuilder,
27
27
    MergeProposalExists,
28
 
    NoMergeProposal,
29
28
    PrerequisiteBranchUnsupported,
30
29
    UnsupportedHoster,
31
30
    )
105
104
    def url(self):
106
105
        return self._pr.html_url
107
106
 
 
107
    def _branch_from_part(self, part):
 
108
        return github_url_to_bzr_url(part.repo.html_url, part.ref)
 
109
 
 
110
    def get_source_branch_url(self):
 
111
        return self._branch_from_part(self._pr.head)
 
112
 
 
113
    def get_target_branch_url(self):
 
114
        return self._branch_from_part(self._pr.base)
 
115
 
108
116
    def get_description(self):
109
117
        return self._pr.body
110
118
 
136
144
 
137
145
class GitHub(Hoster):
138
146
 
 
147
    name = 'github'
 
148
 
139
149
    supports_merge_proposal_labels = True
140
150
 
141
151
    def __repr__(self):
205
215
    def get_proposer(self, source_branch, target_branch):
206
216
        return GitHubMergeProposalBuilder(self.gh, source_branch, target_branch)
207
217
 
208
 
    def get_proposal(self, source_branch, target_branch):
 
218
    def iter_proposals(self, source_branch, target_branch, status='open'):
209
219
        (source_owner, source_repo_name, source_branch_name) = (
210
220
            parse_github_url(source_branch))
211
221
        (target_owner, target_repo_name, target_branch_name) = (
212
222
            parse_github_url(target_branch))
213
 
        target_repo = self.gh.get_repo("%s/%s" % (target_owner, target_repo_name))
214
 
        for pull in target_repo.get_pulls(head=target_branch_name):
 
223
        target_repo = self.gh.get_repo(
 
224
            "%s/%s" % (target_owner, target_repo_name))
 
225
        state = {
 
226
            'open': 'open',
 
227
            'merged': 'closed',
 
228
            'closed': 'closed',
 
229
            'all': 'all'}
 
230
        for pull in target_repo.get_pulls(
 
231
                head=target_branch_name,
 
232
                state=state[status]):
 
233
            if (status == 'closed' and pull.merged or
 
234
                    status == 'merged' and not pull.merged):
 
235
                continue
215
236
            if pull.head.ref != source_branch_name:
216
237
                continue
217
238
            if (pull.head.repo.owner.login != source_owner or
218
239
                    pull.head.repo.name != source_repo_name):
219
240
                continue
220
 
            return GitHubMergeProposal(pull)
221
 
        raise NoMergeProposal()
 
241
            yield GitHubMergeProposal(pull)
222
242
 
223
243
    def hosts(self, branch):
224
244
        try:
236
256
            raise UnsupportedHoster(branch)
237
257
        return cls()
238
258
 
 
259
    @classmethod
 
260
    def iter_instances(cls):
 
261
        yield cls()
 
262
 
 
263
    def iter_my_proposals(self, status='open'):
 
264
        query = ['is:pr']
 
265
        if status == 'open':
 
266
            query.append('is:open')
 
267
        elif status == 'closed':
 
268
            # Note that we don't use is:closed here, since that also includes
 
269
            # merged pull requests.
 
270
            query.append('is:unmerged')
 
271
        elif status == 'merged':
 
272
            query.append('is:merged')
 
273
        query.append('author:%s' % self.gh.get_user().login)
 
274
        for issue in self.gh.search_issues(query=' '.join(query)):
 
275
            yield GitHubMergeProposal(issue.as_pull_request())
 
276
 
239
277
 
240
278
class GitHubMergeProposalBuilder(MergeProposalBuilder):
241
279