From: Paul Campbell Date: Sun, 10 Mar 2013 23:41:13 GMT Subject: [PATCH v2 05/23] contrib/subtree: Add commands pull_all and push_all Message-ID: <1362958891-26941-6-git-send-email-pcampbell@kemitix.net> In-Reply-To: <1362958891-26941-1-git-send-email-pcampbell@kemitix.net> From: bibendi For each subtree listed in .gittrees perform a push or a pull. Signed-off-by: Paul Campbell Conflicts: contrib/subtree/git-subtree.sh --- contrib/subtree/git-subtree.sh | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/contrib/subtree/git-subtree.sh b/contrib/subtree/git-subtree.sh index 1aff956..ddae56e 100755 --- a/contrib/subtree/git-subtree.sh +++ b/contrib/subtree/git-subtree.sh @@ -12,6 +12,7 @@ git subtree add --prefix= git subtree add --prefix= git subtree merge --prefix= git subtree pull --prefix= +git subtree pull_all git subtree push --prefix= git subtree split --prefix= git subtree from-submodule --prefix= @@ -102,16 +103,18 @@ done command="$1" shift case "$command" in - add|merge|pull|from-submodule) default= ;; + add|merge|pull|from-submodule|pull_all|push_all) default= ;; split|push) default="--default HEAD" ;; *) die "Unknown command '$command'" ;; esac -if [ -z "$prefix" ]; then +if [ -z "$prefix" -a "$command" != "pull_all" -a "$command" != "push_all" ]; then die "You must provide the --prefix option." fi case "$command" in + pull_all);; + push_all);; add) [ -e "$prefix" ] && die "prefix '$prefix' already exists." ;; *) [ -e "$prefix" ] || @@ -120,7 +123,7 @@ esac dir="$(dirname "$prefix/.")" -if [ "$command" != "pull" -a "$command" != "add" -a "$command" != "push" ]; then +if [ "$command" != "pull" -a "$command" != "add" -a "$command" != "push" -a "$command" != "pull_all" ]; then revs=$(git rev-parse $default --revs-only "$@") || exit $? dirs="$(git rev-parse --no-revs --no-flags "$@")" || exit $? if [ -n "$dirs" ]; then @@ -767,4 +770,20 @@ cmd_from-submodule() rm -rf $tmp_repo } +cmd_pull_all() +{ + git config -f .gittrees -l | grep subtree | grep path | grep -o '=.*' | grep -o '[^=].*' | + while read path; do + git subtree pull -P $path master || exit $? + done +} + +cmd_push_all() +{ + git config -f .gittrees -l | grep subtree | grep path | grep -o '=.*' | grep -o '[^=].*' | + while read path; do + git subtree push -P $path master || exit $? + done +} + "cmd_$command" "$@" -- 1.8.2.rc1