>From 10f2260165d6be3a6ab477ed38fd8ab0308c11e6 Mon Sep 17 00:00:00 2001 From: Paul Campbell <pcampbell@xxxxxxxxxxx> Date: Sat, 9 Mar 2013 18:31:59 +0000 Subject: [PATCH 05/19] A number of changes to push_all and pull_all: * adding commands in "add" to populate the .gittrees file * changing underscores to dashes (push_all -> push-all) * changing commands to not be hardcoded to branch "master" from remote * letting the user specify 0, 1, or 2 arguments to push and pull, like normal "git push" and "git pull". We'll try to look up missing information from .gittrees, like git normally does from .git/config Conflicts: .gitignore contrib/subtree/git-subtree.sh Original-Author: mhoffman <matt.hoffman@xxxxxxxxxxxxxxxxx> Conflicts-resolved-by: Paul Campbell <pcampbell@xxxxxxxxxxx> --- contrib/subtree/git-subtree.sh | 57 ++++++++++++++++++++++++++++++------------ 1 file changed, 41 insertions(+), 16 deletions(-) diff --git a/contrib/subtree/git-subtree.sh b/contrib/subtree/git-subtree.sh index c3b1208..74e4c74 100755 --- a/contrib/subtree/git-subtree.sh +++ b/contrib/subtree/git-subtree.sh @@ -12,7 +12,8 @@ git subtree add --prefix=<prefix> <commit> git subtree add --prefix=<prefix> <repository> <commit> git subtree merge --prefix=<prefix> <commit> git subtree pull --prefix=<prefix> <repository> <refspec...> -git subtree pull_all +git subtree pull-all +git subtree push-all git subtree push --prefix=<prefix> <repository> <refspec...> git subtree split --prefix=<prefix> <commit...> git subtree from-submodule --prefix=<prefix> @@ -103,18 +104,18 @@ done command="$1" shift case "$command" in - add|merge|pull|from-submodule|pull_all|push_all) default= ;; + add|merge|pull|from-submodule|pull-all|push-all) default= ;; split|push) default="--default HEAD" ;; *) die "Unknown command '$command'" ;; esac -if [ -z "$prefix" -a "$command" != "pull_all" -a "$command" != "push_all" ]; 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);; + pull-all);; + push-all);; add) [ -e "$prefix" ] && die "prefix '$prefix' already exists." ;; *) [ -e "$prefix" ] || @@ -123,7 +124,7 @@ esac dir="$(dirname "$prefix/.")" -if [ "$command" != "pull" -a "$command" != "add" -a "$command" != "push" -a "$command" != "pull_all" ]; 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 @@ -531,6 +532,14 @@ cmd_add_repository() revs=FETCH_HEAD set -- $revs cmd_add_commit "$@" + + # now add it to our list of repos + git config -f .gittrees --unset subtree.$dir.url + git config -f .gittrees --add subtree.$dir.url $repository + git config -f .gittrees --unset subtree.$dir.path + git config -f .gittrees --add subtree.$dir.path $dir + git config -f .gittrees --unset subtree.$dir.branch + git config -f .gittrees --add subtree.$dir.branch $refspec } cmd_add_commit() @@ -704,13 +713,21 @@ cmd_merge() cmd_pull() { - if [ $# -ne 1 ]; then - die "You must provide <branch>" + if [ $# -gt 2 ]; then + die "You should provide either <refspec> or <repository> <refspec>" fi if [ -e "$dir" ]; then ensure_clean - repository=$(git config -f .gittrees subtree.$prefix.url) - refspec=$1 + if [ $# -eq 1 ]; then + repository=$(git config -f .gittrees subtree.$prefix.url) + refspec=$1 + elif [ $# -eq 2 ]; then + repository=$1 + refspec=$2 + else + repository=$(git config -f .gittrees subtree.$prefix.url) + refspec=$(git config -f .gittrees subtree.$prefix.branch) + fi git fetch $repository $refspec || exit $? echo "git fetch using: " $repository $refspec revs=FETCH_HEAD @@ -723,12 +740,20 @@ cmd_pull() cmd_push() { - if [ $# -ne 1 ]; then - die "You must provide <branch>" + if [ $# -gt 2 ]; then + die "You shold provide either <refspec> or <repository> <refspec>" fi if [ -e "$dir" ]; then - repository=$(git config -f .gittrees subtree.$prefix.url) - refspec=$1 + if [ $# -eq 1 ]; then + repository=$(git config -f .gittrees subtree.$prefix.url) + refspec=$1 + elif [ $# -eq 2 ]; then + repository=$1 + refspec=$2 + else + repository=$(git config -f .gittrees subtree.$prefix.url) + refspec=$(git config -f .gittrees subtree.$prefix.branch) + fi echo "git push using: " $repository $refspec git push $repository $(git subtree split --prefix=$prefix):refs/heads/$refspec else @@ -763,7 +788,7 @@ cmd_from-submodule() rm -rf $tmp_repo } -cmd_pull_all() +cmd_pull-all() { git config -f .gittrees -l | grep subtree | grep path | grep -o '=.*' | grep -o '[^=].*' | while read path; do @@ -771,7 +796,7 @@ cmd_pull_all() done } -cmd_push_all() +cmd_push-all() { git config -f .gittrees -l | grep subtree | grep path | grep -o '=.*' | grep -o '[^=].*' | while read path; do -- 1.8.2.rc1 -- Paul [W] Campbell -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html