79
80
self.up_tree1.set_root_id(root_id)
80
81
self.db1 = DistributionBranch(self.tree1.branch,
81
82
self.up_tree1.branch, tree=self.tree1,
82
upstream_tree=self.up_tree1)
83
pristine_upstream_tree=self.up_tree1)
83
84
self.tree2 = self.make_branch_and_tree('experimental')
84
85
self.tree2.set_root_id(root_id)
85
86
self.up_tree2 = self.make_branch_and_tree('experimental-upstream')
86
87
self.up_tree2.set_root_id(root_id)
87
88
self.db2 = DistributionBranch(self.tree2.branch,
88
89
self.up_tree2.branch, tree=self.tree2,
89
upstream_tree=self.up_tree2)
90
pristine_upstream_tree=self.up_tree2)
90
91
self.tree3 = self.make_branch_and_tree('gutsy')
91
92
self.tree3.set_root_id(root_id)
92
93
self.up_tree3 = self.make_branch_and_tree('gutsy-upstream')
93
94
self.up_tree3.set_root_id(root_id)
94
95
self.db3 = DistributionBranch(self.tree3.branch,
95
96
self.up_tree3.branch, tree=self.tree3,
96
upstream_tree=self.up_tree3)
97
pristine_upstream_tree=self.up_tree3)
97
98
self.tree4 = self.make_branch_and_tree('hardy')
98
99
self.tree4.set_root_id(root_id)
99
100
self.up_tree4 = self.make_branch_and_tree('hardy-upstream')
100
101
self.up_tree4.set_root_id(root_id)
101
102
self.db4 = DistributionBranch(self.tree4.branch,
102
103
self.up_tree4.branch, tree=self.tree4,
103
upstream_tree=self.up_tree4)
104
pristine_upstream_tree=self.up_tree4)
104
105
self.set = DistributionBranchSet()
105
106
self.set.add_branch(self.db1)
106
107
self.set.add_branch(self.db2)
168
169
self.assertFalse(db.has_version(version, self.fake_md5_1))
169
170
self.assertFalse(db.has_version(version, self.fake_md5_2))
171
def test_has_upstream_version(self):
172
def test_pristine_upstream_source_has_version(self):
174
self.assertFalse(db.has_upstream_version(version))
175
self.assertFalse(db.has_upstream_version(version, self.fake_md5_1))
175
self.assertFalse(db.pristine_upstream_source.has_version("package", version))
176
self.assertFalse(db.pristine_upstream_source.has_version("package", version,
177
[("foo.tar.gz", None, self.fake_md5_1)]))
176
178
self.do_commit_with_md5(self.up_tree1, "one", self.fake_md5_1)
177
179
db.tag_upstream_version(version)
178
self.assertTrue(db.has_upstream_version(version))
179
self.assertTrue(db.has_upstream_version(version, self.fake_md5_1))
180
self.assertFalse(db.has_upstream_version(version, self.fake_md5_2))
180
self.assertTrue(db.pristine_upstream_source.has_version("package", version))
181
self.assertTrue(db.pristine_upstream_source.has_version("package",
182
version, [("foo.tar.gz", None, self.fake_md5_1)]))
183
self.assertFalse(db.pristine_upstream_source.has_version("package", version,
184
[("foo.tar.gz", None, self.fake_md5_2)]))
182
self.assertTrue(db.has_upstream_version(version))
183
self.assertTrue(db.has_upstream_version(version, self.fake_md5_1))
184
self.assertFalse(db.has_upstream_version(version, self.fake_md5_2))
186
self.assertTrue(db.pristine_upstream_source.has_version("package", version))
187
self.assertTrue(db.pristine_upstream_source.has_version("package", version,
188
[("foo.tar.gz", None, self.fake_md5_1)]))
189
self.assertFalse(db.pristine_upstream_source.has_version("package", version,
190
[("foo.tar.gz", None, self.fake_md5_2)]))
186
self.assertFalse(db.has_upstream_version(version))
187
self.assertFalse(db.has_upstream_version(version, self.fake_md5_1))
188
self.assertFalse(db.has_upstream_version(version, self.fake_md5_2))
192
self.assertFalse(db.pristine_upstream_source.has_version("package", version))
193
self.assertFalse(db.pristine_upstream_source.has_version("package", version,
194
[("foo.tar.gz", None, self.fake_md5_1)]))
195
self.assertFalse(db.pristine_upstream_source.has_version("package", version,
196
[("foo.tar.gz", None, self.fake_md5_2)]))
190
198
def test_revid_of_version(self):
629
640
version1 = Version("0.1-1")
630
641
version2 = Version("0.2-1")
631
642
# With no versions tagged everything is None
632
branch = self.db2.branch_to_pull_upstream_from(
633
version1.upstream_version, self.fake_md5_1)
634
self.assertEqual(branch, None)
635
branch = self.db2.branch_to_pull_upstream_from(
636
version1.upstream_version, self.fake_md5_2)
637
self.assertEqual(branch, None)
638
branch = self.db1.branch_to_pull_upstream_from(
639
version1.upstream_version, self.fake_md5_1)
643
branch = self.db2.branch_to_pull_upstream_from("package",
644
version1.upstream_version, [("foo.tar.gz", None, self.fake_md5_1)])
645
self.assertEqual(branch, None)
646
branch = self.db2.branch_to_pull_upstream_from("package",
647
version1.upstream_version, [("foo.tar.gz", None, self.fake_md5_2)])
648
self.assertEqual(branch, None)
649
branch = self.db1.branch_to_pull_upstream_from("package",
650
version1.upstream_version, [("foo.tar.gz", None, self.fake_md5_1)])
640
651
self.assertEqual(branch, None)
641
652
self.do_commit_with_md5(self.up_tree1, "one", self.fake_md5_1)
642
653
self.db1.tag_upstream_version(version1.upstream_version)
643
654
# Version and md5 available, so we get the correct branch.
644
branch = self.db2.branch_to_pull_upstream_from(
645
version1.upstream_version, self.fake_md5_1)
655
branch = self.db2.branch_to_pull_upstream_from("package",
656
version1.upstream_version, [("foo.tar.gz", None, self.fake_md5_1)])
646
657
self.assertEqual(branch, self.db1)
647
658
# Otherwise (different version or md5) then we get None
648
branch = self.db2.branch_to_pull_upstream_from(
649
version1.upstream_version, self.fake_md5_2)
650
self.assertEqual(branch, None)
651
branch = self.db2.branch_to_pull_upstream_from(version2.upstream_version,
653
self.assertEqual(branch, None)
654
branch = self.db2.branch_to_pull_upstream_from(version2.upstream_version,
659
branch = self.db2.branch_to_pull_upstream_from("package",
660
version1.upstream_version, [("foo.tar.gz", None, self.fake_md5_2)])
661
self.assertEqual(branch, None)
662
branch = self.db2.branch_to_pull_upstream_from("package",
663
version2.upstream_version,
664
[("foo.tar.gz", None, self.fake_md5_1)])
665
self.assertEqual(branch, None)
666
branch = self.db2.branch_to_pull_upstream_from("package",
667
version2.upstream_version,
668
[("foo.tar.gz", None, self.fake_md5_2)])
656
669
self.assertEqual(branch, None)
657
670
# And we don't get a branch for the one that already has
659
branch = self.db1.branch_to_pull_upstream_from(
660
version1.upstream_version, self.fake_md5_1)
672
branch = self.db1.branch_to_pull_upstream_from("package",
673
version1.upstream_version, [("foo.tar.gz", None, self.fake_md5_1)])
661
674
self.assertEqual(branch, None)
662
675
self.up_tree2.pull(self.up_tree1.branch)
663
676
self.db2.tag_upstream_version(version1.upstream_version)
664
677
# And we get the greatest branch when two lesser branches
665
678
# have what we are looking for.
666
branch = self.db3.branch_to_pull_upstream_from(
667
version1.upstream_version, self.fake_md5_1)
679
branch = self.db3.branch_to_pull_upstream_from("package",
680
version1.upstream_version, [("foo.tar.gz", None, self.fake_md5_1)])
668
681
self.assertEqual(branch, self.db2)
669
682
# If the branches have diverged then we don't get a branch.
670
683
self.up_tree3.commit("three")
671
branch = self.db3.branch_to_pull_upstream_from(
672
version1.upstream_version, self.fake_md5_1)
684
branch = self.db3.branch_to_pull_upstream_from("package",
685
version1.upstream_version, [("foo.tar.gz", None, self.fake_md5_1)])
673
686
self.assertEqual(branch, None)
675
688
def test_pull_from_lesser_branch_no_upstream(self):
683
696
revid = self.do_commit_with_md5(self.tree1, "one", self.fake_md5_2)
684
697
self.db1.tag_version(version)
685
698
self.assertNotEqual(self.tree2.branch.last_revision(), revid)
686
self.db2.pull_version_from_branch(self.db1, version)
699
self.db2.pull_version_from_branch(self.db1, "package", version)
687
700
self.assertEqual(self.tree2.branch.last_revision(), revid)
688
701
self.assertEqual(self.up_tree2.branch.last_revision(), up_revid)
689
702
self.assertEqual(self.db2.revid_of_version(version), revid)
690
self.assertEqual(self.db2.revid_of_upstream_version(
691
version.upstream_version), up_revid)
703
self.assertEqual(self.db2.pristine_upstream_source.version_as_revision(
704
"package", version.upstream_version), up_revid)
693
706
def test_pull_from_lesser_branch_with_upstream(self):
694
707
version = Version("0.1-1")
699
712
self.db1.tag_version(version)
700
713
self.assertNotEqual(self.tree2.branch.last_revision(), revid)
701
714
self.assertNotEqual(self.up_tree2.branch.last_revision(), up_revid)
702
self.db2.pull_version_from_branch(self.db1, version)
715
self.db2.pull_version_from_branch(self.db1, "package", version)
703
716
self.assertEqual(self.tree2.branch.last_revision(), revid)
704
717
self.assertEqual(self.up_tree2.branch.last_revision(), up_revid)
705
718
self.assertEqual(self.db2.revid_of_version(version), revid)
706
self.assertEqual(self.db2.revid_of_upstream_version(
707
version.upstream_version), up_revid)
719
self.assertEqual(self.db2.pristine_upstream_source.version_as_revision(
720
"package", version.upstream_version), up_revid)
709
722
def test_pull_upstream_from_branch(self):
771
784
branch = tree.branch
772
785
rh = branch.revision_history()
773
786
self.assertEqual(len(rh), 1)
774
self.assertEqual(self.db1.revid_of_upstream_version(
775
version.upstream_version), rh[0])
787
self.assertEqual(self.db1.pristine_upstream_source.version_as_revision(
788
"package", version.upstream_version), rh[0])
776
789
rev = branch.repository.get_revision(rh[0])
777
790
self.assertEqual(rev.message,
778
791
"Import upstream version %s" % str(version.upstream_version))
779
self.assertEqual(rev.properties['deb-md5'], self.fake_md5_1)
792
self.assertEqual(rev.properties.get('deb-md5'), None)
781
794
def test_import_upstream_preserves_dot_bzrignore(self):
782
795
self.import_a_tree([('',), ('.bzrignore', '')])
796
809
write_to_file(os.path.join(basedir, "README"), "Hi\n")
797
810
write_to_file(os.path.join(basedir, "BUGS"), "")
798
811
write_to_file(os.path.join(basedir, "COPYING"), "")
799
self.db1.import_upstream(basedir, version1.upstream_version,
812
self.db1.import_upstream(basedir, "package", version1.upstream_version, [],
813
[(None, None, None)])
801
814
basedir = name + "-" + str(version2.upstream_version)
802
815
os.mkdir(basedir)
803
816
write_to_file(os.path.join(basedir, "README"), "Now even better\n")
804
817
write_to_file(os.path.join(basedir, "BUGS"), "")
805
818
write_to_file(os.path.join(basedir, "NEWS"), "")
806
self.db1.import_upstream(basedir, version2.upstream_version,
808
[self.up_tree1.branch.last_revision()])
819
self.db1.import_upstream(basedir, "package", version2.upstream_version,
820
[self.up_tree1.branch.last_revision()], [(None, None, None)])
809
821
tree = self.up_tree1
810
822
branch = tree.branch
811
823
rh = branch.revision_history()
812
824
self.assertEqual(len(rh), 2)
813
self.assertEqual(self.db1.revid_of_upstream_version(version2.upstream_version), rh[1])
826
self.db1.pristine_upstream_source.version_as_revision("package", version2.upstream_version), rh[1])
814
827
rev = branch.repository.get_revision(rh[1])
815
828
self.assertEqual(rev.message,
816
829
"Import upstream version %s" % str(version2.upstream_version))
817
self.assertEqual(rev.properties['deb-md5'], self.fake_md5_2)
830
self.assertIs(rev.properties.get('deb-md5'), None)
818
831
rev_tree1 = branch.repository.revision_tree(rh[0])
819
832
rev_tree2 = branch.repository.revision_tree(rh[1])
820
833
changes = rev_tree2.changes_from(rev_tree1)
838
self.db1.import_upstream(basedir, version.upstream_version,
839
self.fake_md5_1, [], upstream_tarball=os.path.abspath(tar_path))
851
self.db1.import_upstream(basedir, "package", version.upstream_version, [],
852
upstream_tarballs=[(os.path.abspath(tar_path), None, self.fake_md5_1)])
840
853
tree = self.up_tree1
841
854
branch = tree.branch
842
855
rh = branch.revision_history()
843
856
self.assertEqual(len(rh), 1)
844
self.assertEqual(self.db1.revid_of_upstream_version(
845
version.upstream_version), rh[0])
857
self.assertEqual(self.db1.pristine_upstream_source.version_as_revision(
858
"package", version.upstream_version), rh[0])
846
859
rev = branch.repository.get_revision(rh[0])
847
860
self.assertEqual(rev.message,
848
861
"Import upstream version %s" % str(version.upstream_version))
866
self.db1.import_upstream(basedir, version.upstream_version,
867
self.fake_md5_1, [], upstream_tarball=os.path.abspath(tar_path))
879
self.db1.import_upstream(basedir, "package", version.upstream_version,
880
[], upstream_tarballs=[(os.path.abspath(tar_path), None, self.fake_md5_1)])
868
881
tree = self.up_tree1
869
882
branch = tree.branch
870
883
rh = branch.revision_history()
871
884
self.assertEqual(len(rh), 1)
872
self.assertEqual(self.db1.revid_of_upstream_version(
873
version.upstream_version), rh[0])
885
self.assertEqual(self.db1.pristine_upstream_source.version_as_revision(
886
"package", version.upstream_version), rh[0])
874
887
rev = branch.repository.get_revision(rh[0])
875
888
self.assertEqual(rev.message,
876
889
"Import upstream version %s" % str(version.upstream_version))
877
890
self.assertEqual(rev.properties['deb-md5'], self.fake_md5_1)
878
891
self.assertTrue('deb-pristine-delta-bz2' in rev.properties)
893
def test_import_upstream_with_lzma_tarball(self):
894
self.requireFeature(PristineTarFeature)
895
self.requireFeature(LzmaFeature)
897
version = Version("0.1-1")
899
basedir = name + "-" + str(version.upstream_version)
901
write_to_file(os.path.join(basedir, "README"), "Hi\n")
902
write_to_file(os.path.join(basedir, "BUGS"), "")
903
tar_path = "package_0.1.orig.tar.lzma"
904
f = lzma.LZMAFile(tar_path, 'w')
906
tf = tarfile.open(None, 'w', f)
913
self.db1.import_upstream(basedir, "package", version.upstream_version,
914
[], upstream_tarballs=[(os.path.abspath(tar_path), None, self.fake_md5_1)])
917
rh = branch.revision_history()
918
self.assertEqual(len(rh), 1)
919
self.assertEqual(self.db1.pristine_upstream_source.version_as_revision(
920
"package", version.upstream_version), rh[0])
921
rev = branch.repository.get_revision(rh[0])
922
self.assertEqual(rev.message,
923
"Import upstream version %s" % str(version.upstream_version))
924
self.assertEqual(rev.properties['deb-md5'], self.fake_md5_1)
925
self.assertTrue('deb-pristine-delta-lzma' in rev.properties)
880
927
def test_import_package_init_from_other(self):
881
928
self.requireFeature(PristineTarFeature)
882
929
version1 = Version("0.1-1")
1606
1653
upstream_tree.add(['a'], ['a-id'])
1607
1654
upstream_tree.commit("one")
1608
1655
upstream_rev = upstream_tree.branch.last_revision()
1609
db = DistributionBranch(tree.branch, None, tree=tree)
1656
db = DistributionBranch(tree.branch, tree.branch, tree=tree)
1610
1657
dbs = DistributionBranchSet()
1611
1658
dbs.add_branch(db)
1612
1659
tree.lock_write()
1613
1660
self.addCleanup(tree.unlock)
1614
db.merge_upstream(builder.tar_name(), "package", str(version2),
1661
db.merge_upstream([(builder.tar_name(), None)], "package", str(version2),
1615
1662
version1.upstream_version,
1616
1663
upstream_branch=upstream_tree.branch,
1617
1664
upstream_revision=upstream_rev)
1914
1961
self.assertFalse(os.path.exists(os.path.join(orig_dir,
1915
1962
"debian", "control")))
1916
self.assertTrue(os.path.exists(extractor.unextracted_upstream))
1963
self.assertTrue(os.path.exists(extractor.upstream_tarballs[0][0]))
1918
1965
extractor.cleanup()
1967
def test_extract_format3_quilt_multiple_upstream_tarballs(self):
1968
version = Version("0.1-1")
1970
builder = SourcePackageBuilder(name, version, version3=True,
1971
multiple_upstream_tarballs=("foo", "bar"))
1972
builder.add_upstream_file("README", "Hi\n")
1973
builder.add_upstream_file("BUGS")
1974
builder.add_upstream_file("foo/wibble")
1975
builder.add_upstream_file("bar/xyzzy")
1976
builder.add_default_control()
1977
builder.build(tar_format='bz2')
1978
dsc = deb822.Dsc(open(builder.dsc_name()).read())
1979
self.assertEqual(ThreeDotZeroQuiltSourceExtractor,
1980
SOURCE_EXTRACTORS[dsc['Format']])
1981
extractor = ThreeDotZeroQuiltSourceExtractor(builder.dsc_name(), dsc)
1982
self.addCleanup(extractor.cleanup)
1983
self.assertEquals([], extractor.upstream_tarballs)