Re: Re: Unify annotated and non-annotated tags

2017-12-23 Thread anatoly techtonik
On Sun, Dec 3, 2017 at 1:25 AM, Philip Oakley  wrote:
> From: "anatoly techtonik" 
>
> comment at end - Philip
>
>
> On Fri, Nov 24, 2017 at 1:24 PM, Ævar Arnfjörð Bjarmason
>  wrote:
>>
>> On Fri, Nov 24, 2017 at 10:52 AM, anatoly techtonik 
>> wrote:
>>>
>>> On Thu, Nov 23, 2017 at 6:08 PM, Randall S. Becker
>>>  wrote:
>>>>
>>>> On 2017-11-23 02:31 (GMT-05:00) anatoly techtonik wrote
>>>>>
>>>>> Subject: Re: Unify annotated and non-annotated tags
>>>>> On Sat, Nov 11, 2017 at 5:06 AM, Junio C Hamano 
>>>>> wrote:
>>>>>>
>>>>>> Igor Djordjevic  writes:
>>>>>>
>>>>>>> If you would like to mimic output of "git show-ref", repeating
>>>>>>> commits for each tag pointing to it and showing full tag name as
>>>>>>> well, you could do something like this, for example:
>>>>>>>
>>>>>>>   for tag in $(git for-each-ref --format="%(refname)" refs/tags)
>>>>>>>   do
>>>>>>>   printf '%s %s\n' "$(git rev-parse $tag^0)" "$tag"
>>>>>>>   done
>>>>>>>
>>>>>>>
>>>>>>> Hope that helps a bit.
>>>>>>
>>>>>>
>>>>>> If you use for-each-ref's --format option, you could do something
>>>>>> like (pardon a long line):
>>>>>>
>>>>>> git for-each-ref
>>>>>> --format='%(if)%(*objectname)%(then)%(*objectname)%(else)%(objectname)%(end)
>>>>>> %(refname)' refs/tags
>>>>>>
>>>>>> without any loop, I would think.
>>>>>
>>>>> Thanks. That helps.
>>>>> So my proposal is to get rid of non-annotated tags, so to get all
>>>>> tags with commits that they point to, one would use:
>>>>> git for-each-ref --format='%(*objectname) %(refname)' refs/tags>
>>>>> For so-called non-annotated tags just leave the message empty.
>>>>> I don't see why anyone would need non-annotated tags though.
>>>>
>>>>
>>>> I have seen non-annotated tags used in automations (not necessarily well
>>>> written ones) that create tags as a record of automation activity. I am not
>>>> sure we should be writing off the concept of unannotated tags entirely. 
>>>> This
>>>> may cause breakage based on existing expectations of how tags work at
>>>> present. My take is that tags should include whodunnit, even if it's just
>>>> the version of the automation being used, but I don't always get to have my
>>>> wishes fulfilled. In essence, whatever behaviour a non-annotated tag has 
>>>> now
>>>> may need to be emulated in future even if reconciliation happens. An option
>>>> to preserve empty tag compatibility with pre-2.16 behaviour, perhaps? 
>>>> Sadly,
>>>> I cannot supply examples of this usage based on a human memory page-fault
>>>> and NDAs.
>>>
>>>
>>> Are there any windows for backward compatibility breaks, or git is
>>> doomed to preserve it forever?
>>> Automation without support won't survive for long, and people who rely
>>> on that, like Chromium team, usually hard set the version used.
>>
>>
>> Git is not doomed to preserve anything forever. We've gradually broken
>> backwards compatibility for a few core things like these.
>>
>> However, just as a bystander reading this thread I haven't seen any
>> compelling reason for why these should be removed. You initially had
>> questions about how to extract info about them, which you got answers
>> to.
>>
>> So what reasons remain for why they need to be removed?
>
>
> To reduce complexity and prior knowledge when dealing with Git tags.
>
> For example, http://readthedocs.io/ site contains a lot of broken
> "Edit on GitHub" links, for example -
> http://git-memo.readthedocs.io/en/stable/
>
> And it appeared that the reason for that is discrepancy between git
> annotated and non-annotated tags. The pull request that fixes the issue
> after it was researched and understood is simple
> https://github.com/rtfd/readthedocs.org/pull/3302
>
> However, while looking through linked issues and PRs, one can try to
> imagine how many days it took for people to come up with the solution,
> which came from this thread.
> --
> anatoly t.
>
>>>>>>>>
>
> So if I understand correctly, the hope is that `git show-ref --tags` could
> get an alternate option `--all-tags` [proper option name required...] such
> that the user would not have to develop the rather over the complicated
> expression that used a newish capability of a different command.
>
> Would that be right?

That's correct.

> Or at least update the man page docs to clarify the annotated vs
> non-annotated tags issue (many SO questions!).

Are there stats how many users read man pages and what is their
reading session length? I mean docs may not help much,

> And indicate if the --dereference and/or --hash options would do the trick!
> - maybe the "^{}" appended would be part of the problem (and need that new
> option "--objectreference" ).

--dereference would work if it didn't require extra processing.
It is hard to think about other option name that would give
desired result.

-- 
anatoly t.


Re: Unify annotated and non-annotated tags

2017-12-23 Thread anatoly techtonik
On Sat, Nov 11, 2017 at 5:06 AM, Junio C Hamano  wrote:
> Igor Djordjevic  writes:
>
>> If you would like to mimic output of "git show-ref", repeating
>> commits for each tag pointing to it and showing full tag name as
>> well, you could do something like this, for example:
>>
>>   for tag in $(git for-each-ref --format="%(refname)" refs/tags)
>>   do
>>   printf '%s %s\n' "$(git rev-parse $tag^0)" "$tag"
>>   done
>>
>>
>> Hope that helps a bit.
>
> If you use for-each-ref's --format option, you could do something
> like (pardon a long line):
>
> git for-each-ref 
> --format='%(if)%(*objectname)%(then)%(*objectname)%(else)%(objectname)%(end) 
> %(refname)' refs/tags
>
> without any loop, I would think.

This doesn't work with git 1.9.1
https://github.com/rtfd/readthedocs.org/pull/3441#issuecomment-353567756
When it was added? I searched through GitHub and docs, but can't find any
historical records.

-- 
anatoly t.


Re: Re: Unify annotated and non-annotated tags

2017-12-02 Thread anatoly techtonik
On Fri, Nov 24, 2017 at 1:24 PM, Ævar Arnfjörð Bjarmason
 wrote:
> On Fri, Nov 24, 2017 at 10:52 AM, anatoly techtonik  
> wrote:
>> On Thu, Nov 23, 2017 at 6:08 PM, Randall S. Becker
>>  wrote:
>>> On 2017-11-23 02:31 (GMT-05:00) anatoly techtonik wrote
>>>>Subject: Re: Unify annotated and non-annotated tags
>>>>On Sat, Nov 11, 2017 at 5:06 AM, Junio C Hamano  wrote:
>>>>> Igor Djordjevic  writes:
>>>>>
>>>>>> If you would like to mimic output of "git show-ref", repeating
>>>>>> commits for each tag pointing to it and showing full tag name as
>>>>>> well, you could do something like this, for example:
>>>>>>
>>>>>>   for tag in $(git for-each-ref --format="%(refname)" refs/tags)
>>>>>>   do
>>>>>>   printf '%s %s\n' "$(git rev-parse $tag^0)" "$tag"
>>>>>>   done
>>>>>>
>>>>>>
>>>>>> Hope that helps a bit.
>>>>>
>>>>> If you use for-each-ref's --format option, you could do something
>>>>> like (pardon a long line):
>>>>>
>>>>> git for-each-ref 
>>>>> --format='%(if)%(*objectname)%(then)%(*objectname)%(else)%(objectname)%(end)
>>>>>  %(refname)' refs/tags
>>>>>
>>>>> without any loop, I would think.
>>>>Thanks. That helps.
>>>>So my proposal is to get rid of non-annotated tags, so to get all
>>>>tags with commits that they point to, one would use:
>>>>git for-each-ref --format='%(*objectname) %(refname)' refs/tags>
>>>>For so-called non-annotated tags just leave the message empty.
>>>>I don't see why anyone would need non-annotated tags though.
>>>
>>> I have seen non-annotated tags used in automations (not necessarily well 
>>> written ones) that create tags as a record of automation activity. I am not 
>>> sure we should be writing off the concept of unannotated tags entirely. 
>>> This may cause breakage based on existing expectations of how tags work at 
>>> present. My take is that tags should include whodunnit, even if it's just 
>>> the version of the automation being used, but I don't always get to have my 
>>> wishes fulfilled. In essence, whatever behaviour a non-annotated tag has 
>>> now may need to be emulated in future even if reconciliation happens. An 
>>> option to preserve empty tag compatibility with pre-2.16 behaviour, 
>>> perhaps? Sadly, I cannot supply examples of this usage based on a human 
>>> memory page-fault and NDAs.
>>
>> Are there any windows for backward compatibility breaks, or git is
>> doomed to preserve it forever?
>> Automation without support won't survive for long, and people who rely
>> on that, like Chromium team, usually hard set the version used.
>
> Git is not doomed to preserve anything forever. We've gradually broken
> backwards compatibility for a few core things like these.
>
> However, just as a bystander reading this thread I haven't seen any
> compelling reason for why these should be removed. You initially had
> questions about how to extract info about them, which you got answers
> to.
>
> So what reasons remain for why they need to be removed?

To reduce complexity and prior knowledge when dealing with Git tags.

For example, http://readthedocs.io/ site contains a lot of broken
"Edit on GitHub" links, for example - http://git-memo.readthedocs.io/en/stable/

And it appeared that the reason for that is discrepancy between git
annotated and non-annotated tags. The pull request that fixes the issue
after it was researched and understood is simple
https://github.com/rtfd/readthedocs.org/pull/3302

However, while looking through linked issues and PRs, one can try to
imagine how many days it took for people to come up with the solution,
which came from this thread.
-- 
anatoly t.


Re: Re: Unify annotated and non-annotated tags

2017-11-24 Thread anatoly techtonik
On Thu, Nov 23, 2017 at 6:08 PM, Randall S. Becker
 wrote:
> On 2017-11-23 02:31 (GMT-05:00) anatoly techtonik wrote
>>Subject: Re: Unify annotated and non-annotated tags
>>On Sat, Nov 11, 2017 at 5:06 AM, Junio C Hamano  wrote:
>>> Igor Djordjevic  writes:
>>>
>>>> If you would like to mimic output of "git show-ref", repeating
>>>> commits for each tag pointing to it and showing full tag name as
>>>> well, you could do something like this, for example:
>>>>
>>>>   for tag in $(git for-each-ref --format="%(refname)" refs/tags)
>>>>   do
>>>>   printf '%s %s\n' "$(git rev-parse $tag^0)" "$tag"
>>>>   done
>>>>
>>>>
>>>> Hope that helps a bit.
>>>
>>> If you use for-each-ref's --format option, you could do something
>>> like (pardon a long line):
>>>
>>> git for-each-ref 
>>> --format='%(if)%(*objectname)%(then)%(*objectname)%(else)%(objectname)%(end)
>>>  %(refname)' refs/tags
>>>
>>> without any loop, I would think.
>>Thanks. That helps.
>>So my proposal is to get rid of non-annotated tags, so to get all
>>tags with commits that they point to, one would use:
>>git for-each-ref --format='%(*objectname) %(refname)' refs/tags>
>>For so-called non-annotated tags just leave the message empty.
>>I don't see why anyone would need non-annotated tags though.
>
> I have seen non-annotated tags used in automations (not necessarily well 
> written ones) that create tags as a record of automation activity. I am not 
> sure we should be writing off the concept of unannotated tags entirely. This 
> may cause breakage based on existing expectations of how tags work at 
> present. My take is that tags should include whodunnit, even if it's just the 
> version of the automation being used, but I don't always get to have my 
> wishes fulfilled. In essence, whatever behaviour a non-annotated tag has now 
> may need to be emulated in future even if reconciliation happens. An option 
> to preserve empty tag compatibility with pre-2.16 behaviour, perhaps? Sadly, 
> I cannot supply examples of this usage based on a human memory page-fault and 
> NDAs.

Are there any windows for backward compatibility breaks, or git is
doomed to preserve it forever?
Automation without support won't survive for long, and people who rely
on that, like Chromium team, usually hard set the version used.
-- 
anatoly t.


Re: Unify annotated and non-annotated tags

2017-11-22 Thread anatoly techtonik
On Sat, Nov 11, 2017 at 5:06 AM, Junio C Hamano  wrote:
> Igor Djordjevic  writes:
>
>> If you would like to mimic output of "git show-ref", repeating
>> commits for each tag pointing to it and showing full tag name as
>> well, you could do something like this, for example:
>>
>>   for tag in $(git for-each-ref --format="%(refname)" refs/tags)
>>   do
>>   printf '%s %s\n' "$(git rev-parse $tag^0)" "$tag"
>>   done
>>
>>
>> Hope that helps a bit.
>
> If you use for-each-ref's --format option, you could do something
> like (pardon a long line):
>
> git for-each-ref 
> --format='%(if)%(*objectname)%(then)%(*objectname)%(else)%(objectname)%(end) 
> %(refname)' refs/tags
>
> without any loop, I would think.

Thanks. That helps.

So my proposal is to get rid of non-annotated tags, so to get all
tags with commits that they point to, one would use:

git for-each-ref --format='%(*objectname) %(refname)' refs/tags

For so-called non-annotated tags just leave the message empty.
I don't see why anyone would need non-annotated tags though.
-- 
anatoly t.


Unify annotated and non-annotated tags

2017-11-10 Thread anatoly techtonik
Hi,

It is hard to work with Git tags, because on low level hash
of non-annotated tag is pointing to commit, but hash for
annotated tag is pointing to tag metadata.

On low level that means that there is no way to get commit
hash from tag in a single step. If tag is annotated, you need
to find and parse ^{} string of show-ref, if not, then look for
string without ^{}.

So, why not just make all tags work the same so that every
tag has its own hash and you need to dereference it in the
same way to get commit hash?

This way I could get all commit hashes with just:

git show-ref --tags -d | grep "\^{}"

or abandon ^{} completely and show commit hashes on -d:

git show-ref --tags --dereference

-- 
anatoly t.


git gui is not GIT_TRACE=1 compatible

2015-06-22 Thread anatoly techtonik
https://github.com/git-for-windows/git/issues/218#issuecomment-114085764
--
To unsubscribe from this list: send the line "unsubscribe git" in