示例#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)
示例#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)
示例#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()
示例#4
0
文件: util.py 项目: darvid/borealis
def download(url, pathname):
    return path(pathname).write(urllib2.urlopen(url).read(), "wb")
示例#5
0
文件: test.py 项目: darvid/borealis
def download(url, location):
    response = urllib2.urlopen(url)
    with path(location).open("wb") as f:
        f.write(response.read())
示例#6
0
文件: test.py 项目: darvid/borealis
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):
示例#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 != []