gitextensions / gitextensions

Git Extensions is a standalone UI tool for managing git repositories. It also integrates with Windows Explorer and Microsoft Visual Studio (2015/2017/2019).
https://gitextensions.github.io/
Other
7.73k stars 2.08k forks source link

"Go to tag" is broken #8301

Closed DeKnep closed 4 years ago

DeKnep commented 4 years ago

Current behaviour

"Navigate -> Go to commit -> Go to tag" does nothing. The list of tags is shown, but GitExtensions does not navigate to the tag I select.

Expected behaviour

The selected tag is navigated to.

Steps to reproduce

See above.

Did this work in previous version of GitExtensions

This has been broken since at least v3.3.x.

Environment

mstv commented 4 years ago

It works for the tags at the begin of the list but not for those at the end. The datasource for the ComboBox contains wrong hashs. They are broken after the tag "master_Net2.0". should be: grafik but is: grafik

mstv commented 4 years ago

This is caused by a very special git feature. Tags can obviously have an additional hash! We must use git show-ref --tags --dereference in order to get ObjectIds, too, and adapt the parser. For the GE repo, this applies to tags only.

$ git show-ref --tags --dereference
...
a275544476cfbb4d996d55a1756d6779d19a25b1 refs/tags/master_Net2.0
750c4ba602329fc1372f455969b3a24994f478e8 refs/tags/v2.48
80add61cebe4db85d525c5f871d52f67a55de827 refs/tags/v2.48^{}
f78c23051e52e5ccd296a609eae9440b2570252f refs/tags/v2.48.02
a982b6ba9f1a9a7cbd99b74b8ef40ff61f97c293 refs/tags/v2.48.02^{}
...
$ git show 750c4ba602329fc1372f455969b3a24994f478e8
tag v2.48
Tagger: Shapkin Arkady <arkady.shapkin@infotecs.ru>
Date:   Thu Aug 21 14:47:01 2014 +0400

v2.48 release

commit 80add61cebe4db85d525c5f871d52f67a55de827 (tag: v2.48)
Author: Janusz Białobrzewski <jbialobr@o2.pl>
Date:   Wed Aug 20 08:01:33 2014 +0200

    Submodule GitExtensionsDoc updated

    Submodule GitExtensionsDoc:
        > f710c60 - 'Discard' button is no longer present.

diff --git a/GitExtensionsDoc b/GitExtensionsDoc
index 2b99b9a39..f710c60c4 160000
--- a/GitExtensionsDoc
+++ b/GitExtensionsDoc
@@ -1 +1 @@
-Subproject commit 2b99b9a39b9dbb082acfc244ee424dd2ca8ed44c
+Subproject commit f710c60c497e77244adad124c937348520ed63fb
$ git show 80add61cebe4db85d525c5f871d52f67a55de827
commit 80add61cebe4db85d525c5f871d52f67a55de827 (tag: v2.48)
Author: Janusz Białobrzewski <jbialobr@o2.pl>
Date:   Wed Aug 20 08:01:33 2014 +0200

    Submodule GitExtensionsDoc updated

    Submodule GitExtensionsDoc:
        > f710c60 - 'Discard' button is no longer present.

diff --git a/GitExtensionsDoc b/GitExtensionsDoc
index 2b99b9a39..f710c60c4 160000
--- a/GitExtensionsDoc
+++ b/GitExtensionsDoc
@@ -1 +1 @@
-Subproject commit 2b99b9a39b9dbb082acfc244ee424dd2ca8ed44c
+Subproject commit f710c60c497e77244adad124c937348520ed63fb
gerhardol commented 4 years ago

See also #6044 and 65efd085aad439086e29e6a2daae01ce69ae4cec GetRefs() needs a rewrite

mstv commented 4 years ago

GetRefs() needs a rewrite

Yes, I fear at least the enum part of #6044 must be done in order to check the correctness of the PR #8309. The current PR implementation filters out the non-dereferenced hashes for tags. There are a few places in GE which deal with the TagDereferenceSuffix = "^{}" / IsDereference. It must be analyzed whether there are corners of GE where the non-dereferenced hashes are important. At first glance, it seems that all just filter for the dereferenced tags. Then the filtering should be centralized and IGitRef.IsDereference should be removed. Any objections? Though this might need to wait a few weeks.

gerhardol commented 4 years ago

Any objections? Though this might need to wait a few weeks.

No, not urgent as I see it. But it can improve issues like this. This should have been the same at least since 3.0, probably even before that