Re: Should "git log --decorate" indicate whether the HEAD is detached?

2015-02-20 Thread Junio C Hamano
On Thu, Feb 19, 2015 at 3:13 AM, Julien Cretel  wrote:
> On Wed, Feb 18, 2015 at 5:07 PM, Junio C Hamano  wrote:
>
>> Julien's "HEAD=master, other" vs "HEAD, master, other" may be
>> subdued enough to be undistracting, I would guess.  I do not think
>> the distinction between "HEAD = master" and "HEAD -> master" would
>> be useful, on the other hand.
>
> Just to clarify, I suggested these two notations as alternatives for
> denoting the same state: "HEAD is attached to master". They were not
> meant to denote different states. Accordingly, a detached HEAD could
> be denoted by "HEAD, master, other" (i.e. the same as the current
> output of "git log --decorate").

That makes it even better than my misunderstood version ;-)  A list
that is usually "A, B, C" that sometimes has "A, B=C" is inconspicuous
enough not to be distracting too much, I would say.

Thanks.
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Should "git log --decorate" indicate whether the HEAD is detached?

2015-02-19 Thread Julien Cretel
On Wed, Feb 18, 2015 at 5:07 PM, Junio C Hamano  wrote:

> Julien's "HEAD=master, other" vs "HEAD, master, other" may be
> subdued enough to be undistracting, I would guess.  I do not think
> the distinction between "HEAD = master" and "HEAD -> master" would
> be useful, on the other hand.

Just to clarify, I suggested these two notations as alternatives for
denoting the same state: "HEAD is attached to master". They were not
meant to denote different states. Accordingly, a detached HEAD could
be denoted by "HEAD, master, other" (i.e. the same as the current
output of "git log --decorate").
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Should "git log --decorate" indicate whether the HEAD is detached?

2015-02-19 Thread Michael J Gruber
Junio C Hamano venit, vidit, dixit 18.02.2015 20:49:
> Michael J Gruber  writes:
> 
>> Yep, it very well is. Also, that approach would tell you which branch is
>> checked out, though I don't consider that git log's business.
>>
>> OTOH, it's "backwards" in the sense that it marks the "ordinary" case
>> (HEAD is symref, branch is checked out) specially compared to the
>> "exceptional/dangerous" case (HEAD is ref, detached).
> 
> Both are ordinary and there is nothing exceptional or dangerous
> about your HEAD temporarily being detached during a "rebase -i"
> session, for example.

Sure, that's why I put it in quotes. That's only how it is perceived by
some users, and I suppose it's that kind of users that we are trying to
help here.

>> And status, branch
>> will point out that latter case more verbously, too.
> 
> Yeah, but as you said, that is not "log"'s business.

I still think decorations "detached HEAD" resp. "HEAD" for the two cases
are more natural, if we want to include any additional information at
all. Just think of:

deadbeef (HEAD=master, topicbranch, tag: v1)

log/rev-list is about commit objects. All the refs above resolve to the
same commit, so why are only two of them equal?

In fact, they are very unequal, since HEAD would be "ref:
refs/heads/master" whereas master would "deadbeef". They are equal in
the other (detached) case! I'm not telling you any news here, I just
want to point out how badly misleading that notation is.

So, I would suggest to "decorate the decorations", by saying something
like "detached HEAD", and maybe some version of "HEAD at master" (I'd
prefer just "HEAD") and possibly more info on the tags ("s-tag" or
"signed tag" etc).

Michael
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Should "git log --decorate" indicate whether the HEAD is detached?

2015-02-18 Thread Junio C Hamano
Michael J Gruber  writes:

> Yep, it very well is. Also, that approach would tell you which branch is
> checked out, though I don't consider that git log's business.
>
> OTOH, it's "backwards" in the sense that it marks the "ordinary" case
> (HEAD is symref, branch is checked out) specially compared to the
> "exceptional/dangerous" case (HEAD is ref, detached).

Both are ordinary and there is nothing exceptional or dangerous
about your HEAD temporarily being detached during a "rebase -i"
session, for example.

> And status, branch
> will point out that latter case more verbously, too.

Yeah, but as you said, that is not "log"'s business.
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Should "git log --decorate" indicate whether the HEAD is detached?

2015-02-18 Thread Michael J Gruber
Junio C Hamano venit, vidit, dixit 18.02.2015 18:07:
> Michael J Gruber  writes:
> 
>> "git branch" will tell you your branches and which one is checked out
>> (or HEAD); "git status" will tell you the latter.
>>
>> "git log" is about the DAG which has absolutely nothing to do with what
>> you have currently checked out.
> 
> Yeah, that summarizes my reaction, too.  More importantly, "log" is
> about showing commits and "--decorate" is a way to enrich the
> presentation of commits---it talks about commits in terms of refs;
> the command and the option is not about describing refs and their
> relationships.
> 
> I do not terribly mind showing the fact that HEAD points at a branch
> when --decorate talks about HEAD, partly because we will be showing
> both HEAD and the branch name _anyway_ in the output.  But I am not
> sure if the extra bit of information is more helpful to the readers
> or being distracting.
> 
> Julien's "HEAD=master, other" vs "HEAD, master, other" may be
> subdued enough to be undistracting, I would guess.  I do not think
> the distinction between "HEAD = master" and "HEAD -> master" would
> be useful, on the other hand.  We already know that the names listed
> all refer to the same commit, which means that we do not have to say
> "HEAD is detached" explicitly as long as we have a way to say "HEAD
> points at this branch".  If HEAD is listed and is not marked to
> point at another branch that is shown, by definition it is detached,
> no?
> 

Yep, it very well is. Also, that approach would tell you which branch is
checked out, though I don't consider that git log's business.

OTOH, it's "backwards" in the sense that it marks the "ordinary" case
(HEAD is symref, branch is checked out) specially compared to the
"exceptional/dangerous" case (HEAD is ref, detached). And status, branch
will point out that latter case more verbously, too.

Michael
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Should "git log --decorate" indicate whether the HEAD is detached?

2015-02-18 Thread Junio C Hamano
Michael J Gruber  writes:

> "git branch" will tell you your branches and which one is checked out
> (or HEAD); "git status" will tell you the latter.
>
> "git log" is about the DAG which has absolutely nothing to do with what
> you have currently checked out.

Yeah, that summarizes my reaction, too.  More importantly, "log" is
about showing commits and "--decorate" is a way to enrich the
presentation of commits---it talks about commits in terms of refs;
the command and the option is not about describing refs and their
relationships.

I do not terribly mind showing the fact that HEAD points at a branch
when --decorate talks about HEAD, partly because we will be showing
both HEAD and the branch name _anyway_ in the output.  But I am not
sure if the extra bit of information is more helpful to the readers
or being distracting.

Julien's "HEAD=master, other" vs "HEAD, master, other" may be
subdued enough to be undistracting, I would guess.  I do not think
the distinction between "HEAD = master" and "HEAD -> master" would
be useful, on the other hand.  We already know that the names listed
all refer to the same commit, which means that we do not have to say
"HEAD is detached" explicitly as long as we have a way to say "HEAD
points at this branch".  If HEAD is listed and is not marked to
point at another branch that is shown, by definition it is detached,
no?

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Should "git log --decorate" indicate whether the HEAD is detached?

2015-02-18 Thread Michael J Gruber
Julien Cretel venit, vidit, dixit 17.02.2015 00:40:
> On Mon, Feb 16, 2015 at 11:15 PM, Junio C Hamano  wrote:
>> Julien Cretel  writes:
>>
>>> As of Git 2.3.0, the output of "git log --decorate" is ambiguous as to
>>> whether the HEAD is detached or not.
>>
>> It sounds as if you are reporting some regression, but has any
>> version of Git ever done so, or is this just a new feature that
>> does not exist yet?
> 
> Apologies; I should have explained myself better. I'm not reporting a
> regression;
> as far as I can tell, "git log --decorate" has always been ambiguous
> in that way.
> 
>>
>>> More specifically, consider the following output of "git log --decorate":
>>>
>>> 4d860e9 (HEAD, master, dev) Remove trailing whitespace
>>>
>>> Whether the HEAD is attached to master or detached, the output is the same.
>>> Could/should "git log --decorate" be modified to provide this information?
>>> Perhaps something along the lines of
>>>
>>> 4d860e9 (HEAD -> master, dev) Remove trailing whitespace
>>>
>>> or
>>>
>>> 4d860e9 (HEAD = master, dev) Remove trailing whitespace
>>>
>>
>> I personally do not see a need for such a differenciation.  Why does
>> one even need to know, and is it worth the cost of computing at the
>> runtime?
> 
> I believe the "--decorate" flag to be quite popular. I personally like to run
> "git log --decorate --graph --oneline --all" to quickly get an idea of the 
> state
> of a repo. In my experience, many users do the same, to the point that they
> feel the need to define an alias for this command; see the top answers to
> http://stackoverflow.com/q/1057564/2541573.
> 
> My problem with the current output of "git log --decorate" is the asymmetry,
> so to speak. If the HEAD is detached but pointing at a commit that isn't any
> branch's tip, then the user can be sure the HEAD detached; however, if at
> least one branch points to the current commit, there is no way to tell.
> 
> I must admit I haven't given much thought about the cost involved, but I can't
> imagine performance would take a big hit. Would it?
> 
>>
>> Most of the time when I am on detached HEAD it is either a few
>> commits behind a tip, or a few commits ahead of a tip.

"git branch" will tell you your branches and which one is checked out
(or HEAD); "git status" will tell you the latter.

"git log" is about the DAG which has absolutely nothing to do with what
you have currently checked out.

Your expectation may come from the fact that the default argument to
"git log" is HEAD; or from what "gitk" and other ui tools do.

On the other hand, our decorations can be considered "wrong" in the
following sense: if HEAD is a symref it really points to a (branch) ref,
not a commit. In this situation, "HEAD" should be the decoration of the
branch ref, not of the commit which the branch ref resolves to.

But that would apply to annotated tags, as well: they point to tag
objects (and should decorate them by the logic above) rather than commit
objects.

So, what "log --decorate" really and consistently does is resolving
("peeling") any decorating reference until it points to a commit object,
and decorate that.

A --decorate-detailed mode which does without the peeling could be
elucidating - that would need markers for (branch) refs and tag objects
in addition to commit objects, though (and an extension of the machinery).

Michael
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Should "git log --decorate" indicate whether the HEAD is detached?

2015-02-16 Thread Julien Cretel
On Mon, Feb 16, 2015 at 11:15 PM, Junio C Hamano  wrote:
> Julien Cretel  writes:
>
>> As of Git 2.3.0, the output of "git log --decorate" is ambiguous as to
>> whether the HEAD is detached or not.
>
> It sounds as if you are reporting some regression, but has any
> version of Git ever done so, or is this just a new feature that
> does not exist yet?

Apologies; I should have explained myself better. I'm not reporting a
regression;
as far as I can tell, "git log --decorate" has always been ambiguous
in that way.

>
>> More specifically, consider the following output of "git log --decorate":
>>
>> 4d860e9 (HEAD, master, dev) Remove trailing whitespace
>>
>> Whether the HEAD is attached to master or detached, the output is the same.
>> Could/should "git log --decorate" be modified to provide this information?
>> Perhaps something along the lines of
>>
>> 4d860e9 (HEAD -> master, dev) Remove trailing whitespace
>>
>> or
>>
>> 4d860e9 (HEAD = master, dev) Remove trailing whitespace
>>
>
> I personally do not see a need for such a differenciation.  Why does
> one even need to know, and is it worth the cost of computing at the
> runtime?

I believe the "--decorate" flag to be quite popular. I personally like to run
"git log --decorate --graph --oneline --all" to quickly get an idea of the state
of a repo. In my experience, many users do the same, to the point that they
feel the need to define an alias for this command; see the top answers to
http://stackoverflow.com/q/1057564/2541573.

My problem with the current output of "git log --decorate" is the asymmetry,
so to speak. If the HEAD is detached but pointing at a commit that isn't any
branch's tip, then the user can be sure the HEAD detached; however, if at
least one branch points to the current commit, there is no way to tell.

I must admit I haven't given much thought about the cost involved, but I can't
imagine performance would take a big hit. Would it?

>
> Most of the time when I am on detached HEAD it is either a few
> commits behind a tip, or a few commits ahead of a tip.
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Should "git log --decorate" indicate whether the HEAD is detached?

2015-02-16 Thread Junio C Hamano
Julien Cretel  writes:

> As of Git 2.3.0, the output of "git log --decorate" is ambiguous as to
> whether the HEAD is detached or not.

It sounds as if you are reporting some regression, but has any
version of Git ever done so, or is this just a new feature that
does not exist yet?

> More specifically, consider the following output of "git log --decorate":
>
> 4d860e9 (HEAD, master, dev) Remove trailing whitespace
>
> Whether the HEAD is attached to master or detached, the output is the same.
> Could/should "git log --decorate" be modified to provide this information?
> Perhaps something along the lines of
>
> 4d860e9 (HEAD -> master, dev) Remove trailing whitespace
>
> or
>
> 4d860e9 (HEAD = master, dev) Remove trailing whitespace
>

I personally do not see a need for such a differenciation.  Why does
one even need to know, and is it worth the cost of computing at the
runtime?

Most of the time when I am on detached HEAD it is either a few
commits behind a tip, or a few commits ahead of a tip.
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html