def test_dependents(self): Fixture.from_scheme("""1: d:-a1-b1-c1 a:-1a b:-a1-1b c:-a1-b1-1c""").actualize() misc.checkout('1/develop') self.assert_aflow_dies_with( 'Unable to revert 1/a_v1 since 1/c_v1 depends on it. ' 'Revert it first or use "git af revert -d" revert dependent ' 'topics automatically.', 'revert', 'a') self.assert_aflow_returns_0("""1/c_v1 reverted successfully. 1/b_v1 reverted successfully. 1/a_v1 reverted successfully.""", 'revert', 'a', '-d') self.assertEqual(Fixture.from_repo(), Fixture.from_scheme(""" 1:- d:-a1-b1-c1-C1-B1-A1 b:-a1-1b a:-1a c:-a1-b1-1c""")) branch.reset('HEAD^^^') self.assert_aflow_returns_0("""1/c_v1 reverted successfully. 1/b_v1 reverted successfully.""", 'revert', 'b', 'c') self.assertEqual(Fixture.from_repo(), Fixture.from_scheme(""" 1:- d:-a1-b1-c1-C1-B1 b:-a1-1b a:-1a c:-a1-b1-1c"""))
def test_unfinish(self): Fixture.from_scheme("""1: s:-a1 d:-a1-e1-b1-c1-B1-b1-B1-b1 a:-1a b:-a1-e1-1b c:----------1c e:----1e""").actualize() self.assert_aflow_dies_with( "1/a_v1 was previously merged in 1/staging, so it's impossible to " "unfinish it.", 'continue', '-u', 'a') dev_head = misc.rev_parse('1/develop') self.assert_aflow_dies_with( 'Failed to continue 1/e_v1. It is merged in 1/b_v1 which was later ' 'merged in 1/develop. 1/develop reset back to ' + dev_head + '.', 'continue', '-u', 'e') self.assert_aflow_returns_0( '1/b_v1 created and checked out. Use "git af topic finish" to ' 'merge new revision of topic into develop', 'continue', '-u', 'b') self.assert_aflow_returns_0( """Using "End User Feature" as default topic type. 1/b_v1 merged into 1/develop successfully. Branch 1/b_v1 deleted.""", 'finish') self.assertEqual(Fixture.from_repo(), Fixture.from_scheme(""" 1:- s:-a1 d:-a1-e1-c1-b1 c:-1c e:-1e a:-1a b:-a1-e1-1b"""))
def test_cross_iteration(self): Fixture.from_scheme("""1:-a1 s:-a1 d:-a1 a:-1a 2:""").actualize() misc.checkout('2/develop') self.assert_aflow_returns_0( '2/a_v2 created and checked out. Use "git af topic finish" to ' 'merge new revision of topic into develop', 'continue', 'a') commit.commit('No matter', allow_empty=True) self.assert_aflow_returns_0(None, 'finish') self.assert_aflow_dies_with( 'Failed to find merges of b in 2 and previous iterations.', 'continue', 'b') self.assert_aflow_returns_0( 'Please, note that a_v2' ' is already present in other iteration(s), so changes you will ' 'make for this revision in current iteration should correspond to ' 'changes made for same revision in other iterations. You may ' 'also use "git af port" to bring commits of some revision from ' 'one iteration to another.' + os.linesep + '1/a_v2 created and checked out. Use "git af topic finish" to ' 'merge new revision of topic into develop', 'continue', '1/a') misc.checkout('2/staging') self.assert_aflow_returns_0(None, 'merge', 'a') misc.checkout('master') self.assert_aflow_returns_0(None, 'merge', 'a') self.assert_aflow_returns_0(None, 'rebase', '-n', '3') self.assert_aflow_returns_0( '3/a_v3 created and checked out. Use "git af topic finish" to ' 'merge new revision of topic into develop', 'continue', 'a') commit.commit('No matter', allow_empty=True) self.assert_aflow_returns_0(None, 'finish') self.assertEqual(Fixture.from_repo(), Fixture.from_scheme(""" 1:-a1 s:-a1 d:-a1 a:-1a 2:-a2 s:-a2 d:-a2 a:-2- 3: d:-a3 a:-3-"""))
def test_complex(self): Fixture.from_scheme("""1: d:-a1-b1-a2-b2-c1 a:-1a-a--2A b:-1b-a1-a2-2--c1 c:-a1-a2-b1-b2-1c""").actualize() self.assert_aflow_returns_0(None, 'checkout', 'b') commit.commit('No matter', allow_empty=True) self.assert_aflow_returns_0(None, 'finish') self.assertEqual(Fixture.from_repo(), Fixture.from_scheme(""" 1:- s:- d:-a1-b1-a2-b2-c1-b3 a:-1a-a--2A b:-1b-a1-a2-2--c1-3- c:-a1-a2-b1-b2-1c"""))
def test_fake_merge(self): Fixture.from_scheme("""1: s:-a1 d:-a1 a:-1a""").actualize() misc.checkout('1/staging') self.assert_aflow_returns_0('1/a_v1 reverted successfully.', 'revert', 'a') self.assert_aflow_returns_0("""Using default topic source(s): develop 1/a_v1 merged successfully""", 'merge', 'a') self.assert_aflow_returns_0('1/a_v1 reverted successfully.', 'revert', 'a') self.assertEqual(Fixture.from_repo(), Fixture.from_scheme(""" 1:- s:-a1-A1-a1-A1 d:-a1 a:-1a"""))
def test_refinish(self): Fixture.from_scheme("""1: d:-a1 a:-1a""").actualize() misc.checkout('1/develop') commit.revert('HEAD', parent=1) branch.delete('1/a') self.assert_aflow_returns_0(None, 'checkout', 'a') self.assert_aflow_returns_0( 'Assuming topic you are finishing is 1/a_v1.' + os.linesep + 'Taking topic type from previous merge of 1/a_v1.' + os.linesep + '1/a_v1 merged into 1/develop successfully.', 'finish') self.assertEqual(Fixture.from_repo(), Fixture.from_scheme(""" 1: d:-a1-A1-a1 a:-1a"""))
def test_dependencies(self): Fixture.from_scheme('''1: d:----a1-b1-a2-c1 a:-1a----b1-2c b:-1b--------- c:----b1-a1-a2-1-''').actualize() misc.checkout('1/staging') self.assert_aflow_returns_0(None, 'merge', '-a') misc.checkout('master') self.assert_aflow_returns_0(None, 'merge', '-d', 'c') self.assertEqual(Fixture.from_repo(), Fixture.from_scheme( '''1:----b1-a1-a2-c1 s:----a1-b1-a2-c1 d:----a1-b1-a2-c1 a:-1a----b1-2c b:-1b--------- c:----b1-a1-a2-1-'''))
def test_versions(self): Fixture.from_scheme("""1: d:-a1-b1-a2-c1-b2-a3 a:-1a-b1-2a-c1-b2-3a b:-a1-1b-a2-c1-2b c:-a1-b1-a2-1c""").actualize() misc.checkout('1/develop') self.assert_aflow_returns_0("""1/a_v3 reverted successfully. 1/b_v2 reverted successfully. 1/c_v1 reverted successfully. 1/a_v2 reverted successfully.""", 'revert', 'a_v2', '-d') self.assertEqual(Fixture.from_repo(), Fixture.from_scheme(""" 1:- s:- d:-a1-b1-a2-c1-b2-a3-A3-B2-C1-A2 b:-a1-1b-a2-c1-2b a:-1a-b1-2a-c1-b2-3a c:-a1-b1-a2-1c"""))
def test_update(self): Fixture.from_scheme('''1: s:----a1-b1 d:----a1-b1-c1-a2-b2-c2-a3 a:-1a----2a-------b2-c2-3a b:-1b----------a2-2b c:-1c----------a2-b2-2c''').actualize() misc.checkout('1/staging') self.assert_aflow_dies_with( 'Using default topic source(s): develop' + os.linesep + 'Merge failed. Topic 1/a_v3 depends on 1/c_v1. Try merge it first ' 'or use "git af merge -d" to merge dependencies automatically', 'merge', '-u') self.assert_aflow_returns_0(None, 'merge', '-d', '-u') self.assertEqual( Fixture.from_repo(), Fixture.from_scheme("""1:- s:-a1-b1-a2-b2-c1-c2-a3 d:-a1-b1-c1-a2-b2-c2-a3 b:-1b-a1-a2-2b c:-1c-a1-a2-b1-b2-2c a:-1a-2a-b1-b2-c1-c2-3a"""))