From: Herman van Rink <[email protected]>
Signed-off-by: Paul Campbell <[email protected]>
Conflicts:
contrib/subtree/.gitignore
contrib/subtree/git-subtree.sh
contrib/subtree/test.sh
---
It's a nasty formatting only patch and I won't be surprised or too
dissappiointed
if this doesn't make it. Or are the rules for this more lax for contrib? How
else
can contrib be brought in-line with coding standards?
contrib/subtree/git-subtree.sh | 213 +++++++++++++++++++++--------------------
1 file changed, 109 insertions(+), 104 deletions(-)
diff --git a/contrib/subtree/git-subtree.sh b/contrib/subtree/git-subtree.sh
index 3582a55..263ea9f 100755
--- a/contrib/subtree/git-subtree.sh
+++ b/contrib/subtree/git-subtree.sh
@@ -92,7 +92,7 @@ while [ $# -gt 0 ]; do
-b) branch="$1"; shift ;;
-P) prefix="$1"; shift ;;
-m) message="$1"; shift ;;
- -f|--force) force=1 ;;
+ -f|--force) force=1 ;;
--no-prefix) prefix= ;;
--onto) onto="$1"; shift ;;
--no-onto) onto= ;;
@@ -123,8 +123,10 @@ if [ -z "$prefix" -a "$command" != "pull-all" -a
"$command" != "push-all" -a "$c
fi
case "$command" in
- pull-all);;
- push-all);;
+ pull-all);;
+ push-all);;
+ list);;
+ prune);;
add) [ -e "$prefix" ] &&
die "prefix '$prefix' already exists." ;;
*) [ -e "$prefix" ] ||
@@ -541,14 +543,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
+
+ # 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()
@@ -721,89 +723,91 @@ cmd_merge()
cmd_pull()
{
- if [ $# -gt 2 ]; then
- die "You should provide either <refspec> or <repository> <refspec>"
+ if [ $# -gt 2 ]; then
+ die "You should provide either <refspec> or <repository>
<refspec>"
fi
if [ -e "$dir" ]; then
- ensure_clean
- 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
- set -- $revs
- cmd_merge "$@"
+ ensure_clean
+ 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
+ set -- $revs
+ cmd_merge "$@"
else
- die "'$dir' must already exist. Try 'git subtree add'."
+ die "'$dir' must already exist. Try 'git subtree add'."
fi
}
-cmd_diff()
-{
- if [ -e "$dir" ]; then
- 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
- # this is ugly, but I don't know of a better way to do it. My git-fu
is weak.
- # git diff-tree expects a treeish, but I have only a repository and
branch name.
- # I don't know how to turn that into a treeish without creating a
remote.
- # Please change this if you know a better way!
- tmp_remote=__diff-tmp
- git remote rm $tmp_remote > /dev/null 2>&1
- git remote add -t $refspec $tmp_remote $repository > /dev/null
- # we fetch as a separate step so we can pass -q (quiet), which isn't
an option for "git remote"
- # could this instead be "git fetch -q $repository $refspec" and leave
aside creating the remote?
- # Still need a treeish for the diff-tree command...
- git fetch -q $tmp_remote
- git diff-tree -p refs/remotes/$tmp_remote/$refspec
- git remote rm $tmp_remote > /dev/null 2>&1
- else
- die "Cannot resolve directory '$dir'. Please point to an existing
subtree directory to diff. Try 'git subtree add' to add a subtree."
- fi
+cmd_diff()
+{
+ if [ -e "$dir" ]; then
+ 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
+ # this is ugly, but I don't know of a better way to do it. My
git-fu is weak.
+ # git diff-tree expects a treeish, but I have only a repository
and branch name.
+ # I don't know how to turn that into a treeish without creating
a remote.
+ # Please change this if you know a better way!
+ tmp_remote=__diff-tmp
+ git remote rm $tmp_remote > /dev/null 2>&1
+ git remote add -t $refspec $tmp_remote $repository > /dev/null
+ # we fetch as a separate step so we can pass -q (quiet), which
isn't an option for "git remote"
+ # could this instead be "git fetch -q $repository $refspec" and
leave aside creating the remote?
+ # Still need a treeish for the diff-tree command...
+ git fetch -q $tmp_remote
+ git diff-tree -p refs/remotes/$tmp_remote/$refspec
+ git remote rm $tmp_remote > /dev/null 2>&1
+ else
+ die "Cannot resolve directory '$dir'. Please point to an
existing subtree directory to diff. Try 'git subtree add' to add a subtree."
+ fi
}
cmd_push()
{
if [ $# -gt 2 ]; then
- die "You shold provide either <refspec> or <repository> <refspec>"
+ die "You shold provide either <refspec> or <repository>
<refspec>"
fi
if [ -e "$dir" ]; then
- 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
- push_opts=
- if [ "$force" == "1" ]; then
- push_opts="$push_opts --force"
- fi
- echo "git push using: " $repository $refspec
- rev=$(git subtree split --prefix=$prefix)
- if [ -n "$rev" ]; then
- git push $push_opts $repository $rev:refs/heads/$refspec
- else
- die "Couldn't push, 'git subtree split' failed."
- fi
+ 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
+
+ push_opts=
+ if [ "$force" == "1" ]; then
+ push_opts="$push_opts --force"
+ fi
+
+ echo "git push using: " $repository $refspec
+ rev=$(git subtree split --prefix=$prefix)
+ if [ -n "$rev" ]; then
+ git push $push_opts $repository $rev:refs/heads/$refspec
+ else
+ die "Couldn't push, 'git subtree split' failed."
+ fi
else
die "'$dir' must already exist. Try 'git subtree add'."
fi
@@ -831,6 +835,7 @@ cmd_from-submodule()
git commit -m "Remove '$prefix/' submodule"
# subtree add from submodule repo.
+ # TODO: Could be determin HEAD to be a specific branch
cmd_add_repository $tmp_repo HEAD
# Update .gittrees with the original repo url
@@ -841,46 +846,46 @@ cmd_from-submodule()
rm -rf $tmp_repo
}
-subtree_list()
+subtree_list()
{
- git config -f .gittrees -l | grep subtree | grep path | grep -o '=.*' |
grep -o '[^=].*' |
- while read path; do
- repository=$(git config -f .gittrees subtree.$path.url)
- refspec=$(git config -f .gittrees subtree.$path.branch)
- echo " $path (merged from $repository branch $refspec) "
- done
+ git config -f .gittrees -l | grep subtree | grep path | grep -o '=.*' |
grep -o '[^=].*' |
+ while read path; do
+ repository=$(git config -f .gittrees subtree.$path.url)
+ refspec=$(git config -f .gittrees subtree.$path.branch)
+ echo " $path (merged from $repository branch
$refspec) "
+ done
}
cmd_list()
{
- subtree_list
+ subtree_list
}
cmd_prune()
{
- git config -f .gittrees -l | grep subtree | grep path | grep -o '=.*' |
grep -o '[^=].*' |
- while read path; do
- if [ ! -e "$path" ]; then
- echo "pruning $path"
- git config -f .gittrees --remove-section subtree.$path
- fi
- done
+ git config -f .gittrees -l | grep subtree | grep path | grep -o '=.*' |
grep -o '[^=].*' |
+ while read path; do
+ if [ ! -e "$path" ]; then
+ echo "pruning $path"
+ git config -f .gittrees --remove-section subtree.$path
+ fi
+ done
}
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
+ git config -f .gittrees -l | grep subtree | grep path | grep -o '=.*' |
grep -o '[^=].*' |
+ while read path; do
+ git subtree pull -P $path $(git config -f .gittrees
subtree.$path.url) $(git config -f .gittrees subtree.$path.branch) || 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
+ git config -f .gittrees -l | grep subtree | grep path | grep -o '=.*' |
grep -o '[^=].*' |
+ while read path; do
+ git subtree push -P $path $(git config -f .gittrees
subtree.$path.url) $(git config -f .gittrees subtree.$path.branch) || exit $?
+ done
}
"cmd_$command" "$@"
--
1.8.2.rc1
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html