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)
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"}
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