932
943
"revspec at the end of the merge line?"))
935
class ResolveRevisionsTests(TestCaseWithTransport):
937
def test_unchanged(self):
938
source =self.make_branch_and_tree("source")
939
revid = source.commit("one")
940
branch1 = BaseRecipeBranch("source", "{revno}", 0.2, revspec="1")
941
branch2 = BaseRecipeBranch("source", "{revno}", 0.2,
942
revspec="revid:%s" % revid)
943
self.assertEqual(False, resolve_revisions(branch1,
944
if_changed_from=branch2))
945
self.assertEqual("source", branch1.url)
946
self.assertEqual(revid, branch1.revid)
947
self.assertEqual("1", branch1.revspec)
948
self.assertEqual("1", branch1.deb_version)
950
def test_unchanged_not_explicit(self):
951
source =self.make_branch_and_tree("source")
952
revid = source.commit("one")
953
branch1 = BaseRecipeBranch("source", "{revno}", 0.2)
954
branch2 = BaseRecipeBranch("source", "{revno}", 0.2,
955
revspec="revid:%s" % revid)
956
self.assertEqual(False, resolve_revisions(branch1,
957
if_changed_from=branch2))
958
self.assertEqual("source", branch1.url)
959
self.assertEqual(revid, branch1.revid)
960
self.assertEqual(None, branch1.revspec)
961
self.assertEqual("1", branch1.deb_version)
963
def test_unchanged_multilevel(self):
964
source =self.make_branch_and_tree("source")
965
revid = source.commit("one")
966
branch1 = BaseRecipeBranch("source", "{revno}", 0.2)
967
branch2 = RecipeBranch("nested1", "source")
968
branch3 = RecipeBranch("nested2", "source")
969
branch2.nest_branch("bar", branch3)
970
branch1.nest_branch("foo", branch2)
971
branch4 = BaseRecipeBranch("source", "{revno}", 0.2,
972
revspec="revid:%s" % revid)
973
branch5 = RecipeBranch("nested1", "source",
974
revspec="revid:%s" % revid)
975
branch6 = RecipeBranch("nested2", "source",
976
revspec="revid:%s" % revid)
977
branch5.nest_branch("bar", branch6)
978
branch4.nest_branch("foo", branch5)
979
self.assertEqual(False, resolve_revisions(branch1,
980
if_changed_from=branch4))
981
self.assertEqual("source", branch1.url)
982
self.assertEqual(revid, branch1.revid)
983
self.assertEqual(None, branch1.revspec)
984
self.assertEqual("1", branch1.deb_version)
986
def test_changed(self):
987
source =self.make_branch_and_tree("source")
988
revid = source.commit("one")
989
branch1 = BaseRecipeBranch("source", "{revno}", 0.2, revspec="1")
990
branch2 = BaseRecipeBranch("source", "{revno}", 0.2,
992
self.assertEqual(True, resolve_revisions(branch1,
993
if_changed_from=branch2))
994
self.assertEqual("source", branch1.url)
995
self.assertEqual(revid, branch1.revid)
996
self.assertEqual("1", branch1.revspec)
997
self.assertEqual("1", branch1.deb_version)
999
def test_changed_shape(self):
1000
source =self.make_branch_and_tree("source")
1001
revid = source.commit("one")
1002
branch1 = BaseRecipeBranch("source", "{revno}", 0.2, revspec="1")
1003
branch2 = BaseRecipeBranch("source", "{revno}", 0.2,
1004
revspec="revid:%s" % revid)
1005
branch3 = RecipeBranch("nested", "source")
1006
branch1.nest_branch("foo", branch3)
1007
self.assertEqual(True, resolve_revisions(branch1,
1008
if_changed_from=branch2))
1009
self.assertEqual("source", branch1.url)
1010
self.assertEqual(revid, branch1.revid)
1011
self.assertEqual("1", branch1.revspec)
1012
self.assertEqual("1", branch1.deb_version)
1014
def test_changed_command(self):
1015
source =self.make_branch_and_tree("source")
1016
source.commit("one")
1017
branch1 = BaseRecipeBranch("source", "{revno}", 0.2)
1018
branch2 = BaseRecipeBranch("source", "{revno}", 0.2)
1019
branch1.run_command("touch test1")
1020
branch2.run_command("touch test2")
1021
self.assertEqual(True, resolve_revisions(branch1,
1022
if_changed_from=branch2))
1023
self.assertEqual("source", branch1.url)
1025
def test_unchanged_command(self):
1026
source =self.make_branch_and_tree("source")
1027
source.commit("one")
1028
branch1 = BaseRecipeBranch("source", "{revno}", 0.2)
1029
branch2 = BaseRecipeBranch("source", "{revno}", 0.2)
1030
branch1.run_command("touch test1")
1031
branch2.run_command("touch test1")
1032
self.assertEqual(False, resolve_revisions(branch1,
1033
if_changed_from=branch2))
1034
self.assertEqual("source", branch1.url)
1036
def test_substitute(self):
1037
source =self.make_branch_and_tree("source")
1038
revid1 = source.commit("one")
1039
source.commit("two")
1040
branch1 = BaseRecipeBranch("source",
1041
"{revno}-{revno:packaging}", 0.2, revspec="1")
1042
branch2 = RecipeBranch("packaging", "source")
1043
branch1.nest_branch("debian", branch2)
1044
self.assertEqual(True, resolve_revisions(branch1))
1045
self.assertEqual("source", branch1.url)
1046
self.assertEqual(revid1, branch1.revid)
1047
self.assertEqual("1", branch1.revspec)
1048
self.assertEqual("1-2", branch1.deb_version)
1050
def test_substitute_supports_debupstream(self):
1051
# resolve_revisions should leave debupstream parameters alone and not
1053
source =self.make_branch_and_tree("source")
1054
source.commit("one")
1055
source.commit("two")
1056
branch1 = BaseRecipeBranch("source", "{debupstream}-{revno}", 0.2)
1057
resolve_revisions(branch1)
1058
self.assertEqual("{debupstream}-2", branch1.deb_version)
1060
def test_subsitute_not_fully_expanded(self):
1061
source =self.make_branch_and_tree("source")
1062
source.commit("one")
1063
source.commit("two")
1064
branch1 = BaseRecipeBranch("source", "{revno:packaging}", 0.2)
1065
self.assertRaises(errors.BzrCommandError, resolve_revisions, branch1)
1067
def test_substitute_svn_not_svn(self):
1068
br = self.make_branch("source")
1069
source = br.create_checkout("checkout")
1070
source.commit("one")
1071
source.commit("two")
1072
branch1 = BaseRecipeBranch("source", "foo-{svn-revno}", 0.4)
1073
e = self.assertRaises(errors.BzrCommandError, resolve_revisions,
1075
self.assertTrue(str(e).startswith("unable to expand {svn-revno} "),
1078
def test_substitute_svn(self):
1079
br = self.make_branch("source")
1080
source = br.create_checkout("checkout")
1081
source.commit("one")
1082
source.commit("two",
1083
rev_id="svn-v4:be7e6eca-30d4-0310-a8e5-ac0d63af7070:trunk:5344")
1084
branch1 = BaseRecipeBranch("source", "foo-{svn-revno}", 0.4)
1085
resolve_revisions(branch1)
1086
self.assertEqual("foo-5344", branch1.deb_version)
1088
def test_substitute_git_not_git(self):
1089
source = self.make_branch_and_tree("source")
1090
source.commit("one")
1091
source.commit("two")
1092
branch1 = BaseRecipeBranch("source", "foo-{git-commit}", 0.4)
1093
e = self.assertRaises(errors.BzrCommandError, resolve_revisions,
1095
self.assertTrue(str(e).startswith("unable to expand {git-commit} "),
1098
def test_substitute_git(self):
1099
source = self.make_branch_and_tree("source")
1100
source.commit("one",
1101
rev_id="git-v1:a029d7b2cc83c26a53d8b2a24fa12c340fcfac58")
1102
branch1 = BaseRecipeBranch("source", "foo-{git-commit}", 0.4)
1103
resolve_revisions(branch1)
1104
self.assertEqual("foo-a029d7b", branch1.deb_version)
1106
def test_latest_tag(self):
1107
source = self.make_branch_and_tree("source")
1108
revid = source.commit("one")
1109
source.branch.tags.set_tag("millbank", revid)
1110
source.commit("two")
1111
branch1 = BaseRecipeBranch("source", "foo-{latest-tag}", 0.4)
1112
resolve_revisions(branch1)
1113
self.assertEqual("foo-millbank", branch1.deb_version)
1115
def test_latest_tag_no_tag(self):
1116
source = self.make_branch_and_tree("source")
1117
revid = source.commit("one")
1118
source.commit("two")
1119
branch1 = BaseRecipeBranch("source", "foo-{latest-tag}", 0.4)
1120
e = self.assertRaises(errors.BzrCommandError, resolve_revisions, branch1)
1121
self.assertTrue(str(e).startswith("No tags set on branch None mainline"),
1124
def test_substitute_revdate(self):
1125
br = self.make_branch("source")
1126
source = br.create_checkout("checkout")
1127
source.commit("one")
1128
source.commit("two", timestamp=1307708628, timezone=0)
1129
branch1 = BaseRecipeBranch("source", "foo-{revdate}", 0.4)
1130
resolve_revisions(branch1)
1131
self.assertEqual("foo-20110610", branch1.deb_version)
1133
def test_substitute_revtime(self):
1134
br = self.make_branch("source")
1135
source = br.create_checkout("checkout")
1136
source.commit("one")
1137
source.commit("two", timestamp=1307708628, timezone=0)
1138
branch1 = BaseRecipeBranch("source", "foo-{revtime}", 0.4)
1139
resolve_revisions(branch1)
1140
self.assertEqual("foo-201106101223", branch1.deb_version)
1143
946
class StringifyTests(TestCaseInTempDir):
1145
948
def test_missing_debversion(self):
1317
1120
rbranch2 = RecipeBranch("name", "other_url2")
1318
1121
self.assertTrue(rbranch1.different_shape_to(rbranch2))
1320
def test_substitute_time(self):
1321
time = datetime.datetime.utcfromtimestamp(1)
1322
base_branch = BaseRecipeBranch("base_url", "1-{time}", 0.2)
1323
base_branch.substitute_time(time)
1324
self.assertEqual("1-197001010000", base_branch.deb_version)
1325
base_branch.substitute_time(time)
1326
self.assertEqual("1-197001010000", base_branch.deb_version)
1328
def test_substitute_date(self):
1329
time = datetime.datetime.utcfromtimestamp(1)
1330
base_branch = BaseRecipeBranch("base_url", "1-{date}", 0.2)
1331
base_branch.substitute_time(time)
1332
self.assertEqual("1-19700101", base_branch.deb_version)
1333
base_branch.substitute_time(time)
1334
self.assertEqual("1-19700101", base_branch.deb_version)
1336
def test_substitute_branch_vars(self):
1337
base_branch = BaseRecipeBranch("base_url", "1", 0.2)
1338
wt = self.make_branch_and_tree("br")
1339
revid = wt.commit("acommit")
1340
base_branch.substitute_branch_vars(None, wt.branch, revid)
1341
self.assertEqual("1", base_branch.deb_version)
1342
base_branch.substitute_branch_vars(None, wt.branch, revid)
1343
self.assertEqual("1", base_branch.deb_version)
1344
base_branch = BaseRecipeBranch("base_url", "{revno}", 0.2)
1345
base_branch.substitute_branch_vars(None, wt.branch, revid)
1346
self.assertEqual("1", base_branch.deb_version)
1347
base_branch = BaseRecipeBranch("base_url", "{revno}", 0.2)
1348
base_branch.substitute_branch_vars("foo", wt.branch, revid)
1349
self.assertEqual("{revno}", base_branch.deb_version)
1350
base_branch.substitute_branch_vars("foo", wt.branch, revid)
1351
self.assertEqual("{revno}", base_branch.deb_version)
1352
base_branch = BaseRecipeBranch("base_url", "{revno:foo}", 0.2)
1353
base_branch.substitute_branch_vars("foo", wt.branch, revid)
1354
self.assertEqual("1", base_branch.deb_version)
1356
def test_substitute_branch_vars_debupstream(self):
1357
wt = self.make_branch_and_tree("br")
1358
revid1 = wt.commit("acommit")
1359
cl_contents = ("package (0.1-1) unstable; urgency=low\n * foo\n"
1360
" -- maint <maint@maint.org> Tue, 04 Aug 2009 "
1362
self.build_tree_contents(
1363
[("br/debian/", ), ('br/debian/changelog', cl_contents)])
1364
wt.add(['debian', 'debian/changelog'])
1365
revid2 = wt.commit("with changelog")
1366
base_branch = BaseRecipeBranch("base_url", "{debupstream}", 0.4)
1367
# No changelog file, so no substitution
1368
base_branch.substitute_branch_vars(None, wt.branch, revid1)
1369
self.assertEqual("{debupstream}", base_branch.deb_version)
1370
base_branch.substitute_branch_vars(None, wt.branch, revid2)
1371
self.assertEqual("0.1", base_branch.deb_version)
1372
base_branch = BaseRecipeBranch("base_url", "{debupstream:tehname}", 0.4)
1373
base_branch.substitute_branch_vars("tehname", wt.branch, revid2)
1374
self.assertEqual("0.1", base_branch.deb_version)
1376
def test_substitute_branch_vars_debupstream_pre_0_4(self):
1377
wt = self.make_branch_and_tree("br")
1378
cl_contents = ("package (0.1-1) unstable; urgency=low\n * foo\n"
1379
" -- maint <maint@maint.org> Tue, 04 Aug 2009 "
1381
self.build_tree_contents(
1382
[("br/debian/", ), ('br/debian/changelog', cl_contents)])
1383
wt.add(['debian', 'debian/changelog'])
1384
revid = wt.commit("with changelog")
1385
# In recipe format < 0.4 {debupstream} gets replaced from the resulting
1386
# tree, not from the branch vars.
1387
base_branch = BaseRecipeBranch("base_url", "{debupstream}", 0.2)
1388
base_branch.substitute_branch_vars(None, wt.branch, revid)
1389
self.assertEqual("{debupstream}", base_branch.deb_version)
1391
1123
def test_list_branch_names(self):
1392
1124
base_branch = BaseRecipeBranch("base_url", "1", 0.2)
1393
1125
base_branch.merge_branch(RecipeBranch("merged", "merged_url"))
1431
1163
self.assertEqual([
1432
1164
cmd, nest, merge_into_nested],
1433
1165
list(base_branch.iter_all_instructions()))
1436
class DebUpstreamVariableTests(TestCase):
1438
def write_changelog(self, version):
1439
contents = textwrap.dedent("""
1440
package (%s) experimental; urgency=low
1442
* Initial release. (Closes: #XXXXXX)
1444
-- Jelmer Vernooij <jelmer@debian.org> Thu, 19 May 2011 10:07:41 +0100
1446
return changelog.Changelog(file=contents)
1448
def test_empty_changelog(self):
1449
var = DebUpstreamVariable.from_changelog(None, changelog.Changelog())
1450
self.assertRaises(SubstitutionUnavailable, var.get)
1452
def test_version(self):
1453
var = DebUpstreamVariable.from_changelog(None,
1454
self.write_changelog("2.3"))
1455
self.assertEquals("2.3", var.get())
1457
def test_epoch(self):
1458
# The epoch is (currently) ignored by {debupstream}.
1459
var = DebUpstreamVariable.from_changelog(None,
1460
self.write_changelog("2:2.3"))
1461
self.assertEquals("2.3", var.get())
1463
def test_base_without_snapshot(self):
1464
var = DebUpstreamBaseVariable.from_changelog(None,
1465
self.write_changelog("2.4"))
1466
self.assertEquals("2.4+", var.get())
1468
def test_base_with_svn_snapshot(self):
1469
var = DebUpstreamBaseVariable.from_changelog(None,
1470
self.write_changelog("2.4~svn4"))
1471
self.assertEquals("2.4~", var.get())
1473
def test_base_with_bzr_snapshot(self):
1474
var = DebUpstreamBaseVariable.from_changelog(None,
1475
self.write_changelog("2.4+bzr343"))
1476
self.assertEquals("2.4+", var.get())
1479
class DebVersionVariableTests(TestCase):
1481
def write_changelog(self, version):
1482
contents = textwrap.dedent("""
1483
package (%s) experimental; urgency=low
1485
* Initial release. (Closes: #XXXXXX)
1487
-- Jelmer Vernooij <jelmer@debian.org> Thu, 19 May 2011 10:07:41 +0100
1489
return changelog.Changelog(file=contents)
1491
def test_empty_changelog(self):
1492
var = DebVersionVariable.from_changelog(None, changelog.Changelog())
1493
self.assertRaises(SubstitutionUnavailable, var.get)
1495
def test_simple(self):
1496
var = DebVersionVariable.from_changelog(
1497
None, self.write_changelog("2.3-1"))
1498
self.assertEquals("2.3-1", var.get())
1500
def test_epoch(self):
1501
var = DebVersionVariable.from_changelog(
1502
None, self.write_changelog("4:2.3-1"))
1503
self.assertEquals("4:2.3-1", var.get())