Skip to content

Commit

Permalink
Repository mirror
Browse files Browse the repository at this point in the history
User can 'mirror' a repository.

re #5738
https://pulp.plan.io/issues/5738
  • Loading branch information
pavelpicka committed Dec 19, 2019
1 parent 715d07a commit 91e976d
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 8 deletions.
1 change: 1 addition & 0 deletions CHANGES/5738.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Use can 'mirror' a repository.
18 changes: 13 additions & 5 deletions pulp_rpm/app/models/repository.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,11 @@ class RpmRepository(Repository):

sub_repo = models.BooleanField(default=False)

def new_version(self, base_version=None):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.mirror = False

def new_version(self, base_version=None, mirror=False):
"""
Create a new RepositoryVersion for this Repository.
Expand All @@ -62,11 +66,13 @@ def new_version(self, base_version=None):
repository (pulpcore.app.models.Repository): to create a new version of
base_version (pulpcore.app.models.RepositoryVersion): an optional repository version
whose content will be used as the set of content for the new version
mirror (bool): new_version is a mirror or not
Returns:
pulpcore.app.models.RepositoryVersion: The Created RepositoryVersion
"""
self.mirror = mirror
with transaction.atomic():
version = RepositoryVersion(
repository=self,
Expand Down Expand Up @@ -114,11 +120,13 @@ def finalize_new_version(self, new_version):

remove_duplicates(new_version)

from pulp_rpm.app.modulemd import resolve_module_packages # avoid circular import
resolve_module_packages(new_version, previous_version)
# in mirror mode we don't update, only sync new repo
if not self.mirror:
from pulp_rpm.app.modulemd import resolve_module_packages # avoid circular import
resolve_module_packages(new_version, previous_version)

from pulp_rpm.app.advisory import resolve_advisories # avoid circular import
resolve_advisories(new_version, previous_version)
from pulp_rpm.app.advisory import resolve_advisories # avoid circular import
resolve_advisories(new_version, previous_version)


class RpmRemote(Remote):
Expand Down
6 changes: 4 additions & 2 deletions pulp_rpm/app/tasks/synchronizing.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ def repodata_exists(remote, url):
return True


def synchronize(remote_pk, repository_pk):
def synchronize(remote_pk, repository_pk, mirror):
"""
Sync content from the remote repository.
Expand Down Expand Up @@ -146,7 +146,8 @@ def synchronize(remote_pk, repository_pk):

first_stage = RpmFirstStage(remote, deferred_download, treeinfo=treeinfo)
dv = RpmDeclarativeVersion(first_stage=first_stage,
repository=repository)
repository=repository,
mirror=mirror)
dv.create()


Expand Down Expand Up @@ -629,6 +630,7 @@ async def run(self):
update_record = UpdateRecord(
**UpdateRecord.createrepo_to_dict(update)
)

update_record.digest = hash_update_record(update)
future_relations = {
'collections': defaultdict(list), 'references': []
Expand Down
4 changes: 3 additions & 1 deletion pulp_rpm/app/viewsets.py
Original file line number Diff line number Diff line change
Expand Up @@ -121,13 +121,15 @@ def sync(self, request, pk):
)
serializer.is_valid(raise_exception=True)
remote = serializer.validated_data.get('remote')
mirror = serializer.validated_data.get('mirror', False)

result = enqueue_with_reservation(
tasks.synchronize,
[repository, remote],
kwargs={
'remote_pk': remote.pk,
'repository_pk': repository.pk
'repository_pk': repository.pk,
'mirror': mirror
}
)
return OperationPostponedResponse(result, request)
Expand Down

0 comments on commit 91e976d

Please sign in to comment.