コード例 #1
0
ファイル: backend.py プロジェクト: darvid/borealis
 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
ファイル: core.py プロジェクト: darvid/borealis
 def dispatch(self, action, arguments):
     name = CAPABS.get_name(action)
     results = []
     for index, backend in enumerate(self.backends):
         method = backend.get_method(action)
         if method:
             try:
                 if action == CAPABS.SEARCH:
                     results.append(method(*arguments))
                 else:
                     results.extend(map(method, arguments))
             except DeferToNextBackend:
                 if index != len(self.backends) - 1:
                     next_backend = self.backends[index + 1]
                     log.info("deferring to " +
                              next_backend.__class__.__name__)
                     continue
         else:
             log.warning("backend {} does not support method {}"\
                         .format(backend.__class__.__name__, name))
     results = flatten_lazy(results)
     try:
         first = next(results)
         results = itertools.chain([first], results)
     except StopIteration:
         log.notice("no results")
         sys.exit(0)
     return getattr(self, "post_" + name.lower())(results)
コード例 #3
0
ファイル: backend.py プロジェクト: darvid/borealis
 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
ファイル: core.py プロジェクト: darvid/borealis
 def interrupt(signal, frame):
     print("")
     log.info("interrupted")
     sys.exit(0)