Пример #1
0
def list_commits(codecov_token, maximum=None, unique=None, skip_commits=[]):
    """
    List all the commits ingested on codecov
    """
    assert unique in (None, "week", "day")
    params = {"access_token": codecov_token, "page": 1}
    nb = 0
    dates = set()
    while True:
        resp = requests.get(CODECOV_URL, params=params)
        resp.raise_for_status()
        data = resp.json()

        if not data["commits"]:
            return

        for commit in data["commits"]:

            # Skip commit if that day or week has already been processed earlier
            day = datetime.strptime(commit["timestamp"], "%Y-%m-%d %H:%M:%S").date()
            week = day.isocalendar()[:2]
            if unique == "day" and day in dates:
                continue
            if unique == "week" and week in dates:
                continue
            dates.add(day)
            dates.add(week)

            # Convert git to mercurial revision
            commit["mercurial"] = git_to_mercurial(commit["commitid"])
            if commit["mercurial"] in skip_commits:
                print(
                    "Skipping already processed commit {}".format(commit["mercurial"])
                )
                continue

            yield commit
            nb += 1

            if maximum is not None and nb >= maximum:
                return

        params["page"] += 1
Пример #2
0
    def find_bic(bug_fixing_commit):
        logger.info("Analyzing {}...".format(bug_fixing_commit["git_rev"]))

        commit = GIT_REPO.get_commit(bug_fixing_commit["git_rev"])

        # Skip huge changes, we'll likely be wrong with them.
        if len(commit.modifications) > MAX_MODIFICATION_NUMBER:
            return [None]

        bug_introducing_modifications = GIT_REPO.get_commits_last_modified_lines(
            commit, hashes_to_ignore_path=os.path.realpath("git_hashes_to_ignore")
        )
        logger.info(bug_introducing_modifications)

        bug_introducing_commits = []
        for bug_introducing_hashes in bug_introducing_modifications.values():
            for bug_introducing_hash in bug_introducing_hashes:
                bug_introducing_commits.append(
                    {
                        "bug_fixing_mercurial_rev": bug_fixing_commit["mercurial_rev"],
                        "bug_fixing_git_rev": bug_fixing_commit["git_rev"],
                        "bug_introducing_mercurial_rev": vcs_map.git_to_mercurial(
                            bug_introducing_hash
                        ),
                        "bug_introducing_git_rev": bug_introducing_hash,
                    }
                )

        # Add an empty result, just so that we don't reanalyze this again.
        if len(bug_introducing_commits) == 0:
            bug_introducing_commits.append(
                {
                    "bug_fixing_mercurial_rev": bug_fixing_commit["mercurial_rev"],
                    "bug_fixing_git_rev": bug_fixing_commit["git_rev"],
                    "bug_introducing_mercurial_rev": "",
                    "bug_introducing_git_rev": "",
                }
            )

        return bug_introducing_commits
Пример #3
0
 def git_to_mercurial(rev):
     if tokenized:
         return self.tokenized_git_to_mercurial[rev]
     else:
         return vcs_map.git_to_mercurial(rev)
Пример #4
0
 def git_to_mercurial(revs):
     if tokenized:
         return (self.tokenized_git_to_mercurial[rev] for rev in revs)
     else:
         yield from vcs_map.git_to_mercurial(repo_dir, revs)