Exemplo n.º 1
0
def publish(publisher_pk, repository_version_pk):
    """
    Use provided publisher to create a Publication based on a RepositoryVersion.

    Args:
        publisher_pk (str): Use the publish settings provided by this publisher.
        repository_version_pk (str): Create a publication from this repository version.
    """
    publisher = GemPublisher.objects.get(pk=publisher_pk)
    repository_version = RepositoryVersion.objects.get(
        pk=repository_version_pk)

    log.info(
        _('Publishing: repository=%(repository)s, version=%(version)d, publisher=%(publisher)s'
          ), {
              'repository': repository_version.repository.name,
              'version': repository_version.number,
              'publisher': publisher.name,
          })

    with WorkingDirectory():
        with Publication.create(repository_version, publisher) as publication:
            specs = []
            latest_versions = {}
            prerelease_specs = []
            for content in GemContent.objects.filter(
                    pk__in=publication.repository_version.content).order_by(
                        '-created'):
                for content_artifact in content.contentartifact_set.all():
                    published_artifact = PublishedArtifact(
                        relative_path=content_artifact.relative_path,
                        publication=publication,
                        content_artifact=content_artifact)
                    published_artifact.save()
                if re.fullmatch(r"[0-9.]*", content.version):
                    specs.append(Key(content.name, content.version))
                    old_ver = latest_versions.get(content.name)
                    if old_ver is None or version.parse(
                            old_ver) < version.parse(content.version):
                        latest_versions[content.name] = content.version
                else:
                    prerelease_specs.append(Key(content.name, content.version))
            latest_specs = [
                Key(name, version)
                for name, version in latest_versions.items()
            ]

            _publish_specs(specs, 'specs.4.8', publication)
            _publish_specs(latest_specs, 'latest_specs.4.8', publication)
            _publish_specs(prerelease_specs, 'prerelease_specs.4.8',
                           publication)

    log.info(_('Publication: %(publication)s created'),
             {'publication': publication.pk})
Exemplo n.º 2
0
def publish(repository_version_pk):
    """
    Create a Publication based on a RepositoryVersion.

    Args:
        repository_version_pk (str): Create a publication from this repository version.

    """
    repository_version = RepositoryVersion.objects.get(
        pk=repository_version_pk)

    log.info(
        _("Publishing: repository={repo}, version={ver}").format(
            repo=repository_version.repository.name,
            ver=repository_version.number))
    with WorkingDirectory():
        with GemPublication.create(repository_version) as publication:
            specs = []
            latest_versions = {}
            prerelease_specs = []
            for content in GemContent.objects.filter(
                    pk__in=publication.repository_version.content).order_by(
                        "-pulp_created"):
                for content_artifact in content.contentartifact_set.all():
                    published_artifact = PublishedArtifact(
                        relative_path=content_artifact.relative_path,
                        publication=publication,
                        content_artifact=content_artifact,
                    )
                    published_artifact.save()
                if re.fullmatch(r"[0-9.]*", content.version):
                    specs.append(Key(content.name, content.version))
                    old_ver = latest_versions.get(content.name)
                    if old_ver is None or version.parse(
                            old_ver) < version.parse(content.version):
                        latest_versions[content.name] = content.version
                else:
                    prerelease_specs.append(Key(content.name, content.version))
            latest_specs = [
                Key(name, version)
                for name, version in latest_versions.items()
            ]

            _publish_specs(specs, "specs.4.8", publication)
            _publish_specs(latest_specs, "latest_specs.4.8", publication)
            _publish_specs(prerelease_specs, "prerelease_specs.4.8",
                           publication)

    log.info(
        _("Publication: {publication} created").format(
            publication=publication.pk))
Exemplo n.º 3
0
def find_delta(specs, content, mirror=True):
    """
    Using the specs and set of existing (natural) keys,
    determine the set of content to be added and deleted from the
    repository.  Expressed in natural key.
    """
    """
    Find the content that needs to be added and removed.

    Args:
        specs (Specs): The downloaded specs.
        content: (set): The set of natural keys for content contained in the (base)
            repository version.
        mirror (bool): The delta should include changes needed to ensure the content
            contained within the pulp repository is exactly the same as the
            content contained within the remote repository.

    Returns:
        Delta: The set of Key to be added and removed.
    """
    remote_content = set([Key(name=e.name, version=e.version) for e in specs])
    additions = (remote_content - content)
    if mirror:
        removals = (content - remote_content)
    else:
        removals = set()
    return Delta(additions, removals)
Exemplo n.º 4
0
def fetch_content(base_version):
    """
    Fetch the GemContent contained in the (base) repository version.

    Args:
        base_version (RepositoryVersion): A repository version.

    Returns:
        set: A set of Key contained in the (base) repository version.
    """
    content = set()
    if base_version:
        for gem in GemContent.objects.filter(pk__in=base_version.content):
            key = Key(name=gem.name, version=gem.version)
            content.add(key)
    return content