From 0b9077f9643032f263c7dfb9c6d21669d1afa537 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jelmer=20Vernoo=C4=B3?= Date: Tue, 2 Mar 2021 17:55:44 +0000 Subject: [PATCH] Support for running apt as root. --- ognibuild/buildsystem.py | 4 ++++ ognibuild/debian/apt.py | 3 +++ ognibuild/resolver/apt.py | 2 +- ognibuild/session/plain.py | 8 ++++++++ setup.py | 2 +- 5 files changed, 17 insertions(+), 2 deletions(-) diff --git a/ognibuild/buildsystem.py b/ognibuild/buildsystem.py index 2b47cc0..bfee9cd 100644 --- a/ognibuild/buildsystem.py +++ b/ognibuild/buildsystem.py @@ -302,6 +302,10 @@ class Meson(BuildSystem): self._setup(session, fixers) run_with_build_fixers(session, ["ninja", "-C", "build"], fixers) + def dist(self, session, resolver, fixers, quiet=False): + self._setup(session, fixers) + run_with_build_fixers(session, ["ninja", "-C", "build", "dist"], fixers) + def test(self, session, resolver, fixers): self._setup(session, fixers) run_with_build_fixers(session, ["ninja", "-C", "build", "test"], fixers) diff --git a/ognibuild/debian/apt.py b/ognibuild/debian/apt.py index 6dc89f7..f5480da 100644 --- a/ognibuild/debian/apt.py +++ b/ognibuild/debian/apt.py @@ -103,6 +103,9 @@ class AptManager(object): def satisfy(self, deps: List[str]) -> None: run_apt(self.session, ["satisfy"] + deps) + def satisfy_command(self, deps: List[str]) -> str: + return ["apt", "satisfy"] + deps + class ContentsFileNotFound(Exception): """The contents file was not found.""" diff --git a/ognibuild/resolver/apt.py b/ognibuild/resolver/apt.py index 08d95a4..f500efe 100644 --- a/ognibuild/resolver/apt.py +++ b/ognibuild/resolver/apt.py @@ -595,7 +595,7 @@ class AptResolver(Resolver): if apt_req is not None: apt_requirements.append((r, apt_req)) if apt_requirements: - yield (["apt", "satisfy"] + [PkgRelation.str(chain(*[r.relations for o, r in apt_requirements]))], [o for o, r in apt_requirements]) + yield (self.apt.satisfy_command([PkgRelation.str(chain(*[r.relations for o, r in apt_requirements]))]), [o for o, r in apt_requirements]) def resolve(self, req: Requirement): return resolve_requirement_apt(self.apt, req) diff --git a/ognibuild/session/plain.py b/ognibuild/session/plain.py index b1f237c..05f86a9 100644 --- a/ognibuild/session/plain.py +++ b/ognibuild/session/plain.py @@ -27,6 +27,13 @@ class PlainSession(Session): location = "/" + def _prepend_user(self, user, args): + if user is not None: + import getpass + if user != getpass.getuser(): + args = ["sudo", "-u", user] + args + return args + def __repr__(self): return "%s()" % (type(self).__name__, ) @@ -40,6 +47,7 @@ class PlainSession(Session): return subprocess.check_output(args) def Popen(self, args, stdout=None, stderr=None, user=None, cwd=None): + args = self._prepend_user(user, args) return subprocess.Popen(args, stdout=stdout, stderr=stderr, cwd=cwd) def exists(self, path): diff --git a/setup.py b/setup.py index d85eb85..f8d358e 100755 --- a/setup.py +++ b/setup.py @@ -6,7 +6,7 @@ from setuptools import setup setup(name="ognibuild", description="Detect and run any build system", - version="0.0.2", + version="0.0.1", maintainer="Jelmer Vernooij", maintainer_email="jelmer@jelmer.uk", license="GNU GPLv2 or later",