ubuntutools.builder: Detect missing builder and fail early.

This commit is contained in:
Stefano Rivera 2011-07-26 10:54:45 +02:00
commit 5762512710
2 changed files with 28 additions and 15 deletions

6
debian/changelog vendored
View File

@ -1,3 +1,9 @@
ubuntu-dev-tools (0.128) UNRELEASED; urgency=low
* ubuntutools.builder: Detect missing builder and fail early.
-- Stefano Rivera <stefanor@debian.org> Mon, 25 Jul 2011 19:36:41 +0200
ubuntu-dev-tools (0.127) unstable; urgency=low ubuntu-dev-tools (0.127) unstable; urgency=low
* Move debian-distro-info, distro-info, and ubuntu-distro-info from * Move debian-distro-info, distro-info, and ubuntu-distro-info from

View File

@ -41,6 +41,12 @@ class Builder(object):
(os.path.basename(dsc_file), self.name)) (os.path.basename(dsc_file), self.name))
return returncode return returncode
def exists_in_path(self):
for path in os.environ.get('PATH', os.defpath).split(os.pathsep):
if os.path.isfile(os.path.join(path, self.name)):
return True
return False
def get_architecture(self): def get_architecture(self):
return self.architecture return self.architecture
@ -55,14 +61,13 @@ class Builder(object):
class Pbuilder(Builder): class Pbuilder(Builder):
def __init__(self, command="pbuilder"): def __init__(self, name="pbuilder"):
Builder.__init__(self, "pbuilder") Builder.__init__(self, name)
self._command = command
def build(self, dsc_file, dist, result_directory): def build(self, dsc_file, dist, result_directory):
_build_preparation(result_directory) _build_preparation(result_directory)
cmd = ["sudo", "-E", "ARCH=" + self.architecture, "DIST=" + dist, cmd = ["sudo", "-E", "ARCH=" + self.architecture, "DIST=" + dist,
self._command, "--build", self.name, "--build",
"--architecture", self.architecture, "--distribution", dist, "--architecture", self.architecture, "--distribution", dist,
"--buildresult", result_directory, dsc_file] "--buildresult", result_directory, dsc_file]
Logger.command(cmd) Logger.command(cmd)
@ -71,7 +76,7 @@ class Pbuilder(Builder):
def update(self, dist): def update(self, dist):
cmd = ["sudo", "-E", "ARCH=" + self.architecture, "DIST=" + dist, cmd = ["sudo", "-E", "ARCH=" + self.architecture, "DIST=" + dist,
self._command, "--update", self.name, "--update",
"--architecture", self.architecture, "--distribution", dist] "--architecture", self.architecture, "--distribution", dist]
Logger.command(cmd) Logger.command(cmd)
returncode = subprocess.call(cmd) returncode = subprocess.call(cmd)
@ -79,20 +84,19 @@ class Pbuilder(Builder):
class Pbuilderdist(Builder): class Pbuilderdist(Builder):
def __init__(self, command="pbuilder-dist"): def __init__(self, name="pbuilder-dist"):
Builder.__init__(self, "pbuilder-dist") Builder.__init__(self, name)
self._command = command
def build(self, dsc_file, dist, result_directory): def build(self, dsc_file, dist, result_directory):
_build_preparation(result_directory) _build_preparation(result_directory)
cmd = [self._command, dist, self.architecture, cmd = [self.name, dist, self.architecture,
"build", dsc_file, "--buildresult", result_directory] "build", dsc_file, "--buildresult", result_directory]
Logger.command(cmd) Logger.command(cmd)
returncode = subprocess.call(cmd) returncode = subprocess.call(cmd)
return self._build_failure(returncode, dsc_file) return self._build_failure(returncode, dsc_file)
def update(self, dist): def update(self, dist):
cmd = [self._command, dist, self.architecture, "update"] cmd = [self.name, dist, self.architecture, "update"]
Logger.command(cmd) Logger.command(cmd)
returncode = subprocess.call(cmd) returncode = subprocess.call(cmd)
return self._update_failure(returncode, dist) return self._update_failure(returncode, dist)
@ -149,16 +153,19 @@ class Sbuild(Builder):
_SUPPORTED_BUILDERS = { _SUPPORTED_BUILDERS = {
"cowbuilder": lambda: Pbuilder("cowbuilder"), "cowbuilder": lambda: Pbuilder("cowbuilder"),
"cowbuilder-dist": lambda: Pbuilderdist("cowbuilderdist"), "cowbuilder-dist": lambda: Pbuilderdist("cowbuilder-dist"),
"pbuilder": lambda: Pbuilder(), "pbuilder": lambda: Pbuilder(),
"pbuilder-dist": lambda: Pbuilderdist(), "pbuilder-dist": lambda: Pbuilderdist(),
"sbuild": lambda: Sbuild(), "sbuild": lambda: Sbuild(),
} }
def get_builder(builder): def get_builder(name):
if builder in _SUPPORTED_BUILDERS: if name in _SUPPORTED_BUILDERS:
return _SUPPORTED_BUILDERS[builder]() builder = _SUPPORTED_BUILDERS[name]()
if builder.exists_in_path():
return builder
Logger.error("Builder doesn't appear to be installed: %s", name)
else: else:
Logger.error("Unsupported builder specified: %s.", builder) Logger.error("Unsupported builder specified: %s.", name)
Logger.error("Supported builders: %s", Logger.error("Supported builders: %s",
", ".join(sorted(_SUPPORTED_BUILDERS.keys()))) ", ".join(sorted(_SUPPORTED_BUILDERS.keys())))