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

Proposed by Jelmer Vernooij
Status: Merged
Approved by: James Westby
Approved revision: 596
Merged at revision: 585
Proposed branch: lp:~jelmer/bzr-builddeb/multi-tarball-pt7
Merge into: lp:bzr-builddeb
Diff against target: 481 lines (+93/-99)
3 files modified
import_dsc.py (+46/-61)
tests/test_import_dsc.py (+26/-26)
upstream/pristinetar.py (+21/-12)
To merge this branch: bzr merge lp:~jelmer/bzr-builddeb/multi-tarball-pt7
Reviewer Review Type Date Requested Status
James Westby Approve
Review via email: mp+68190@code.launchpad.net

Description of the change

More work towards supporting multiple upstream tarballs.

This mainly simplifies some code, and makes us look directly at
pristine_upstream_source rather than through helper methods.

To post a comment you must log in.
Revision history for this message
James Westby (james-w) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'import_dsc.py'
--- import_dsc.py 2011-06-28 08:41:44 +0000
+++ import_dsc.py 2011-07-17 22:29:31 +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:
@@ -1069,7 +1054,7 @@
1069 pull_branch = pull_parents[1][0]1054 pull_branch = pull_parents[1][0]
1070 pull_version = pull_parents[1][1]1055 pull_version = pull_parents[1][1]
1071 if not pull_branch.is_version_native(pull_version):1056 if not pull_branch.is_version_native(pull_version):
1072 pull_revid = pull_branch.revid_of_upstream_version(1057 pull_revid = pull_branch.pristine_upstream_source.version_as_revision(
1073 package, pull_version.upstream_version)1058 package, pull_version.upstream_version)
1074 mutter("Initialising upstream from %s, version %s",1059 mutter("Initialising upstream from %s, version %s",
1075 str(pull_branch), str(pull_version))1060 str(pull_branch), str(pull_version))
@@ -1142,7 +1127,7 @@
1142 else:1127 else:
1143 mutter("We already have the needed upstream part")1128 mutter("We already have the needed upstream part")
1144 parents = self.get_parents_with_upstream(package, version, versions,1129 parents = self.get_parents_with_upstream(package, version, versions,
1145 force_upstream_parent=imported_upstream)1130 upstream_tarballs, force_upstream_parent=imported_upstream)
1146 # Now we have the list of parents we need to import the .diff.gz1131 # Now we have the list of parents we need to import the .diff.gz
1147 self.import_debian(debian_part, version, parents, md5,1132 self.import_debian(debian_part, version, parents, md5,
1148 timestamp=timestamp, file_ids_from=file_ids_from)1133 timestamp=timestamp, file_ids_from=file_ids_from)
11491134
=== 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-17 22:29:31 +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-17 22:29:31 +0000
@@ -217,10 +217,7 @@
217 def fetch_tarballs(self, package, version, target_dir):217 def fetch_tarballs(self, package, version, target_dir):
218 return [self.fetch_component_tarball(package, version, None, target_dir)]218 return [self.fetch_component_tarball(package, version, None, target_dir)]
219219
220 def _has_version_component(self, tag_name, md5=None):220 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()221 self.branch.lock_read()
225 try:222 try:
226 graph = self.branch.repository.get_graph()223 graph = self.branch.repository.get_graph()
@@ -234,8 +231,9 @@
234 try:231 try:
235 return rev.properties['deb-md5'] == md5232 return rev.properties['deb-md5'] == md5
236 except KeyError:233 except KeyError:
237 warning("tag %s present in branch, but there is no "234 warning("tag present in branch, but there is no "
238 "associated 'deb-md5' property" % tag_name)235 "associated 'deb-md5' property in associated "
236 "revision %s", revid)
239 return True237 return True
240238
241 def version_as_revision(self, package, version, tarballs=None):239 def version_as_revision(self, package, version, tarballs=None):
@@ -244,13 +242,19 @@
244 elif len(tarballs) > 1:242 elif len(tarballs) > 1:
245 raise MultipleUpstreamTarballsNotSupported()243 raise MultipleUpstreamTarballsNotSupported()
246 else:244 else:
247 return self.version_component_as_revision(package, version, tarballs[0][1])245 return self.version_component_as_revision(package, version, tarballs[0][1],
246 tarballs[0][2])
248247
249 def version_component_as_revision(self, package, version, component, tarballs=None):248 def version_component_as_revision(self, package, version, component, md5=None):
250 assert isinstance(version, str)249 assert isinstance(version, str)
251 for tag_name in self.possible_tag_names(version, component=component):250 for tag_name in self.possible_tag_names(version, component=component):
252 if self._has_version_component(tag_name, tarballs):251 try:
253 return self.branch.tags.lookup_tag(tag_name)252 revid = self.branch.tags.lookup_tag(tag_name)
253 except NoSuchTag:
254 continue
255 else:
256 if self._has_revision(revid, md5=md5):
257 return revid
254 tag_name = self.tag_name(version, component=component)258 tag_name = self.tag_name(version, component=component)
255 try:259 try:
256 return self.branch.tags.lookup_tag(tag_name)260 return self.branch.tags.lookup_tag(tag_name)
@@ -269,8 +273,13 @@
269 def has_version_component(self, package, version, component, md5=None):273 def has_version_component(self, package, version, component, md5=None):
270 assert isinstance(version, str), str(type(version))274 assert isinstance(version, str), str(type(version))
271 for tag_name in self.possible_tag_names(version, component=component):275 for tag_name in self.possible_tag_names(version, component=component):
272 if self._has_version_component(tag_name, md5=md5):276 try:
273 return True277 revid = self.branch.tags.lookup_tag(tag_name)
278 except NoSuchTag:
279 continue
280 else:
281 if self._has_revision(revid, md5=md5):
282 return True
274 return False283 return False
275284
276 def possible_tag_names(self, version, component):285 def possible_tag_names(self, version, component):

Subscribers

People subscribed via source and target branches