diff --git a/debian/changelog b/debian/changelog index 94e6a6f..08ab4c4 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +ubuntu-dev-tools (0.128) UNRELEASED; urgency=low + + * ubuntutools.builder: Detect missing builder and fail early. + + -- Stefano Rivera Mon, 25 Jul 2011 19:36:41 +0200 + ubuntu-dev-tools (0.127) unstable; urgency=low * Move debian-distro-info, distro-info, and ubuntu-distro-info from diff --git a/ubuntutools/builder.py b/ubuntutools/builder.py index ef00e22..6a8a765 100644 --- a/ubuntutools/builder.py +++ b/ubuntutools/builder.py @@ -41,6 +41,12 @@ class Builder(object): (os.path.basename(dsc_file), self.name)) 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): return self.architecture @@ -55,14 +61,13 @@ class Builder(object): class Pbuilder(Builder): - def __init__(self, command="pbuilder"): - Builder.__init__(self, "pbuilder") - self._command = command + def __init__(self, name="pbuilder"): + Builder.__init__(self, name) def build(self, dsc_file, dist, result_directory): _build_preparation(result_directory) cmd = ["sudo", "-E", "ARCH=" + self.architecture, "DIST=" + dist, - self._command, "--build", + self.name, "--build", "--architecture", self.architecture, "--distribution", dist, "--buildresult", result_directory, dsc_file] Logger.command(cmd) @@ -71,7 +76,7 @@ class Pbuilder(Builder): def update(self, dist): cmd = ["sudo", "-E", "ARCH=" + self.architecture, "DIST=" + dist, - self._command, "--update", + self.name, "--update", "--architecture", self.architecture, "--distribution", dist] Logger.command(cmd) returncode = subprocess.call(cmd) @@ -79,20 +84,19 @@ class Pbuilder(Builder): class Pbuilderdist(Builder): - def __init__(self, command="pbuilder-dist"): - Builder.__init__(self, "pbuilder-dist") - self._command = command + def __init__(self, name="pbuilder-dist"): + Builder.__init__(self, name) def build(self, dsc_file, dist, result_directory): _build_preparation(result_directory) - cmd = [self._command, dist, self.architecture, + cmd = [self.name, dist, self.architecture, "build", dsc_file, "--buildresult", result_directory] Logger.command(cmd) returncode = subprocess.call(cmd) return self._build_failure(returncode, dsc_file) def update(self, dist): - cmd = [self._command, dist, self.architecture, "update"] + cmd = [self.name, dist, self.architecture, "update"] Logger.command(cmd) returncode = subprocess.call(cmd) return self._update_failure(returncode, dist) @@ -149,16 +153,19 @@ class Sbuild(Builder): _SUPPORTED_BUILDERS = { "cowbuilder": lambda: Pbuilder("cowbuilder"), - "cowbuilder-dist": lambda: Pbuilderdist("cowbuilderdist"), + "cowbuilder-dist": lambda: Pbuilderdist("cowbuilder-dist"), "pbuilder": lambda: Pbuilder(), "pbuilder-dist": lambda: Pbuilderdist(), "sbuild": lambda: Sbuild(), } -def get_builder(builder): - if builder in _SUPPORTED_BUILDERS: - return _SUPPORTED_BUILDERS[builder]() +def get_builder(name): + if name in _SUPPORTED_BUILDERS: + builder = _SUPPORTED_BUILDERS[name]() + if builder.exists_in_path(): + return builder + Logger.error("Builder doesn't appear to be installed: %s", name) else: - Logger.error("Unsupported builder specified: %s.", builder) + Logger.error("Unsupported builder specified: %s.", name) Logger.error("Supported builders: %s", ", ".join(sorted(_SUPPORTED_BUILDERS.keys())))