示例#1
0
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
示例#2
0
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
示例#3
0
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
示例#4
0
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)
示例#5
0
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)
示例#6
0
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
示例#7
0
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
示例#8
0
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
示例#9
0
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
示例#10
0
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