From: Marc Branchaud <marcnarc@xiplink.com>
To: Jens Lehmann <Jens.Lehmann@web.de>
Cc: Git Mailing List <git@vger.kernel.org>,
Junio C Hamano <gitster@pobox.com>,
Jonathan Nieder <jrnieder@gmail.com>
Subject: Re: [PATCH v2 1/7] fetch/pull: recurse into submodules when necessary
Date: Wed, 02 Mar 2011 10:42:59 -0500 [thread overview]
Message-ID: <4D6E6583.8090202@xiplink.com> (raw)
In-Reply-To: <4D6D7AB2.4010509@web.de>
On 11-03-01 06:01 PM, Jens Lehmann wrote:
> To be able to access all commits of populated submodules referenced by the
> superproject it is sufficient to only then let "git fetch" recurse into a
> submodule when the new commits fetched in the superproject record new
> commits for it. Having these commits present is extremely useful when
> using the "--submodule" option to "git diff" (which is what "git gui" and
> "gitk" do since 1.6.6), as all submodule commits needed for creating a
> descriptive output can be accessed. Also merging submodule commits (added
> in 1.7.3) depends on the submodule commits in question being present to
> work. Last but not least this enables disconnected operation when using
> submodules, as all commits necessary for a successful "git submodule
> update -N" will have been fetched automatically. So we choose this mode as
> the default for fetch and pull.
>
> Before a new or changed ref from upstream is updated in update_local_ref()
> "git rev-list <new-sha1> --not --branches --remotes" is used to determine
> all newly fetched commits. These are then walked and diffed against their
> parent(s) to see if a submodule has been changed. If that is the case, its
> path is stored to be fetched after the superproject fetch is completed.
>
> Using the "--recurse-submodules" or the "--no-recurse-submodules" option
> disables the examination of the fetched refs because the result will be
> ignored anyway.
>
> There is currently no infrastructure for storing deleted and new
> submodules in the .git directory of the superproject. Thats why fetch and
> pull for now only fetch submodules that are already checked out and are
> not renamed.
>
> In t7403 the "--no-recurse-submodules" argument had to be added to "git
> pull" to avoid failure because of the moved upstream submodule repo.
>
> Thanks-to: Jonathan Nieder <jrnieder@gmail.com>
> Thanks-to: Heiko Voigt <hvoigt@hvoigt.net>
> Signed-off-by: Jens Lehmann <Jens.Lehmann@web.de>
> ---
> Documentation/fetch-options.txt | 11 ++++
> builtin/fetch.c | 25 ++++++---
> submodule.c | 106 +++++++++++++++++++++++++++++++++++---
> submodule.h | 9 +++
> t/t5526-fetch-submodules.sh | 109 +++++++++++++++++++++++++++++++++++++++
> t/t7403-submodule-sync.sh | 2 +-
> 6 files changed, 245 insertions(+), 17 deletions(-)
>
> diff --git a/Documentation/fetch-options.txt b/Documentation/fetch-options.txt
> index f37276e..ae22f75 100644
> --- a/Documentation/fetch-options.txt
> +++ b/Documentation/fetch-options.txt
> @@ -73,6 +73,17 @@ ifndef::git-pull[]
> Prepend <path> to paths printed in informative messages
> such as "Fetching submodule foo". This option is used
> internally when recursing over submodules.
> +
> +--submodule-default=[yes|on-demand]::
> + This option is used internally to set the submodule recursion default
> + to either a boolean configuration value representing "true" (for
> + unconditonal recursion) or to "on-demand" (when only those submodules
> + should be fetched of which new commits have been fetched in its
> + superproject).
> + This option will be overridden by the 'fetch.recurseSubmodules' and
> + 'submodule.<name>.fetchRecurseSubmodules' settings in
> + linkgit:gitmodules[5] and linkgit:git-config[1] while all of them
> + are ignored when the "--[no-]recurse-submodules" option is given.
> endif::git-pull[]
Rolling out the bike...
I think the option name and it's explanation need to be a little clearer:
--recurse-submodules-default=[yes|on-demand]::
This option is used internally to temporarily provide a
non-negative default value for the --recurse-submodules
option. All other methods of configuring fetch's submodule
recursion (such as settings in linkgit:gitmodules[5] and
linkgit:git-config[1]) override this option, as does
specifying --[no-]recurse-submodules directly.
M.
next prev parent reply other threads:[~2011-03-02 15:42 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-03-01 22:59 [PATCH v2 0/7] Teach fetch/pull the on-demand mode and make it the default Jens Lehmann
2011-03-01 23:01 ` [PATCH v2 1/7] fetch/pull: recurse into submodules when necessary Jens Lehmann
2011-03-02 15:42 ` Marc Branchaud [this message]
2011-03-01 23:01 ` [PATCH v2 2/7] fetch/pull: Add the 'on-demand' value to the --recurse-submodules option Jens Lehmann
2011-03-02 16:00 ` Marc Branchaud
2011-03-02 16:02 ` Marc Branchaud
2011-03-01 23:02 ` [PATCH v3 3/7] config: teach the fetch.recurseSubmodules option the 'on-demand' value Jens Lehmann
2011-03-02 16:02 ` Marc Branchaud
2011-03-01 23:03 ` [PATCH v2 4/7] Submodules: Add 'on-demand' value for the 'fetchRecurseSubmodule' option Jens Lehmann
2011-03-01 23:03 ` [PATCH v2 5/7] fetch/pull: Don't recurse into a submodule when commits are already present Jens Lehmann
2011-03-02 16:08 ` Marc Branchaud
2011-03-01 23:04 ` [PATCH v2 6/7] submodule update: Don't fetch when the submodule commit is " Jens Lehmann
2011-03-01 23:04 ` [PATCH v2 7/7] fetch/pull: Describe --recurse-submodule restrictions in the BUGS section Jens Lehmann
2011-03-02 20:53 ` Jens Lehmann
2011-03-02 16:09 ` [PATCH v2 0/7] Teach fetch/pull the on-demand mode and make it the default Marc Branchaud
2011-03-02 23:35 ` Jens Lehmann
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=4D6E6583.8090202@xiplink.com \
--to=marcnarc@xiplink.com \
--cc=Jens.Lehmann@web.de \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jrnieder@gmail.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.