From 1c3e0f007c8c18dd4ceda3c67cbfb8e01ef2c894 Mon Sep 17 00:00:00 2001 From: Anthony Baire Date: Wed, 27 Nov 2013 19:34:09 +0100 Subject: subtree: fix argument validation in add/pull/push When working with a remote repository add/pull/push do not accept a as parameter but just a . They should accept any well-formatted ref name. This patch: - relaxes the check the argument in "git subtree add " (previous code would not accept a ref name that does not exist locally too, new code only ensures that the ref is well formatted) - add the same check in "git subtree pull/push" + check the number of parameters - update the doc to use instead of Signed-off-by: Anthony Baire Signed-off-by: Junio C Hamano --- contrib/subtree/git-subtree.sh | 22 ++++++++++++++++------ contrib/subtree/git-subtree.txt | 14 +++++++------- 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/contrib/subtree/git-subtree.sh b/contrib/subtree/git-subtree.sh index 7d7af03274..dc59a91031 100755 --- a/contrib/subtree/git-subtree.sh +++ b/contrib/subtree/git-subtree.sh @@ -9,10 +9,10 @@ if [ $# -eq 0 ]; then fi OPTS_SPEC="\ git subtree add --prefix= -git subtree add --prefix= +git subtree add --prefix= git subtree merge --prefix= -git subtree pull --prefix= -git subtree push --prefix= +git subtree pull --prefix= +git subtree push --prefix= git subtree split --prefix= -- h,help show the help @@ -489,6 +489,12 @@ ensure_clean() fi } +ensure_valid_ref_format() +{ + git check-ref-format "refs/heads/$1" || + die "'$1' does not look like a ref" +} + cmd_add() { if [ -e "$dir" ]; then @@ -508,8 +514,7 @@ cmd_add() # specified directory. Allowing a refspec might be # misleading because we won't do anything with any other # branches fetched via the refspec. - git rev-parse -q --verify "$2^{commit}" >/dev/null || - die "'$2' does not refer to a commit" + ensure_valid_ref_format "$2" "cmd_add_repository" "$@" else @@ -699,7 +704,11 @@ cmd_merge() cmd_pull() { + if [ $# -ne 2 ]; then + die "You must provide " + fi ensure_clean + ensure_valid_ref_format "$2" git fetch "$@" || exit $? revs=FETCH_HEAD set -- $revs @@ -709,8 +718,9 @@ cmd_pull() cmd_push() { if [ $# -ne 2 ]; then - die "You must provide " + die "You must provide " fi + ensure_valid_ref_format "$2" if [ -e "$dir" ]; then repository=$1 refspec=$2 diff --git a/contrib/subtree/git-subtree.txt b/contrib/subtree/git-subtree.txt index e0957eee55..02669b1534 100644 --- a/contrib/subtree/git-subtree.txt +++ b/contrib/subtree/git-subtree.txt @@ -9,10 +9,10 @@ git-subtree - Merge subtrees together and split repository into subtrees SYNOPSIS -------- [verse] -'git subtree' add -P -'git subtree' add -P -'git subtree' pull -P -'git subtree' push -P +'git subtree' add -P +'git subtree' add -P +'git subtree' pull -P +'git subtree' push -P 'git subtree' merge -P 'git subtree' split -P [OPTIONS] [] @@ -68,7 +68,7 @@ COMMANDS -------- add:: Create the subtree by importing its contents - from the given or and remote . + from the given or and remote . A new commit is created automatically, joining the imported project's history with your own. With '--squash', imports only a single commit from the subproject, rather than its @@ -90,13 +90,13 @@ merge:: pull:: Exactly like 'merge', but parallels 'git pull' in that - it fetches the given commit from the specified remote + it fetches the given ref from the specified remote repository. push:: Does a 'split' (see below) using the supplied and then does a 'git push' to push the result to the - repository and refspec. This can be used to push your + repository and ref. This can be used to push your subtree to different branches of the remote repository. split:: -- cgit v1.2.1