Some more refactoring.

This commit is contained in:
Jelmer Vernooij 2021-02-27 16:20:07 +00:00
parent dd14deb00d
commit 7c61fa0e43
6 changed files with 39 additions and 28 deletions

View file

@ -23,7 +23,7 @@ from .buildsystem import NoBuildToolsFound, detect_buildsystems
from .resolver import (
auto_resolver,
native_resolvers,
MissingDependencies,
UnsatisfiedRequirements,
)
from .resolver.apt import AptResolver

View file

@ -117,7 +117,6 @@ class SetupPy(BuildSystem):
return "%s(%r)" % (type(self).__name__, self.path)
def setup(self, resolver):
resolver.install([PythonPackageRequirement('pip')])
with open(self.path, "r") as f:
setup_py_contents = f.read()
try:
@ -222,10 +221,9 @@ class PyProject(BuildSystem):
resolver.install(
[
PythonPackageRequirement("venv"),
PythonPackageRequirement("pip"),
PythonPackageRequirement("poetry"),
]
)
session.check_call(["pip3", "install", "poetry"], user="root")
session.check_call(["poetry", "build", "-f", "sdist"])
return
raise AssertionError("no supported section in pyproject.toml")
@ -242,7 +240,6 @@ class SetupCfg(BuildSystem):
resolver.install(
[
PythonPackageRequirement("pep517"),
PythonPackageRequirement("pip"),
]
)

View file

@ -125,6 +125,7 @@ def create_dist_schroot(
) -> str:
from .buildsystem import detect_buildsystems
from .resolver.apt import AptResolver
from .buildlog import UpstreamRequirementFixer
if subdir is None:
subdir = "package"
@ -150,13 +151,14 @@ def create_dist_schroot(
buildsystems = list(detect_buildsystems(export_directory))
resolver = AptResolver.from_session(session)
fixers = [UpstreamRequirementFixer(resolver)]
with DistCatcher(export_directory) as dc:
oldcwd = os.getcwd()
os.chdir(export_directory)
try:
session.chdir(os.path.join(reldir, subdir))
run_dist(session, buildsystems, resolver)
run_dist(session, buildsystems, resolver, fixers)
finally:
os.chdir(oldcwd)
@ -194,9 +196,17 @@ if __name__ == "__main__":
parser.add_argument(
"--target-directory", type=str, default="..", help="Target directory"
)
parser.add_argument(
"--verbose",
action="store_true",
help="Be verbose")
args = parser.parse_args()
logging.basicConfig(level=logging.INFO)
if args.verbose:
logging.basicConfig(level=logging.DEBUG)
else:
logging.basicConfig(level=logging.INFO)
tree = WorkingTree.open(args.directory)
if args.packaging_directory:

View file

@ -16,7 +16,7 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
class MissingDependencies(Exception):
class UnsatisfiedRequirements(Exception):
def __init__(self, reqs):
self.requirements = reqs
@ -55,7 +55,7 @@ class CPANResolver(Resolver):
user="root", env={"PERL_MM_USE_DEFAULT": "1"}
)
if missing:
raise MissingDependencies(missing)
raise UnsatisfiedRequirements(missing)
def explain(self, requirements):
raise NotImplementedError(self.explain)
@ -83,7 +83,7 @@ class CargoResolver(Resolver):
["cargo", "install", requirement.crate],
user="root")
if missing:
raise MissingDependencies(missing)
raise UnsatisfiedRequirements(missing)
def explain(self, requirements):
raise NotImplementedError(self.explain)
@ -109,7 +109,7 @@ class PypiResolver(Resolver):
continue
self.session.check_call(["pip", "install", requirement.package])
if missing:
raise MissingDependencies(missing)
raise UnsatisfiedRequirements(missing)
def explain(self, requirements):
raise NotImplementedError(self.explain)
@ -145,7 +145,7 @@ class NpmResolver(Resolver):
continue
self.session.check_call(["npm", "-g", "install", package])
if missing:
raise MissingDependencies(missing)
raise UnsatisfiedRequirements(missing)
def explain(self, requirements):
raise NotImplementedError(self.explain)
@ -165,7 +165,7 @@ class StackedResolver(Resolver):
for sub in self.subs:
try:
sub.install(requirements)
except MissingDependencies as e:
except UnsatisfiedRequirements as e:
requirements = e.requirements
else:
return
@ -188,7 +188,7 @@ class ExplainResolver(Resolver):
return cls(session)
def install(self, requirements):
raise MissingDependencies(requirements)
raise UnsatisfiedRequirements(requirements)
def auto_resolver(session):

View file

@ -21,7 +21,7 @@ import posixpath
from ..debian.apt import AptManager
from . import Resolver, MissingDependencies
from . import Resolver, UnsatisfiedRequirements
from ..requirements import (
BinaryRequirement,
CHeaderRequirement,
@ -520,19 +520,20 @@ class AptResolver(Resolver):
missing.append(req)
except NotImplementedError:
missing.append(req)
if missing:
still_missing = []
apt_requirements = []
for m in missing:
apt_req = self.resolve(m)
if apt_req is None:
still_missing.append(m)
else:
apt_requirements.append(m)
self.apt.install(
[req.package for req in apt_requirements])
if still_missing:
raise MissingDependencies(still_missing)
if not missing:
return
still_missing = []
apt_requirements = []
for m in missing:
apt_req = self.resolve(m)
if apt_req is None:
still_missing.append(m)
else:
apt_requirements.append(m)
self.apt.install(
[req.package for req in apt_requirements])
if still_missing:
raise UnsatisfiedRequirements(still_missing)
def explain(self, requirements):
raise NotImplementedError(self.explain)

View file

@ -61,6 +61,9 @@ class SchrootSession(Session):
except subprocess.CalledProcessError:
# TODO(jelmer): Capture stderr and forward in SessionSetupFailure
raise SessionSetupFailure()
logging.info(
'Opened schroot session %s (from %s)', self.session_id,
self.chroot)
return self
def __exit__(self, exc_type, exc_val, exc_tb):