git-scm.com icon indicating copy to clipboard operation
git-scm.com copied to clipboard

duplicate dt sections cause duplicate anchor tags to be generated breaking linking

Open samccone opened this issue 3 years ago • 8 comments

URL for broken page

https://git-scm.com/docs/merge-strategies#Documentation/merge-strategies.txt-ours

Problem

There are two or more dt elements on the page with the same ID each one generates an anchor link that collides.

The following generated docs all had colliding link generation (which are now all fixed with this CL)

collision for Documentation/diff-options.txt-no
collision for Documentation/diff-options.txt-plain
collision for Documentation/git-cherry-pick.txt-codegitcherry-pickmastercode
collision for Documentation/git-config.txt-codecolumncode
collision for Documentation/git-diff-files.txt-no
collision for Documentation/git-diff-files.txt-plain
collision for Documentation/git-diff-index.txt-no
collision for Documentation/git-diff-index.txt-plain
collision for Documentation/git-diff-tree.txt-no
collision for Documentation/git-diff-tree.txt-plain
collision for Documentation/git-diff-tree.txt--s
collision for Documentation/git-diff.txt-emgitdiffemltoptionsgtltcommitgtltcommitgt--ltpathgt82308203
collision for Documentation/git-diff.txt-emgitdiffemltoptionsgtltcommitgtltcommitgt--ltpathgt82308203
collision for Documentation/git-diff.txt-emgitdiffemltoptionsgtltcommitgtltcommitgt--ltpathgt82308203-1
collision for Documentation/git-diff.txt-no
collision for Documentation/git-diff.txt-plain
collision for Documentation/git-fast-import.txt-Externaldataformat
collision for Documentation/git-fast-import.txt-Inlinedataformat
collision for Documentation/git-fetch.txt-codecode
collision for Documentation/git-fetch.txt-codecode
collision for Documentation/git-fetch.txt-codecode-1
collision for Documentation/git-fetch.txt-codecode
collision for Documentation/git-fetch.txt-codecode-1
collision for Documentation/git-fetch.txt-codecode-1-1
collision for Documentation/git-log.txt-Defaultmode
collision for Documentation/git-log.txt---dense
collision for Documentation/git-log.txt---sparse
collision for Documentation/git-log.txt---simplify-merges
collision for Documentation/git-log.txt---ancestry-path
collision for Documentation/git-log.txt-no
collision for Documentation/git-log.txt-plain
collision for Documentation/git-merge.txt-ours
collision for Documentation/git-p4.txt---import-labels
collision for Documentation/git-pull.txt-ours
collision for Documentation/git-push.txt-codecode
collision for Documentation/git-push.txt-codecode
collision for Documentation/git-push.txt-codecode-1
collision for Documentation/git-push.txt-codecode
collision for Documentation/git-push.txt-codecode-1
collision for Documentation/git-push.txt-codecode-1-1
collision for Documentation/git-push.txt-codegitpushorigincode
collision for Documentation/git-rebase.txt-ours
collision for Documentation/git-rev-list.txt-Defaultmode
collision for Documentation/git-rev-list.txt---dense
collision for Documentation/git-rev-list.txt---sparse
collision for Documentation/git-rev-list.txt---simplify-merges
collision for Documentation/git-rev-list.txt---ancestry-path
collision for Documentation/git-rev-parse.txt-emltrevgtem
collision for Documentation/git-rev-parse.txt-emltrev1gtltrev2gtem
collision for Documentation/git-rev-parse.txt-emltrevgtemegemHEADem
collision for Documentation/git-show.txt-no
collision for Documentation/git-show.txt-plain
collision for Documentation/git-svn.txt---ignore-refsltregexgt
collision for Documentation/git-svn.txt---ignore-pathsltregexgt
collision for Documentation/git-svn.txt---include-pathsltregexgt
collision for Documentation/git-svn.txt---parent
collision for Documentation/git-svn.txt--m
collision for Documentation/git-svn.txt--p
collision for Documentation/git-update-index.txt---cacheinfoltmodegtltobjectgtltpathgt
collision for Documentation/gitattributes.txt-Set
collision for Documentation/gitattributes.txt-Unset
collision for Documentation/gitattributes.txt-Unspecified
collision for Documentation/gitattributes.txt-Set
collision for Documentation/gitattributes.txt-Set-1
collision for Documentation/gitattributes.txt-Unset
collision for Documentation/gitattributes.txt-Unset-1
collision for Documentation/gitattributes.txt-Unspecified
collision for Documentation/gitattributes.txt-Unspecified-1
collision for Documentation/gitattributes.txt-Set
collision for Documentation/gitattributes.txt-Set-1
collision for Documentation/gitattributes.txt-Set-1-1
collision for Documentation/gitattributes.txt-Unset
collision for Documentation/gitattributes.txt-Unset-1
collision for Documentation/gitattributes.txt-Unset-1-1
collision for Documentation/gitattributes.txt-Unspecified
collision for Documentation/gitattributes.txt-Unspecified-1
collision for Documentation/gitattributes.txt-Unspecified-1-1
collision for Documentation/gitattributes.txt-String
collision for Documentation/gitattributes.txt-Set
collision for Documentation/gitattributes.txt-Set-1
collision for Documentation/gitattributes.txt-Set-1-1
collision for Documentation/gitattributes.txt-Set-1-1-1
collision for Documentation/gitattributes.txt-Unset
collision for Documentation/gitattributes.txt-Unset-1
collision for Documentation/gitattributes.txt-Unset-1-1
collision for Documentation/gitattributes.txt-Unset-1-1-1
collision for Documentation/gitattributes.txt-Unspecified
collision for Documentation/gitattributes.txt-Unspecified-1
collision for Documentation/gitattributes.txt-Unspecified-1-1
collision for Documentation/gitattributes.txt-Unspecified-1-1-1
collision for Documentation/gitattributes.txt-String
collision for Documentation/gitattributes.txt-String-1
collision for Documentation/gitremote-helpers.txt-emconnectem
collision for Documentation/gitremote-helpers.txt-emstateless-connectem
collision for Documentation/gitremote-helpers.txt-emexportem
collision for Documentation/gitrevisions.txt-emltrevgtem
collision for Documentation/gitrevisions.txt-emltrev1gtltrev2gtem
collision for Documentation/gitrevisions.txt-emltrevgtemegemHEADem
collision for Documentation/merge-strategies.txt-ours
collision for Documentation/rev-list-options.txt-Defaultmode
collision for Documentation/rev-list-options.txt---dense
collision for Documentation/rev-list-options.txt---sparse
collision for Documentation/rev-list-options.txt---simplify-merges
collision for Documentation/rev-list-options.txt---ancestry-path
collision for Documentation/revisions.txt-emltrevgtem
collision for Documentation/revisions.txt-emltrev1gtltrev2gtem
collision for Documentation/revisions.txt-emltrevgtemegemHEADem
collision for Documentation/technical/api-remote.txt-codenamecode
collision for Documentation/technical/api-trace2.txt-codeltevent-namegtcode

#Documentation/merge-strategies.txt-ours

Operating system and browser

all

Steps to reproduce

visit the page click on the second ours section, reload the page, notice you are scrolled to the first ours section on the page.

Verification / testing steps

version=v2.23.0
GIT_REPO=../git/.git REBUILD_DOC=$version rake local_index | grep collision > collisions.txt
./script/server 
curl http://localhost:5000/docs/merge-strategies | grep merge-strategies.txt-ours

Expected output when diffing vs the code before this fix:

<dt class="hdlist1" id="Documentation/merge-strategies.txt-ours"> <a class="anchor" href="#Documentation/merge-strategies.txt-ours"></a>ours </dt>
+<dt class="hdlist1" id="Documentation/merge-strategies.txt-ours-1"> <a class="anchor" href="#Documentation/merge-strategies.txt-ours-1"></a>ours </dt>
-<dt class="hdlist1" id="Documentation/merge-strategies.txt-ours"> <a class="anchor" href="#Documentation/merge-strategies.txt-ours"></a>ours </dt>

_

samccone avatar Sep 10 '22 23:09 samccone

Further digging shows that this is a somewhat known problem https://github.com/asciidoctor/asciidoctor/issues/3147

The solution implemented here only works inside of index_l10n_doc which means for all non-internationalized docs the headers will still collide.

samccone avatar Sep 11 '22 18:09 samccone

The change has been updated to now account for both codepaths!

samccone avatar Sep 11 '22 20:09 samccone

Merged, marking as fixed.

samccone avatar Sep 17 '22 20:09 samccone

curl https://git-scm.com/docs/merge-strategies | grep merge-strategies.txt-ours

<dt class="hdlist1" id="Documentation/merge-strategies.txt-ours"> <a class="anchor" href="#Documentation/merge-strategies.txt-ours"></a>ours </dt>
<dt class="hdlist1" id="Documentation/merge-strategies.txt-ours"> <a class="anchor" href="#Documentation/merge-strategies.txt-ours"></a>ours </dt>

Shows that this has not been deployed - @pedrorijo91 please let me know if there is anything else needed on my side*.

samccone avatar Sep 19 '22 22:09 samccone

i think the documentation page is not re-generated frequently, when only new versions are out. can you confirm @peff ?

pedrorijo91 avatar Sep 20 '22 07:09 pedrorijo91

we can probably force re-generation of all documentation...

pedrorijo91 avatar Sep 20 '22 07:09 pedrorijo91

Yes, the scheduled rebuilds are dependent only on new content in the upstream repository. If the actual import code changes, somebody has to kick off heroku run rake preindex RERUN=1. I just did that. It will take a while to finish, plus there's a caching layer in front of the site that may take up to 4 hours to time out.

peff avatar Sep 20 '22 21:09 peff

OK, the build is done, and just because I'm impatient, I purged the cloudflare cache. You should be able to see the new anchors on the site now.

peff avatar Sep 20 '22 22:09 peff

Thanks all for your help on getting this fixed. I confirmed all anchor tags are now distinct on the page (from headers) a few months ago but looks like I did not close :D. Closing now, thanks again!

samccone avatar Jan 01 '23 00:01 samccone