return set of PRs marked for backport
(labels=None, milestone=None, project='ipython/ipython')
| 124 | return set(int(num) for num in backport_re.findall(lines)) |
| 125 | |
| 126 | def should_backport(labels=None, milestone=None, project='ipython/ipython'): |
| 127 | """return set of PRs marked for backport""" |
| 128 | if labels is None and milestone is None: |
| 129 | raise ValueError("Specify one of labels or milestone.") |
| 130 | elif labels is not None and milestone is not None: |
| 131 | raise ValueError("Specify only one of labels or milestone.") |
| 132 | if labels is not None: |
| 133 | issues = get_issues_list(project, |
| 134 | labels=labels, |
| 135 | state='closed', |
| 136 | auth=True, |
| 137 | ) |
| 138 | else: |
| 139 | milestone_id = get_milestone_id(project, milestone, |
| 140 | auth=True) |
| 141 | issues = get_issues_list(project, |
| 142 | milestone=milestone_id, |
| 143 | state='closed', |
| 144 | auth=True, |
| 145 | ) |
| 146 | |
| 147 | should_backport = set() |
| 148 | for issue in issues: |
| 149 | if not is_pull_request(issue): |
| 150 | continue |
| 151 | pr = get_pull_request(project, issue['number'], |
| 152 | auth=True) |
| 153 | if not pr['merged']: |
| 154 | print ("Marked PR closed without merge: %i" % pr['number']) |
| 155 | continue |
| 156 | if pr['base']['ref'] != 'master': |
| 157 | continue |
| 158 | should_backport.add(pr['number']) |
| 159 | return should_backport |
| 160 | |
| 161 | if __name__ == '__main__': |
| 162 | project = 'ipython/ipython' |
no test coverage detected