* [PATCH] subtree: fix argument validation in add/pull/push
@ 2013-11-27 18:34 Anthony Baire
2013-11-27 19:19 ` Thomas Rast
0 siblings, 1 reply; 3+ messages in thread
From: Anthony Baire @ 2013-11-27 18:34 UTC (permalink / raw)
To: git; +Cc: Anthony Baire
When working with a remote repository add/pull/push do not accept a
<refspec> as parameter but just a <ref>. They should accept any
well-formatted ref name.
This patch:
- relaxes the check the <ref> argument in "git subtree add <repo>"
(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 <ref> instead of <refspec>
Signed-off-by: Anthony Baire <Anthony.Baire@irisa.fr>
---
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 7d7af03..dc59a91 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=<prefix> <commit>
-git subtree add --prefix=<prefix> <repository> <commit>
+git subtree add --prefix=<prefix> <repository> <ref>
git subtree merge --prefix=<prefix> <commit>
-git subtree pull --prefix=<prefix> <repository> <refspec...>
-git subtree push --prefix=<prefix> <repository> <refspec...>
+git subtree pull --prefix=<prefix> <repository> <ref>
+git subtree push --prefix=<prefix> <repository> <ref>
git subtree split --prefix=<prefix> <commit...>
--
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 <repository> <ref>"
+ 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 <repository> <refspec>"
+ die "You must provide <repository> <ref>"
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 e0957ee..02669b1 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 <prefix> <refspec>
-'git subtree' add -P <prefix> <repository> <refspec>
-'git subtree' pull -P <prefix> <repository> <refspec...>
-'git subtree' push -P <prefix> <repository> <refspec...>
+'git subtree' add -P <prefix> <commit>
+'git subtree' add -P <prefix> <repository> <ref>
+'git subtree' pull -P <prefix> <repository> <ref>
+'git subtree' push -P <prefix> <repository> <ref>
'git subtree' merge -P <prefix> <commit>
'git subtree' split -P <prefix> [OPTIONS] [<commit>]
@@ -68,7 +68,7 @@ COMMANDS
--------
add::
Create the <prefix> subtree by importing its contents
- from the given <refspec> or <repository> and remote <refspec>.
+ from the given <commit> or <repository> and remote <ref>.
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 <prefix> 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::
--
1.7.10.4
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] subtree: fix argument validation in add/pull/push
2013-11-27 18:34 [PATCH] subtree: fix argument validation in add/pull/push Anthony Baire
@ 2013-11-27 19:19 ` Thomas Rast
2013-11-27 20:30 ` Anthony Baire
0 siblings, 1 reply; 3+ messages in thread
From: Thomas Rast @ 2013-11-27 19:19 UTC (permalink / raw)
To: Anthony Baire; +Cc: git
Anthony Baire <Anthony.Baire@irisa.fr> writes:
> When working with a remote repository add/pull/push do not accept a
> <refspec> as parameter but just a <ref>. They should accept any
> well-formatted ref name.
[...]
> - update the doc to use <ref> instead of <refspec>
[...]
> OPTS_SPEC="\
> git subtree add --prefix=<prefix> <commit>
> -git subtree add --prefix=<prefix> <repository> <commit>
> +git subtree add --prefix=<prefix> <repository> <ref>
> git subtree merge --prefix=<prefix> <commit>
> -git subtree pull --prefix=<prefix> <repository> <refspec...>
> -git subtree push --prefix=<prefix> <repository> <refspec...>
> +git subtree pull --prefix=<prefix> <repository> <ref>
> +git subtree push --prefix=<prefix> <repository> <ref>
> git subtree split --prefix=<prefix> <commit...>
[...]
> @@ -68,7 +68,7 @@ COMMANDS
> --------
> add::
> Create the <prefix> subtree by importing its contents
> - from the given <refspec> or <repository> and remote <refspec>.
> + from the given <commit> or <repository> and remote <ref>.
AFAICS you are changing refspec->commit in the manpage, but commit->ref
in the usage message for 'subtree add'? How does this line up?
--
Thomas Rast
tr@thomasrast.ch
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] subtree: fix argument validation in add/pull/push
2013-11-27 19:19 ` Thomas Rast
@ 2013-11-27 20:30 ` Anthony Baire
0 siblings, 0 replies; 3+ messages in thread
From: Anthony Baire @ 2013-11-27 20:30 UTC (permalink / raw)
To: Thomas Rast; +Cc: git
On 27/11/2013 20:19, Thomas Rast wrote:
> Anthony Baire <Anthony.Baire@irisa.fr> writes:
>
>> When working with a remote repository add/pull/push do not accept a
>> <refspec> as parameter but just a <ref>. They should accept any
>> well-formatted ref name.
> [...]
>> - update the doc to use <ref> instead of <refspec>
> [...]
>> OPTS_SPEC="\
>> git subtree add --prefix=<prefix> <commit>
>> -git subtree add --prefix=<prefix> <repository> <commit>
>> +git subtree add --prefix=<prefix> <repository> <ref>
>> git subtree merge --prefix=<prefix> <commit>
>> -git subtree pull --prefix=<prefix> <repository> <refspec...>
>> -git subtree push --prefix=<prefix> <repository> <refspec...>
>> +git subtree pull --prefix=<prefix> <repository> <ref>
>> +git subtree push --prefix=<prefix> <repository> <ref>
>> git subtree split --prefix=<prefix> <commit...>
> [...]
>> @@ -68,7 +68,7 @@ COMMANDS
>> --------
>> add::
>> Create the <prefix> subtree by importing its contents
>> - from the given <refspec> or <repository> and remote <refspec>.
>> + from the given <commit> or <repository> and remote <ref>.
> AFAICS you are changing refspec->commit in the manpage, but commit->ref
> in the usage message for 'subtree add'? How does this line up?
>
'git subtree add' accepts a commit when working with the local
repository and a ref when working with a remote repository:
git subtree add --prefix=<prefix> <commit>
git subtree add --prefix=<prefix> <repository> <ref>
but the manpage was no in sync with the code. I fixed it for the local
case too.
Anthony
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2013-11-27 20:30 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-11-27 18:34 [PATCH] subtree: fix argument validation in add/pull/push Anthony Baire
2013-11-27 19:19 ` Thomas Rast
2013-11-27 20:30 ` Anthony Baire
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).