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
next prev parent 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).