diff --git a/swh/loader/svn/loader.py b/swh/loader/svn/loader.py --- a/swh/loader/svn/loader.py +++ b/swh/loader/svn/loader.py @@ -550,9 +550,13 @@ self.storage.revision_add(self._revisions) if self.done: # finish line, snapshot! - self.generate_and_load_snapshot(revision=self._last_revision, - snapshot=self._snapshot) + snapshot = self.generate_and_load_snapshot( + revision=self._last_revision, + snapshot=self._snapshot + ) self.flush() + self.storage.origin_visit_update(self.origin['url'], self.visit, + snapshot=snapshot['id']) self._contents = [] self._directories = [] @@ -568,6 +572,9 @@ revision (dict): Last revision seen if any (None by default) snapshot (dict): Snapshot to use if any (None by default) + Returns: + dict: The newly created snapshot + """ if revision: # Priority to the revision snap = build_swh_snapshot(revision['id']) @@ -578,6 +585,7 @@ return None self.log.debug('snapshot: %s' % snap) self.storage.snapshot_add([snap]) + return snap def load_status(self): return { diff --git a/swh/loader/svn/tests/test_loader.py b/swh/loader/svn/tests/test_loader.py --- a/swh/loader/svn/tests/test_loader.py +++ b/swh/loader/svn/tests/test_loader.py @@ -65,6 +65,38 @@ }, } +GOURMET_SNAPSHOT = hashutil.hash_to_bytes( + '889cacc2731e3312abfb2b1a0c18ade82a949e07' +) + +GOURMET_FLAG_SNAPSHOT = hashutil.hash_to_bytes( + '0011223344556677889900112233445566778899' +) + +GOURMET_UPDATES_SNAPSHOT = hashutil.hash_to_bytes( + '11086d15317014e43d2438b7ffc712c44f1b8afe' +) + +GOURMET_EXTERNALS_SNAPSHOT = hashutil.hash_to_bytes( + '19cb68d0a3f22372e2b7017ea5e2a2ea5ae3e09a' +) + +GOURMET_EDGE_CASES_SNAPSHOT = hashutil.hash_to_bytes( + '18e60982fe521a2546ab8c3c73a535d80462d9d0' +) + +GOURMET_WRONG_LINKS_SNAPSHOT = hashutil.hash_to_bytes( + 'b17f38acabb90f066dedd30c29f01a02af88a5c4' +) + +MEDIAWIKI_SNAPSHOT = hashutil.hash_to_bytes( + 'd6d6e9703f157c5702d9a4a5dec878926ed4ab76' +) + +PYANG_SNAPSHOT = hashutil.hash_to_bytes( + '6d9590de11b00a5801de0ff3297c5b44bbbf7d24' +) + class SvnLoaderTest(SvnLoader): """An SVNLoader with no persistence. @@ -171,17 +203,18 @@ self.assertRevisionsContain(expected_revisions) self.assertCountSnapshots(1) - # FIXME: Check the snapshot's state - # self.assertEqual(self.loader.all_snapshots[0], {}) self.assertEqual(self.loader.load_status(), {'status': 'eventful'}) self.assertEqual(self.loader.visit_status(), 'full') + visit = self.storage.origin_visit_get_latest(self.repo_url) + self.assertEqual(visit['snapshot'], GOURMET_SNAPSHOT) + _LAST_SNP_REV = { 'snapshot': { - 'id': 'something', + 'id': GOURMET_FLAG_SNAPSHOT, 'branches': {} - }, # need a snapshot of sort + }, 'revision': { 'id': hashutil.hash_to_bytes( '4876cb10aec6f708f7466dddf547567b65f6c39c'), @@ -223,10 +256,10 @@ self.assertCountRevisions(0) self.assertCountReleases(0) self.assertCountSnapshots(1) - # FIXME: Check the snapshot's state - # self.assertEqual(self.loader.all_snapshots[0], {}) self.assertEqual(self.loader.load_status(), {'status': 'uneventful'}) self.assertEqual(self.loader.visit_status(), 'full') + visit = self.storage.origin_visit_get_latest(self.repo_url) + self.assertEqual(visit['snapshot'], GOURMET_FLAG_SNAPSHOT) class SvnLoaderTest3(BaseSvnLoaderTest): @@ -262,11 +295,12 @@ self.assertCountRevisions(0) self.assertCountReleases(0) self.assertCountSnapshots(0) - # FIXME: Check the snapshot's state - # self.assertEqual(self.loader.all_snapshots[0], {}) self.assertEqual(self.loader.load_status(), {'status': 'uneventful'}) self.assertEqual(self.loader.visit_status(), 'partial') + visit = self.storage.origin_visit_get_latest(self.repo_url) + self.assertEqual(visit['snapshot'], None) + class SvnLoaderTest4(BaseSvnLoaderTest): """In this scenario, the repository has been updated with new changes. @@ -307,11 +341,12 @@ self.assertRevisionsContain(expected_revisions) self.assertCountSnapshots(1) - # FIXME: Check the snapshot's state - # self.assertEqual(self.loader.all_snapshots[0], {}) self.assertEqual(self.loader.load_status(), {'status': 'eventful'}) self.assertEqual(self.loader.visit_status(), 'full') + visit = self.storage.origin_visit_get_latest(self.repo_url) + self.assertEqual(visit['snapshot'], GOURMET_UPDATES_SNAPSHOT) + class SvnLoaderTest5(BaseSvnLoaderTest): """Context: @@ -357,11 +392,12 @@ self.assertRevisionsContain(expected_revisions) self.assertCountSnapshots(1) - # FIXME: Check the snapshot's state - # self.assertEqual(self.loader.all_snapshots[0], {}) self.assertEqual(self.loader.load_status(), {'status': 'eventful'}) self.assertEqual(self.loader.visit_status(), 'full') + visit = self.storage.origin_visit_get_latest(self.repo_url) + self.assertEqual(visit['snapshot'], GOURMET_UPDATES_SNAPSHOT) + class SvnLoaderTest6(BaseSvnLoaderTest): """Context: @@ -419,11 +455,12 @@ self.assertRevisionsContain(expected_revisions) self.assertCountSnapshots(1) - # FIXME: Check the snapshot's state - # self.assertEqual(self.loader.all_snapshots[0], {}) self.assertEqual(self.loader.load_status(), {'status': 'eventful'}) self.assertEqual(self.loader.visit_status(), 'full') + visit = self.storage.origin_visit_get_latest(self.repo_url) + self.assertEqual(visit['snapshot'], GOURMET_UPDATES_SNAPSHOT) + class SvnLoaderTest7(BaseSvnLoaderTest): """Context: @@ -480,11 +517,12 @@ self.assertRevisionsContain(expected_revisions) self.assertCountSnapshots(1) - # FIXME: Check the snapshot's state - # self.assertEqual(self.loader.all_snapshots[0], {}) self.assertEqual(self.loader.load_status(), {'status': 'eventful'}) self.assertEqual(self.loader.visit_status(), 'full') + visit = self.storage.origin_visit_get_latest(self.repo_url) + self.assertEqual(visit['snapshot'], GOURMET_UPDATES_SNAPSHOT) + class SvnLoaderTest8(BaseSvnLoaderTest): """Context: @@ -560,13 +598,14 @@ self.assertRevisionsContain(expected_revisions) self.assertCountSnapshots(1) - # FIXME: Check the snapshot's state - # self.assertEqual(self.loader.all_snapshots[0], {}) self.assertEqual(self.loader.load_status(), {'status': 'eventful'}) self.assertEqual(self.loader.visit_status(), 'full') + visit = self.storage.origin_visit_get_latest(self.repo_url) + self.assertEqual(visit['snapshot'], GOURMET_UPDATES_SNAPSHOT) -class SvnLoaderTTest9(BaseSvnLoaderTest): + +class SvnLoaderTest9(BaseSvnLoaderTest): """Check that a svn repo containing a versioned file with CRLF line endings with svn:eol-style property set to 'native' (this is a violation of svn specification as the file should have been @@ -589,11 +628,12 @@ } self.assertRevisionsContain(expected_revisions) self.assertCountSnapshots(1) - # FIXME: Check the snapshot's state - # self.assertEqual(self.loader.all_snapshots[0], {}) self.assertEqual(self.loader.load_status(), {'status': 'eventful'}) self.assertEqual(self.loader.visit_status(), 'full') + visit = self.storage.origin_visit_get_latest(self.repo_url) + self.assertEqual(visit['snapshot'], MEDIAWIKI_SNAPSHOT) + class SvnLoaderTest10(BaseSvnLoaderTest): # noqa """Check that a svn repo containing a versioned file with mixed @@ -620,11 +660,12 @@ self.assertRevisionsContain(expected_revisions) self.assertCountSnapshots(1) - # FIXME: Check the snapshot's state - # self.assertEqual(self.loader.all_snapshots[0], {}) self.assertEqual(self.loader.load_status(), {'status': 'eventful'}) self.assertEqual(self.loader.visit_status(), 'full') + visit = self.storage.origin_visit_get_latest(self.repo_url) + self.assertEqual(visit['snapshot'], PYANG_SNAPSHOT) + class SvnLoaderTest11(BaseSvnLoaderTest): """Context: @@ -680,10 +721,12 @@ # The last revision being the one used later to start back from self.assertRevisionsContain(expected_revisions) self.assertCountSnapshots(1) - # FIXME: Check the snapshot's state self.assertEqual(self.loader.load_status(), {'status': 'eventful'}) self.assertEqual(self.loader.visit_status(), 'partial') + visit = self.storage.origin_visit_get_latest(self.repo_url) + self.assertEqual(visit['snapshot'], GOURMET_EXTERNALS_SNAPSHOT) + class SvnLoaderTest12(BaseSvnLoaderTest): """Edge cases: @@ -736,10 +779,12 @@ self.assertRevisionsContain(expected_revisions) self.assertCountSnapshots(1) - # FIXME: Check the snapshot's state self.assertEqual(self.loader.load_status(), {'status': 'eventful'}) self.assertEqual(self.loader.visit_status(), 'full') + visit = self.storage.origin_visit_get_latest(self.repo_url) + self.assertEqual(visit['snapshot'], GOURMET_EDGE_CASES_SNAPSHOT) + class SvnLoaderTest13(BaseSvnLoaderTest): """Edge cases: @@ -791,10 +836,12 @@ self.assertRevisionsContain(expected_revisions) self.assertCountSnapshots(1) - # FIXME: Check the snapshot's state self.assertEqual(self.loader.load_status(), {'status': 'eventful'}) self.assertEqual(self.loader.visit_status(), 'full') + visit = self.storage.origin_visit_get_latest(self.repo_url) + self.assertEqual(visit['snapshot'], GOURMET_WRONG_LINKS_SNAPSHOT) + class SvnLoaderTestFromRemoteDump(SvnLoaderTest, SvnLoaderFromRemoteDump): pass @@ -828,6 +875,12 @@ base_storage_stat = base_loader.storage.stat_counters() self.assertEqual(dump_storage_stat, base_storage_stat) + visit = dump_loader.storage.origin_visit_get_latest(self.repo_url) + self.assertEqual(visit['snapshot'], GOURMET_SNAPSHOT) + + visit = base_loader.storage.origin_visit_get_latest(self.repo_url) + self.assertEqual(visit['snapshot'], GOURMET_SNAPSHOT) + class SvnLoaderTest14(BaseSvnLoaderTest): """Edge cases: The repository held some user defined svn-properties @@ -874,3 +927,7 @@ self.assertEqual(self.loader.load_status(), {'status': 'eventful'}) self.assertEqual(self.loader.visit_status(), 'full') + + visit = self.storage.origin_visit_get_latest(self.repo_url) + self.assertEqual(visit['snapshot'], + hashutil.hash_to_bytes(expected_snapshot_id))