From 78bd6215b49d4497023db656688184dc62d4da76 Mon Sep 17 00:00:00 2001 From: Jan Lindemann Date: Sun, 2 Sep 2012 16:06:47 +0000 Subject: [PATCH] $(TOPDIR), make, scripts: Merged changes from V_1_2_3_33_YAPPLICATION_INIFILE_CTOR Signed-off-by: Jan Lindemann --- CHANGES | 4 ++ VERSION | 2 +- make/debugger.mk | 2 +- make/defs.mk | 104 ++++++++++++++++++++++++++++++++------- make/dirs.mk | 10 +++- make/rules.mk | 5 +- make/run.mk | 16 ++++++ make/targets-tools.mk | 11 ++++- make/topdir.mk | 12 ++++- scripts/build.py | 6 ++- scripts/git-srv-admin.sh | 102 ++++++++++++++++++++++++++++++++++++++ scripts/pgit.sh | 100 +++++++++++++++++++++++++++++++++++++ 12 files changed, 346 insertions(+), 28 deletions(-) create mode 100644 scripts/git-srv-admin.sh create mode 100644 scripts/pgit.sh diff --git a/CHANGES b/CHANGES index fe5c2113..b45f5aa2 100644 --- a/CHANGES +++ b/CHANGES @@ -414,3 +414,7 @@ Version 1.2.3 ------------- o changed interfaces of YVariant and YStringTree o joined V_1_2_3_20_CASAS_NOVAS + +Version 1.2.4 +------------- +o merged changes from V_1_2_3_33_YAPPLICATION_INIFILE_CTOR diff --git a/VERSION b/VERSION index a936361d..877da4e9 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.2.3-34-dev +1.2.4-0-dev diff --git a/make/debugger.mk b/make/debugger.mk index f161fdee..5fcb8bae 100644 --- a/make/debugger.mk +++ b/make/debugger.mk @@ -26,7 +26,7 @@ else endif attach: - cgdb $(EXE_PATH) -p $(PID) + gdb $(EXE_PATH) -p $(PID) attach-ddd: ddd $(EXE_PATH) -p $(PID) diff --git a/make/defs.mk b/make/defs.mk index d644942f..b84083bc 100644 --- a/make/defs.mk +++ b/make/defs.mk @@ -769,6 +769,7 @@ ifeq ($(USE_COMPILER_OPTIMIZATION_OPTS),true) BUILD_CPPFLAGS += -funroll-loops -O2 else NO_OPT_FLAGS = \ + -g -fno-inline -fno-omit-frame-pointer -fno-builtin -fno-optimize-sibling-calls \ -fno-inline-functions-called-once \ -fno-tree-loop-optimize \ -fno-early-inlining @@ -929,18 +930,18 @@ PREREQ += DSPCD endif ifneq ($(filter dspcd-ec,$(PREREQ_BUILD)),) -DSPCD_DIR = $(firstword $(wildcard $(CVS_PROJ_DIR)/dspc/src/dspcd /opt/$(FLAVOUR_PATH_PREFIX)dspider/dspcd-ec)) -DSPCD_EXE_PREFIX = $(firstword $(wildcard $(CVS_PROJ_DIR)/dspc/src/dspcd /opt/$(FLAVOUR_PATH_PREFIX)dspider)) +DSPCD_EC_DIR = $(firstword $(wildcard $(CVS_PROJ_DIR)/dspc/src/dspcd-ec $(CVS_PROJ_DIR)/dspc/src/dspcd /opt/$(FLAVOUR_PATH_PREFIX)dspider/dspcd-ec)) +DSPCD_EC_EXE_PREFIX = $(firstword $(wildcard $(CVS_PROJ_DIR)/dspc/src/dspcd-ec $(CVS_PROJ_DIR)/dspc/src/dspcd /opt/$(FLAVOUR_PATH_PREFIX)dspider)) # include $(DSPCD_DIR)/make/public.mk -DSPIDER_DSPCD_VERSION = $(call version,$(DSPCD_DIR)) +DSPIDER_DSPCD_EC_VERSION = $(call version,$(DSPCD_EC_DIR)) RPM_REQUIRES_RUN += $(FLAVOUR_PREFIX)dspider-dspcd-ec-run = $(DSPIDER_DSPCD_VERSION) RPM_REQUIRES_DEVEL += $(FLAVOUR_PREFIX)dspider-dspcd-ec-devel = $(DSPIDER_DSPCD_VERSION) PREREQ_BUILD += ytools PREREQ_BUILD += dspider-shared-ec -PREREQ_BUILD += userver -INCLUDE += -I$(DSPCD_DIR)/include -LIBFLAGS += -L$(DSPCD_EXE_PREFIX)/lib -ldspcd-ec -PREREQ += DSPCD +PREREQ_BUILD += userver xchange +INCLUDE += -I$(DSPCD_EC_DIR)/include +LIBFLAGS += -L$(DSPCD_EC_EXE_PREFIX)/lib -ldspcd-ec +PREREQ += DSPCD_EC endif ifneq ($(filter dsprout,$(PREREQ_BUILD)),) @@ -973,17 +974,17 @@ PREREQ += DSPIDER_SHARED endif ifneq ($(filter dspider-shared-ec,$(PREREQ_BUILD)),) -DSPIDER_SHARED_DIR = $(firstword $(wildcard $(CVS_PROJ_DIR)/dspc/src/shared /opt/$(FLAVOUR_PATH_PREFIX)dspider/shared-ec)) -DSPIDER_SHARED_EXE_PREFIX = $(firstword $(wildcard $(CVS_PROJ_DIR)/dspc/src/shared /opt/$(FLAVOUR_PATH_PREFIX)dspider)) -include $(DSPIDER_SHARED_DIR)/make/public.mk -DSPIDER_SHARED_VERSION = $(call version,$(DSPIDER_SHARED_DIR)) +DSPIDER_SHARED_EC_DIR = $(firstword $(wildcard $(CVS_PROJ_DIR)/dspc/src/shared-ec $(CVS_PROJ_DIR)/dspc/src/shared /opt/$(FLAVOUR_PATH_PREFIX)dspider/shared-ec)) +DSPIDER_SHARED_EC_EXE_PREFIX = $(firstword $(wildcard $(CVS_PROJ_DIR)/dspc/src/shared-ec $(CVS_PROJ_DIR)/dspc/src/shared /opt/$(FLAVOUR_PATH_PREFIX)dspider)) +include $(DSPIDER_SHARED_EC_DIR)/make/public.mk +DSPIDER_SHARED_EC_VERSION = $(call version,$(DSPIDER_SHARED_EC_DIR)) RPM_REQUIRES_RUN += $(FLAVOUR_PREFIX)dspider-shared-ec-run = $(DSPIDER_SHARED_VERSION) RPM_REQUIRES_DEVEL += $(FLAVOUR_PREFIX)dspider-shared-ec-devel = $(DSPIDER_SHARED_VERSION) PREREQ_BUILD += ytools -INCLUDE += -I$(DSPIDER_SHARED_DIR)/include -LIBFLAGS += -L$(DSPIDER_SHARED_EXE_PREFIX)/lib -ldspider-shared-ec -EXE_SEARCH_PATH += $(DSPIDER_SHARED_DIR)/bin -PREREQ += DSPIDER_SHARED +INCLUDE += -I$(DSPIDER_SHARED_EC_DIR)/include +LIBFLAGS += -L$(DSPIDER_SHARED_EC_EXE_PREFIX)/lib -ldspider-shared-ec +EXE_SEARCH_PATH += $(DSPIDER_SHARED_EC_DIR)/bin +PREREQ += DSPIDER_EC_SHARED endif ifneq ($(filter feedfs-qt,$(PREREQ_BUILD)),) @@ -1024,13 +1025,24 @@ RPM_REQUIRES_DEVEL += $(FLAVOUR_PREFIX)feedfs-gui-devel = $(FEEDFS_GUI_VE PREREQ_BUILD += feedfs-utils PREREQ_BUILD += feedfs PREREQ_BUILD += ytools -PREREQ_BUILD += feedfs-qt INCLUDE += -I$(FEEDFS_GUI_DIR)/include LIBFLAGS += -L$(FEEDFS_GUI_DIR)/lib -lfeedfs-gui EXE_SEARCH_PATH += $(FEEDFS_GUI_DIR)/bin PREREQ += FEEDFS_GUI endif +ifneq ($(filter feedfs-bz,$(PREREQ_BUILD)),) +FEEDFS_BZ_DIR = $(firstword $(wildcard $(CVS_PROJ_DIR)/feedfs-bz /opt/$(FLAVOUR_PATH_PREFIX)feedfs-bz)) +FEEDFS_BZ_VERSION = $(call version,$(FEEDFS_BZ_DIR)) +RPM_REQUIRES_RUN += $(FLAVOUR_PREFIX)feedfs-bz-run = $(FEEDFS_BZ_VERSION) +RPM_REQUIRES_DEVEL += $(FLAVOUR_PREFIX)feedfs-bz-devel = $(FEEDFS_BZ_VERSION) +PREREQ_BUILD += feedfs-objects +INCLUDE += -I$(FEEDFS_BZ_DIR)/include +LIBFLAGS += -L$(FEEDFS_BZ_DIR)/lib -lfeedfs-bz +EXE_SEARCH_PATH += $(FEEDFS_BZ_DIR)/bin +PREREQ += FEEDFS_BZ +endif + ifneq ($(filter feedfsd,$(PREREQ_BUILD)),) FEEDFSD_DIR = $(firstword $(wildcard $(CVS_PROJ_DIR)/feedfsd /opt/$(FLAVOUR_PATH_PREFIX)feedfsd)) FEEDFSD_VERSION = $(call version,$(FEEDFSD_DIR)) @@ -1087,6 +1099,20 @@ EXE_SEARCH_PATH += $(FEEDFS_NET_DIR)/bin PREREQ += FEEDFS_NET endif +ifneq ($(filter feedfs-ini,$(PREREQ_BUILD)),) +FEEDFS_INI_DIR = $(firstword $(wildcard $(CVS_PROJ_DIR)/feedfs-ini /opt/$(FLAVOUR_PATH_PREFIX)feedfs-ini)) +FEEDFS_INI_VERSION = $(call version,$(FEEDFS_INI_DIR)) +RPM_REQUIRES_RUN += $(FLAVOUR_PREFIX)feedfs-ini-run = $(FEEDFS_INI_VERSION) +RPM_REQUIRES_DEVEL += $(FLAVOUR_PREFIX)feedfs-ini-devel = $(FEEDFS_INI_VERSION) +PREREQ_BUILD += feedfs-objects +PREREQ_BUILD += feedfs-utils +PREREQ_BUILD += ytools +INCLUDE += -I$(FEEDFS_INI_DIR)/include +LIBFLAGS += -L$(FEEDFS_INI_DIR)/lib -lfeedfs-ini +EXE_SEARCH_PATH += $(FEEDFS_INI_DIR)/bin +PREREQ += FEEDFS_INI +endif + ifneq ($(filter feedfs-local,$(PREREQ_BUILD)),) FEEDFS_LOCAL_DIR = $(firstword $(wildcard $(CVS_PROJ_DIR)/feedfs-local /opt/$(FLAVOUR_PATH_PREFIX)feedfs-local)) FEEDFS_LOCAL_VERSION = $(call version,$(FEEDFS_LOCAL_DIR)) @@ -1253,6 +1279,44 @@ EXE_SEARCH_PATH += $(ALSART_DIR)/bin PREREQ += ALSART endif +ifneq ($(filter jackmix,$(PREREQ_BUILD)),) +JACKMIX_DIR = $(firstword $(wildcard $(CVS_PROJ_DIR)/dspc/src/dspcd-plugins/jackmix /opt/$(FLAVOUR_PATH_PREFIX)dspider/jackmix)) +JACKMIX_VERSION = $(call version,$(JACKMIX_DIR)) +RPM_REQUIRES_RUN += $(FLAVOUR_PREFIX)dspider-jackmix-run = $(JACKMIX_VERSION) +RPM_REQUIRES_DEVEL += $(FLAVOUR_PREFIX)dspider-jackmix-devel = $(JACKMIX_VERSION) +PREREQ_BUILD += ytools btools +INCLUDE += -I$(JACKMIX_DIR)/include +LIBFLAGS += -L$(JACKMIX_DIR)/lib -ldspider-jackmix +LD_LIB_PATH += $(JACKMIX_DIR)/dsplib +EXE_SEARCH_PATH += $(JACKMIX_DIR)/bin +PREREQ += JACKMIX +endif + +ifneq ($(filter scmjm,$(PREREQ_BUILD)),) +SCMJM_DIR = $(firstword $(wildcard $(CVS_PROJ_DIR)/dspc/src/dspcd-plugins/scmjm /opt/$(FLAVOUR_PATH_PREFIX)dspider/scmjm)) +SCMJM_VERSION = $(call version,$(SCMJM_DIR)) +RPM_REQUIRES_RUN += $(FLAVOUR_PREFIX)dspider-scmjm-run = $(SCMJM_VERSION) +RPM_REQUIRES_DEVEL += $(FLAVOUR_PREFIX)dspider-scmjm-devel = $(SCMJM_VERSION) +PREREQ_BUILD += ytools +INCLUDE += -I$(SCMJM_DIR)/include +LIBFLAGS += -L$(SCMJM_DIR)/lib -ldspider-scmjm +LD_LIB_PATH += $(SCMJM_DIR)/dsplib +EXE_SEARCH_PATH += $(SCMJM_DIR)/bin +PREREQ += SCMJM +endif + +ifneq ($(filter scm,$(PREREQ_BUILD)),) +SCM_DIR = $(firstword $(wildcard $(CVS_PROJ_DIR)/dspc/src/dspcd-plugins/scm /opt/$(FLAVOUR_PATH_PREFIX)dspider/scm)) +SCM_VERSION = $(call version,$(SCM_DIR)) +RPM_REQUIRES_RUN += $(FLAVOUR_PREFIX)dspider-scm-run = $(SCM_VERSION) +RPM_REQUIRES_DEVEL += $(FLAVOUR_PREFIX)dspider-scm-devel = $(SCM_VERSION) +PREREQ_BUILD += ytools +INCLUDE += -I$(SCM_DIR)/include +LIBFLAGS += -L$(SCM_DIR)/lib -ldspider-scm +EXE_SEARCH_PATH += $(SCM_DIR)/bin +PREREQ += SCM +endif + ifneq ($(filter dspfs,$(PREREQ_BUILD)),) DSPFS_DIR = $(firstword $(wildcard $(CVS_PROJ_DIR)/dspfs /opt/$(FLAVOUR_PATH_PREFIX)dspfs)) DSPFS_VERSION = $(call version,$(DSPFS_DIR)) @@ -1369,8 +1433,12 @@ LIBFLAGS += -L$(SCOPE_CASMIX_DIR)/lib -lscope-casmix EXE_SEARCH_PATH += $(SCOPE_CASMIX_DIR)/bin endif -PREREQ_INSTALL ?= $(PREREQ_BUILD) -PREREQ_RUN ?= $(PREREQ_INSTALL) +#PREREQ_INSTALL ?= $(PREREQ_BUILD) +#PREREQ_RUN ?= $(PREREQ_INSTALL) + +# TODO: remove this +PREREQ_BUILD += $(PREREQ_RUN) +PREREQ_BUILD += $(PREREQ_INSTALL) ifeq ($(USE_SNDFILE),true) LIBFLAGS += -lsndfile diff --git a/make/dirs.mk b/make/dirs.mk index 3d459a67..a6a6d3d4 100644 --- a/make/dirs.mk +++ b/make/dirs.mk @@ -26,7 +26,9 @@ else SUBDIR_TARGETS = $(filter all install clean distclean,$(MAKECMDGOALS)) endif +ifneq ($(DONT_CHECK_PREREQ_DONE),true) PREREQ_DIRS_DONE = $(addsuffix /dirs-all.done,$(filter-out $(TOPDIR) /opt/%,$(foreach p,$(PREREQ),$($(p)_DIR)))) +endif all: dirs-all.done install: dirs-install.done @@ -40,20 +42,24 @@ distclean: dirs.clean dirs.distclean # explicit duplication of pattern-rule is needed, otherwise .PHONY: dirs-all.done won't match dirs-all.done: set -e; for d in $(SUBDIRS) ; do make -wC $$d $*; done +ifneq ($(DONT_CHECK_PREREQ_DONE),true) touch $@ +endif dirs-%.done: set -e; for d in $(SUBDIRS) ; do make -wC $$d $*; done +ifneq ($(DONT_CHECK_PREREQ_DONE),true) touch $@ +endif ifeq ($(DEVELOPMENT),true) dirs-all.done: $(wildcard $(BUILD_HDRDIR)) -ifeq ($(MAKECMDGOALS),all) +ifeq ($(SUBDIR_TARGETS),all) dirs-all.done: $(PREREQ_DIRS_DONE) endif -ifeq ($(MAKECMDGOALS),install) +ifeq ($(SUBDIR_TARGETS),install) dirs-all.done: $(PREREQ_DIRS_DONE) endif diff --git a/make/rules.mk b/make/rules.mk index d7d8daca..a343b522 100644 --- a/make/rules.mk +++ b/make/rules.mk @@ -165,6 +165,9 @@ echo-prereq: echo-contrib: +echo-echo: + sed '/echo-[a-z]\+:$$/ !d; s/:$$//' $(MODDIR)/make/rules.mk + trace-marks: for f in $(ALL_CPP); do \ $(SED) 's/^{$$/{_/' $$f > $$f.rep ;\ @@ -214,7 +217,7 @@ $(SO_PREFIX)%.so: %.o endif $(VERSION_SCRIPT): - $(MOD_SCRIPT_DIR)/make_version_script.sh $(BINARY_VERSION) > $@ + sh $(MOD_SCRIPT_DIR)/make_version_script.sh $(BINARY_VERSION) > $@ ifneq ($(TARGET),mingw) $(LIB_SO): $(VERSION_SCRIPT) $(LIB_A) $(TOPDIR)/dir_build_LIB.done diff --git a/make/run.mk b/make/run.mk index 2474d14e..eda12a65 100644 --- a/make/run.mk +++ b/make/run.mk @@ -91,6 +91,22 @@ callgrind: rm -f $(CORE) valgrind --tool=callgrind $(VALGRIND_OPTS) $(EXE_PATH) $(EXE_ARGS) +callgrind-noinst: + rm -f $(CORE) + valgrind --tool=callgrind $(VALGRIND_OPTS) --instr-atstart=no $(EXE_PATH) $(EXE_ARGS) + +callgrind-startinst: + ps aux | grep callgrind | grep -v "grep\|make\|callgrind_control" | awk '{print $$2}' | xargs callgrind_control --instr=on + +callgrind-stopinst: + ps aux | grep callgrind | grep -v "grep\|make\|callgrind_control" | awk '{print $$2}' | xargs callgrind_control --instr=off + +callgrind-dump: + ps aux | grep callgrind | grep -v "grep\|make\|callgrind_control" | awk '{print $$2}' | xargs callgrind_control --dump + +snap: + killall -SIGUSR1 $(notdir $(EXE_PATH)) + endif stop: diff --git a/make/targets-tools.mk b/make/targets-tools.mk index 1654af4a..2729fedf 100644 --- a/make/targets-tools.mk +++ b/make/targets-tools.mk @@ -3,24 +3,31 @@ # contact@jannet.de # $Id$ +all: all.link + include $(MODDIR)/make/rules.mk ifneq ($(strip $(SRC_ALL_CPP)),) # mandatory targets -all: all.link install: $(ALL) # convenience targets link: all.link clean-link: clean.link -# rules all.link: $(PROJECT) $(PROJECT): ln -s . $@ +ifeq ($(SCOPE_PREFIX),) +all.link: $(BUILD_HDRDIR)/$(PROJECT) + +$(BUILD_HDRDIR)/$(PROJECT): + cd $(BUILD_HDRDIR) && ln -s . $(PROJECT) +endif + $(LIB_SO): $(OBJ) all.done: $(PREREQ_DONE) $(BUILD_HDR) $(BUILD_EXE_SH) $(MEMBERS) $(LIB_A) $(LIB_SO) diff --git a/make/topdir.mk b/make/topdir.mk index 84895ea3..608bca5c 100644 --- a/make/topdir.mk +++ b/make/topdir.mk @@ -83,7 +83,7 @@ do-install-links: }; \ done; \ -git-init: +git-init-from-cvs: @if [ -e .git ]; then \ echo $(TOPDIR)/.git exists, aborting ;\ exit 1 ;\ @@ -92,6 +92,16 @@ git-init: list-cvs-files.sh -f | xargs git add git commit -m "initial checkin of $(RPM_VERSION)" +WHOAMI = $(shell whoami) +REMOTE_GIT_DIR = /srv/git/$(WHOAMI)/proj/$(PROJECT) + +git-clone-to-remote: + ssh git.jannet.de "/opt/ytools/bin/git-srv-admin.sh create-personal-project $(PROJECT)" + git remote add origin ssh://$(WHOAMI)@git.jannet.de$(REMOTE_GIT_DIR) + git config --global user.name $(FULL_NAME) + git config --global user.email $(WHOAMI)@jannet.de + git push --all origin + projects-%: python $(MOD_SCRIPT_DIR)/build.py $* $(PROJECT) diff --git a/scripts/build.py b/scripts/build.py index 5fdb6135..7fd8b0fd 100644 --- a/scripts/build.py +++ b/scripts/build.py @@ -16,8 +16,7 @@ dep_tree = {} glob_order = [] proj_base=pwd.getpwuid(os.getuid()).pw_dir + "/local/src/cvs.stable/proj" search_path=[".", "dspc/src", "dspc/src/dspcd-plugins", "dspc/src/io" ] -#glob_prereq_type="BUILD" -glob_prereq_type="RUN" +glob_prereq_type="BUILD" def find_proj_path(name): name=name.replace("dspider-", "") @@ -31,6 +30,9 @@ def read_deps(cur, prereq_type): path = find_proj_path(cur) os.chdir(path) p = subprocess.Popen("LD_LIBRARY_PATH= make echo-prereq | sed '/PREREQ_" + prereq_type + " *=/ !d; s/.*=//'", shell=True, stdout=subprocess.PIPE) + p.wait() + if p.returncode: # FIXME: doesn't work, because sed kills make's return code + raise Exception("failed to get " + prereq_type + " prerequisites from " + path) r = Set() for d in p.stdout.read().split(): r.add(d) diff --git a/scripts/git-srv-admin.sh b/scripts/git-srv-admin.sh new file mode 100644 index 00000000..75c4f837 --- /dev/null +++ b/scripts/git-srv-admin.sh @@ -0,0 +1,102 @@ +#!/bin/sh + +myname=`basename $0` + +usage() +{ + cat << EOT | sed 's/^ |//' + | + | $myname cmd [cmd-arguments] ... + | + | commands are: + | + | create-personal-project name + | list-personal-projects + | +EOT + [ "$1" ] && exit $1 +} + +log() +{ + echo $@ +} + +err() +{ + echo $@ >&2 +} + +fatal() +{ + err $@ + exit 1 +} + +md() +{ + local dir=$1 + local mode=$2 + local owner=$3 + local group=$4 + + [ -d $dir ] || { + + log "creating $dir as $owner.$group with mode $mode" + /usr/bin/install -m $mode -o $owner -g $group -d $dir || { + fatal "failed to create directory $dir" + } + } +} + +# ----------------- commands +create_personal_project() +{ + [ -e $dir ] && fatal "$dir already exists" + + if [ "$UID" = 0 ]; then + md /srv/git 750 root jannet + md /srv/git/$id 750 root jannet + md /srv/git/$id/proj 750 root jannet + md /srv/git/$id/proj/$p 770 root $id + exit 0 + fi + + /usr/bin/sudo $0 create-personal-project $p || fatal "failed to set root uid" + cd $dir || fatal "failed to change to $dir" + git init --bare || fatal "git init failed" +} + +list_personal_projects() +{ + cd $pdir + ls */HEAD | sed 's%/HEAD%%' 2>/dev/null +} + +# ----------------- here we go +cmd=$1 +shift + +id=`whoami` +[ "$SUDO_UID" ] && { + id=`/opt/ytools/bin/getpwuid $SUDO_UID | sed '/^name *=/ !d; s/^name *= *//'` + [ "$id" ] || fatal "failed to find uid $SUDO_UID in user database" +} + +p=$1 +pdir=/srv/git/$id/proj +dir=$pdir/$p + +case $cmd in +create-personal-project) + create_personal_project "$@" + exit 1 + ;; +list-personal-projects) + list_personal_projects "$@" + ;; +*) + usage 1 + ;; +esac + diff --git a/scripts/pgit.sh b/scripts/pgit.sh new file mode 100644 index 00000000..49712ecd --- /dev/null +++ b/scripts/pgit.sh @@ -0,0 +1,100 @@ +#!/bin/sh + +log() +{ + echo $@ +} + +err() +{ + log $@ +} + +fatal() +{ + err $@ + exit 1 +} + +marker() +{ + log "# ============= $@" +} + +config() +{ + pdir=`pwd` + while [ `basename $pdir` != proj ]; do + [ "$pdir" = / ] && fatal "didn't find \"proj\" in directory components" + pdir=`dirname $pdir` + done + pdirs=`(cd $pdir; ls -d */.git | sed 's%/.git%%')` +} + +# ------------- commands +clone() +{( + local p + config + cd $pdir + local id=`whoami` + local projects=`ssh git.jannet.de /opt/ytools/bin/git-srv-admin.sh list-personal-projects` + for p in $projects; do + [ -d $p ] && { + marker "skipping existing $p" + continue + } + marker "cloning $p" + git clone ssh://$id@git.jannet.de/srv/git/$id/proj/$p + done +)} + +pull() +{( + local d + config + cd $pdir + for d in $pdirs; do + marker "$d" + ($d; git pull origin master) + done +)} + +diff() +{( + local d + config + cd $pdir + for d in $pdirs; do + marker $d + (cd $d; git diff --src-prefix=a/$d/ --dst-prefix=b/$d/ "$@") + done +)} + +commit() +{( + local d + config + cd $pdir + + for d in $pdirs; do + marker $d + (cd $d; git commit "$@") + done +)} + +push() +{( + local d + config + cd $pdir + for d in $pdirs; do + marker $d + (cd $d; git push origin master) + done +)} + +cmd=$1 +shift +$cmd "$@" +