Beispiel #1
0
 def sync(self, package):
     package = self.query(package)
     if not package:
         raise DeferToNextBackend
     package_dir = path(self.config.staging_area).join(package.name)
     if not package_dir.exists:
         package_dir.create()
     filename = package_dir.join(path(package.metadata.urlpath).name)
     if not filename.exists:
         download(urlparse.urljoin(self.config.base_url, package.metadata.urlpath), filename)
     if not package_dir.join(package.name).exists:
         with tarfile.open(filename.absolute) as tar:
             tar.extractall(package_dir)
             tar.close()
     srcdir = package_dir.join(package.name)
     if not package.depends:
         package.metadata = PackageMetadata.from_pkgbuild(srcdir.join("PKGBUILD"), name=package.name)
     unmet_deps = deptest(*package.depends)
     for dependency in unmet_deps:
         log.info("resolving dependency: " + str(dependency))
         self.frontend.dispatch(CAPABS.SYNC, [dependency.name])
     child = pexpect.spawn("makepkg -si", cwd=srcdir)
     if child.expect("Password: "******".*Failed to install built package\(s\).", r".*Finished making: (.+?) ([^ ]+)", r".*\[Y/n\]"]
     )
     if index == 2:
         child.setecho(False)
         child.sendline("y")
     child.expect(pexpect.EOF)
Beispiel #2
0
 def search(self, *terms):
     """Don't use this. This is painfully slow."""
     desc_re = re.compile(r"%DESC%\n.*{0}.*$".format(".*".join(terms)),
                          re.IGNORECASE | re.MULTILINE)
     for db in ALPM_DB_PATH.join("sync").glob("*.db"):
         if db.name[:-3] not in self.enabled_repositories:
             continue
         seen = []
         try:
             tar = tarfile.open(db, "r")
         except tarfile.ReadError:
             log.error("could not open db file: {0}".format(db))
             continue
         for member in tar.getmembers():
             member_path = path(member.name)
             if member_path.name != "desc":
                 continue
             package = member_path.parent
             if package.name in seen:
                 continue
             desc = tar.extractfile(member).read()
             if (len(terms) == 1 and
                 re.match(terms[0], package.name, re.IGNORECASE)):
                 seen.append(package.name)
             else:
                 if re.search(desc_re, desc):
                     seen.append(package.name)
                 else:
                     continue
             metadata = self.parse_desc(desc)
             yield ALPMPackage(metadata=metadata)
Beispiel #3
0
 def initialize(self):
     super(AURBackend, self).initialize()
     staging_area = path(self.config.staging_area)
     if not staging_area.exists:
         log.info("creating staging area: " + staging_area)
         staging_area.create()
Beispiel #4
0
def download(url, pathname):
    return path(pathname).write(urllib2.urlopen(url).read(), "wb")
Beispiel #5
0
def download(url, location):
    response = urllib2.urlopen(url)
    with path(location).open("wb") as f:
        f.write(response.read())
Beispiel #6
0
import os
import nose
import pwd
import sys
import urllib2
import unittest

from ...objects import Package, PackageMetadata
from .backend import AURBackend
from ufl.io.fs import path
from ufl.io.shell import execute


tmp = path("/tmp/borealis-" + pwd.getpwuid(os.getuid())[0] + "/aur3/")


def download(url, location):
    response = urllib2.urlopen(url)
    with path(location).open("wb") as f:
        f.write(response.read())


def parse_meta(meta_file):
    try:
        metadata = AURBackend.sanitize_json_metadata(meta_file.read())
    except ValueError:
        metadata = None
    assert metadata, meta_file


def parse_pkgbuild(pkgbuild):
Beispiel #7
0
import tarfile

from borealis import log
from borealis.backends import DeferToNextBackend, ACTIONS, CAPABS, \
                              PackageManagementBackend
from borealis.objects import Package, PackageMetadata, Version
from borealis.util import sudo
from ufl.core.structures.dict import AttrDict
from ufl.io.fs import path
from ufl.io.shell import execute, PIPE


__all__ = ["ALPMBackend", "PacmanProxyBackend"]


ALPM_DB_PATH = path("/var/lib/pacman")


class ALPMPackage(Package):
    """Represents an Archlinux package. Provides additional, ALPM specific
    metadata such as :attr:`installed` and :attr:`installed_version`."""

    def __init__(self, *args, **kwargs):
        super(ALPMPackage, self).__init__(*args, **kwargs)
        self._installed_dir = ALPM_DB_PATH.join("local").glob(self.name +
                                                              "-[0-9]*")

    @property
    def installed(self):
        return self._installed_dir != []