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', ))
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', )
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, ))
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')
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')
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, ))
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', )
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)
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)
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')
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)
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')
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')
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')
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')
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')
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')
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')
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')
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')
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')
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')
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')
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')
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')
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)
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)
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)
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', )
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', )