Skip to content
Snippets Groups Projects
Commit f51fec34 authored by Antoine Eiche's avatar Antoine Eiche Committed by Phabricator Migration user
Browse files

Generated commit for differential D2854

parent d8ad6f3c
No related tags found
1 merge request!71[wip] package.loader: introduce load_target and resolve_target_from
...@@ -5,13 +5,15 @@ ...@@ -5,13 +5,15 @@
import json import json
import requests import requests
import tempfile
from typing import Dict, Optional, Any, Mapping from typing import Dict, Optional, Any, Mapping, Tuple
from swh.model import hashutil from swh.model import hashutil
from swh.model import from_disk
from swh.model.model import ( from swh.model.model import (
Sha1Git, Revision, RevisionType Sha1Git, Revision, RevisionType, Release, ObjectType
) )
from swh.loader.package.utils import EMPTY_AUTHOR from swh.loader.package.utils import EMPTY_AUTHOR
...@@ -113,3 +115,45 @@ class FunctionalLoader(PackageLoader): ...@@ -113,3 +115,45 @@ class FunctionalLoader(PackageLoader):
}, },
} }
) )
def _load_target(
self, p_info, origin) \
-> Tuple[str, Optional[Sha1Git], bool]:
revision_id, loaded = self._load_revision(p_info, origin)
if loaded is True:
return 'revision', revision_id, loaded
import logging
logger = logging.getLogger(__name__)
logger.error("fILE\n\n")
with tempfile.TemporaryDirectory() as tmpdir:
try:
dl_artifacts = self.download_package(p_info, tmpdir)
except Exception:
logger.exception('Unable to retrieve %s',
p_info)
return ('', None, False)
content = from_disk.Content.from_file(
path=dl_artifacts[0][0].encode('utf-8'),
max_content_length=self.max_content_size)
self.storage.content_add([content.to_model()])
release = Release(
name=b'iop',
message=b'iop',
author=EMPTY_AUTHOR,
date=None,
target_type=ObjectType.CONTENT,
target=content.hash,
synthetic=True
)
self.storage.release_add([release])
return 'release', release.id, True
return '', None, False
...@@ -40,12 +40,12 @@ def test_loader_one_visit(swh_config, requests_mock_datadir): ...@@ -40,12 +40,12 @@ def test_loader_one_visit(swh_config, requests_mock_datadir):
stats = get_stats(loader.storage) stats = get_stats(loader.storage)
assert { assert {
'content': 1, 'content': 2,
'directory': 3, 'directory': 3,
'origin': 1, 'origin': 1,
'origin_visit': 1, 'origin_visit': 1,
'person': 1, 'person': 1,
'release': 0, 'release': 1,
'revision': 1, 'revision': 1,
'skipped_content': 0, 'skipped_content': 0,
'snapshot': 1 'snapshot': 1
...@@ -54,7 +54,7 @@ def test_loader_one_visit(swh_config, requests_mock_datadir): ...@@ -54,7 +54,7 @@ def test_loader_one_visit(swh_config, requests_mock_datadir):
origin_visit = next(loader.storage.origin_visit_get(sources_url)) origin_visit = next(loader.storage.origin_visit_get(sources_url))
# The visit is partial because urls pointing to non tarball file # The visit is partial because urls pointing to non tarball file
# are not handled yet # are not handled yet
assert origin_visit['status'] == 'partial' assert origin_visit['status'] == 'full'
assert origin_visit['type'] == 'functional' assert origin_visit['type'] == 'functional'
......
...@@ -172,6 +172,13 @@ class PackageLoader: ...@@ -172,6 +172,13 @@ class PackageLoader:
""" """
return None return None
def resolve_target_from(
self, known_artifacts: Dict, artifact_metadata: Dict) \
-> Tuple[str, Optional[bytes]]:
return 'revision', self.resolve_revision_from(
known_artifacts,
artifact_metadata)
def download_package(self, p_info: Mapping[str, Any], def download_package(self, p_info: Mapping[str, Any],
tmpdir: str) -> List[Tuple[str, Mapping]]: tmpdir: str) -> List[Tuple[str, Mapping]]:
"""Download artifacts for a specific package. All downloads happen in """Download artifacts for a specific package. All downloads happen in
...@@ -290,19 +297,23 @@ class PackageLoader: ...@@ -290,19 +297,23 @@ class PackageLoader:
# `p_` stands for `package_` # `p_` stands for `package_`
for branch_name, p_info in self.get_package_info(version): for branch_name, p_info in self.get_package_info(version):
logger.debug('package_info: %s', p_info) logger.debug('package_info: %s', p_info)
revision_id = self.resolve_revision_from( target_type, target_id = self.resolve_target_from(
known_artifacts, p_info['raw']) known_artifacts, p_info['raw'])
if revision_id is None: if target_id is None:
(revision_id, loaded) = \ (target_type, target_id, loaded) = \
self._load_revision(p_info, origin) self._load_target(p_info, origin)
if loaded: if loaded:
status_load = 'eventful' status_load = 'eventful'
else: else:
status_visit = 'partial' status_visit = 'partial'
if revision_id is None: if target_id is None:
continue continue
tmp_revisions[version].append((branch_name, revision_id)) tmp_revisions[version].append((
branch_name,
target_type,
target_id))
logger.debug('tmp_revisions: %s', tmp_revisions) logger.debug('tmp_revisions: %s', tmp_revisions)
# Build and load the snapshot # Build and load the snapshot
...@@ -320,9 +331,9 @@ class PackageLoader: ...@@ -320,9 +331,9 @@ class PackageLoader:
'target': branch_name.encode('utf-8'), 'target': branch_name.encode('utf-8'),
} }
for branch_name, target in branch_name_revisions: for branch_name, target_type, target in branch_name_revisions:
branches[branch_name.encode('utf-8')] = { branches[branch_name.encode('utf-8')] = {
'target_type': 'revision', 'target_type': target_type,
'target': target, 'target': target,
} }
...@@ -436,3 +447,9 @@ class PackageLoader: ...@@ -436,3 +447,9 @@ class PackageLoader:
self.storage.revision_add([revision]) self.storage.revision_add([revision])
return (revision.id, True) return (revision.id, True)
def _load_target(
self, p_info, origin) \
-> Tuple[str, Optional[Sha1Git], bool]:
revision_id, loaded = self._load_revision(p_info, origin)
return 'revision', revision_id, loaded
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment