Merge lp:~jelmer/bzr-builddeb/multi-tarball-pt8 into lp:bzr-builddeb

Proposed by Jelmer Vernooij
Status: Superseded
Proposed branch: lp:~jelmer/bzr-builddeb/multi-tarball-pt8
Merge into: lp:bzr-builddeb
Diff against target: 635 lines (+157/-145)
4 files modified
cmds.py (+1/-1)
import_dsc.py (+86/-103)
tests/test_import_dsc.py (+26/-26)
upstream/pristinetar.py (+44/-15)
To merge this branch: bzr merge lp:~jelmer/bzr-builddeb/multi-tarball-pt8
Reviewer Review Type Date Requested Status
Bzr-builddeb-hackers Pending
Review via email: mp+68224@code.launchpad.net

This proposal has been superseded by a proposal from 2011-07-18.

To post a comment you must log in.

Unmerged revisions

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'cmds.py'
--- cmds.py 2011-06-28 08:41:44 +0000
+++ cmds.py 2011-07-18 10:01:28 +0000
@@ -964,7 +964,7 @@
964 db.extract_upstream_tree(parents[0], tempdir)964 db.extract_upstream_tree(parents[0], tempdir)
965 else:965 else:
966 db._create_empty_upstream_tree(tempdir)966 db._create_empty_upstream_tree(tempdir)
967 tree = db.get_branch_tip_revtree()967 tree = db.branch.basis_tree()
968 tree.lock_read()968 tree.lock_read()
969 dbs = DistributionBranchSet()969 dbs = DistributionBranchSet()
970 dbs.add_branch(db)970 dbs.add_branch(db)
971971
=== modified file 'import_dsc.py'
--- import_dsc.py 2011-06-28 08:41:44 +0000
+++ import_dsc.py 2011-07-18 10:01:28 +0000
@@ -277,25 +277,25 @@
277 return str(version)277 return str(version)
278278
279 def _has_version(self, branch, tag_name, md5=None):279 def _has_version(self, branch, tag_name, md5=None):
280 if branch.tags.has_tag(tag_name):280 if not branch.tags.has_tag(tag_name):
281 revid = branch.tags.lookup_tag(tag_name)281 return False
282 branch.lock_read()282 revid = branch.tags.lookup_tag(tag_name)
283 try:283 branch.lock_read()
284 graph = branch.repository.get_graph()284 try:
285 if not graph.is_ancestor(revid, branch.last_revision()):285 graph = branch.repository.get_graph()
286 return False286 if not graph.is_ancestor(revid, branch.last_revision()):
287 finally:287 return False
288 branch.unlock()288 finally:
289 if md5 is None:289 branch.unlock()
290 return True290 if md5 is None:
291 rev = branch.repository.get_revision(revid)291 return True
292 try:292 rev = branch.repository.get_revision(revid)
293 return rev.properties['deb-md5'] == md5293 try:
294 except KeyError:294 return rev.properties['deb-md5'] == md5
295 warning("tag %s present in branch, but there is no "295 except KeyError:
296 "associated 'deb-md5' property" % tag_name)296 warning("tag %s present in branch, but there is no "
297 pass297 "associated 'deb-md5' property" % tag_name)
298 return False298 return False
299299
300 def has_version(self, version, md5=None):300 def has_version(self, version, md5=None):
301 """Whether this branch contains the package version specified.301 """Whether this branch contains the package version specified.
@@ -409,18 +409,6 @@
409 return self.branch.tags.lookup_tag(ubuntu_tag_name)409 return self.branch.tags.lookup_tag(ubuntu_tag_name)
410 return self.branch.tags.lookup_tag(tag_name)410 return self.branch.tags.lookup_tag(tag_name)
411411
412 def revid_of_upstream_version(self, package, version, tarballs=None):
413 """Returns the revision id corresponding to the upstream version.
414
415 :param version: the Version object to extract the upstream version
416 from to retrieve the revid of. The upstream version must be
417 present in the upstream branch.
418 :return: the revision id corresponding to the upstream portion
419 of the version
420 """
421 return self.pristine_upstream_source.version_as_revision(package, version,
422 tarballs)
423
424 def tag_version(self, version, revid=None):412 def tag_version(self, version, revid=None):
425 """Tags the branch's last revision with the given version.413 """Tags the branch's last revision with the given version.
426414
@@ -506,6 +494,21 @@
506 except KeyError:494 except KeyError:
507 return False495 return False
508496
497 def can_pull_from_branch(self, branch, version, md5):
498 if not branch.has_version(version, md5=md5):
499 return False
500
501 # Check that they haven't diverged
502 branch.branch.lock_read()
503 try:
504 graph = branch.branch.repository.get_graph(
505 self.branch.repository)
506 return graph.is_ancestor(self.branch.last_revision(),
507 branch.revid_of_version(version))
508 finally:
509 branch.branch.unlock()
510
511
509 def branch_to_pull_version_from(self, version, md5):512 def branch_to_pull_version_from(self, version, md5):
510 """Checks whether this upload is a pull from a lesser branch.513 """Checks whether this upload is a pull from a lesser branch.
511514
@@ -531,29 +534,11 @@
531 self.branch.lock_read()534 self.branch.lock_read()
532 try:535 try:
533 for branch in reversed(self.get_lesser_branches()):536 for branch in reversed(self.get_lesser_branches()):
534 if branch.has_version(version, md5=md5):537 if self.can_pull_from_branch(branch, version, md5):
535 # Check that they haven't diverged538 return branch
536 branch.branch.lock_read()
537 try:
538 graph = branch.branch.repository.get_graph(
539 self.branch.repository)
540 if graph.is_ancestor(self.branch.last_revision(),
541 branch.revid_of_version(version)):
542 return branch
543 finally:
544 branch.branch.unlock()
545 for branch in self.get_greater_branches():539 for branch in self.get_greater_branches():
546 if branch.has_version(version, md5=md5):540 if self.can_pull_from_branch(branch, version, md5):
547 # Check that they haven't diverged541 return branch
548 branch.branch.lock_read()
549 try:
550 graph = branch.branch.repository.get_graph(
551 self.branch.repository)
552 if graph.is_ancestor(self.branch.last_revision(),
553 branch.revid_of_version(version)):
554 return branch
555 finally:
556 branch.branch.unlock()
557 return None542 return None
558 finally:543 finally:
559 self.branch.unlock()544 self.branch.unlock()
@@ -581,7 +566,7 @@
581 graph = other_up_branch.repository.get_graph(566 graph = other_up_branch.repository.get_graph(
582 up_branch.repository)567 up_branch.repository)
583 return graph.is_ancestor(up_branch.last_revision(),568 return graph.is_ancestor(up_branch.last_revision(),
584 branch.revid_of_upstream_version(package, version))569 branch.pristine_upstream_source.version_as_revision(package, version))
585 finally:570 finally:
586 other_up_branch.unlock()571 other_up_branch.unlock()
587 finally:572 finally:
@@ -695,7 +680,7 @@
695 :param version: the upstream version string680 :param version: the upstream version string
696 """681 """
697 assert isinstance(version, str)682 assert isinstance(version, str)
698 pull_revision = pull_branch.revid_of_upstream_version(package, version)683 pull_revision = pull_branch.pristine_upstream_source.version_as_revision(package, version)
699 mutter("Pulling upstream part of %s from revision %s" % \684 mutter("Pulling upstream part of %s from revision %s" % \
700 (version, pull_revision))685 (version, pull_revision))
701 assert self.pristine_upstream_tree is not None, \686 assert self.pristine_upstream_tree is not None, \
@@ -753,7 +738,7 @@
753 "present in the upstream branch")738 "present in the upstream branch")
754739
755 def get_parents_with_upstream(self, package, version, versions,740 def get_parents_with_upstream(self, package, version, versions,
756 force_upstream_parent=False):741 tarballs, force_upstream_parent=False):
757 """Get the list of parents including any upstream parents.742 """Get the list of parents including any upstream parents.
758743
759 Further to get_parents this method includes any upstream parents744 Further to get_parents this method includes any upstream parents
@@ -765,7 +750,7 @@
765 If force_upstream_parent is True then the upstream parent will750 If force_upstream_parent is True then the upstream parent will
766 be included, even if another parent is already using that751 be included, even if another parent is already using that
767 upstream. This is for use in cases where the .orig.tar.gz752 upstream. This is for use in cases where the .orig.tar.gz
768 is different in two ditributions.753 is different in two distributions.
769754
770 :param version: the Version that we are currently importing.755 :param version: the Version that we are currently importing.
771 :param versions: the list of Versions that are ancestors of756 :param versions: the list of Versions that are ancestors of
@@ -789,8 +774,8 @@
789 break774 break
790 real_parents = [p[2] for p in parents]775 real_parents = [p[2] for p in parents]
791 if need_upstream_parent:776 if need_upstream_parent:
792 parent_revid = self.revid_of_upstream_version(package,777 parent_revid = self.pristine_upstream_source.version_as_revision(package,
793 version.upstream_version)778 version.upstream_version, tarballs)
794 if len(parents) > 0:779 if len(parents) > 0:
795 real_parents.insert(1, parent_revid)780 real_parents.insert(1, parent_revid)
796 else:781 else:
@@ -833,46 +818,48 @@
833 % (version, upstream_part, str(upstream_parents)))818 % (version, upstream_part, str(upstream_parents)))
834 assert self.pristine_upstream_tree is not None, \819 assert self.pristine_upstream_tree is not None, \
835 "Can't import upstream with no tree"820 "Can't import upstream with no tree"
836 if len(upstream_parents) > 0:
837 parent_revid = upstream_parents[0]
838 else:
839 parent_revid = NULL_REVISION
840 self.pristine_upstream_tree.pull(self.pristine_upstream_tree.branch,
841 overwrite=True, stop_revision=parent_revid)
842 other_branches = self.get_other_branches()821 other_branches = self.get_other_branches()
843 upstream_trees = [o.pristine_upstream_branch.basis_tree()
844 for o in other_branches]
845 target_tree = None
846 if upstream_branch is not None:
847 if upstream_revision is None:
848 upstream_revision = upstream_branch.last_revision()
849 self.pristine_upstream_branch.fetch(upstream_branch,
850 last_revision=upstream_revision)
851 upstream_branch.tags.merge_to(self.pristine_upstream_branch.tags)
852 upstream_parents.append(upstream_revision)
853 target_tree = self.pristine_upstream_branch.repository.revision_tree(
854 upstream_revision)
855 if file_ids_from is not None:
856 upstream_trees = file_ids_from + upstream_trees
857 if self.tree:
858 self_tree = self.tree
859 self_tree.lock_write() # might also be upstream tree for dh_make
860 else:
861 self_tree = self.get_branch_tip_revtree()
862 self_tree.lock_read()
863 try:
864 import_dir(self.pristine_upstream_tree, upstream_part,
865 file_ids_from=[self_tree] + upstream_trees,
866 target_tree=target_tree)
867 finally:
868 self_tree.unlock()
869 revprops = {}
870 ret = []822 ret = []
871 for (tarball, component, md5) in upstream_tarballs:823 for (tarball, component, md5) in upstream_tarballs:
824 upstream_trees = [o.pristine_upstream_branch.basis_tree()
825 for o in other_branches]
826 target_tree = None
827 if upstream_branch is not None:
828 if upstream_revision is None:
829 upstream_revision = upstream_branch.last_revision()
830 self.pristine_upstream_branch.fetch(upstream_branch,
831 last_revision=upstream_revision)
832 upstream_branch.tags.merge_to(self.pristine_upstream_branch.tags)
833 upstream_parents.append(upstream_revision)
834 target_tree = self.pristine_upstream_branch.repository.revision_tree(
835 upstream_revision)
836 if file_ids_from is not None:
837 upstream_trees = file_ids_from + upstream_trees
838 if self.tree:
839 self_tree = self.tree
840 self_tree.lock_write() # might also be upstream tree for dh_make
841 else:
842 self_tree = self.branch.basis_tree()
843 self_tree.lock_read()
844 if len(upstream_parents) > 0:
845 parent_revid = upstream_parents[0]
846 else:
847 parent_revid = NULL_REVISION
848 self.pristine_upstream_tree.pull(self.pristine_upstream_tree.branch,
849 overwrite=True, stop_revision=parent_revid)
850 if component is None:
851 path = upstream_part
852 else:
853 path = os.path.join(upstream_part, component)
854 try:
855 import_dir(self.pristine_upstream_tree, path,
856 file_ids_from=[self_tree] + upstream_trees,
857 target_tree=target_tree)
858 finally:
859 self_tree.unlock()
872 (tag, revid) = self.pristine_upstream_source.import_component_tarball(860 (tag, revid) = self.pristine_upstream_source.import_component_tarball(
873 package, version, self.pristine_upstream_tree, component,861 package, version, self.pristine_upstream_tree, upstream_parents, component,
874 md5, tarball, author=author, timestamp=timestamp,862 md5, tarball, author=author, timestamp=timestamp)
875 parent_ids=upstream_parents)
876 ret.append((component, tag, revid))863 ret.append((component, tag, revid))
877 self.branch.fetch(self.pristine_upstream_branch)864 self.branch.fetch(self.pristine_upstream_branch)
878 self.branch.tags.set_tag(tag, revid)865 self.branch.tags.set_tag(tag, revid)
@@ -902,12 +889,8 @@
902 finally:889 finally:
903 shutil.rmtree(tarball_dir)890 shutil.rmtree(tarball_dir)
904891
905 def get_branch_tip_revtree(self):
906 return self.branch.repository.revision_tree(
907 self.branch.last_revision())
908
909 def _mark_native_config(self, native):892 def _mark_native_config(self, native):
910 poss_native_tree = self.get_branch_tip_revtree()893 poss_native_tree = self.branch.basis_tree()
911 current_native = self._is_tree_native(poss_native_tree)894 current_native = self._is_tree_native(poss_native_tree)
912 current_config = self._default_config_for_tree(poss_native_tree)895 current_config = self._default_config_for_tree(poss_native_tree)
913 dirname = os.path.join(self.tree.basedir, '.bzr-builddeb')896 dirname = os.path.join(self.tree.basedir, '.bzr-builddeb')
@@ -1069,7 +1052,7 @@
1069 pull_branch = pull_parents[1][0]1052 pull_branch = pull_parents[1][0]
1070 pull_version = pull_parents[1][1]1053 pull_version = pull_parents[1][1]
1071 if not pull_branch.is_version_native(pull_version):1054 if not pull_branch.is_version_native(pull_version):
1072 pull_revid = pull_branch.revid_of_upstream_version(1055 pull_revid = pull_branch.pristine_upstream_source.version_as_revision(
1073 package, pull_version.upstream_version)1056 package, pull_version.upstream_version)
1074 mutter("Initialising upstream from %s, version %s",1057 mutter("Initialising upstream from %s, version %s",
1075 str(pull_branch), str(pull_version))1058 str(pull_branch), str(pull_version))
@@ -1142,7 +1125,7 @@
1142 else:1125 else:
1143 mutter("We already have the needed upstream part")1126 mutter("We already have the needed upstream part")
1144 parents = self.get_parents_with_upstream(package, version, versions,1127 parents = self.get_parents_with_upstream(package, version, versions,
1145 force_upstream_parent=imported_upstream)1128 upstream_tarballs, force_upstream_parent=imported_upstream)
1146 # Now we have the list of parents we need to import the .diff.gz1129 # Now we have the list of parents we need to import the .diff.gz
1147 self.import_debian(debian_part, version, parents, md5,1130 self.import_debian(debian_part, version, parents, md5,
1148 timestamp=timestamp, file_ids_from=file_ids_from)1131 timestamp=timestamp, file_ids_from=file_ids_from)
@@ -1307,7 +1290,7 @@
1307 if self.tree:1290 if self.tree:
1308 root_id = self.tree.path2id('')1291 root_id = self.tree.path2id('')
1309 else:1292 else:
1310 tip = self.get_branch_tip_revtree()1293 tip = self.branch.basis_tree()
1311 tip.lock_read()1294 tip.lock_read()
1312 try:1295 try:
1313 root_id = tip.path2id('')1296 root_id = tip.path2id('')
13141297
=== modified file 'tests/test_import_dsc.py'
--- tests/test_import_dsc.py 2011-06-28 08:41:44 +0000
+++ tests/test_import_dsc.py 2011-07-18 10:01:28 +0000
@@ -203,14 +203,14 @@
203 db.tag_version(version)203 db.tag_version(version)
204 self.assertEqual(db.revid_of_version(version), revid)204 self.assertEqual(db.revid_of_version(version), revid)
205205
206 def test_revid_of_upstream_version(self):206 def test_upstream_version_as_revid(self):
207 db = self.db1207 db = self.db1
208 tree = self.up_tree1208 tree = self.up_tree1
209 version = "0.1"209 version = "0.1"
210 revid = tree.commit("one")210 revid = tree.commit("one")
211 db.tag_upstream_version(version)211 db.tag_upstream_version(version)
212 self.assertEqual(212 self.assertEqual(
213 db.revid_of_upstream_version("package", version), revid)213 db.pristine_upstream_source.version_as_revision("package", version), revid)
214214
215 def test_contained_versions(self):215 def test_contained_versions(self):
216 db = self.db1216 db = self.db1
@@ -401,13 +401,13 @@
401 up_revid = self.up_tree1.commit("one")401 up_revid = self.up_tree1.commit("one")
402 db.tag_upstream_version(version1.upstream_version)402 db.tag_upstream_version(version1.upstream_version)
403 self.assertEqual(403 self.assertEqual(
404 db.get_parents_with_upstream("package", version1, [version1]),404 db.get_parents_with_upstream("package", version1, [version1], None),
405 [up_revid])405 [up_revid])
406 db = self.db2406 db = self.db2
407 self.up_tree2.pull(self.up_tree1.branch)407 self.up_tree2.pull(self.up_tree1.branch)
408 db.tag_upstream_version(version1.upstream_version)408 db.tag_upstream_version(version1.upstream_version)
409 self.assertEqual(409 self.assertEqual(
410 db.get_parents_with_upstream("package", version1, [version1]),410 db.get_parents_with_upstream("package", version1, [version1], None),
411 [up_revid])411 [up_revid])
412412
413 def test_get_parents_with_upstream_second_version(self):413 def test_get_parents_with_upstream_second_version(self):
@@ -420,7 +420,7 @@
420 db.tag_upstream_version(version1.upstream_version)420 db.tag_upstream_version(version1.upstream_version)
421 # No upstream parent421 # No upstream parent
422 self.assertEqual(db.get_parents_with_upstream(422 self.assertEqual(db.get_parents_with_upstream(
423 "package", version2, [version2, version1]), [revid1])423 "package", version2, [version2, version1], None), [revid1])
424424
425 def test_get_parents_with_upstream_merge_from_lesser(self):425 def test_get_parents_with_upstream_merge_from_lesser(self):
426 version1 = Version("0.1-1")426 version1 = Version("0.1-1")
@@ -437,7 +437,7 @@
437 versions = [version3, version1, version2]437 versions = [version3, version1, version2]
438 # No upstream parent438 # No upstream parent
439 self.assertEqual(self.db2.get_parents_with_upstream(439 self.assertEqual(self.db2.get_parents_with_upstream(
440 "package", version3, versions), [revid2, revid1])440 "package", version3, versions, None), [revid2, revid1])
441441
442 def test_get_parents_with_upstream_merge_from_greater(self):442 def test_get_parents_with_upstream_merge_from_greater(self):
443 version1 = Version("0.1-1")443 version1 = Version("0.1-1")
@@ -454,7 +454,7 @@
454 versions = [version3, version2, version1]454 versions = [version3, version2, version1]
455 # No upstream parent455 # No upstream parent
456 self.assertEqual(self.db1.get_parents_with_upstream(456 self.assertEqual(self.db1.get_parents_with_upstream(
457 "package", version3, versions), [revid1, revid2])457 "package", version3, versions, None), [revid1, revid2])
458458
459 def test_get_parents_with_upstream_new_upstream_import(self):459 def test_get_parents_with_upstream_new_upstream_import(self):
460 version1 = Version("0.1-1")460 version1 = Version("0.1-1")
@@ -470,7 +470,7 @@
470 versions = [version2, version1]470 versions = [version2, version1]
471 # Upstream parent as it is new upstream version471 # Upstream parent as it is new upstream version
472 self.assertEqual(self.db2.get_parents_with_upstream(472 self.assertEqual(self.db2.get_parents_with_upstream(
473 "package", version2, versions), [revid1, up_revid2])473 "package", version2, versions, None), [revid1, up_revid2])
474474
475 def test_get_parents_merge_new_upstream_from_lesser(self):475 def test_get_parents_merge_new_upstream_from_lesser(self):
476 version1 = Version("0.1-1")476 version1 = Version("0.1-1")
@@ -494,7 +494,7 @@
494 versions = [version4, version3, version2, version1]494 versions = [version4, version3, version2, version1]
495 # no upstream parent as the lesser branch has already merged it495 # no upstream parent as the lesser branch has already merged it
496 self.assertEqual(self.db2.get_parents_with_upstream(496 self.assertEqual(self.db2.get_parents_with_upstream(
497 "package", version4, versions), [revid2, revid3])497 "package", version4, versions, None), [revid2, revid3])
498498
499 def test_get_parents_with_upstream_force_upstream(self):499 def test_get_parents_with_upstream_force_upstream(self):
500 version1 = Version("0.1-1")500 version1 = Version("0.1-1")
@@ -509,7 +509,7 @@
509 # a previous test checked that this wouldn't give an509 # a previous test checked that this wouldn't give an
510 # upstream parent, but we are requiring one.510 # upstream parent, but we are requiring one.
511 self.assertEqual(self.db2.get_parents_with_upstream(511 self.assertEqual(self.db2.get_parents_with_upstream(
512 "package", version2, versions, force_upstream_parent=True),512 "package", version2, versions, None, force_upstream_parent=True),
513 [revid1, up_revid2])513 [revid1, up_revid2])
514514
515 def test_get_parents_with_upstream_sync_when_diverged(self):515 def test_get_parents_with_upstream_sync_when_diverged(self):
@@ -530,7 +530,7 @@
530 # This is a sync but we are diverged so we should get two530 # This is a sync but we are diverged so we should get two
531 # parents531 # parents
532 self.assertEqual(self.db2.get_parents_with_upstream(532 self.assertEqual(self.db2.get_parents_with_upstream(
533 "package", version3, versions), [revid2, revid3])533 "package", version3, versions, None), [revid2, revid3])
534534
535 def test_get_parents_with_upstream_sync_new_upstream(self):535 def test_get_parents_with_upstream_sync_new_upstream(self):
536 version1 = Version("0.1-1")536 version1 = Version("0.1-1")
@@ -553,7 +553,7 @@
553 # parents. There should be no upstream as the synced553 # parents. There should be no upstream as the synced
554 # version will already have it.554 # version will already have it.
555 self.assertEqual(self.db2.get_parents_with_upstream(555 self.assertEqual(self.db2.get_parents_with_upstream(
556 "package", version3, versions), [revid2, revid3])556 "package", version3, versions, None), [revid2, revid3])
557557
558 def test_get_parents_with_upstream_sync_new_upstream_force(self):558 def test_get_parents_with_upstream_sync_new_upstream_force(self):
559 version1 = Version("0.1-1")559 version1 = Version("0.1-1")
@@ -580,7 +580,7 @@
580 # when we fake-sync, but we are forcing one here.580 # when we fake-sync, but we are forcing one here.
581 #TODO: should the upstream parent be second or third?581 #TODO: should the upstream parent be second or third?
582 self.assertEqual(self.db2.get_parents_with_upstream(582 self.assertEqual(self.db2.get_parents_with_upstream(
583 "package", version3, versions, force_upstream_parent=True),583 "package", version3, versions, None, force_upstream_parent=True),
584 [revid2, up_revid3, revid3])584 [revid2, up_revid3, revid3])
585585
586 def test_branch_to_pull_version_from(self):586 def test_branch_to_pull_version_from(self):
@@ -700,7 +700,7 @@
700 self.assertEqual(self.tree2.branch.last_revision(), revid)700 self.assertEqual(self.tree2.branch.last_revision(), revid)
701 self.assertEqual(self.up_tree2.branch.last_revision(), up_revid)701 self.assertEqual(self.up_tree2.branch.last_revision(), up_revid)
702 self.assertEqual(self.db2.revid_of_version(version), revid)702 self.assertEqual(self.db2.revid_of_version(version), revid)
703 self.assertEqual(self.db2.revid_of_upstream_version(703 self.assertEqual(self.db2.pristine_upstream_source.version_as_revision(
704 "package", version.upstream_version), up_revid)704 "package", version.upstream_version), up_revid)
705705
706 def test_pull_from_lesser_branch_with_upstream(self):706 def test_pull_from_lesser_branch_with_upstream(self):
@@ -716,7 +716,7 @@
716 self.assertEqual(self.tree2.branch.last_revision(), revid)716 self.assertEqual(self.tree2.branch.last_revision(), revid)
717 self.assertEqual(self.up_tree2.branch.last_revision(), up_revid)717 self.assertEqual(self.up_tree2.branch.last_revision(), up_revid)
718 self.assertEqual(self.db2.revid_of_version(version), revid)718 self.assertEqual(self.db2.revid_of_version(version), revid)
719 self.assertEqual(self.db2.revid_of_upstream_version(719 self.assertEqual(self.db2.pristine_upstream_source.version_as_revision(
720 "package", version.upstream_version), up_revid)720 "package", version.upstream_version), up_revid)
721721
722 def test_pull_upstream_from_branch(self):722 def test_pull_upstream_from_branch(self):
@@ -727,7 +727,7 @@
727 self.assertNotEqual(self.up_tree2.branch.last_revision(), up_revid)727 self.assertNotEqual(self.up_tree2.branch.last_revision(), up_revid)
728 self.db2.pull_upstream_from_branch(self.db1, "package", version)728 self.db2.pull_upstream_from_branch(self.db1, "package", version)
729 self.assertEqual(self.up_tree2.branch.last_revision(), up_revid)729 self.assertEqual(self.up_tree2.branch.last_revision(), up_revid)
730 self.assertEqual(self.db2.revid_of_upstream_version("package", version),730 self.assertEqual(self.db2.pristine_upstream_source.version_as_revision("package", version),
731 up_revid)731 up_revid)
732732
733 def check_changes(self, changes, added=[], removed=[], modified=[],733 def check_changes(self, changes, added=[], removed=[], modified=[],
@@ -784,7 +784,7 @@
784 branch = tree.branch784 branch = tree.branch
785 rh = branch.revision_history()785 rh = branch.revision_history()
786 self.assertEqual(len(rh), 1)786 self.assertEqual(len(rh), 1)
787 self.assertEqual(self.db1.revid_of_upstream_version(787 self.assertEqual(self.db1.pristine_upstream_source.version_as_revision(
788 "package", version.upstream_version), rh[0])788 "package", version.upstream_version), rh[0])
789 rev = branch.repository.get_revision(rh[0])789 rev = branch.repository.get_revision(rh[0])
790 self.assertEqual(rev.message,790 self.assertEqual(rev.message,
@@ -823,7 +823,7 @@
823 rh = branch.revision_history()823 rh = branch.revision_history()
824 self.assertEqual(len(rh), 2)824 self.assertEqual(len(rh), 2)
825 self.assertEqual(825 self.assertEqual(
826 self.db1.revid_of_upstream_version("package", version2.upstream_version), rh[1])826 self.db1.pristine_upstream_source.version_as_revision("package", version2.upstream_version), rh[1])
827 rev = branch.repository.get_revision(rh[1])827 rev = branch.repository.get_revision(rh[1])
828 self.assertEqual(rev.message,828 self.assertEqual(rev.message,
829 "Import upstream version %s" % str(version2.upstream_version))829 "Import upstream version %s" % str(version2.upstream_version))
@@ -854,7 +854,7 @@
854 branch = tree.branch854 branch = tree.branch
855 rh = branch.revision_history()855 rh = branch.revision_history()
856 self.assertEqual(len(rh), 1)856 self.assertEqual(len(rh), 1)
857 self.assertEqual(self.db1.revid_of_upstream_version(857 self.assertEqual(self.db1.pristine_upstream_source.version_as_revision(
858 "package", version.upstream_version), rh[0])858 "package", version.upstream_version), rh[0])
859 rev = branch.repository.get_revision(rh[0])859 rev = branch.repository.get_revision(rh[0])
860 self.assertEqual(rev.message,860 self.assertEqual(rev.message,
@@ -882,7 +882,7 @@
882 branch = tree.branch882 branch = tree.branch
883 rh = branch.revision_history()883 rh = branch.revision_history()
884 self.assertEqual(len(rh), 1)884 self.assertEqual(len(rh), 1)
885 self.assertEqual(self.db1.revid_of_upstream_version(885 self.assertEqual(self.db1.pristine_upstream_source.version_as_revision(
886 "package", version.upstream_version), rh[0])886 "package", version.upstream_version), rh[0])
887 rev = branch.repository.get_revision(rh[0])887 rev = branch.repository.get_revision(rh[0])
888 self.assertEqual(rev.message,888 self.assertEqual(rev.message,
@@ -916,7 +916,7 @@
916 branch = tree.branch916 branch = tree.branch
917 rh = branch.revision_history()917 rh = branch.revision_history()
918 self.assertEqual(len(rh), 1)918 self.assertEqual(len(rh), 1)
919 self.assertEqual(self.db1.revid_of_upstream_version(919 self.assertEqual(self.db1.pristine_upstream_source.version_as_revision(
920 "package", version.upstream_version), rh[0])920 "package", version.upstream_version), rh[0])
921 rev = branch.repository.get_revision(rh[0])921 rev = branch.repository.get_revision(rh[0])
922 self.assertEqual(rev.message,922 self.assertEqual(rev.message,
@@ -1356,7 +1356,7 @@
1356 self.assertEqual(self.db1.revid_of_version(version2), rh1[2])1356 self.assertEqual(self.db1.revid_of_version(version2), rh1[2])
1357 self.assertEqual(self.db1.revid_of_version(version3), rh1[3])1357 self.assertEqual(self.db1.revid_of_version(version3), rh1[3])
1358 self.assertEqual(1358 self.assertEqual(
1359 self.db1.revid_of_upstream_version("package", version1.upstream_version),1359 self.db1.pristine_upstream_source.version_as_revision("package", version1.upstream_version),
1360 up_rh1[0])1360 up_rh1[0])
1361 self.tree1.lock_read()1361 self.tree1.lock_read()
1362 self.addCleanup(self.tree1.unlock)1362 self.addCleanup(self.tree1.unlock)
@@ -1409,10 +1409,10 @@
1409 self.assertEqual(self.db1.revid_of_version(version2), rh1[2])1409 self.assertEqual(self.db1.revid_of_version(version2), rh1[2])
1410 self.assertEqual(self.db1.revid_of_version(version3), rh1[3])1410 self.assertEqual(self.db1.revid_of_version(version3), rh1[3])
1411 self.assertEqual(1411 self.assertEqual(
1412 self.db1.revid_of_upstream_version("package", version1.upstream_version),1412 self.db1.pristine_upstream_source.version_as_revision("package", version1.upstream_version),
1413 up_rh1[0])1413 up_rh1[0])
1414 self.assertEqual(1414 self.assertEqual(
1415 self.db1.revid_of_upstream_version("package", version3.upstream_version),1415 self.db1.pristine_upstream_source.version_as_revision("package", version3.upstream_version),
1416 up_rh1[1])1416 up_rh1[1])
1417 self.tree1.lock_read()1417 self.tree1.lock_read()
1418 self.addCleanup(self.tree1.unlock)1418 self.addCleanup(self.tree1.unlock)
@@ -1464,10 +1464,10 @@
1464 self.assertEqual(self.db1.revid_of_version(version2), rh1[2])1464 self.assertEqual(self.db1.revid_of_version(version2), rh1[2])
1465 self.assertEqual(self.db1.revid_of_version(version3), rh1[3])1465 self.assertEqual(self.db1.revid_of_version(version3), rh1[3])
1466 self.assertEqual(1466 self.assertEqual(
1467 self.db1.revid_of_upstream_version("package", version1.upstream_version),1467 self.db1.pristine_upstream_source.version_as_revision("package", version1.upstream_version),
1468 up_rh1[0])1468 up_rh1[0])
1469 self.assertEqual(1469 self.assertEqual(
1470 self.db1.revid_of_upstream_version("package", version3.upstream_version),1470 self.db1.pristine_upstream_source.version_as_revision("package", version3.upstream_version),
1471 up_rh1[1])1471 up_rh1[1])
1472 self.tree1.lock_read()1472 self.tree1.lock_read()
1473 self.addCleanup(self.tree1.unlock)1473 self.addCleanup(self.tree1.unlock)
14741474
=== modified file 'upstream/pristinetar.py'
--- upstream/pristinetar.py 2011-06-28 08:41:44 +0000
+++ upstream/pristinetar.py 2011-07-18 10:01:28 +0000
@@ -156,9 +156,29 @@
156 self.branch.tags.set_tag(tag_name, revid)156 self.branch.tags.set_tag(tag_name, revid)
157 return tag_name, revid157 return tag_name, revid
158158
159 def import_component_tarball(self, package, version, tree, component=None,159 def import_tarballs(self, package, version, tree, parent_ids, tarballs,
160 md5=None, tarball=None, author=None, timestamp=None,160 timestamp=None, author=None):
161 parent_ids=None):161 """Import the upstream tarballs.
162
163 :param package: Package name
164 :param version: Package version
165 :param path: Path with tree to import
166 :param parent_ids: Parent revisions
167 :param tarballs: List of (path, component, md5)
168 :param timestamp: Optional timestamp for new commits
169 :param author: Optional author for new commits
170 :return: List of tuples with (component, tag, revid)
171 """
172 ret = []
173 for (tarball, component, md5) in tarballs:
174 (tag, revid) = self.import_component_tarball(
175 package, version, tree, parent_ids, component,
176 md5, tarball, author=author, timestamp=timestamp)
177 ret.append((component, tag, revid))
178 return ret
179
180 def import_component_tarball(self, package, version, tree, parent_ids,
181 component=None, md5=None, tarball=None, author=None, timestamp=None):
162 """Import a tarball.182 """Import a tarball.
163183
164 :param package: Package name184 :param package: Package name
@@ -217,10 +237,7 @@
217 def fetch_tarballs(self, package, version, target_dir):237 def fetch_tarballs(self, package, version, target_dir):
218 return [self.fetch_component_tarball(package, version, None, target_dir)]238 return [self.fetch_component_tarball(package, version, None, target_dir)]
219239
220 def _has_version_component(self, tag_name, md5=None):240 def _has_revision(self, revid, md5=None):
221 if not self.branch.tags.has_tag(tag_name):
222 return False
223 revid = self.branch.tags.lookup_tag(tag_name)
224 self.branch.lock_read()241 self.branch.lock_read()
225 try:242 try:
226 graph = self.branch.repository.get_graph()243 graph = self.branch.repository.get_graph()
@@ -234,8 +251,9 @@
234 try:251 try:
235 return rev.properties['deb-md5'] == md5252 return rev.properties['deb-md5'] == md5
236 except KeyError:253 except KeyError:
237 warning("tag %s present in branch, but there is no "254 warning("tag present in branch, but there is no "
238 "associated 'deb-md5' property" % tag_name)255 "associated 'deb-md5' property in associated "
256 "revision %s", revid)
239 return True257 return True
240258
241 def version_as_revision(self, package, version, tarballs=None):259 def version_as_revision(self, package, version, tarballs=None):
@@ -244,13 +262,19 @@
244 elif len(tarballs) > 1:262 elif len(tarballs) > 1:
245 raise MultipleUpstreamTarballsNotSupported()263 raise MultipleUpstreamTarballsNotSupported()
246 else:264 else:
247 return self.version_component_as_revision(package, version, tarballs[0][1])265 return self.version_component_as_revision(package, version, tarballs[0][1],
266 tarballs[0][2])
248267
249 def version_component_as_revision(self, package, version, component, tarballs=None):268 def version_component_as_revision(self, package, version, component, md5=None):
250 assert isinstance(version, str)269 assert isinstance(version, str)
251 for tag_name in self.possible_tag_names(version, component=component):270 for tag_name in self.possible_tag_names(version, component=component):
252 if self._has_version_component(tag_name, tarballs):271 try:
253 return self.branch.tags.lookup_tag(tag_name)272 revid = self.branch.tags.lookup_tag(tag_name)
273 except NoSuchTag:
274 continue
275 else:
276 if self._has_revision(revid, md5=md5):
277 return revid
254 tag_name = self.tag_name(version, component=component)278 tag_name = self.tag_name(version, component=component)
255 try:279 try:
256 return self.branch.tags.lookup_tag(tag_name)280 return self.branch.tags.lookup_tag(tag_name)
@@ -269,8 +293,13 @@
269 def has_version_component(self, package, version, component, md5=None):293 def has_version_component(self, package, version, component, md5=None):
270 assert isinstance(version, str), str(type(version))294 assert isinstance(version, str), str(type(version))
271 for tag_name in self.possible_tag_names(version, component=component):295 for tag_name in self.possible_tag_names(version, component=component):
272 if self._has_version_component(tag_name, md5=md5):296 try:
273 return True297 revid = self.branch.tags.lookup_tag(tag_name)
298 except NoSuchTag:
299 continue
300 else:
301 if self._has_revision(revid, md5=md5):
302 return True
274 return False303 return False
275304
276 def possible_tag_names(self, version, component):305 def possible_tag_names(self, version, component):

Subscribers

People subscribed via source and target branches