From: "W. Trevor King" <wking@tremily.us>
To: Johan Herland <johan@herland.net>
Cc: Heiko Voigt <hvoigt@hvoigt.net>,
Junio C Hamano <gitster@pobox.com>,
Jens Lehmann <Jens.Lehmann@web.de>,
Git mailing list <git@vger.kernel.org>
Subject: Re: Re: Possible regression in master? (submodules without a "master" branch)
Date: Thu, 27 Mar 2014 20:05:56 -0700 [thread overview]
Message-ID: <20140328030556.GD25485@odin.tremily.us> (raw)
In-Reply-To: <CALKQrgdAhe0AKk51=__fDWX9QqFH=WVCO=gU+mtO6sb250==0A@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 4086 bytes --]
On Fri, Mar 28, 2014 at 12:21:23AM +0100, Johan Herland wrote:
> On Thu, Mar 27, 2014 at 9:27 PM, Heiko Voigt wrote:
> > On Thu, Mar 27, 2014 at 12:39:03PM -0700, Junio C Hamano wrote:
> >> There is this bit for "update" in git-submodule.txt:
> >>
> >> For updates that clone missing submodules, checkout-mode
> >> updates will create submodules with detached HEADs; all other
> >> modes will create submodules with a local branch named after
> >> submodule.<path>.branch.
> >>
> >> …
> >> So the proposed change is to make the part before semicolon true?
> >> If we are not newly cloning (because we already have it), if the
> >> submodule.<name>.branch is not set *OR* refers to a branch that
> >> does not even exist, shouldn't we either (1) abort as an error,
> >> or (2) do the same and detach?
> >
> > I would expect "(1) abort as an error" since the user is not
> > getting what he would expect.
Branch-attachment is mostly a function of submodule.<name>.update, not
a function of submodule.<name>.branch. We could certainly interpret a
missing submodule.<name>.branch as:
* Use the subproject's HEAD for the initial clone (clear start_point
in cmd_update if submodule."$name".branch is not set).
* Don't change the branch name on subsequent local updates (what we
already do).
* Do $something if the user tries a --remote update.
I just don't know what that $something should be.
> FWIW, here is the behaviour I would expect from "git submodule
> update":
>
> - In checkout-mode, if submodule.<name>.branch is not set, we
> should _always_ detach. Whether or not the submodule is already
> cloned does not matter.
Agreed, checkout-mode should *always* detach the submodule's HEAD.
> - In rebase/merge-mode, if submodule.<name>.branch is not set, we
> should _always_ abort with an error.
Why? Can't we mimic clone and use the remote's HEAD (for --remote
updates)? That seems more intuitive to me. For local updates, we're
just integrating the gitlinked commit with the submodule's HEAD, and
you don't need submodule.<name>.branch for that at all.
> - If submodule.<name>.branch is set - but the branch it refers to
> does not exist - we should _always_ abort with an error. The current
> checkout/rebase/merge-mode does not matter.
Sounds good to me, and should match the current functionality.
> In other words, submodule.<name>.branch is _necessary_ in
> rebase/merge mode, but _optional_ in checkout-mode (its absence
> indicating that we should detach).
The main trigger for “we should detach” is the update mode
(checkout-mode detaches, all others integrate with the submodule's
HEAD (without changing submodule branches). You only need
submodule.<name>.branch for determining which *remote* commit you're
trying to integrate (or clone from). HEAD, master, and “die
screaming” all sound like reasonable defaults in that case. Deciding
between them is a policy/UI decision, not a technical decision.
> >> > gitmodules(5) is pretty clear that 'submodule.<name>.branch'
> >> > defaults to master (and not upstream's HEAD), do we want to
> >> > adjust this at the same time?
> >>
> >> That may be likely. If the value set to a configuration variable
> >> causes an established behaviour of a program change a lot,
> >> silently defaulting that variable to something many people are
> >> expected to have (e.g. 'master') would likely to cause a
> >> usability regression.
> >
> > IMO this branch configuration should completely ignored in the
> > default, non --remote, usage. Since we simply checkout a specific
> > SHA1 in this case, that should be possible.
>
> Yes. Checkout-mode with no submodule.<name>.branch configured should
> always detach.
Except for the initial clone (where it's easy to fix),
submodule.<name>.branch *is* ignored in non --remote updates.
Cheers,
Trevor
--
This email may be signed or encrypted with GnuPG (http://www.gnupg.org).
For more information, see http://en.wikipedia.org/wiki/Pretty_Good_Privacy
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
next prev parent reply other threads:[~2014-03-28 3:06 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-27 14:21 Possible regression in master? (submodules without a "master" branch) Johan Herland
2014-03-27 15:52 ` W. Trevor King
2014-03-27 15:57 ` W. Trevor King
2014-03-27 17:23 ` Jens Lehmann
2014-03-27 18:30 ` Junio C Hamano
2014-03-27 22:55 ` Jens Lehmann
2014-03-27 23:27 ` Johan Herland
2014-03-28 2:33 ` W. Trevor King
2014-03-27 17:16 ` Junio C Hamano
2014-03-27 17:31 ` Jens Lehmann
2014-03-27 18:54 ` W. Trevor King
2014-03-27 19:39 ` Junio C Hamano
2014-03-27 20:27 ` Heiko Voigt
2014-03-27 23:06 ` Jens Lehmann
2014-03-27 23:21 ` Johan Herland
2014-03-28 3:05 ` W. Trevor King [this message]
2014-03-28 3:36 ` [RFC] submodule: change submodule.<name>.branch default from master to HEAD W. Trevor King
2014-03-28 3:43 ` Eric Sunshine
2014-03-28 3:52 ` W. Trevor King
2014-03-28 3:58 ` W. Trevor King
2014-03-28 16:57 ` Jens Lehmann
2014-03-28 17:10 ` W. Trevor King
2014-03-31 19:31 ` Jens Lehmann
2014-03-28 17:28 ` Junio C Hamano
2014-03-31 19:35 ` Jens Lehmann
2014-03-31 20:38 ` W. Trevor King
2014-03-31 20:45 ` Junio C Hamano
2014-03-27 21:01 ` submodule.<path>.branch vs. submodule.<name>.branch (was: Possible regression in master? (submodules without a "master" branch) W. Trevor King
2014-03-27 21:37 ` submodule.<path>.branch vs. submodule.<name>.branch Junio C Hamano
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=20140328030556.GD25485@odin.tremily.us \
--to=wking@tremily.us \
--cc=Jens.Lehmann@web.de \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=hvoigt@hvoigt.net \
--cc=johan@herland.net \
/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).