def issues_closed_since( period=timedelta(days=365), project="matplotlib/matplotlib", pulls=False): """Get all issues closed since a particular point in time. period can either be a datetime object, or a timedelta object. In the latter case, it is used as a time before the present. """ which = 'pulls' if pulls else 'issues' if isinstance(period, timedelta): since = round_hour(datetime.utcnow() - period) else: since = period url = "https://api.github.com/repos/%s/%s?state=closed&sort=updated&since=%s&per_page=%i" % ( project, which, since.strftime(ISO8601), PER_PAGE) allclosed = get_paged_request(url, headers=make_auth_header()) filtered = [ i for i in allclosed if _parse_datetime(i['closed_at']) > since ] if pulls: filtered = [ i for i in filtered if _parse_datetime(i['merged_at']) > since ] # filter out PRs not against master (backports) filtered = [i for i in filtered if i['base']['ref'] == 'master'] else: filtered = [i for i in filtered if not is_pull_request(i)] return filtered
def issues_closed_since(period=timedelta(days=365), project="ipython/ipython", pulls=False): """Get all issues closed since a particular point in time. period can either be a datetime object, or a timedelta object. In the latter case, it is used as a time before the present. """ which = "pulls" if pulls else "issues" if isinstance(period, timedelta): since = round_hour(datetime.utcnow() - period) else: since = period url = "https://api.github.com/repos/%s/%s?state=closed&sort=updated&since=%s&per_page=%i" % ( project, which, since.strftime(ISO8601), PER_PAGE, ) allclosed = get_paged_request(url, headers=make_auth_header()) filtered = [i for i in allclosed if _parse_datetime(i["closed_at"]) > since] if pulls: filtered = [i for i in filtered if _parse_datetime(i["merged_at"]) > since] # filter out PRs not against master (backports) filtered = [i for i in filtered if i["base"]["ref"] == "master"] else: filtered = [i for i in filtered if not is_pull_request(i)] return filtered
def should_backport(labels=None, milestone=None): """return set of PRs marked for backport""" if labels is None and milestone is None: raise ValueError("Specify one of labels or milestone.") elif labels is not None and milestone is not None: raise ValueError("Specify only one of labels or milestone.") if labels is not None: issues = get_issues_list("ipython/ipython", labels=labels, state='closed', auth=True, ) else: milestone_id = get_milestone_id("ipython/ipython", milestone, auth=True) issues = get_issues_list("ipython/ipython", milestone=milestone_id, state='closed', auth=True, ) should_backport = set() for issue in issues: if not is_pull_request(issue): continue pr = get_pull_request("ipython/ipython", issue['number'], auth=True) if not pr['merged']: print ("Marked PR closed without merge: %i" % pr['number']) continue should_backport.add(pr['number']) return should_backport
def should_backport(labels=None, milestone=None): """return set of PRs marked for backport""" if labels is None and milestone is None: raise ValueError("Specify one of labels or milestone.") elif labels is not None and milestone is not None: raise ValueError("Specify only one of labels or milestone.") if labels is not None: issues = get_issues_list("statsmodels/statsmodels", labels=labels, state='closed', auth=True, ) else: milestone_id = get_milestone_id("statsmodels/statsmodels", milestone, auth=True) issues = get_issues_list("statsmodels/statsmodels", milestone=milestone_id, state='closed', auth=True, ) should_backport = [] merged_dates = [] for issue in issues: if not is_pull_request(issue): continue pr = get_pull_request("statsmodels/statsmodels", issue['number'], auth=True) if not pr['merged']: print ("Marked PR closed without merge: %i" % pr['number']) continue if pr['number'] not in should_backport: merged_dates.append(pr['merged_at']) should_backport.append(pr['number']) return Series(merged_dates, index=should_backport)
def should_backport(labels=None, milestone=None): """return set of PRs marked for backport""" if labels is None and milestone is None: raise ValueError("Specify one of labels or milestone.") elif labels is not None and milestone is not None: raise ValueError("Specify only one of labels or milestone.") if labels is not None: issues = get_issues_list("statsmodels/statsmodels", labels=labels, state='closed', auth=True) else: milestone_id = get_milestone_id("statsmodels/statsmodels", milestone, auth=True) issues = get_issues_list("statsmodels/statsmodels", milestone=milestone_id, state='closed', auth=True) should_backport = [] merged_dates = [] for issue in issues: if not is_pull_request(issue): continue pr = get_pull_request("statsmodels/statsmodels", issue['number'], auth=True) if not pr['merged']: print("Marked PR closed without merge: %i" % pr['number']) continue if pr['number'] not in should_backport: merged_dates.append(pr['merged_at']) should_backport.append(pr['number']) return Series(merged_dates, index=should_backport)
def should_backport(labels=None, milestone=None, project="ipython/ipython"): """return set of PRs marked for backport""" if labels is None and milestone is None: raise ValueError("Specify one of labels or milestone.") elif labels is not None and milestone is not None: raise ValueError("Specify only one of labels or milestone.") if labels is not None: issues = get_issues_list(project, labels=labels, state="closed", auth=True) else: milestone_id = get_milestone_id(project, milestone, auth=True) issues = get_issues_list(project, milestone=milestone_id, state="closed", auth=True) should_backport = set() for issue in issues: if not is_pull_request(issue): continue pr = get_pull_request(project, issue["number"], auth=True) if not pr["merged"]: print("Marked PR closed without merge: %i" % pr["number"]) continue if pr["base"]["ref"] != "master": continue should_backport.add(pr["number"]) return should_backport
def split_pulls(all_issues, project="matplotlib/matplotlib"): """split a list of closed issues into non-PR Issues and Pull Requests""" pulls = [] issues = [] for i in all_issues: if is_pull_request(i): pull = get_pull_request(project, i['number'], auth=True) pulls.append(pull) else: issues.append(i) return issues, pulls
def split_pulls(all_issues, project="ipython/ipython"): """split a list of closed issues into non-PR Issues and Pull Requests""" pulls = [] issues = [] for i in all_issues: if is_pull_request(i): pull = get_pull_request(project, i['number'], auth=True) pulls.append(pull) else: issues.append(i) return issues, pulls
def should_backport(labels): """return set of PRs marked for backport""" issues = get_issues_list("ipython/ipython", labels=labels, state='closed', auth=True, ) should_backport = set() for issue in issues: if not is_pull_request(issue): continue pr = get_pull_request("ipython/ipython", issue['number'], auth=True) if not pr['merged']: print ("Marked PR closed without merge: %i" % pr['number']) continue should_backport.add(pr['number']) return should_backport
def should_backport(labels): """return set of PRs marked for backport""" issues = get_issues_list( "ipython/ipython", labels=labels, state='closed', auth=True, ) should_backport = set() for issue in issues: if not is_pull_request(issue): continue pr = get_pull_request("ipython/ipython", issue['number'], auth=True) if not pr['merged']: print("Marked PR closed without merge: %i" % pr['number']) continue should_backport.add(pr['number']) return should_backport