Show More
@@ -32,6 +32,7 b' from gh_api import (' | |||
|
32 | 32 | get_pull_request, |
|
33 | 33 | get_pull_request_files, |
|
34 | 34 | is_pull_request, |
|
35 | get_milestone_id, | |
|
35 | 36 | ) |
|
36 | 37 | |
|
37 | 38 | def find_rejects(root='.'): |
@@ -107,18 +108,33 b' def already_backported(branch, since_tag=None):' | |||
|
107 | 108 | lines = check_output(cmd).decode('utf8') |
|
108 | 109 | return set(int(num) for num in backport_re.findall(lines)) |
|
109 | 110 | |
|
110 | def should_backport(labels): | |
|
111 | def should_backport(labels=None, milestone=None): | |
|
111 | 112 | """return set of PRs marked for backport""" |
|
113 | if labels is None and milestone is None: | |
|
114 | raise ValueError("Specify one of labels or milestone.") | |
|
115 | elif labels is not None and milestone is not None: | |
|
116 | raise ValueError("Specify only one of labels or milestone.") | |
|
117 | if labels is not None: | |
|
112 | 118 | issues = get_issues_list("ipython/ipython", |
|
113 | 119 | labels=labels, |
|
114 | 120 | state='closed', |
|
115 | 121 | auth=True, |
|
116 | 122 | ) |
|
123 | else: | |
|
124 | milestone_id = get_milestone_id("ipython/ipython", milestone, | |
|
125 | auth=True) | |
|
126 | issues = get_issues_list("ipython/ipython", | |
|
127 | milestone=milestone_id, | |
|
128 | state='closed', | |
|
129 | auth=True, | |
|
130 | ) | |
|
131 | ||
|
117 | 132 | should_backport = set() |
|
118 | 133 | for issue in issues: |
|
119 | 134 | if not is_pull_request(issue): |
|
120 | 135 | continue |
|
121 |
pr = get_pull_request("ipython/ipython", issue['number'], |
|
|
136 | pr = get_pull_request("ipython/ipython", issue['number'], | |
|
137 | auth=True) | |
|
122 | 138 | if not pr['merged']: |
|
123 | 139 | print ("Marked PR closed without merge: %i" % pr['number']) |
|
124 | 140 | continue |
@@ -156,6 +156,23 b' def get_issues_list(project, auth=False, **params):' | |||
|
156 | 156 | pages = get_paged_request(url, headers=headers, **params) |
|
157 | 157 | return pages |
|
158 | 158 | |
|
159 | def get_milestones(project, auth=False, **params): | |
|
160 | url = "https://api.github.com/repos/{project}/milestones".format(project=project) | |
|
161 | if auth: | |
|
162 | headers = make_auth_header() | |
|
163 | else: | |
|
164 | headers = None | |
|
165 | pages = get_paged_request(url, headers=headers, **params) | |
|
166 | return pages | |
|
167 | ||
|
168 | def get_milestone_id(project, milestone, auth=False, **params): | |
|
169 | pages = get_milestones(project, auth=auth, **params) | |
|
170 | for page in pages: | |
|
171 | if page['title'] == milestone: | |
|
172 | return page['number'] | |
|
173 | else: | |
|
174 | raise ValueError("milestone %s not found" % milestone) | |
|
175 | ||
|
159 | 176 | def is_pull_request(issue): |
|
160 | 177 | """Return True if the given issue is a pull request.""" |
|
161 | 178 | return bool(issue.get('pull_request', {}).get('html_url', None)) |
General Comments 0
You need to be logged in to leave comments.
Login now