예제 #1
0
    def test_json(self):
        with OutputCapture() as captured, mocks.local.Git(
                self.path, git_svn=True), mocks.local.Svn(), MockTime:
            self.assertEqual(
                0,
                program.main(
                    args=('find', '3@main', '--json'),
                    path=self.path,
                ))

        decoded = json.loads(captured.stdout.getvalue())
        self.assertDictEqual(
            decoded,
            dict(
                identifier='3@main',
                hash='1abe25b443e985f93b90d830e4a7e3731336af4d',
                revision=4,
                author=dict(
                    name='Jonathan Bedard',
                    emails=['*****@*****.**'],
                ),
                timestamp=1601663000,
                order=0,
                branch='main',
                message=
                '4th commit\nsvn-id: https://svn.example.org/repository/repository/trunk@4 268f45cc-cd09-0410-ab3c-d52691b4dbfc',
            ))
예제 #2
0
    def test_number(self):
        with OutputCapture() as captured, mocks.local.Git(
                self.path) as mock, mocks.local.Svn(), MockTime:
            contirbutors = Contributor.Mapping()
            contirbutors.create('Jonathan Bedard', '*****@*****.**')

            self.assertEqual(
                0,
                program.main(
                    args=('canonicalize', '--number', '3'),
                    path=self.path,
                    contributors=contirbutors,
                ))

            self.assertEqual(
                local.Git(self.path).commit(identifier='5@main').message,
                'Patch Series\nIdentifier: 5@main')
            self.assertEqual(
                local.Git(self.path).commit(identifier='4@main').message,
                '8th commit\nIdentifier: 4@main')
            self.assertEqual(
                local.Git(self.path).commit(identifier='3@main').message,
                '4th commit\nIdentifier: 3@main')

        self.assertEqual(
            captured.stdout.getvalue(),
            'Rewrite 1abe25b443e985f93b90d830e4a7e3731336af4d (1/3) (--- seconds passed, remaining --- predicted)\n'
            'Rewrite bae5d1e90999d4f916a8a15810ccfa43f37a2fd6 (2/3) (--- seconds passed, remaining --- predicted)\n'
            'Rewrite d8bce26fa65c6fc8f39c17927abb77f69fab82fc (3/3) (--- seconds passed, remaining --- predicted)\n'
            '3 commits successfully canonicalized!\n',
        )
예제 #3
0
 def test_invalid(self):
     with OutputCapture(), mocks.local.Git(), mocks.local.Svn(
             self.path), MockTime:
         self.assertEqual(
             1, program.main(
                 args=('canonicalize', ),
                 path=self.path,
             ))
예제 #4
0
 def test_identifier_git(self):
     with mocks.local.Git(self.path), mocks.local.Svn(
     ), MockTime, OutputCapture() as captured:
         self.assertEqual(
             0, program.main(
                 args=('find', '2@main', '-q'),
                 path=self.path,
             ))
     self.assertEqual(captured.stdout.getvalue(), '2@main | fff83bb2d917\n')
예제 #5
0
 def test_basic_git(self):
     with mocks.local.Git(self.path), mocks.local.Svn(
     ), MockTime, OutputCapture() as captured:
         self.assertEqual(
             0, program.main(
                 args=('find', 'HEAD', '-q'),
                 path=self.path,
             ))
     self.assertEqual(captured.stdout.getvalue(), '4@main | bae5d1e90999\n')
예제 #6
0
 def test_checkout_remote(self):
     with OutputCapture(), mocks.remote.Svn():
         self.assertEqual(
             1,
             program.main(
                 args=('-C', 'https://svn.webkit.org/repository/webkit',
                       'checkout', '3@trunk'),
                 path=self.path,
             ))
예제 #7
0
    def test_branch_commits(self):
        with OutputCapture() as captured, mocks.local.Git(
                self.path) as mock, mocks.local.Svn(), MockTime:
            contirbutors = Contributor.Mapping()
            contirbutors.create('Jonathan Bedard', '*****@*****.**')

            local.Git(self.path).checkout('branch-a')
            mock.commits['branch-a'].append(
                Commit(
                    hash='f93138e3bf1d5ecca25fc0844b7a2a78b8e00aae',
                    branch='branch-a',
                    author=Contributor('*****@*****.**',
                                       emails=['*****@*****.**']),
                    branch_point=mock.commits['branch-a'][-1].branch_point,
                    identifier=mock.commits['branch-a'][-1].identifier + 1,
                    timestamp=1601668000,
                    message='New commit 1\n',
                ))
            mock.commits['branch-a'].append(
                Commit(
                    hash='0148c0df0faf248aa133d6d5ad911d7cb1b56a5b',
                    branch='branch-a',
                    author=Contributor('*****@*****.**',
                                       emails=['*****@*****.**']),
                    branch_point=mock.commits['branch-a'][-1].branch_point,
                    identifier=mock.commits['branch-a'][-1].identifier + 1,
                    timestamp=1601669000,
                    message='New commit 2\n',
                ))

            self.assertEqual(
                0,
                program.main(
                    args=('canonicalize', ),
                    path=self.path,
                    contributors=contirbutors,
                ))

            commit_a = local.Git(self.path).commit(branch='branch-a~1')
            self.assertEqual(commit_a.author,
                             contirbutors['*****@*****.**'])
            self.assertEqual(commit_a.message,
                             'New commit 1\nIdentifier: 2.3@branch-a')

            commit_b = local.Git(self.path).commit(branch='branch-a')
            self.assertEqual(commit_b.author,
                             contirbutors['*****@*****.**'])
            self.assertEqual(commit_b.message,
                             'New commit 2\nIdentifier: 2.4@branch-a')

        self.assertEqual(
            captured.stdout.getvalue(),
            'Rewrite f93138e3bf1d5ecca25fc0844b7a2a78b8e00aae (1/2) (--- seconds passed, remaining --- predicted)\n'
            'Rewrite 0148c0df0faf248aa133d6d5ad911d7cb1b56a5b (2/2) (--- seconds passed, remaining --- predicted)\n'
            '2 commits successfully canonicalized!\n',
        )
예제 #8
0
    def test_checkout_git_svn(self):
        with mocks.local.Git(self.path, git_svn=True), mocks.local.Svn(), MockTime, OutputCapture():
            self.assertEqual('bae5d1e90999d4f916a8a15810ccfa43f37a2fd6', local.Git(self.path).commit().hash)

            self.assertEqual(0, program.main(
                args=('checkout', '2.2@branch-a'),
                path=self.path,
            ))

            self.assertEqual('621652add7fc416099bd2063366cc38ff61afe36', local.Git(self.path).commit().hash)
예제 #9
0
    def test_checkout_git(self):
        with mocks.local.Git(self.path), mocks.local.Svn(), MockTime, OutputCapture():
            self.assertEqual('bae5d1e90999d4f916a8a15810ccfa43f37a2fd6', local.Git(self.path).commit().hash)

            self.assertEqual(0, program.main(
                args=('checkout', '2@main'),
                path=self.path,
            ))

            self.assertEqual('fff83bb2d9171b4d9196e977eb0508fd57e7a08d', local.Git(self.path).commit().hash)
예제 #10
0
 def test_revision_git_svn(self):
     with mocks.local.Git(self.path, git_svn=True), mocks.local.Svn(
     ), MockTime, OutputCapture() as captured:
         self.assertEqual(
             0, program.main(
                 args=('find', 'r5', '-q'),
                 path=self.path,
             ))
     self.assertEqual(captured.stdout.getvalue(),
                      '2.2@branch-b | 3cd32e352410, r5 | 5th commit\n')
예제 #11
0
    def test_checkout_svn(self):
        with mocks.local.Git(), mocks.local.Svn(self.path), MockTime, OutputCapture():
            self.assertEqual(6, local.Svn(self.path).commit().revision)

            self.assertEqual(0, program.main(
                args=('checkout', '3@trunk'),
                path=self.path,
            ))

            self.assertEqual(4, local.Svn(self.path).commit().revision)
예제 #12
0
 def test_revision_svn(self):
     with OutputCapture() as captured, mocks.local.Git(), mocks.local.Svn(
             self.path), MockTime:
         self.assertEqual(
             0, program.main(
                 args=('find', 'r5', '-q'),
                 path=self.path,
             ))
     self.assertEqual(captured.stdout.getvalue(),
                      '2.2@branch-b | r5 | 5th commit\n')
예제 #13
0
 def test_tag_svn(self):
     with OutputCapture() as captured, mocks.local.Git(), mocks.local.Svn(
             self.path), MockTime:
         self.assertEqual(
             0, program.main(
                 args=('find', 'tag-1', '-q'),
                 path=self.path,
             ))
     self.assertEqual(captured.stdout.getvalue(),
                      '2.3@tags/tag-1 | r9 | 9th commit\n')
예제 #14
0
 def test_basic_svn(self):
     with OutputCapture() as captured, mocks.local.Git(), mocks.local.Svn(
             self.path), MockTime:
         self.assertEqual(
             0, program.main(
                 args=('find', 'HEAD', '-q'),
                 path=self.path,
             ))
     self.assertEqual(captured.stdout.getvalue(),
                      '4@trunk | r6 | 6th commit\n')
예제 #15
0
 def test_no_log_svn(self):
     with OutputCapture() as captured, mocks.local.Git(), mocks.local.Svn(
             self.path), MockTime:
         self.assertEqual(
             0,
             program.main(
                 args=('find', 'trunk', '--no-log', '-q'),
                 path=self.path,
             ))
     self.assertEqual(captured.stdout.getvalue(), '4@trunk | r6\n')
예제 #16
0
 def test_basic_git_svn(self):
     with OutputCapture() as captured, mocks.local.Git(
             self.path, git_svn=True), mocks.local.Svn(), MockTime:
         self.assertEqual(
             0, program.main(
                 args=('find', 'HEAD', '-q'),
                 path=self.path,
             ))
     self.assertEqual(captured.stdout.getvalue(),
                      '5@main | d8bce26fa65c, r9 | Patch Series\n')
예제 #17
0
    def test_no_commits(self):
        with OutputCapture() as captured, mocks.local.Git(
                self.path), mocks.local.Svn(), MockTime:
            self.assertEqual(
                0, program.main(
                    args=('canonicalize', ),
                    path=self.path,
                ))

        self.assertEqual(captured.stdout.getvalue(),
                         'No local commits to be edited\n')
예제 #18
0
 def test_branch_tilde(self):
     with OutputCapture() as captured, mocks.local.Git(
             self.path, git_svn=True), mocks.local.Svn(), MockTime:
         self.assertEqual(
             0,
             program.main(
                 args=('find', 'branch-a~1', '-q'),
                 path=self.path,
             ))
     self.assertEqual(captured.stdout.getvalue(),
                      '2.1@branch-a | a30ce8494bf1, r3 | 3rd commit\n')
예제 #19
0
 def test_basic_svn_remote(self):
     with OutputCapture() as captured, mocks.remote.Svn():
         self.assertEqual(
             0,
             program.main(
                 args=('-C', 'https://svn.example.org/repository/webkit',
                       'find', 'HEAD', '-q'),
                 path=self.path,
             ))
     self.assertEqual(captured.stdout.getvalue(),
                      '4@trunk | r6 | 6th commit\n')
예제 #20
0
 def test_no_log_git(self):
     with OutputCapture() as captured, mocks.local.Git(
             self.path, git_svn=True), mocks.local.Svn(), MockTime:
         self.assertEqual(
             0,
             program.main(
                 args=('find', 'main', '--no-log', '-q'),
                 path=self.path,
             ))
     self.assertEqual(captured.stdout.getvalue(),
                      '5@main | d8bce26fa65c, r9\n')
예제 #21
0
 def test_hash(self):
     with mocks.local.Git(self.path), mocks.local.Svn(
     ), MockTime, OutputCapture() as captured:
         self.assertEqual(
             0,
             program.main(
                 args=('find', '3cd32e352410', '-q'),
                 path=self.path,
             ))
     self.assertEqual(captured.stdout.getvalue(),
                      '2.2@branch-b | 3cd32e352410\n')
예제 #22
0
 def test_no_log_git(self):
     with mocks.local.Git(self.path, git_svn=True), mocks.local.Svn(
     ), MockTime, OutputCapture() as captured:
         self.assertEqual(
             0,
             program.main(
                 args=('find', 'main', '--no-log', '-q'),
                 path=self.path,
             ))
     self.assertEqual(captured.stdout.getvalue(),
                      '4@main | bae5d1e90999, r6\n')
예제 #23
0
 def test_hash(self):
     with OutputCapture() as captured, mocks.local.Git(
             self.path), mocks.local.Svn(), MockTime:
         self.assertEqual(
             0,
             program.main(
                 args=('find', '790725a6', '-q'),
                 path=self.path,
             ))
     self.assertEqual(captured.stdout.getvalue(),
                      '2.3@branch-b | 790725a6d79e | 7th commit\n')
예제 #24
0
 def test_identifier_svn(self):
     with OutputCapture() as captured, mocks.local.Git(), mocks.local.Svn(
             self.path), MockTime:
         self.assertEqual(
             0,
             program.main(
                 args=('find', '2@trunk', '-q'),
                 path=self.path,
             ))
     self.assertEqual(captured.stdout.getvalue(),
                      '2@trunk | r2 | 2nd commit\n')
예제 #25
0
    def test_tag_git(self):
        with OutputCapture() as captured, mocks.local.Git(
                self.path, git_svn=True) as mock, mocks.local.Svn(), MockTime:
            mock.tags['tag-1'] = mock.commits['branch-a'][-1]

            self.assertEqual(
                0, program.main(
                    args=('find', 'tag-1', '-q'),
                    path=self.path,
                ))
        self.assertEqual(captured.stdout.getvalue(),
                         '2.2@branch-a | 621652add7fc, r6 | 7th commit\n')
예제 #26
0
    def test_checkout_git(self):
        with OutputCapture(), mocks.local.Git(
                self.path), mocks.local.Svn(), MockTime:
            self.assertEqual('d8bce26fa65c6fc8f39c17927abb77f69fab82fc',
                             local.Git(self.path).commit().hash)

            self.assertEqual(
                0, program.main(
                    args=('checkout', '2@main'),
                    path=self.path,
                ))

            self.assertEqual('fff83bb2d9171b4d9196e977eb0508fd57e7a08d',
                             local.Git(self.path).commit().hash)
예제 #27
0
    def test_checkout_git_svn(self):
        with OutputCapture(), mocks.local.Git(
                self.path, git_svn=True), mocks.local.Svn(), MockTime:
            self.assertEqual('d8bce26fa65c6fc8f39c17927abb77f69fab82fc',
                             local.Git(self.path).commit().hash)

            self.assertEqual(
                0,
                program.main(
                    args=('checkout', '2.2@branch-a'),
                    path=self.path,
                ))

            self.assertEqual('621652add7fc416099bd2063366cc38ff61afe36',
                             local.Git(self.path).commit().hash)
예제 #28
0
    def test_empty(self):
        try:
            dirname = tempfile.mkdtemp()
            with OutputCapture() as captured, mocks.local.Git(
                    dirname, remote=self.git_remote), mocks.local.Svn(
                    ), mocks.remote.Svn(
                        remote=self.svn_remote.split('://')[1]), MockTime:
                self.assertEqual(
                    0,
                    program.main(
                        args=('setup-git-svn', ),
                        path=dirname,
                        subversion=self.svn_remote,
                    ))
            self.assertEqual(
                captured.stdout.getvalue(),
                'Adding svn-remote to git config\n' +
                'Populating svn commit mapping (will take a few minutes)...\n',
            )

            with open(os.path.join(dirname, '.git/config')) as config:
                self.assertEqual(
                    config.read(),
                    '[core]\n'
                    '\trepositoryformatversion = 0\n'
                    '\tfilemode = true\n'
                    '\tbare = false\n'
                    '\tlogallrefupdates = true\n'
                    '\tignorecase = true\n'
                    '\tprecomposeunicode = true\n'
                    '[remote "origin"]\n'
                    '\turl = {git_remote}\n'
                    '\tfetch = +refs/heads/*:refs/remotes/origin/*\n'
                    '[branch "main"]\n'
                    '\tremote = origin\n'
                    '\tmerge = refs/heads/main\n'
                    '[svn-remote "svn"]\n'
                    '\turl = {svn_remote}\n'
                    '\tfetch = trunk:refs/remotes/origin/main\n'.format(
                        git_remote=self.git_remote,
                        svn_remote=self.svn_remote,
                    ),
                )

        finally:
            shutil.rmtree(dirname)
예제 #29
0
    def test_formated_identifier(self):
        with OutputCapture() as captured, mocks.local.Git(
                self.path) as mock, mocks.local.Svn(), MockTime:
            contirbutors = Contributor.Mapping()
            contirbutors.create('\u017dan Dober\u0161ek',
                                '*****@*****.**')

            mock.commits[mock.default_branch].append(
                Commit(
                    hash='38ea50d28ae394c9c8b80e13c3fb21f1c262871f',
                    branch=mock.default_branch,
                    author=Contributor('\u017dan Dober\u0161ek',
                                       emails=['*****@*****.**']),
                    identifier=mock.commits[mock.default_branch][-1].identifier
                    + 1,
                    timestamp=1601668000,
                    message='New commit\n',
                ))

            self.assertEqual(
                0,
                program.main(
                    args=(
                        'canonicalize',
                        '-v',
                    ),
                    path=self.path,
                    contributors=contirbutors,
                    identifier_template=
                    'Canonical link: https://commits.webkit.org/{}',
                ))

            commit = local.Git(self.path).commit(branch=mock.default_branch)
            self.assertEqual(commit.author,
                             contirbutors['*****@*****.**'])
            self.assertEqual(
                commit.message,
                'New commit\nCanonical link: https://commits.webkit.org/5@main'
            )

        self.assertEqual(
            captured.stdout.getvalue(),
            'Rewrite 38ea50d28ae394c9c8b80e13c3fb21f1c262871f (1/1) (--- seconds passed, remaining --- predicted)\n'
            'Overwriting 38ea50d28ae394c9c8b80e13c3fb21f1c262871f\n'
            '1 commit successfully canonicalized!\n',
        )
예제 #30
0
    def test_git_svn(self):
        with OutputCapture() as captured, mocks.local.Git(
                self.path, git_svn=True) as mock, mocks.local.Svn(), MockTime:
            contirbutors = Contributor.Mapping()
            contirbutors.create('Jonathan Bedard', '*****@*****.**')

            mock.commits[mock.default_branch].append(
                Commit(
                    hash='766609276fe201e7ce2c69994e113d979d2148ac',
                    branch=mock.default_branch,
                    author=Contributor('*****@*****.**',
                                       emails=['*****@*****.**']),
                    identifier=mock.commits[mock.default_branch][-1].identifier
                    + 1,
                    timestamp=1601668000,
                    revision=9,
                    message='New commit\n',
                ))

            self.assertEqual(
                0,
                program.main(
                    args=('canonicalize', '-vv'),
                    path=self.path,
                    contributors=contirbutors,
                ))

            commit = local.Git(self.path).commit(branch=mock.default_branch)
            self.assertEqual(commit.author, contirbutors['*****@*****.**'])
            self.assertEqual(
                commit.message,
                'New commit\n'
                'Identifier: 5@main\n'
                'svn-id: https://svn.example.org/repository/repository/trunk@9 268f45cc-cd09-0410-ab3c-d52691b4dbfc',
            )

        self.assertEqual(
            captured.stdout.getvalue(),
            'Rewrite 766609276fe201e7ce2c69994e113d979d2148ac (1/1) (--- seconds passed, remaining --- predicted)\n'
            'Overwriting 766609276fe201e7ce2c69994e113d979d2148ac\n'
            '    GIT_AUTHOR_NAME=Jonathan Bedard\n'
            '    [email protected]\n'
            '    GIT_COMMITTER_NAME=Jonathan Bedard\n'
            '    [email protected]\n'
            '1 commit successfully canonicalized!\n',
        )