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_commit_revision(self): try: dirname = tempfile.mkdtemp() with mocks.local.Git(dirname), MockTime, LoggerCapture(): with self.assertRaises(local.Git.Exception): self.assertEqual(None, local.Git(dirname).commit(revision=1)) with mocks.local.Git(dirname, git_svn=True, remote='[email protected]:{}'.format( self.path)), MockTime, LoggerCapture(): self.assertEqual('1@main', str(local.Git(dirname).commit(revision=1))) self.assertEqual('2@main', str(local.Git(dirname).commit(revision=2))) self.assertEqual('2.1@branch-a', str(local.Git(dirname).commit(revision=3))) self.assertEqual('3@main', str(local.Git(dirname).commit(revision=4))) self.assertEqual('2.2@branch-b', str(local.Git(dirname).commit(revision=5))) self.assertEqual('2.2@branch-a', str(local.Git(dirname).commit(revision=6))) self.assertEqual('2.3@branch-b', str(local.Git(dirname).commit(revision=7))) self.assertEqual('4@main', str(local.Git(dirname).commit(revision=8))) # Out-of-bounds commit with self.assertRaises(local.Git.Exception): self.assertEqual(None, local.Git(dirname).commit(revision=10)) finally: shutil.rmtree(dirname)
def test_branches_priority(self): for mock in [ mocks.local.Git(self.path), mocks.local.Git(self.path, git_svn=True) ]: with mock: self.assertEqual( 'main', local.Git(self.path).prioritize_branches([ 'main', 'branch-a', 'dev/12345', 'safari-610-branch', 'safari-610.1-branch' ])) self.assertEqual( 'safari-610-branch', local.Git(self.path).prioritize_branches([ 'branch-a', 'dev/12345', 'safari-610-branch', 'safari-610.1-branch' ])) self.assertEqual( 'safari-610.1-branch', local.Git(self.path).prioritize_branches( ['branch-a', 'dev/12345', 'safari-610.1-branch'])) self.assertEqual( 'branch-a', local.Git(self.path).prioritize_branches( ['branch-a', 'dev/12345']))
def test_non_cannonical_identifiers(self): for mock in [mocks.local.Git(self.path), mocks.local.Git(self.path, git_svn=True)]: with mock, MockTime, LoggerCapture(): self.assertEqual('2@main', str(local.Git(self.path).commit(identifier='0@branch-a'))) self.assertEqual('1@main', str(local.Git(self.path).commit(identifier='-1@branch-a'))) self.assertEqual('2.1@branch-a', str(local.Git(self.path).commit(identifier='2.1@branch-b'))) self.assertEqual('2@main', str(local.Git(self.path).commit(identifier='0@branch-b'))) self.assertEqual('1@main', str(local.Git(self.path).commit(identifier='-1@branch-b')))
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_alternative_default_branch(self): for mock in [ mocks.local.Git(self.path), mocks.local.Git(self.path, git_svn=True) ]: with mock: self.assertEqual(str(local.Git(self.path).find('4@trunk')), '4@main') self.assertEqual(str(local.Git(self.path).find('4@master')), '4@main')
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_order(self): for mock in [ mocks.local.Git(self.path), mocks.local.Git(self.path, git_svn=True) ]: with mock: self.assertEqual( 0, local.Git(self.path).commit(hash='bae5d1e90999').order) self.assertEqual( 1, local.Git(self.path).commit(hash='d8bce26fa65c').order)
def test_scm_type(self): try: dirname = tempfile.mkdtemp() with mocks.local.Git(dirname, remote='[email protected]:{}'.format(self.path)), MockTime, LoggerCapture(): self.assertTrue(local.Git(dirname).is_git) self.assertFalse(local.Git(dirname).is_svn) with mocks.local.Git(dirname, git_svn=True, remote='[email protected]:{}'.format(self.path)), MockTime, LoggerCapture(): self.assertTrue(local.Git(dirname).is_git) self.assertTrue(local.Git(dirname).is_svn) finally: shutil.rmtree(dirname)
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_commit_from_branch(self): for mock in [ mocks.local.Git(self.path), mocks.local.Git(self.path, git_svn=True) ]: with mock, MockTime, LoggerCapture(): self.assertEqual( '5@main', str(local.Git(self.path).commit(branch='main'))) self.assertEqual( '2.2@branch-a', str(local.Git(self.path).commit(branch='branch-a'))) self.assertEqual( '2.3@branch-b', str(local.Git(self.path).commit(branch='branch-b')))
def test_commit_hash(self): for mock in [ mocks.local.Git(self.path), mocks.local.Git(self.path, git_svn=True) ]: with mock, MockTime, LoggerCapture(): self.assertEqual( '1@main', str(local.Git(self.path).commit(hash='9b8311f2'))) self.assertEqual( '2@main', str(local.Git(self.path).commit(hash='fff83bb2'))) self.assertEqual( '3@main', str(local.Git(self.path).commit(hash='1abe25b4'))) self.assertEqual( '4@main', str(local.Git(self.path).commit(hash='bae5d1e9'))) self.assertEqual( '2.1@branch-a', str(local.Git(self.path).commit(hash='a30ce849'))) self.assertEqual( '2.2@branch-a', str(local.Git(self.path).commit(hash='621652ad'))) self.assertEqual( '2.2@branch-b', str(local.Git(self.path).commit(hash='3cd32e35'))) self.assertEqual( '2.3@branch-b', str(local.Git(self.path).commit(hash='790725a6')))
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_checkout(self): for mock in [ mocks.local.Git(self.path), mocks.local.Git(self.path, git_svn=True) ]: with mock: mock.tags['tag-1'] = mock.commits['branch-a'][-1] repository = local.Git(self.path) self.assertEqual('d8bce26fa65c6fc8f39c17927abb77f69fab82fc', repository.commit().hash) self.assertEqual('3cd32e352410565bb543821fbf856a6d3caad1c4', repository.checkout('3cd32e3524').hash) self.assertEqual('3cd32e352410565bb543821fbf856a6d3caad1c4', repository.commit().hash) self.assertEqual('1abe25b443e985f93b90d830e4a7e3731336af4d', repository.checkout('3@main').hash) self.assertEqual('1abe25b443e985f93b90d830e4a7e3731336af4d', repository.commit().hash) self.assertEqual('621652add7fc416099bd2063366cc38ff61afe36', repository.checkout('tag-1').hash) self.assertEqual('621652add7fc416099bd2063366cc38ff61afe36', repository.commit().hash)
def from_path(cls, path): from webkitscmpy import local if local.Git.is_checkout(path): return local.Git(path) if local.Svn.is_checkout(path): return local.Svn(path) raise OSError('{} is not a known SCM type')
def from_path(cls, path, contributors=None): from webkitscmpy import local if local.Git.is_checkout(path): return local.Git(path, contributors=contributors) if local.Svn.is_checkout(path): return local.Svn(path, contributors=contributors) raise OSError("'{}' is not a known SCM type".format(path))
def test_tag(self): for mock in [mocks.local.Git(self.path), mocks.local.Git(self.path, git_svn=True)]: with mock: mock.tags['tag-1'] = mock.commits['branch-a'][-1] self.assertEqual( '621652add7fc416099bd2063366cc38ff61afe36', local.Git(self.path).commit(tag='tag-1').hash, )
def test_no_identifier(self): for mock in [ mocks.local.Git(self.path), mocks.local.Git(self.path, git_svn=True) ]: with mock: self.assertIsNone( local.Git(self.path).find( 'main', include_identifier=False).identifier)
def test_no_log(self): for mock in [ mocks.local.Git(self.path), mocks.local.Git(self.path, git_svn=True) ]: with mock: self.assertIsNone( local.Git(self.path).commit(identifier='4@main', include_log=False).message)
def test_tags(self): with mocks.local.Git(self.path) as mock: mock.tags['tag-1'] = mock.commits['branch-a'][-1] mock.tags['tag-2'] = mock.commits['branch-b'][-1] self.assertEqual( local.Git(self.path).tags, ['tag-1', 'tag-2'], )
def test_info(self): try: dirname = tempfile.mkdtemp() with mocks.local.Git(dirname, remote='[email protected]:{}'.format( self.path)), MockTime, LoggerCapture(): with self.assertRaises(local.Git.Exception): self.assertEqual(dict(), local.Git(dirname).info()) with mocks.local.Git(dirname, git_svn=True, remote='[email protected]:{}'.format( self.path)), MockTime: self.assertDictEqual( { 'Path': '.', 'Repository Root': '[email protected]:/mock/repository', 'URL': '[email protected]:/mock/repository/main', 'Revision': '9', 'Node Kind': 'directory', 'Schedule': 'normal', 'Last Changed Author': '*****@*****.**', 'Last Changed Rev': '9', 'Last Changed Date': datetime.fromtimestamp(1601668000).strftime( '%Y-%m-%d %H:%M:%S'), }, local.Git(dirname).info(), ) finally: shutil.rmtree(dirname)
def test_checkout(self): for mock in [mocks.local.Git(self.path), mocks.local.Git(self.path, git_svn=True)]: with mock: mock.tags['tag-1'] = mock.commits['branch-a'][-1] repository = local.Git(self.path) self.assertEqual('bae5d1e90999d4f916a8a15810ccfa43f37a2fd6', repository.commit().hash) self.assertEqual('3cd32e352410565bb543821fbf856a6d3caad1c4', repository.checkout('3cd32e3524').hash) self.assertEqual('3cd32e352410565bb543821fbf856a6d3caad1c4', repository.commit().hash) self.assertEqual('1abe25b443e985f93b90d830e4a7e3731336af4d', repository.checkout('3@main').hash) self.assertEqual('1abe25b443e985f93b90d830e4a7e3731336af4d', repository.commit().hash) self.assertEqual('621652add7fc416099bd2063366cc38ff61afe36', repository.checkout('tag-1').hash) self.assertEqual('621652add7fc416099bd2063366cc38ff61afe36', repository.commit().hash)
def test_identifier(self): for mock in [ mocks.local.Git(self.path), mocks.local.Git(self.path, git_svn=True) ]: with mock, MockTime, LoggerCapture(): self.assertEqual( '9b8311f25a77ba14923d9d5a6532103f54abefcb', local.Git(self.path).commit(identifier='1@main').hash, ) self.assertEqual( 'fff83bb2d9171b4d9196e977eb0508fd57e7a08d', local.Git(self.path).commit(identifier='2@main').hash, ) self.assertEqual( '1abe25b443e985f93b90d830e4a7e3731336af4d', local.Git(self.path).commit(identifier='3@main').hash, ) self.assertEqual( 'bae5d1e90999d4f916a8a15810ccfa43f37a2fd6', local.Git(self.path).commit(identifier='4@main').hash, ) self.assertEqual( 'a30ce8494bf1ac2807a69844f726be4a9843ca55', local.Git( self.path).commit(identifier='2.1@branch-a').hash, ) self.assertEqual( '621652add7fc416099bd2063366cc38ff61afe36', local.Git( self.path).commit(identifier='2.2@branch-a').hash, ) self.assertEqual( '3cd32e352410565bb543821fbf856a6d3caad1c4', local.Git( self.path).commit(identifier='2.2@branch-b').hash, ) self.assertEqual( '790725a6d79e28db2ecdde29548d2262c0bd059d', local.Git( self.path).commit(identifier='2.3@branch-b').hash, )
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', )
def test_commits_branch(self): for mock in [ mocks.local.Git(self.path), mocks.local.Git(self.path, git_svn=True) ]: with mock: git = local.Git(self.path) self.assertEqual( Commit.Encoder().default([ git.commit(hash='621652ad'), git.commit(hash='a30ce849'), git.commit(hash='fff83bb2'), git.commit(hash='9b8311f2'), ]), Commit.Encoder().default( list( git.commits(begin=dict(argument='9b8311f2'), end=dict(argument='621652ad')))))
def test_commits(self): for mock in [ mocks.local.Git(self.path), mocks.local.Git(self.path, git_svn=True) ]: with mock: git = local.Git(self.path) self.assertEqual( Commit.Encoder().default([ git.commit(hash='bae5d1e9'), git.commit(hash='1abe25b4'), git.commit(hash='fff83bb2'), git.commit(hash='9b8311f2'), ]), Commit.Encoder().default( list( git.commits(begin=dict(hash='9b8311f2'), end=dict(hash='bae5d1e9')))))
def test_existing_identifier(self): with OutputCapture() as captured, mocks.local.Git( self.path) as mock, mocks.local.Svn(), MockTime: contirbutors = Contributor.Mapping() contirbutors.create('Jonathan Bedard', '*****@*****.**') mock.commits[mock.default_branch].append( Commit( hash='38ea50d28ae394c9c8b80e13c3fb21f1c262871f', branch=mock.default_branch, author=Contributor('Jonathan Bedard', emails=['*****@*****.**']), identifier=mock.commits[mock.default_branch][-1].identifier + 1, timestamp=1601668000, message='New commit\nIdentifier: {}@{}'.format( mock.commits[mock.default_branch][-1].identifier + 1, mock.default_branch, ), )) self.assertEqual( 0, program.main( args=( 'canonicalize', '-v', ), 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\nIdentifier: 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_default_branch(self): with mocks.local.Git(self.path): self.assertEqual(local.Git(self.path).default_branch, 'main')