~ubuntu-branches/ubuntu/quantal/bzr-builder/quantal

« back to all changes in this revision

Viewing changes to tests/test_recipe.py

  • Committer: Package Import Robot
  • Author(s): Logan Rosen
  • Date: 2012-06-10 02:45:03 UTC
  • mfrom: (1.1.6) (12.1.2 precise)
  • Revision ID: package-import@ubuntu.com-20120610024503-4syoetggxq6qr1lp
Tags: 0.7.3-0ubuntu1
New upstream release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
13
13
# You should have received a copy of the GNU General Public License along 
14
14
# with this program.  If not, see <http://www.gnu.org/licenses/>.
15
15
 
16
 
import datetime
17
16
import os
18
 
import textwrap
19
17
 
20
18
from bzrlib import (
21
19
        errors,
23
21
        workingtree,
24
22
        )
25
23
from bzrlib.tests import (
26
 
        TestCase,
27
24
        TestCaseInTempDir,
28
25
        TestCaseWithTransport,
29
26
        )
30
27
from bzrlib.plugins.builder.recipe import (
31
28
        BaseRecipeBranch,
32
29
        build_tree,
33
 
        DebUpstreamBaseVariable,
34
 
        DebUpstreamVariable,
35
30
        ensure_basedir,
36
31
        InstructionParseError,
37
32
        ForbiddenInstructionError,
38
33
        MERGE_INSTRUCTION,
39
34
        NEST_INSTRUCTION,
40
35
        NEST_PART_INSTRUCTION,
41
 
        DebVersionVariable,
42
36
        pull_or_branch,
43
37
        RecipeParser,
44
38
        RecipeBranch,
45
39
        RecipeParseError,
46
 
        resolve_revisions,
47
40
        RUN_INSTRUCTION,
48
41
        SAFE_INSTRUCTIONS,
49
 
        SubstitutionUnavailable,
50
42
        USAGE,
51
43
        )
52
44
 
53
 
try:
54
 
    from debian import changelog
55
 
except ImportError:
56
 
    # In older versions of python-debian the main package was named 
57
 
    # debian_bundle
58
 
    from debian_bundle import changelog
59
 
 
60
 
 
61
45
class RecipeParserTests(TestCaseInTempDir):
62
46
 
63
47
    deb_version = "0.1-{revno}"
654
638
        self.assertEqual(source1_rev_id, base_branch.revid)
655
639
        self.assertEqual(source2_rev_id, merged_branch.revid)
656
640
 
 
641
    def test_build_tree_implicit_dir(self):
 
642
        # Branches nested into non-existant directories trigger creation of
 
643
        # those directories.
 
644
        source1 = self.make_source_branch("source1")
 
645
        source2 = self.make_source_branch("source2")
 
646
        source3 = self.make_source_branch("source3")
 
647
        self.build_tree_contents([
 
648
            ("source2/file", "new file"),
 
649
            ("source3/yetanotherfile", "rugby")])
 
650
        source2.add(["file"])
 
651
        source2.commit("two")
 
652
        source3.add(["yetanotherfile"])
 
653
        source3.commit("three")
 
654
        base_branch = BaseRecipeBranch("source1", "1", 0.4)
 
655
        merged_branch_2 = RecipeBranch("merged", "source2")
 
656
        # Merge source2 into path implicit/b
 
657
        base_branch.nest_part_branch(merged_branch_2, ".",
 
658
            target_subdir="implicit/b")
 
659
        # Merge source3 into path implicit/moreimplicit/c
 
660
        merged_branch_3 = RecipeBranch("merged", "source3")
 
661
        base_branch.nest_part_branch(merged_branch_3, ".",
 
662
            target_subdir="moreimplicit/another/c")
 
663
        build_tree(base_branch, "target")
 
664
        self.check_file_contents("target/implicit/b/file", "new file")
 
665
        self.check_file_contents("target/moreimplicit/another/c/yetanotherfile",
 
666
            "rugby")
 
667
 
657
668
    def test_build_tree_nest_part(self):
658
669
        """A recipe can specify a merge of just part of an unrelated tree."""
659
670
        source1 = self.make_source_branch("source1")
723
734
        self.assertPathExists("target")
724
735
        tree = workingtree.WorkingTree.open("target")
725
736
        last_revid = tree.last_revision()
726
 
        previous_revid = tree.branch.revision_history()[-2]
 
737
        previous_revid = tree.branch.repository.get_revision(tree.branch.last_revision()).parent_ids[0]
727
738
        last_revtree = tree.branch.repository.revision_tree(last_revid)
728
739
        previous_revtree = tree.branch.repository.revision_tree(previous_revid)
729
740
        self.assertEqual([previous_revid, source3_rev_id],
932
943
                    "revspec at the end of the merge line?"))
933
944
 
934
945
 
935
 
class ResolveRevisionsTests(TestCaseWithTransport):
936
 
 
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)
949
 
 
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)
962
 
 
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)
985
 
 
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,
991
 
                revspec="revid:foo")
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)
998
 
 
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)
1013
 
 
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)
1024
 
 
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)
1035
 
 
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)
1049
 
 
1050
 
    def test_substitute_supports_debupstream(self):
1051
 
        # resolve_revisions should leave debupstream parameters alone and not
1052
 
        # complain.
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)
1059
 
 
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)
1066
 
 
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,
1074
 
            branch1)
1075
 
        self.assertTrue(str(e).startswith("unable to expand {svn-revno} "),
1076
 
            e)
1077
 
 
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)
1087
 
 
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,
1094
 
            branch1)
1095
 
        self.assertTrue(str(e).startswith("unable to expand {git-commit} "),
1096
 
            e)
1097
 
 
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)
1105
 
 
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)
1114
 
 
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"),
1122
 
            e)
1123
 
 
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)
1132
 
 
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)
1141
 
 
1142
 
 
1143
946
class StringifyTests(TestCaseInTempDir):
1144
947
 
1145
948
    def test_missing_debversion(self):
1317
1120
        rbranch2 = RecipeBranch("name", "other_url2")
1318
1121
        self.assertTrue(rbranch1.different_shape_to(rbranch2))
1319
1122
 
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)
1327
 
 
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)
1335
 
 
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)
1355
 
 
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 "
1361
 
                    "10:03:10 +0100\n")
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)
1375
 
 
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 "
1380
 
                    "10:03:10 +0100\n")
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)
1390
 
 
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()))
1434
 
 
1435
 
 
1436
 
class DebUpstreamVariableTests(TestCase):
1437
 
 
1438
 
    def write_changelog(self, version):
1439
 
        contents = textwrap.dedent("""
1440
 
            package (%s) experimental; urgency=low
1441
 
 
1442
 
              * Initial release. (Closes: #XXXXXX)
1443
 
 
1444
 
             -- Jelmer Vernooij <jelmer@debian.org>  Thu, 19 May 2011 10:07:41 +0100
1445
 
            """ % version)[1:]
1446
 
        return changelog.Changelog(file=contents)
1447
 
 
1448
 
    def test_empty_changelog(self):
1449
 
        var = DebUpstreamVariable.from_changelog(None, changelog.Changelog())
1450
 
        self.assertRaises(SubstitutionUnavailable, var.get)
1451
 
 
1452
 
    def test_version(self):
1453
 
        var = DebUpstreamVariable.from_changelog(None,
1454
 
            self.write_changelog("2.3"))
1455
 
        self.assertEquals("2.3", var.get())
1456
 
 
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())
1462
 
 
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())
1467
 
 
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())
1472
 
 
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())
1477
 
 
1478
 
 
1479
 
class DebVersionVariableTests(TestCase):
1480
 
 
1481
 
    def write_changelog(self, version):
1482
 
        contents = textwrap.dedent("""
1483
 
            package (%s) experimental; urgency=low
1484
 
 
1485
 
              * Initial release. (Closes: #XXXXXX)
1486
 
 
1487
 
             -- Jelmer Vernooij <jelmer@debian.org>  Thu, 19 May 2011 10:07:41 +0100
1488
 
            """ % version)[1:]
1489
 
        return changelog.Changelog(file=contents)
1490
 
 
1491
 
    def test_empty_changelog(self):
1492
 
        var = DebVersionVariable.from_changelog(None, changelog.Changelog())
1493
 
        self.assertRaises(SubstitutionUnavailable, var.get)
1494
 
 
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())
1499
 
 
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())