launchpad-reviewers team mailing list archive
-
launchpad-reviewers team
-
Mailing list archive
-
Message #07268
[Merge] lp:~allenap/maas/shells-are-daft into lp:maas
Gavin Panella has proposed merging lp:~allenap/maas/shells-are-daft into lp:maas.
Requested reviews:
Launchpad code reviewers (launchpad-reviewers)
For more details, see:
https://code.launchpad.net/~allenap/maas/shells-are-daft/+merge/103428
This adds explicit checks for several external executables because shells (well, bash/sh at least) consider the absence of an executable the same as any other non-zero return code. The checks take the form of a `make` function that uses `which` to look for the command. If the test fails a message is printed suggesting a package that ought to be installed.
The motivation for doing this was daemontools. It was not installed on the Jenkins builder, yet `make distclean` was completing without error. It was printing out gobs of complaining messages, but was returning zero.
I've also made a similar change for pocketlint. Previously there was a target to `sudo apt-get install` pocketlint's package, but I was never entirely comfortable with that. Now it suggests that the package should be installed and leaves it up to the user to sort that out.
--
https://code.launchpad.net/~allenap/maas/shells-are-daft/+merge/103428
Your team Launchpad code reviewers is requested to review the proposed merge of lp:~allenap/maas/shells-are-daft into lp:maas.
=== modified file 'Makefile'
--- Makefile 2012-04-24 09:15:00 +0000
+++ Makefile 2012-04-25 09:06:24 +0000
@@ -57,17 +57,16 @@
@find $(sources) -name '*.py' ! -path '*/migrations/*' \
-print0 | xargs -r0 bin/flake8
+pocketlint = $(call available,pocketlint,python-pocket-lint)
+
lint-css: sources = src/maasserver/static/css
-lint-css: /usr/bin/pocketlint
+lint-css:
@find $(sources) -type f \
- -print0 | xargs -r0 pocketlint --max-length=120
+ -print0 | xargs -r0 $(pocketlint) --max-length=120
lint-js: sources = src/maasserver/static/js
-lint-js: /usr/bin/pocketlint
- @find $(sources) -type f -print0 | xargs -r0 pocketlint
-
-/usr/bin/pocketlint:
- sudo apt-get install python-pocket-lint
+lint-js:
+ @find $(sources) -type f -print0 | xargs -r0 $(pocketlint)
check: clean test
@@ -156,36 +155,44 @@
supervise
endef
+# Convenient variables and functions for service control.
+
+setlock = $(call available,setlock,daemontools)
+supervise = $(call available,supervise,daemontools)
+svc = $(call available,svc,daemontools)
+svok = $(call available,svok,daemontools)
+svstat = $(call available,svstat,daemontools)
+
+service_lock = $(setlock) -n /run/lock/maas.dev.$(firstword $(1))
+
# Pseudo-magic targets for controlling individual services.
-service_lock = setlock -n /run/lock/maas.dev.$(firstword $(1))
-
services/%/@run: services/%/@stop services/%/@deps
@$(call service_lock, $*) services/$*/run
services/%/@start: services/%/@supervise
- @svc -u $(@D)
+ @$(svc) -u $(@D)
services/%/@pause: services/%/@supervise
- @svc -d $(@D)
+ @$(svc) -d $(@D)
services/%/@status:
- @svstat $(@D)
+ @$(svstat) $(@D)
services/%/@restart: services/%/@supervise
- @svc -du $(@D)
+ @$(svc) -du $(@D)
services/%/@stop:
- @if svok $(@D); then svc -dx $(@D); fi
- @while svok $(@D); do sleep 0.1; done
+ @if $(svok) $(@D); then $(svc) -dx $(@D); fi
+ @while $(svok) $(@D); do sleep 0.1; done
services/%/@supervise: services/%/@deps
@mkdir -p logs/$*
@touch $(@D)/down
- @if ! svok $(@D); then \
+ @if ! $(svok) $(@D); then \
logdir=$(PWD)/logs/$* \
- $(call service_lock, $*) supervise $(@D) & fi
- @while ! svok $(@D); do sleep 0.1; done
+ $(call service_lock, $*) $(supervise) $(@D) & fi
+ @while ! $(svok) $(@D); do sleep 0.1; done
# Dependencies for individual services.
@@ -211,3 +218,14 @@
phony := $(sort $(strip $(phony)))
.PHONY: $(phony)
+
+#
+# Functions.
+#
+
+# Check if a command is found on PATH. Raise an error if not, citing
+# the package to install. Return the command otherwise.
+# Usage: $(call available,<command>,<package>)
+define available
+ $(if $(shell which $(1)),$(1),$(error $(1) not found; install $(2)))
+endef