features.in: tagged scripts support

From now on a feature can contain this tree:

.
+- scripts.d/
+- image-scripts.d/
`- tagged/
   +- scripts.d/
   `- image-scripts.d/

...per subprofile part or in its root -- the latter one
gets merged into toplevel directory responsible for the
final image build.

NB: autoselected tags include only subprofile names
    (or both parts, for complex subprofiles) --
    this is highly prone to change yet!
This commit is contained in:
Michael Shigorin 2011-09-13 19:15:42 +03:00
parent 4801579cf5
commit f32b8d4f6e
2 changed files with 43 additions and 23 deletions

View File

@ -9,45 +9,61 @@ include $(BUILDDIR)/distcfg.mk
# first rsync what's static, and make backups (*~) -- # first rsync what's static, and make backups (*~) --
# these might signal of file clashes (or plain dirt); # these might signal of file clashes (or plain dirt);
# second, care for toplevel and tagged script dirs;
# then handle two more ways of implementing a feature # then handle two more ways of implementing a feature
#
# NB: some subprofiles will be specified as "src/dst" # NB: some subprofiles will be specified as "src/dst"
# (then both src/ and dst/ can hold the addons) # -- then both src/ and dst/ can hold the addons;
# still both pieces go into a single destination
### {image-,}scripts.d/ get rsynced twice :-/
### still we don't want the trimmed-down case
all: all:
@echo "** starting feature configuration" @echo "** starting feature configuration"
@if [ -n "$(GLOBAL_DEBUG)" ]; then \ @if [ -n "$(GLOBAL_DEBUG)" ]; then \
echo "** target subprofiles: $(SUBPROFILES)"; \ echo "** target subprofiles: $(SUBPROFILES)"; \
echo "** requested features: $(FEATURES)"; \ echo "** requested features: $(FEATURES)"; \
fi fi
@for dir in $(FEATURES); do \ @for feat in $(FEATURES); do \
pushd "$$dir" && \ pushd "$$feat" && \
for sub in $(SUBPROFILES); do \ for sub in / $(SUBPROFILES); do \
src="$${sub%/*}/"; \ src="$${sub%/*}"; \
dst="$${sub#*/}/"; \ dst="$${sub#*/}"; \
if [ -d "$$src/" ]; then rsync -qab "$$src" "$(BUILDDIR)/$$dst/"; fi; \ if [ -d "$$src" ]; then rsync -qab "$$src/" "$(BUILDDIR)/$$dst/"; fi; \
if [ -d "$$dst/" ]; then rsync -qab "$$dst" "$(BUILDDIR)/$$dst/"; fi; \ if [ -d "$$dst" ]; then rsync -qab "$$dst/" "$(BUILDDIR)/$$dst/"; fi; \
for scr in {image-,}scripts.d; do \
scriptdir="$(BUILDDIR)/$$dst/$$scr/"; \
if [ -d "$$scriptdir" ]; then \
if [ -d "$$scr" ]; then \
rsync -qab "$$scr/" "$$scriptdir/"; \
fi; \
if [ -d "tagged/$$scr" ]; then \
pushd "tagged/$$scr" && \
echo "($$src || $$dst)" \
| tags2lists . \
| xargs -r cp -v -pLt "$$scriptdir" --; \
popd; \
fi; \
fi; \
done; \
type -t git >&/dev/null && \ type -t git >&/dev/null && \
pushd "$(BUILDDIR)/$$dst/" && \ pushd "$(BUILDDIR)/$$dst/" && \
git add . && \ git add . && \
git commit -qam "$$dir feature ($$sub subprofile part)" ||:; \ if [ -n "$$dst" ]; then \
popd; \ the="$$sub subprofile"; \
done; \ else \
for scripts in scripts.d image-scripts.d; do \ the="toplevel"; \
if [ -d "$(BUILDDIR)/$$scripts" -a -d "$$scripts" ]; then \
if rsync -qab "$$scripts/" "$(BUILDDIR)/$$scripts/"; then \
type -t git >&/dev/null && \
pushd "$(BUILDDIR)/$$scripts/" && \
git add . && \
git commit -qam "$$dir feature (toplevel $$scripts)" ||:; \
popd; \
fi; \
fi; \ fi; \
git commit -qam "$$feat feature ($$the part)" ||:; \
popd; \
done; \ done; \
if [ -x "generate.sh" ]; then sh generate.sh; fi; \ if [ -x "generate.sh" ]; then sh generate.sh; fi; \
if [ -s "generate.mk" ]; then $(MAKE) -f generate.mk; fi; \ if [ -s "generate.mk" ]; then $(MAKE) -f generate.mk; fi; \
type -t git >&/dev/null && \ type -t git >&/dev/null && \
pushd "$(BUILDDIR)/" && \ pushd "$(BUILDDIR)/" && \
git add . && \ git add . && \
git commit -qam "$$dir feature generation complete" ||:; \ git commit -qam "$$feat feature generation complete" ||:; \
popd; \ popd; \
popd; \ popd; \
done done

View File

@ -13,8 +13,12 @@
после инициализации профиля (см. ../image.in/) и копирования после инициализации профиля (см. ../image.in/) и копирования
субпрофилей (см. ../sub.in/). Для каждой фичи, указанной субпрофилей (см. ../sub.in/). Для каждой фичи, указанной
в $(FEATURES), копируются подкаталоги сообразно субпрофилям, в $(FEATURES), копируются подкаталоги сообразно субпрофилям,
а также выполняется скрипт generate.sh и задействуется generate.mk а также производится обработка {tagged/,}{image-},scripts.d/
(при их наличии). (см. cleanup/ в качестве примера); затем выполняется скрипт
generate.sh и задействуется generate.mk (при их наличии).
NB: тегированные скрипты являются экспериментальными,
возможны недоработки и существенные изменения!
Если фича дополняет хуками семейство целевых субпрофилей, Если фича дополняет хуками семейство целевых субпрофилей,
построенных на одном базовом, можно воспользоваться подкаталогом построенных на одном базовом, можно воспользоваться подкаталогом