git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Peter Hutterer <peter.hutterer@who-t.net>
To: Johan Herland <johan@herland.net>
Cc: gitster@pobox.com, git@vger.kernel.org,
	Johannes.Schindelin@gmx.de, apenwarr@gmail.com,
	markus.heidelberg@web.de
Subject: Re: [PATCH 1/2] Rename submodule.<name>.rebase to submodule.<name>.update
Date: Wed, 3 Jun 2009 10:15:54 +1000	[thread overview]
Message-ID: <20090603001553.GB27149@dingo.bne.redhat.com> (raw)
In-Reply-To: <1243983552-24810-2-git-send-email-johan@herland.net>

On Wed, Jun 03, 2009 at 12:59:11AM +0200, Johan Herland wrote:
> The addition of "submodule.<name>.rebase" demonstrates the usefulness of
> alternatives to the default behaviour of "git submodule update". However,
> by naming the config variable "submodule.<name>.rebase", and making it a
> boolean choice, we are artificially constraining future git versions that
> may want to add _more_ alternatives than just "rebase".
> 
> Therefore, while "submodule.<name>.rebase" are not yet in a stable git
> release, future-proof it, by changing it from
> 
>   submodule.<name>.rebase = true/false
> 
> to
> 
>   submodule.<name>.update = checkout/rebase
> 
> where "checkout" specifies the default behaviour of "git submodule update"
> (checking out the new commit to a detached HEAD), and "rebase" specifies
> the --rebase behaviour (where the current local branch in the submodule is
> rebase onto the new commit). Thus .update == checkout is .rebase == false,
> and .update == rebase is equivalent to .rebase == false. Finally, leaving
> .update unset is equivalent to leaving .rebase unset.
> 
> In future git versions, other alternatives to "git submodule update"
> behaviour can be included by adding them to the list of allowable values
> for the submodule.<name>.update variable.
> 
> Signed-off-by: Johan Herland <johan@herland.net>
> ---
>  Documentation/git-submodule.txt |    4 ++--
>  Documentation/gitmodules.txt    |   10 ++++++++--
>  git-submodule.sh                |   32 +++++++++++++++++---------------
>  t/t7406-submodule-update.sh     |   16 ++++++++--------
>  4 files changed, 35 insertions(+), 27 deletions(-)
> 
> diff --git a/Documentation/git-submodule.txt b/Documentation/git-submodule.txt
> index acd16ac..cd8e861 100644
> --- a/Documentation/git-submodule.txt
> +++ b/Documentation/git-submodule.txt
> @@ -116,7 +116,7 @@ update::
>  	Update the registered submodules, i.e. clone missing submodules and
>  	checkout the commit specified in the index of the containing repository.
>  	This will make the submodules HEAD be detached unless '--rebase' is
> -	specified or the key `submodule.$name.rebase` is set to `true`.
> +	specified or the key `submodule.$name.update` is set to	`rebase`.
>  +
>  If the submodule is not yet initialized, and you just want to use the
>  setting as stored in .gitmodules, you can automatically initialize the
> @@ -186,7 +186,7 @@ OPTIONS
>  	superproject. If this option is given, the submodule's HEAD will not
>  	be detached. If a a merge failure prevents this process, you will have
>  	to resolve these failures with linkgit:git-rebase[1].
> -	If the key `submodule.$name.rebase` is set to `true`, this option is
> +	If the key `submodule.$name.update` is set to `rebase`, this option is
>  	implicit.
>  
>  --reference <repository>::
> diff --git a/Documentation/gitmodules.txt b/Documentation/gitmodules.txt
> index 7c22c40..1b67f0a 100644
> --- a/Documentation/gitmodules.txt
> +++ b/Documentation/gitmodules.txt
> @@ -30,8 +30,14 @@ submodule.<name>.path::
>  submodule.<name>.url::
>  	Defines an url from where the submodule repository can be cloned.
>  
> -submodule.<name>.rebase::
> -	Defines that the submodule should be rebased by default.
> +submodule.<name>.update::
> +	Defines what to do when the submodule is updated by the superproject.
> +	If 'checkout' (the default), the new commit specified in the
> +	superproject will be checked out in the submodule on a detached HEAD.
> +	If 'rebase', the current branch of the submodule will be rebased onto
> +	the commit specified in the superproject.
> +	This config option is overridden if 'git submodule update' is given
> +	the '--rebase' option.
>  
>  
>  EXAMPLES
> diff --git a/git-submodule.sh b/git-submodule.sh
> index bbca183..19a3a84 100755
> --- a/git-submodule.sh
> +++ b/git-submodule.sh
> @@ -18,7 +18,7 @@ quiet=
>  reference=
>  cached=
>  nofetch=
> -rebase=
> +update=
>  
>  #
>  # print stuff on stdout unless -q was specified
> @@ -311,10 +311,10 @@ cmd_init()
>  		git config submodule."$name".url "$url" ||
>  		die "Failed to register url for submodule path '$path'"
>  
> -		test true != "$(git config -f .gitmodules --bool \
> -			submodule."$name".rebase)" ||
> -		git config submodule."$name".rebase true ||
> -		die "Failed to register submodule path '$path' as rebasing"
> +		upd="$(git config -f .gitmodules submodule."$name".update)"
> +		test -z "$upd" ||
> +		git config submodule."$name".update "$upd" ||
> +		die "Failed to register update mode for submodule path '$path'"
>  
>  		say "Submodule '$name' ($url) registered for path '$path'"
>  	done
> @@ -345,7 +345,7 @@ cmd_update()
>  			;;
>  		-r|--rebase)
>  			shift
> -			rebase=true
> +			update="rebase"
>  			;;
>  		--reference)
>  			case "$2" in '') usage ;; esac
> @@ -379,7 +379,7 @@ cmd_update()
>  	do
>  		name=$(module_name "$path") || exit
>  		url=$(git config submodule."$name".url)
> -		rebase_module=$(git config --bool submodule."$name".rebase)
> +		update_module=$(git config submodule."$name".update)
>  		if test -z "$url"
>  		then
>  			# Only mention uninitialized submodules when its
> @@ -400,9 +400,9 @@ cmd_update()
>  			die "Unable to find current revision in submodule path '$path'"
>  		fi
>  
> -		if test true = "$rebase"
> +		if ! test -z "$update"
>  		then
> -			rebase_module=true
> +			update_module=$update
>  		fi
>  
>  		if test "$subsha1" != "$sha1"
> @@ -420,16 +420,18 @@ cmd_update()
>  				die "Unable to fetch in submodule path '$path'"
>  			fi
>  
> -			if test true = "$rebase_module"
> -			then
> -				command="git-rebase"
> +			case "$update_module" in
> +			rebase)
> +				command="git rebase"
>  				action="rebase"
>  				msg="rebased onto"
> -			else
> -				command="git-checkout $force -q"
> +				;;
> +			*)
> +				command="git checkout $force -q"
>  				action="checkout"
>  				msg="checked out"
> -			fi
> +				;;
> +			esac
>  
>  			(unset GIT_DIR; cd "$path" && $command "$sha1") ||
>  			die "Unable to $action '$sha1' in submodule path '$path'"
> diff --git a/t/t7406-submodule-update.sh b/t/t7406-submodule-update.sh
> index 3442c05..0773fe4 100755
> --- a/t/t7406-submodule-update.sh
> +++ b/t/t7406-submodule-update.sh
> @@ -76,9 +76,9 @@ test_expect_success 'submodule update --rebase staying on master' '
>  	)
>  '
>  
> -test_expect_success 'submodule update - rebase true in .git/config' '
> +test_expect_success 'submodule update - rebase in .git/config' '
>  	(cd super &&
> -	 git config submodule.submodule.rebase true
> +	 git config submodule.submodule.update rebase
>  	) &&
>  	(cd super/submodule &&
>  	  git reset --hard HEAD~1
> @@ -93,9 +93,9 @@ test_expect_success 'submodule update - rebase true in .git/config' '
>  	)
>  '
>  
> -test_expect_success 'submodule update - rebase false in .git/config but --rebase given' '
> +test_expect_success 'submodule update - checkout in .git/config but --rebase given' '
>  	(cd super &&
> -	 git config submodule.submodule.rebase false
> +	 git config submodule.submodule.update checkout
>  	) &&
>  	(cd super/submodule &&
>  	  git reset --hard HEAD~1
> @@ -110,9 +110,9 @@ test_expect_success 'submodule update - rebase false in .git/config but --rebase
>  	)
>  '
>  
> -test_expect_success 'submodule update - rebase false in .git/config' '
> +test_expect_success 'submodule update - checkout in .git/config' '
>  	(cd super &&
> -	 git config submodule.submodule.rebase false
> +	 git config submodule.submodule.update checkout
>  	) &&
>  	(cd super/submodule &&
>  	  git reset --hard HEAD^
> @@ -131,9 +131,9 @@ test_expect_success 'submodule init picks up rebase' '
>  	(cd super &&
>  	 git config submodule.rebasing.url git://non-existing/git &&
>  	 git config submodule.rebasing.path does-not-matter &&
> -	 git config submodule.rebasing.rebase true &&
> +	 git config submodule.rebasing.update rebase &&
>  	 git submodule init rebasing &&
> -	 test true = $(git config --bool submodule.rebasing.rebase)
> +	 test "rebase" = $(git config submodule.rebasing.update)
>  	)
>  '
>  
> -- 
> 1.6.3.rc0.1.gf800

I noticed this patch still leaves the --rebase commandline flag. Shouldn't
that be changed to --update=rebase for consistency?

Cheers,
  Peter

  reply	other threads:[~2009-06-03  0:16 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-06-01  1:24 What's cooking in git.git (May 2009, #04; Sun, 31) Junio C Hamano
2009-06-01 16:05 ` Brandon Casey
2009-06-02 22:59 ` [PATCH 0/2] "git submodule update" enhancements (Was: What's cooking in git.git (May 2009, #04; Sun, 31)) Johan Herland
2009-06-02 22:59 ` [PATCH 1/2] Rename submodule.<name>.rebase to submodule.<name>.update Johan Herland
2009-06-03  0:15   ` Peter Hutterer [this message]
2009-06-03  2:33     ` Junio C Hamano
2009-06-03  6:46       ` Johan Herland
2009-06-03  4:15   ` Markus Heidelberg
2009-06-03  6:20     ` Johan Herland
2009-06-03  6:27       ` [PATCH 1/2 v2] " Johan Herland
2009-06-02 22:59 ` [PATCH 2/2] git-submodule: add support for --merge Johan Herland

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20090603001553.GB27149@dingo.bne.redhat.com \
    --to=peter.hutterer@who-t.net \
    --cc=Johannes.Schindelin@gmx.de \
    --cc=apenwarr@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=johan@herland.net \
    --cc=markus.heidelberg@web.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).