def go(repo_dir):
    with hglib.open(repo_dir) as hg:
        revs = repository.get_revs(hg, -1000, -500)
        commits = repository.hg_log(hg, revs)
        backouts = list(
            set(commit.backedoutby for commit in commits
                if commit.ever_backedout))
        backedouts = list(
            set(commit.node for commit in commits if commit.ever_backedout))

    likely_label_count = 0
    possible_label_count = 0
    likely_group_count = 0
    possible_group_count = 0

    backout_regressions = {}

    for backout in tqdm(backouts):
        p = Push(backout)

        label_regressions = p.get_regressions("label")
        likely_label_count += len(p.get_likely_regressions("label"))
        possible_label_count += len(p.get_possible_regressions("label"))

        group_regressions = p.get_regressions("group")
        likely_group_count += len(p.get_likely_regressions("label"))
        possible_group_count += len(p.get_possible_regressions("label"))

        if len(label_regressions) > 0 or len(group_regressions) > 0:
            backout_regressions[backout] = {
                "label": label_regressions,
                "group": group_regressions,
            }

    print(f"Likely labels for backouts: {likely_label_count}")
    print(f"Likely groups for backouts: {likely_group_count}")
    print(f"Possible labels for backouts: {possible_label_count}")
    print(f"Possible groups for backouts: {possible_group_count}")

    backedout_regressions = {}

    for backedout in tqdm(backedouts):
        p = Push(backedout)

        label_regressions = p.get_regressions("label")
        group_regressions = p.get_regressions("group")

        if (len(p.get_likely_regressions("label")) == 0
                or len(p.get_likely_regressions("group")) == 0):
            backedout_regressions[backedout] = {
                "label": label_regressions,
                "group": group_regressions,
            }

    with open("backout_regressions.json", "w") as f:
        json.dump(backout_regressions, f)

    with open("backedout_regressions.json", "w") as f:
        json.dump(backedout_regressions, f)
Beispiel #2
0
def test_hg_modified_files(fake_hg_repo):
    hg, local, remote = fake_hg_repo

    add_file(hg, local, "f1", "1\n2\n3\n4\n5\n6\n7\n")
    revision1 = commit(hg, date=datetime(1991, 4, 16, tzinfo=timezone.utc))

    add_file(hg, local, "f2", "1\n2\n3\n4\n5\n6\n7\n")
    revision2 = commit(hg, "Bug 123 - Prova. r=moz,rev2")

    hg.copy(
        bytes(os.path.join(local, "f2"), "ascii"),
        bytes(os.path.join(local, "f2copy"), "ascii"),
    )
    revision3 = commit(hg, "Copy")

    hg.move(
        bytes(os.path.join(local, "f2copy"), "ascii"),
        bytes(os.path.join(local, "f2copymove"), "ascii"),
    )
    revision4 = commit(hg, "Move")

    hg.push(dest=bytes(remote, "ascii"))
    revs = repository.get_revs(hg, revision1)
    commits = repository.hg_log(hg, revs)

    repository.path_to_component = {}

    for c in commits:
        repository.hg_modified_files(hg, c)

    assert commits[0].node == revision1
    assert commits[0].files == ["f1"]
    assert commits[0].file_copies == {}

    assert commits[1].node == revision2
    assert commits[1].files == ["f2"]
    assert commits[1].file_copies == {}

    assert commits[2].node == revision3
    assert commits[2].files == ["f2copy"]
    assert commits[2].file_copies == {"f2": "f2copy"}

    assert commits[3].node == revision4
    assert commits[3].files == ["f2copy", "f2copymove"]
    assert commits[3].file_copies == {"f2copy": "f2copymove"}
Beispiel #3
0
def test_hg_log(fake_hg_repo):
    hg, local, remote = fake_hg_repo

    add_file(hg, local, "file1", "1\n2\n3\n4\n5\n6\n7\n")
    revision1 = commit(hg, date=datetime(1991, 4, 16, tzinfo=timezone.utc))

    first_push_date = datetime.utcnow()
    hg.push(dest=bytes(remote, "ascii"))

    add_file(hg, local, "file2", "1\n2\n3\n4\n5\n6\n7\n")
    revision2 = commit(hg, "Bug 123 - Prova. r=moz,rev2")

    hg.copy(
        bytes(os.path.join(local, "file2"), "ascii"),
        bytes(os.path.join(local, "file2copy"), "ascii"),
    )
    revision3 = commit(hg)

    hg.move(
        bytes(os.path.join(local, "file2copy"), "ascii"),
        bytes(os.path.join(local, "file2copymove"), "ascii"),
    )
    revision4 = commit(hg)

    hg.backout(
        rev=revision4,
        message=f"Backout {revision4[:12]}",
        user="******",
        date=datetime(2019, 4, 16, tzinfo=timezone.utc),
    )
    revision5 = hg.log(limit=1)[0][1].decode("ascii")

    # Wait one second, to have a different pushdate.
    time.sleep(1)

    second_push_date = datetime.utcnow()
    hg.push(dest=bytes(remote, "ascii"))

    add_file(hg, local, "file3", "1\n2\n3\n4\n5\n6\n7\n")
    revision6 = commit(hg)

    copy_pushlog_database(remote, local)

    revs = repository.get_revs(hg)

    # Wait one second, to have a different pushdate.
    time.sleep(1)

    hg_log_date = datetime.utcnow()

    commits = repository.hg_log(hg, revs)
    assert len(commits) == 6, "hg log should return six commits"

    assert commits[0].node == revision1
    assert commits[0].author == "Moz Illa <*****@*****.**>"
    assert commits[0].desc == "Commit A file1"
    assert commits[0].date == datetime(1991, 4, 16)
    assert (first_push_date - relativedelta(seconds=1) <= commits[0].pushdate
            <= first_push_date + relativedelta(seconds=1))
    assert commits[0].bug_id is None
    assert commits[0].backedoutby == ""
    assert commits[0].author_email == "*****@*****.**"
    assert commits[0].reviewers == tuple()

    assert commits[1].node == revision2
    assert commits[1].author == "Moz Illa <*****@*****.**>"
    assert commits[1].desc == "Bug 123 - Prova. r=moz,rev2"
    assert commits[1].date == datetime(2019, 4, 16)
    assert (second_push_date - relativedelta(seconds=1) <= commits[1].pushdate
            <= second_push_date + relativedelta(seconds=1))
    assert commits[1].bug_id == 123
    assert commits[1].backedoutby == ""
    assert commits[1].author_email == "*****@*****.**"
    assert set(commits[1].reviewers) == {"moz", "rev2"}

    assert commits[2].node == revision3
    assert commits[2].author == "Moz Illa <*****@*****.**>"
    assert commits[2].desc == "Commit A file2copy"
    assert commits[2].date == datetime(2019, 4, 16)
    assert (second_push_date - relativedelta(seconds=1) <= commits[2].pushdate
            <= second_push_date + relativedelta(seconds=1))
    assert commits[2].bug_id is None
    assert commits[2].backedoutby == ""
    assert commits[2].author_email == "*****@*****.**"
    assert commits[2].reviewers == tuple()

    assert commits[3].node == revision4
    assert commits[3].author == "Moz Illa <*****@*****.**>"
    assert commits[3].desc == "Commit A file2copymove R file2copy"
    assert commits[3].date == datetime(2019, 4, 16)
    assert (second_push_date - relativedelta(seconds=1) <= commits[3].pushdate
            <= second_push_date + relativedelta(seconds=1))
    assert commits[3].bug_id is None
    assert commits[3].backedoutby == revision5
    assert commits[3].author_email == "*****@*****.**"
    assert commits[3].reviewers == tuple()

    assert commits[4].node == revision5
    assert commits[4].author == "sheriff"
    assert commits[4].desc == f"Backout {revision4[:12]}"
    assert commits[4].date == datetime(2019, 4, 16)
    assert (second_push_date - relativedelta(seconds=1) <= commits[4].pushdate
            <= second_push_date + relativedelta(seconds=1))
    assert commits[4].bug_id is None
    assert commits[4].backedoutby == ""
    assert commits[4].author_email == "sheriff"
    assert commits[4].reviewers == tuple()

    assert commits[5].node == revision6
    assert commits[5].author == "Moz Illa <*****@*****.**>"
    assert commits[5].desc == "Commit A file3"
    assert commits[5].date == datetime(2019, 4, 16)
    assert (hg_log_date - relativedelta(seconds=1) <= commits[5].pushdate <=
            hg_log_date + relativedelta(seconds=1))
    assert commits[5].bug_id is None
    assert commits[5].backedoutby == ""
    assert commits[5].author_email == "*****@*****.**"
    assert commits[5].reviewers == tuple()

    commits = repository.hg_log(hg, [revs[1], revs[3]])
    assert len(commits) == 3, "hg log should return three commits"
    assert commits[0].node == revision2
    assert commits[1].node == revision3
    assert commits[2].node == revision4