コード例 #1
0
ファイル: test_trymerge.py プロジェクト: yuguo68/pytorch
    def test_get_author_null(self, mocked_gql: Any) -> None:
        """ Tests that PR author can be computed
            If reply contains NULL
        """
        pr = GitHubPR("pytorch", "pytorch", 71759)
        author = pr.get_author()
        self.assertTrue(author is not None)
        self.assertTrue("@" in author)
        self.assertTrue(pr.get_diff_revision() is None)

        # PR with multiple contributors, but creator id is not among authors
        pr = GitHubPR("pytorch", "pytorch", 75095)
        self.assertEqual(pr.get_pr_creator_login(), "mruberry")
        author = pr.get_author()
        self.assertTrue(author is not None)
コード例 #2
0
ファイル: test_trymerge.py プロジェクト: yuguo68/pytorch
 def test_get_last_comment(self, mocked_gql: Any) -> None:
     "Tests that last comment can be fetched"
     pr = GitHubPR("pytorch", "pytorch", 71759)
     comment = pr.get_last_comment()
     self.assertEqual(comment.author_login, "github-actions")
     self.assertIsNone(comment.editor_login)
     self.assertTrue("You've committed this PR" in comment.body_text)
コード例 #3
0
ファイル: test_trymerge.py プロジェクト: mikekgfb/pytorch
 def test_cancelled_gets_ignored(self, mocked_gql: Any) -> None:
     """ Tests that cancelled workflow does not override existing successfull status
     """
     pr = GitHubPR("pytorch", "pytorch", 82169)
     conclusions = pr.get_checkrun_conclusions()
     self.assertTrue("Lint" in conclusions.keys())
     self.assertEqual(conclusions["Lint"][0], "SUCCESS")
コード例 #4
0
def main() -> None:
    args = parse_args()
    repo = GitRepo(get_git_repo_dir(), get_git_remote_name(), debug=True)
    org, project = repo.gh_owner_and_name()

    pr = GitHubPR(org, project, args.pr_num)
    onto_branch = args.branch if args.branch else pr.default_branch()

    msg = "@pytorchbot successfully started a rebase job."
    msg += f" Check the current status [here]({os.getenv('GH_RUN_URL')})"
    gh_post_comment(org, project, args.pr_num, msg, dry_run=args.dry_run)

    if pr.is_closed():
        gh_post_comment(org,
                        project,
                        args.pr_num,
                        f"PR #{args.pr_num} is closed, won't rebase",
                        dry_run=args.dry_run)
        return

    try:
        if pr.is_ghstack_pr():
            rebase_ghstack_onto(pr, repo, onto_branch, dry_run=args.dry_run)
            return
        rebase_onto(pr, repo, onto_branch, dry_run=args.dry_run)
    except Exception as e:
        msg = f"Rebase failed due to {e}"
        run_url = os.getenv("GH_RUN_URL")
        if run_url is not None:
            msg += f"\nRaised by {run_url}"
        gh_post_comment(org, project, args.pr_num, msg, dry_run=args.dry_run)
コード例 #5
0
ファイル: test_trymerge.py プロジェクト: mikekgfb/pytorch
 def test_get_checkruns_many_runs(self, mocked_gql: Any) -> None:
     """ Tests that all checkruns can be fetched
     """
     pr = GitHubPR("pytorch", "pytorch", 77700)
     conclusions = pr.get_checkrun_conclusions()
     self.assertEqual(len(conclusions), 83)
     self.assertTrue("pull / linux-docs / build-docs (cpp)" in conclusions.keys())
コード例 #6
0
def main() -> None:
    args = parse_args()
    repo = GitRepo(get_git_repo_dir(), get_git_remote_name(), debug=True)
    org, project = repo.gh_owner_and_name()

    pr = GitHubPR(org, project, args.pr_num)

    if pr.is_closed():
        gh_post_comment(org,
                        project,
                        args.pr_num,
                        f"PR #{args.pr_num} is closed, won't rebase",
                        dry_run=args.dry_run)
        return

    try:
        if pr.is_ghstack_pr():
            rebase_ghstack_onto(pr,
                                repo,
                                dry_run=args.dry_run,
                                stable=args.stable)
            return
        rebase_onto(pr, repo, dry_run=args.dry_run, stable=args.stable)
    except Exception as e:
        msg = f"Rebase failed due to {e}"
        run_url = os.getenv("GH_RUN_URL")
        if run_url is not None:
            msg += f"\nRaised by {run_url}"
        gh_post_comment(org, project, args.pr_num, msg, dry_run=args.dry_run)
コード例 #7
0
ファイル: test_trymerge.py プロジェクト: yuguo68/pytorch
 def test_get_author_many_commits(self, mocked_gql: Any) -> None:
     """ Tests that authors for all commits can be fetched
     """
     pr = GitHubPR("pytorch", "pytorch", 76118)
     authors = pr.get_authors()
     self.assertGreater(pr.get_commit_count(), 100)
     self.assertGreater(len(authors), 50)
     self.assertTrue("@" in pr.get_author())
コード例 #8
0
ファイル: test_trymerge.py プロジェクト: yuguo68/pytorch
 def test_gql_complexity(self, mocked_gql: Any) -> None:
     "Fetch comments and conclusions for PR with 60 commits"
     # Previous version of GrapQL query used to cause HTTP/502 error
     # see https://gist.github.com/malfet/9b93bc7eeddeaf1d84546efc4f0c577f
     pr = GitHubPR("pytorch", "pytorch", 68111)
     self.assertGreater(len(pr.get_comments()), 20)
     self.assertGreater(len(pr.get_checkrun_conclusions()), 3)
     self.assertGreater(pr.get_commit_count(), 60)
コード例 #9
0
ファイル: test_trymerge.py プロジェクト: hlu1/pytorch
 def test_get_author_null(self, mocked_gql: Any) -> None:
     """ Tests that PR author can be computed
         If reply contains NULL
     """
     pr = GitHubPR("pytorch", "pytorch", 71759)
     author = pr.get_author()
     self.assertTrue(author is not None)
     self.assertTrue("@" in author)
コード例 #10
0
ファイル: test_trymerge.py プロジェクト: mikekgfb/pytorch
 def test_pending_status_check(self, mocked_gql: Any, mocked_read_merge_rules: Any) -> None:
     """ Tests that PR with nonexistent/pending status checks fails with the right reason.
     """
     pr = GitHubPR("pytorch", "pytorch", 76118)
     repo = GitRepo(get_git_repo_dir(), get_git_remote_name())
     self.assertRaisesRegex(MandatoryChecksMissingError,
                            ".*are pending/not yet run.*",
                            lambda: find_matching_merge_rule(pr, repo))
コード例 #11
0
ファイル: test_trymerge.py プロジェクト: yuguo68/pytorch
 def test_get_author_many_reviews(self, mocked_gql: Any) -> None:
     """ Tests that all reviews can be fetched
     """
     pr = GitHubPR("pytorch", "pytorch", 76123)
     approved_by = pr.get_approved_by()
     self.assertGreater(len(approved_by), 0)
     assert pr._reviews is not None  # to pacify mypy
     self.assertGreater(len(pr._reviews), 100)
コード例 #12
0
 def test_rebase(self, mocked_post_comment: Any, mocked_run_git: Any,
                 mocked_gql: Any) -> None:
     "Tests rebase successfully"
     pr = GitHubPR("pytorch", "pytorch", 31093)
     repo = GitRepo(get_git_repo_dir(), get_git_remote_name())
     rebase_onto(pr, repo)
     calls = [
         mock.call('fetch', 'origin', 'pull/31093/head:pull/31093/head'),
         mock.call('rebase', 'master', 'pull/31093/head'),
         mock.call('push', '-f', 'https://github.com/mingxiaoh/pytorch.git',
                   'pull/31093/head:master')
     ]
     mocked_run_git.assert_has_calls(calls)
     self.assertTrue("Successfully rebased `master` onto `master`" in
                     mocked_post_comment.call_args[0][3])
コード例 #13
0
 def test_no_need_to_rebase(self, mocked_post_comment: Any,
                            mocked_run_git: Any, mocked_gql: Any) -> None:
     "Tests branch already up to date"
     pr = GitHubPR("pytorch", "pytorch", 31093)
     repo = GitRepo(get_git_repo_dir(), get_git_remote_name())
     rebase_onto(pr, repo)
     calls = [
         mock.call('fetch', 'origin', 'pull/31093/head:pull/31093/head'),
         mock.call('rebase', 'master', 'pull/31093/head'),
         mock.call('push', '-f', 'https://github.com/mingxiaoh/pytorch.git',
                   'pull/31093/head:master')
     ]
     mocked_run_git.assert_has_calls(calls)
     self.assertTrue(
         "Tried to rebase and push PR #31093, but it was already up to date"
         in mocked_post_comment.call_args[0][3])
コード例 #14
0
ファイル: test_trymerge.py プロジェクト: yuguo68/pytorch
 def test_comments_pagination(self, mocked_gql: Any) -> None:
     "Tests that PR with 50+ comments can be fetched"
     pr = GitHubPR("pytorch", "pytorch", 31093)
     self.assertGreater(len(pr.get_comments()), 50)
コード例 #15
0
ファイル: test_trymerge.py プロジェクト: yuguo68/pytorch
 def test_checksuites_pagination(self, mocked_gql: Any) -> None:
     "Tests that PR with lots of checksuits can be fetched"
     pr = GitHubPR("pytorch", "pytorch", 73811)
     self.assertGreater(len(pr.get_checkrun_conclusions()), 0)
コード例 #16
0
ファイル: test_trymerge.py プロジェクト: yuguo68/pytorch
 def test_internal_changes(self, mocked_gql: Any) -> None:
     "Tests that PR with internal changes is detected"
     pr = GitHubPR("pytorch", "pytorch", 73969)
     self.assertTrue(pr.has_internal_changes())
コード例 #17
0
ファイル: test_trymerge.py プロジェクト: yuguo68/pytorch
 def test_lint_fails(self, mocked_gql: Any) -> None:
     "Tests that PR fails mandatory lint check"
     pr = GitHubPR("pytorch", "pytorch", 74649)
     repo = GitRepo(get_git_repo_dir(), get_git_remote_name())
     self.assertRaises(RuntimeError,
                       lambda: find_matching_merge_rule(pr, repo))
コード例 #18
0
ファイル: test_trymerge.py プロジェクト: mikekgfb/pytorch
 def test_revert_rules(self, mock_gql: Any) -> None:
     """ Tests that reverts from collaborators are allowed """
     pr = GitHubPR("pytorch", "pytorch", 79694)
     repo = GitRepo(get_git_repo_dir(), get_git_remote_name())
     self.assertIsNotNone(validate_revert(repo, pr, comment_id=1189459845))
コード例 #19
0
ファイル: test_trymerge.py プロジェクト: yuguo68/pytorch
 def test_match_rules(self, mocked_gql: Any) -> None:
     "Tests that PR passes merge rules"
     pr = GitHubPR("pytorch", "pytorch", 77700)
     repo = GitRepo(get_git_repo_dir(), get_git_remote_name())
     self.assertTrue(find_matching_merge_rule(pr, repo) is not None)
コード例 #20
0
ファイル: test_trymerge.py プロジェクト: Mu-L/pytorch
 def test_match_rules(self, mocked_gql: Any, mocked_rmr: Any) -> None:
     "Tests that PR passes merge rules"
     pr = GitHubPR("pytorch", "pytorch", 77700)
     repo = DummyGitRepo()
     self.assertTrue(find_matching_merge_rule(pr, repo) is not None)
コード例 #21
0
ファイル: test_trymerge.py プロジェクト: yuguo68/pytorch
 def test_large_diff(self, mocked_gql: Any) -> None:
     "Tests that PR with 100+ files can be fetched"
     pr = GitHubPR("pytorch", "pytorch", 73099)
     self.assertTrue(pr.get_changed_files_count() > 100)
     flist = pr.get_changed_files()
     self.assertEqual(len(flist), pr.get_changed_files_count())
コード例 #22
0
ファイル: test_trymerge.py プロジェクト: Mu-L/pytorch
 def test_lint_fails(self, mocked_gql: Any, mocked_rmr: Any) -> None:
     "Tests that PR fails mandatory lint check"
     pr = GitHubPR("pytorch", "pytorch", 74649)
     repo = DummyGitRepo()
     self.assertRaises(RuntimeError,
                       lambda: find_matching_merge_rule(pr, repo))