Add some Glossary terms, and extra renormalize information.
cover Add some Glossary terms, and extra renormalize information.
This short series looks to add the basics of the reachability bitmap and commit graph phrases to the glossary of terms. While these techniques are well known to their developers, for some, they are just magic phrases.
The first patch [1/4] is to show OBD as an abbreviation to avoid a UNA [0]
Patch [2/4] provides a basic statement for the Commit-Graph's purpose.
Patch [3/4] provides a similar statement for the reachability bitmaps.
These two patches maybe misses out on some linking information as to the benefits these have and the basics of their heuristic.
Patch [4/4] follows up on a bug report about the lack of idempotence for the `--renormalise' command. See commit message for details.
[0] UNA Un-Named Abbreviation.
Philip Oakley (4):
glossary: add Object DataBase (ODB) abbreviation
glossary: add commit graph description
glossary: add reachability bitmap description doc add: renormalize is not idempotent for CRCRLF
Documentation/git-add.txt | 3 ++- Documentation/glossary-content.txt | 15 ++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-)
base-commit: 30cc8d0f147546d4dd77bf497f4dec51e7265bd8
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1282%2FPhilipOakley%2FGlossary_terms-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1282/PhilipOakley/Glossary_terms-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/1282
Signature · 1 line
gitgitgadget
PATCH 1/4 glossary: add Object DataBase (ODB) abbreviation
From: Philip Oakley <[email protected]>
ODB abbreviation is used in the technical section without expansion. Show the abbreviation in the Glossary.
--- Documentation/glossary-content.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
Documentation/glossary-content.txt +1 -1
@@ -257,7 +257,7 @@ This commit is referred to as a "merge commit", or sometimes just a <<def_SHA1,SHA-1>> of its contents. Consequently, an object cannot be changed. -[[def_object_database]]object database:: +[[def_object_database]]object database (ODB):: Stores a set of "objects", and an individual <<def_object,object>> is identified by its <<def_object_name,object name>>. The objects usually live in `$GIT_DIR/objects/`.
Signature · 1 line
gitgitgadget
PATCH 2/4 glossary: add commit graph description
In reply to Philip Oakley via GitGitGadgetFrom: Philip Oakley <[email protected]>
--- Documentation/glossary-content.txt | 7 +++++++ 1 file changed, 7 insertions(+)
Documentation/glossary-content.txt +7 -0
@@ -75,6 +75,13 @@ state in the Git history, by creating a new commit representing the current state of the <<def_index,index>> and advancing <<def_HEAD,HEAD>> to point at the new commit. +[[def_commit_graph]]commit graph:: + The commit-graph file is a supplemental data structure that + accelerates commit graph walks. The existing Object Data Base (ODB) + is the definitive commit graph. The "commit-graph" file is stored + either in the .git/objects/info directory or in the info directory + of an alternate object database. + [[def_commit_object]]commit object:: An <<def_object,object>> which contains the information about a particular <<def_revision,revision>>, such as <<def_parent,parents>>, committer,
Signature · 1 line
gitgitgadget
PATCH 3/4 glossary: add reachability bitmap description
In reply to Philip Oakley via GitGitGadgetFrom: Philip Oakley <[email protected]>
--- Documentation/glossary-content.txt | 6 ++++++ 1 file changed, 6 insertions(+)
Documentation/glossary-content.txt +6 -0
@@ -500,6 +500,12 @@ exclude;; <<def_tree_object,trees>> to the trees or <<def_blob_object,blobs>> that they contain. +[[def_reachability_bitmap]]reachability bitmaps:: + Reachability bitmaps store information about the set of objects in + a packfile, or a multi-pack index (MIDX). A repository may have at + most one bitmap. The bitmap may belong to either one pack, or the + repository's multi-pack index (if it exists). + [[def_rebase]]rebase:: To reapply a series of changes from a <<def_branch,branch>> to a different base, and reset the <<def_head,head>> of that branch
Signature · 1 line
gitgitgadget
PATCH 4/4 doc add: renormalize is not idempotent for CRCRLF
In reply to Philip Oakley via GitGitGadgetFrom: Philip Oakley <[email protected]>
Bug report
https://lore.kernel.org/git/AM0PR02MB56357CC96B702244F3271014E8DC9@AM0PR02MB5635.eurprd02.prod.outlook.com/
noted that a file containing /r/r/n needed renormalising twice.
This is by design. Lone CR characters, not paired with an LF, are left unchanged. Note the lack of idempotentness of the "clean" filter in the documentation.
Renormalize was introduced at 9472935d81e (add: introduce "--renormalize", Torsten Bögershausen, 2017-11-16)
--- Documentation/git-add.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
Documentation/git-add.txt +2 -1
@@ -188,7 +188,8 @@ for "git add --no-all <pathspec>...", i.e. ignored removed files. forcibly add them again to the index. This is useful after changing `core.autocrlf` configuration or the `text` attribute in order to correct files added with wrong CRLF/LF line endings. - This option implies `-u`. + This option implies `-u`. Lone CR characters are untouched, so + cleaning not idempotent. A CRCRLF sequence cleans to CRLF. --chmod=(+|-)x:: Override the executable bit of the added files. The executable
Signature · 1 line
gitgitgadget
Re: [PATCH 4/4] doc add: renormalize is not idempotent for CRCRLF
Quoted 5 lines · Philip Oakley via GitGitGadget
From: Philip Oakley <[email protected]>
Bug report
https://lore.kernel.org/git/AM0PR02MB56357CC96B702244F3271014E8DC9@AM0PR02MB5635.eurprd02.prod.outlook.com/
noted that a file containing /r/r/n needed renormalising twice.
Did you mean backslash, not forward?
Quoted 3 lines
This is by design. Lone CR characters, not paired with an LF, are left unchanged. Note the lack of idempotentness of the "clean" filter in the documentation.
OK.
Quoted 2 lines
Renormalize was introduced at
9472935d81e(add: introduce "--renormalize", Torsten Bögershausen, 2017-11-16)
Does this need to be said "HERE", rather than leaving it to run "git blame" for those who became curious?
Quoted 10 lines
Signed-off-by Philip Oakley <[email protected]>--- Documentation/git-add.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)Documentation/git-add.txt +0
-0
Documentation/git-add.txt for "git add --no-all <pathspec>...", i.e. ignored removed files. · line 192
Quoted 6 lines
Documentation/git-add.txt +2
-1@@ -188,7 +188,8 @@ for "git add --no-all <pathspec>...", i.e. ignored removed files. forcibly add them again to the index. This is useful after changing `core.autocrlf` configuration or the `text` attribute in order to correct files added with wrong CRLF/LF line endings. - This option implies `-u`. + This option implies `-u`. Lone CR characters are untouched, so + cleaning not idempotent. A CRCRLF sequence cleans to CRLF.
Lack of verb BE somewhere.
Do we expect our readers all understand the math-y word? It is not too hard to explain it to math-uninitiated, e.g.
This option implies -u. Note that running renormalize again on the result of running renormalize may make it even "more normal". A CR-CR-LF sequence would first renormalize to CR-LF (the first CR, a lone CR, is left intact, and CR-LF that follows normalizes to LF). If you run renormalize again, the resulting CR-LF will normalize down to LF.
Re: [PATCH 2/4] glossary: add commit graph description
In reply to Philip Oakley via GitGitGadgetDocumentation/glossary-content.txt state in the Git history, by creating a new commit representing the current · line 83
Quoted 6 lines · Philip Oakley via GitGitGadget
+[[def_commit_graph]]commit graph::
Documentation/glossary-content.txt +5
-0+ The commit-graph file is a supplemental data structure that + accelerates commit graph walks. The existing Object Data Base (ODB) + is the definitive commit graph. The "commit-graph" file is stored + either in the .git/objects/info directory or in the info directory + of an alternate object database.
While it says nothing technically incorrect, I suspect "The existing object data base is the definitive commit graph" may invite unneeded confusion.
I think you wanted to say that the DAG formed by traversing the pointers recorded in the objects is the authoritative source of truth and the commit-graph file is merely a precomputed cache and can be safely lost, but I am not sure the above description conveys that to anybody who does not already know it.
The commits in the object data base form a directed acyclic graph (DAG) by commits referring to their parent commits. Pieces of information from individual commit objects that are needed to traverse the DAG are pre-computed in the commit-graph file and stored in ...
is my attempt---I am not very happy or proud about it, but it may be easier to follow.
Thanks.
Quoted 5 lines · Philip Oakley via GitGitGadget
This short series looks to add the basics of the reachability bitmap and commit graph phrases to the glossary of terms. While these techniques are well known to their developers, for some, they are just magic phrases.
The first patch [1/4] is to show OBD as an abbreviation to avoid a UNA [0]
Avoiding unnecessary TLA is even better than avoiding. As I didn't see in the other three patches that we need to use the OBD acronym, perhaps we can omit this step?
Quoted 29 lines
Patch [2/4] provides a basic statement for the Commit-Graph's purpose.
Patch [3/4] provides a similar statement for the reachability bitmaps.
These two patches maybe misses out on some linking information as to the benefits these have and the basics of their heuristic.
Patch [4/4] follows up on a bug report about the lack of idempotence for the `--renormalise' command. See commit message for details.
[0] UNA Un-Named Abbreviation.
Signed-off-by Philip Oakley [email protected]Philip Oakley (4):
glossary: add Object DataBase (ODB) abbreviation
glossary: add commit graph description
glossary: add reachability bitmap description doc add: renormalize is not idempotent for CRCRLFDocumentation/git-add.txt | 3 ++- Documentation/glossary-content.txt | 15 ++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-)base-commit:
30cc8d0f147546d4dd77bf497f4dec51e7265bd8
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1282%2FPhilipOakley%2FGlossary_terms-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1282/PhilipOakley/Glossary_terms-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/1282
Re: [PATCH 4/4] doc add: renormalize is not idempotent for CRCRLF
In reply to Philip Oakley via GitGitGadgetQuoted 8 lines · Philip Oakley via GitGitGadget
From: Philip Oakley <[email protected]>
Bug report
https://lore.kernel.org/git/AM0PR02MB56357CC96B702244F3271014E8DC9@AM0PR02MB5635.eurprd02.prod.outlook.com/
noted that a file containing /r/r/n needed renormalising twice.This is by design. Lone CR characters, not paired with an LF, are left unchanged.
This is all fine.
Quoted 2 lines
Note the lack of idempotentness of the "clean" filter in the documentation.
The clean filter is idempotent, I would claim, see below. You can run it, and re-run, and re-run, there will no other changes. CRLF in the worktree will become LF in the repo,
'lone CR' stay as they are.
In that sense, CRCRLF in the worktree will become CRLF in the repo. You can the renormalize again and again.
The "trick" is that the user has to decide what CRCRLF mean and what should happen in the repo:
CRCRLF in the worktree becomes one line ending (one LF in the repo) or
CRCRLF in the worktree becomes two line endings ( LFLF in the repo)
For a) you can use dos2unix twice.
Or run git add --renormalize followed byrm git.bdfgit restore .
The thing is that we used a combination of different commands
$ git add --renormalize . $ git commit -m "Renormalize bdf.txt" $ rm git.bdf $ git restore . $ git add --renormalize . $ git commit -m "Renormalize a second time bdf.txt"
... to clean up this very situation.
And, if CRCRLF should have become LFLF instead ? Probably a python script is needed to fix this.
(or some other script/program in the language of your choice)
We could argue thatgit add --renormalize is idempotent, but a series of carefully crafted commands is not.
In short, what is missing is the documentation how CRCRLF is handled by Git.
Quoted 14 lines
Renormalize was introduced at
9472935d81e(add: introduce "--renormalize", Torsten Bögershausen, 2017-11-16)Signed-off-by Philip Oakley <[email protected]>--- Documentation/git-add.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)Documentation/git-add.txt +0
-0
Documentation/git-add.txt for "git add --no-all <pathspec>...", i.e. ignored removed files. · line 193
Quoted 7 lines
Documentation/git-add.txt +2
-1@@ -188,7 +188,8 @@ for "git add --no-all <pathspec>...", i.e. ignored removed files. forcibly add them again to the index. This is useful after changing `core.autocrlf` configuration or the `text` attribute in order to correct files added with wrong CRLF/LF line endings. - This option implies `-u`. + This option implies `-u`. Lone CR characters are untouched, so + cleaning not idempotent. A CRCRLF sequence cleans to CRLF.
How about this:
This option implies -u. Lone CR characters are untouched. CRCRLF cleans to CRLF.
Hi Junio,
Quoted 5 lines · Junio C Hamano
Quoted 1 line
The first patch [1/4] is to show OBD as an abbreviation to avoid a UNA [0]
Avoiding unnecessary TLA is even better than avoiding. As I didn't see in the other three patches that we need to use the OBD acronym, perhaps we can omit this step?
This came from seeing ODB in a couple of tech docs (commit-graph and parallel-checkout) and an 'odb' option in pack-redundant, which I should have noted in the commit message.
I'll update the commit message to clarify that we are using that TLA, though we aren't always consistent in our distinctions between concepts and implementation in many places (e.g. Object Store vs Repository; Staging area..; etc.)
TLAs, UNAs, etc. have been a bug-bear of mine from doing large engineering collaborations.
--
Philip
(for completeness;-)
ODB Object Data Base.
TLA Three Letter Abbreviation.
UNA Un-Named Abbreviation.
Re: [PATCH 2/4] glossary: add commit graph description
In reply to Junio C HamanoHi Junio,
Quoted 11 lines · Junio C Hamano
Documentation/glossary-content.txt state in the Git history, by creating a new commit representing the current · line 83
Quoted 6 lines · Philip Oakley via GitGitGadget
+[[def_commit_graph]]commit graph::
Documentation/glossary-content.txt +5
-0+ The commit-graph file is a supplemental data structure that + accelerates commit graph walks. The existing Object Data Base (ODB) + is the definitive commit graph. The "commit-graph" file is stored + either in the .git/objects/info directory or in the info directory + of an alternate object database.While it says nothing technically incorrect, I suspect "The existing object data base is the definitive commit graph" may invite unneeded confusion.
I probably over-shortened the original text I was summarising (technical/commit-graph.txt intro).
Quoted 4 lines
I think you wanted to say that the DAG formed by traversing the pointers recorded in the objects is the authoritative source of truth and the commit-graph file is merely a precomputed cache
.. of that graph. *nod*
Quoted 2 lines
and
can be safely lost,
I wasn't particularly thinking of that aspect .. Perhaps more that it accelerates commit graph walks..
Quoted 11 lines
but I am not sure the above description conveys
that to anybody who does not already know it.The commits in the object data base form a directed acyclic graph (DAG) by commits referring to their parent commits. Pieces of information from individual commit objects that are needed to traverse the DAG are pre-computed in the commit-graph file and stored in ...
is my attempt---I am not very happy or proud about it, but it may be easier to follow.
I wanted to keepseparate from the graph file definition, the rather fuzzy relationship between the overall ODB (staging area, and loads of other stuff), and the way the DAG is generated, which also needs the selected refs to start the traverse..
In a wider context, it's not clear to me just how the commit graph file content is chosen relative to the full depth DAG from all local refs. The reachability bit maps have a similar info gap.
--
Philip
[sorry for erratic responses - currently isolating with covid]
Re: [PATCH 4/4] doc add: renormalize is not idempotent for CRCRLF
In reply to Junio C HamanoQuoted 8 lines · Junio C Hamano
Quoted 5 lines · Philip Oakley via GitGitGadget
From: Philip Oakley <[email protected]>
Bug report
https://lore.kernel.org/git/AM0PR02MB56357CC96B702244F3271014E8DC9@AM0PR02MB5635.eurprd02.prod.outlook.com/
noted that a file containing /r/r/n needed renormalising twice.Did you mean backslash, not forward?
Correct. Too many years of Windows.
Quoted 11 lines
Quoted 4 lines
This is by design. Lone CR characters, not paired with an LF, are left unchanged. Note the lack of idempotentness of the "clean" filter in the documentation.
OK.
Quoted 2 lines
Renormalize was introduced at
9472935d81e(add: introduce "--renormalize", Torsten Bögershausen, 2017-11-16)Does this need to be said "HERE", rather than leaving it to run "git blame" for those who became curious?
It was a misguided reminder to cc Torsten about his recollection of the CRCRLF issue. I'll remove it. I see Torsten has also commented.
Quoted 6 lines
Quoted 6 lines
Signed-off-by Philip Oakley <[email protected]>--- Documentation/git-add.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
Quoted 12 lines
Documentation/git-add.txt for "git add --no-all <pathspec>...", i.e. ignored removed files. · line 192
Quoted 11 lines
Documentation/git-add.txt +2
-1@@ -188,7 +188,8 @@ for "git add --no-all <pathspec>...", i.e. ignored removed files. forcibly add them again to the index. This is useful after changing `core.autocrlf` configuration or the `text` attribute in order to correct files added with wrong CRLF/LF line endings. - This option implies `-u`. + This option implies `-u`. Lone CR characters are untouched, so + cleaning *^* not idempotent. A CRCRLF sequence cleans to CRLF.Lack of verb BE somewhere.
'^' It took me three re-reads to see my mistyping as my head knew what I'd meant to write, I've marked above as a note to self.
Aside: Are there any guides / suggestions / how-to's for on-line reviewing that you can recommend o
Quoted 1 line
Do we expect our readers all understand the math-y word?
Ok. It's mainly used in the test directory, and fsmonitor.h, but not in the user docs.
Quoted 10 lines
It is not
too hard to explain it to math-uninitiated, e.g.This option implies
-u. Note that running renormalize again on the result of running renormalize may make it even "more normal". A CR-CR-LF sequence would first renormalize to CR-LF (the first CR, a lone CR, is left intact, and CR-LF that follows normalizes to LF). If you run renormalize again, the resulting CR-LF will normalize down to LF.
Torsten had a shorter suggestion I'll also look at.
Philip
Re: [PATCH 4/4] doc add: renormalize is not idempotent for CRCRLF
Quoted 7 lines · Philip Oakley
Quoted 3 lines
Review
Quoted 2 lines
(quoted diff) +2
-0+ This option implies `-u`. Lone CR characters are untouched, so + cleaning *^* not idempotent. A CRCRLF sequence cleans to CRLF.Lack of verb BE somewhere.
'^' It took me three re-reads to see my mistyping as my head knew what I'd meant to write, I've marked above as a note to self.
Aside: Are there any guides / suggestions / how-to's for on-line reviewing that you can recommend o
Sorry, but I do not know of any good "trick" to fight against our common tendency to easily miss trivial typoes and thinkos in what we ourselves wrote. We can be surprisingly blind to what a colleague can spot immediately, and that is why it helps to have a thorough read-through by a reviewer with fresh eyes. When I was a more prolific contributor, I sometimes tried to read aloud what I wrote to myself, both docs and code, and caught silly mistakes before sending them out to the list, but I do not recommend it to others.
Re: [PATCH 4/4] doc add: renormalize is not idempotent for CRCRLF
In reply to Torsten BögershausenHi Tortsen,
Thanks for the reply and comments.
Quoted 7 lines · Torsten Bögershausen
Quoted 6 lines · Philip Oakley via GitGitGadget
From: Philip Oakley <[email protected]>
Bug report
https://lore.kernel.org/git/AM0PR02MB56357CC96B702244F3271014E8DC9@AM0PR02MB5635.eurprd02.prod.outlook.com/
noted that a file containing /r/r/n needed renormalising twice.
Quoted 7 lines
Quoted 2 lines
This is by design. Lone CR characters, not paired with an LF, are left unchanged.
This is all fine.
Quoted 2 lines
Note the lack of idempotentness of the "clean" filter in the documentation.
The clean filter is idempotent, I would claim, see below.
I'd disagree, on the basis that any second 'idempotent' cleaning should not change the file content at all. The need for a second clean was the surprise the user had.
Quoted 4 lines
You can run it, and re-run, and re-run, there will no other changes. CRLF in the worktree will become LF in the repo,
'lone CR' stay as they are.
In that sense, CRCRLF in the worktree will become CRLF in the repo.
So the output isn't normalised, and warning messages ensue (if enabled, etc)
Quoted 4 lines
You can the renormalize again and again.
The "trick" is that the user has to decide what CRCRLF mean and what should happen in the repo
.. for which they should be forewarned of the issue.
In this case it was a large repository transfer of legacy data, so little knowledge of how the double CRs occured, but it was a real issue for them.
Quoted 24 lines
:
CRCRLF in the worktree becomes one line ending (one LF in the repo) or
CRCRLF in the worktree becomes two line endings ( LFLF in the repo)For a) you can use dos2unix twice.
Or rungit add --renormalizefollowed byrm git.bdfgit restore .The thing is that we used a combination of different commands
$ git add --renormalize . $ git commit -m "Renormalize bdf.txt" $ rm git.bdf $ git restore . $ git add --renormalize . $ git commit -m "Renormalize a second time bdf.txt"... to clean up this very situation.
And, if CRCRLF should have become LFLF instead ? Probably a python script is needed to fix this.
(or some other script/program in the language of your choice)
Quoted 6 lines
We could argue that
git add --renormalizeis idempotent, but a series of carefully crafted commands is not.In short, what is missing is the documentation how CRCRLF is handled by Git.
*nod*
Quoted 22 lines
Quoted 14 lines
Renormalize was introduced at
9472935d81e(add: introduce "--renormalize", Torsten Bögershausen, 2017-11-16)Signed-off-by Philip Oakley <[email protected]>--- Documentation/git-add.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)Documentation/git-add.txt +0
-0Documentation/git-add.txt for "git add --no-all <pathspec>...", i.e. ignored removed files. · line 192
Quoted 6 lines
Documentation/git-add.txt +2
-1@@ -188,7 +188,8 @@ for "git add --no-all <pathspec>...", i.e. ignored removed files. forcibly add them again to the index. This is useful after changing `core.autocrlf` configuration or the `text` attribute in order to correct files added with wrong CRLF/LF line endings. - This option implies `-u`. + This option implies `-u`. Lone CR characters are untouched, so + cleaning not idempotent. A CRCRLF sequence cleans to CRLF.How about this:
Quoted 1 line
This option implies
-u. Lone CR characters are untouched. CRCRLF cleans to CRLF.
That is probably sufficient. It drops the awkward 'idempotent'. And indicates this edge case, though doesn't highlight that the resultant CRLF still leaves the file only partially renormalised.
I'll reword.
Quoted 1 line
Re: [PATCH 4/4] doc add: renormalize is not idempotent for CRCRLF
In reply to Junio C HamanoQuoted 9 lines · Junio C Hamano
Quoted 7 lines · Philip Oakley
Quoted 3 lines
Review
Quoted 2 lines
(quoted diff) +2
-0+ This option implies `-u`. Lone CR characters are untouched, so + cleaning *^* not idempotent. A CRCRLF sequence cleans to CRLF.Lack of verb BE somewhere.
'^' It took me three re-reads to see my mistyping as my head knew what I'd meant to write, I've marked above as a note to self.
Aside: Are there any guides / suggestions / how-to's for on-line reviewing that you can recommend o
Quoted 8 lines
Sorry, but I do not know of any good "trick" to fight against our common tendency to easily miss trivial typoes and thinkos in what we ourselves wrote. We can be surprisingly blind to what a colleague can spot immediately, and that is why it helps to have a thorough read-through by a reviewer with fresh eyes. When I was a more prolific contributor, I sometimes tried to read aloud what I wrote to myself, both docs and code, and caught silly mistakes before sending them out to the list, but I do not recommend it to others.
Thanks. There does appear to be a lack of literature or articles in this area of on-list reviewing
I've not even seen an list of snippets collated from email advice. Other than the email etiquette's starter for ten on don't top post ;-)
--
Philip
Re: [PATCH 4/4] doc add: renormalize is not idempotent for CRCRLF
In reply to Philip OakleyQuoted 8 lines · Philip Oakley
Quoted 3 lines
How about this:
This option implies
-u. Lone CR characters are untouched. CRCRLF cleans to CRLF.That is probably sufficient. It drops the awkward 'idempotent'. And indicates this edge case, though doesn't highlight that the resultant CRLF still leaves the file only partially renormalised.
I'll reword.
It's been a few weeks since the last activity on this topic. Anything you guys need unblocked to move forward?
Thanks.
Re: [PATCH 4/4] doc add: renormalize is not idempotent for CRCRLF
Quoted 9 lines · Junio C Hamano
Quoted 7 lines · Philip Oakley
Quoted 3 lines
How about this:
This option implies
-u. Lone CR characters are untouched. CRCRLF cleans to CRLF.That is probably sufficient. It drops the awkward 'idempotent'. And indicates this edge case, though doesn't highlight that the resultant CRLF still leaves the file only partially renormalised.
Quoted 7 lines
Quoted 1 line
I'll reword.
It's been a few weeks since the last activity on this topic. Anything you guys need unblocked to move forward?
Thanks.
Not from my point of view. My understanding is, that the short version is OK for everybody:
This option implies -u. Lone CR characters are untouched. CRCRLF cleans to CRLF.
Is it OK to ask you for a local ammend to push this further ?
Re: [PATCH 4/4] doc add: renormalize is not idempotent for CRCRLF
In reply to Junio C HamanoI've unfortunately had some family issue which prevented me doing any work.
If I haven't managed anything by the end of the week. I'd be happy if others took it forward.
Quoted 15 lines · Junio C Hamano
Quoted 8 lines · Philip Oakley
Quoted 3 lines
How about this:
This option implies
-u. Lone CR characters are untouched. CRCRLF cleans to CRLF.That is probably sufficient. It drops the awkward 'idempotent'. And indicates this edge case, though doesn't highlight that the resultant CRLF still leaves the file only partially renormalised.
I'll reword.
It's been a few weeks since the last activity on this topic. Anything you guys need unblocked to move forward?
Thanks.
Re: [PATCH 4/4] doc add: renormalize is not idempotent for CRCRLF
Quoted 1 line · Philip Oakley
I've unfortunately had some family issue which prevented me doing any work.
I hope everything will be well on your side.
Quoted 2 lines
If I haven't managed anything by the end of the week. I'd be happy if others took it forward.
Thanks for letting us know.
Re: [PATCH 4/4] doc add: renormalize is not idempotent for CRCRLF
In reply to Philip OakleyQuoted 1 line · Philip Oakley
I've unfortunately had some family issue which prevented me doing any work.
That is sad to here. I hope that things are getting better in one way or another.
Quoted 3 lines
If I haven't managed anything by the end of the week. I'd be happy if others took it forward.
I can certainly have a look, after the weekend, and continue your work.
v2 cover .. Add extra renormalize information.
In reply to Junio C HamanoThis was [PATCH 4/4] 'doc add: renormalize is not idempotent for CRCRLF' of a GitGitGadget series, which was split off into its own branch po/doc-add-renormalize
Since V1, remove the use of 'idempotent' which is unknown to many. Instead clarify the special case.
Philip Oakley (1):
doc add: renormalize is not idempotent for CRCRLF
Documentation/git-add.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
Signature · 1 line
2.37.1.windows.1
PATCH v2 1/1 doc add: renormalize is not idempotent for CRCRLF
Bug report
https://lore.kernel.org/git/AM0PR02MB56357CC96B702244F3271014E8DC9@AM0PR02MB5635.eurprd02.prod.outlook.com/
noted that a file containing /r/r/n needed renormalising twice.
This is by design. Lone CR characters, not paired with an LF, are left unchanged. Note this limitation of the "clean" filter in the documentation.
Renormalize was introduced at 9472935d81e (add: introduce "--renormalize", Torsten Bögershausen, 2017-11-16)
---
This is V2 of po/doc-add-renormalize, based on commit dc8c8deaa6 (Prepare for 2.36.2, 2022-06-07).
It was [PATCH 4/4] doc add: renormalize is not idempotent for CRCRLF.
git send-email \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
v2-00*
---
Documentation/git-add.txt | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)Documentation/git-add.txt +3 -1
@@ -188,7 +188,9 @@ for "git add --no-all <pathspec>...", i.e. ignored removed files. forcibly add them again to the index. This is useful after changing `core.autocrlf` configuration or the `text` attribute in order to correct files added with wrong CRLF/LF line endings. - This option implies `-u`. + This option implies `-u`. Lone CR characters are untouched, thus + while a CRLF cleans to LF, a CRCRLF sequence is only partially + cleaned to CRLF. --chmod=(+|-)x:: Override the executable bit of the added files. The executable
Signature · 1 line
2.37.1.windows.1
Re: [PATCH v2 1/1] doc add: renormalize is not idempotent for CRCRLF
[]
Documentation/git-add.txt for "git add --no-all <pathspec>...", i.e. ignored removed files. · line 193
Quoted 12 lines
Documentation/git-add.txt +3
-1@@ -188,7 +188,9 @@ for "git add --no-all <pathspec>...", i.e. ignored removed files. forcibly add them again to the index. This is useful after changing `core.autocrlf` configuration or the `text` attribute in order to correct files added with wrong CRLF/LF line endings. - This option implies `-u`. + This option implies `-u`. Lone CR characters are untouched, thus + while a CRLF cleans to LF, a CRCRLF sequence is only partially + cleaned to CRLF.
Thanks, I think this one looks good to me.
Re: [PATCH v2 1/1] doc add: renormalize is not idempotent for CRCRLF
In reply to Philip OakleyDocumentation/git-add.txt for "git add --no-all <pathspec>...", i.e. ignored removed files. · line 193
Quoted 12 lines · Philip Oakley
Documentation/git-add.txt +3
-1@@ -188,7 +188,9 @@ for "git add --no-all <pathspec>...", i.e. ignored removed files. forcibly add them again to the index. This is useful after changing `core.autocrlf` configuration or the `text` attribute in order to correct files added with wrong CRLF/LF line endings. - This option implies `-u`. + This option implies `-u`. Lone CR characters are untouched, thus + while a CRLF cleans to LF, a CRCRLF sequence is only partially + cleaned to CRLF.
Looks perfetly readable and understandable to me.
Thanks, will replace. Let's plan to merge it down soonish.
Re: [PATCH 2/4] glossary: add commit graph description
In reply to Philip OakleyQuoted 14 lines · Philip Oakley
Hi Junio,
Quoted 11 lines · Junio C Hamano
Documentation/glossary-content.txt state in the Git history, by creating a new commit representing the current · line 83
Quoted 6 lines · Philip Oakley via GitGitGadget
+[[def_commit_graph]]commit graph::
Documentation/glossary-content.txt +5
-0+ The commit-graph file is a supplemental data structure that + accelerates commit graph walks. The existing Object Data Base (ODB) + is the definitive commit graph. The "commit-graph" file is stored + either in the .git/objects/info directory or in the info directory + of an alternate object database.While it says nothing technically incorrect, I suspect "The existing object data base is the definitive commit graph" may invite unneeded confusion.
Quoted 2 lines
I probably over-shortened the original text I was summarising (
technical/commit-graph.txtintro).
I was looking to outline the concept and how, therefore, it is different from the reachability bitmaps, and also from the 'canonical' DAG of Git's commit objects.
I hope to have another go in a couple of weeks time.
Quoted 33 lines
Quoted 3 lines
I think you wanted to say that the DAG formed by traversing the pointers recorded in the objects is the authoritative source of truth and the commit-graph file is merely a precomputed cache
.. of that graph. *nod*
Quoted 2 lines
and
can be safely lost,I wasn't particularly thinking of that aspect .. Perhaps more that it accelerates commit graph walks..
Quoted 11 lines
but I am not sure the above description conveys
that to anybody who does not already know it.The commits in the object data base form a directed acyclic graph (DAG) by commits referring to their parent commits. Pieces of information from individual commit objects that are needed to traverse the DAG are pre-computed in the commit-graph file and stored in ...
is my attempt---I am not very happy or proud about it, but it may be easier to follow.
I wanted to keepseparate from the graph file definition, the rather fuzzy relationship between the overall ODB (staging area, and loads of other stuff), and the way the DAG is generated, which also needs the selected refs to start the traverse..
In a wider context, it's not clear to me just how the commit graph file content is chosen relative to the full depth DAG from all local refs. The reachability bit maps have a similar info gap.
--
Philip[sorry for erratic responses - currently isolating with covid]
PATCH v2 2/3 glossary: add "commit graph" description
In reply to Philip OakleyGit has an additional "commit graph" capability that supplements the normal commit object's directed acylic graph (DAG). The supplemental commit graph file is designed for speed of access.
Describe the commit graph both from the normative DAG view point and from the commit graph file perspective.
Also, clarify the link between the branch ref and branch tip by linking to the ref glossary entry, matching this commit graph entry.
--- Documentation/glossary-content.txt | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-)
Documentation/glossary-content.txt +16 -1
@@ -20,7 +20,7 @@ [[def_branch]]branch:: A "branch" is a line of development. The most recent <<def_commit,commit>> on a branch is referred to as the tip of - that branch. The tip of the branch is referenced by a branch + that branch. The tip of the branch is <<def_ref,referenced>> by a branch <<def_head,head>>, which moves forward as additional development is done on the branch. A single Git <<def_repository,repository>> can track an arbitrary number of
@@ -75,6 +75,21 @@ state in the Git history, by creating a new commit representing the current state of the <<def_index,index>> and advancing <<def_HEAD,HEAD>> to point at the new commit. +[[def_commit_graph_general]]commit graph concept, representations and usage:: + A synonym for the <<def_DAG,DAG>> structure formed by + the commits in the object database, <<def_ref,referenced>> by branch tips, + using their <<def_chain,chain>> of linked commits. + This structure is the definitive commit graph. The + graph can be represented in other ways, e.g. the + <<def_commit_graph_file,commit graph file>>. + +[[def_commit_graph_file]]commit graph file:: + The commit-graph file is a supplemental representation of + the <<def_commit_graph_general,commit graph>> which accelerates + commit graph walks. The "commit-graph" file is stored + either in the .git/objects/info directory or in the info directory + of an alternate object database. + [[def_commit_object]]commit object:: An <<def_object,object>> which contains the information about a particular <<def_revision,revision>>, such as <<def_parent,parents>>, committer,
Signature · 1 line
2.38.1.windows.1
PATCH v2 1/3 doc: use 'object database' not ODB or abbreviation
In reply to Philip OakleyThe abbreviation 'ODB' is used in the technical documentation sections for commit-graph and parallel-checkout, along with an 'odb' option in git-pack-redundant, without expansion.
Use 'object database' in full, in those entries. The text has not been reflowed to keep the changes minimal.
While in the glossary for object terms, add the commonoid abbreviation to its entry.
--- Documentation/git-pack-redundant.txt | 2 +- Documentation/glossary-content.txt | 2 +- Documentation/technical/commit-graph.txt | 2 +- Documentation/technical/parallel-checkout.txt | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-)
Documentation/git-pack-redundant.txt +1 -1
@@ -34,7 +34,7 @@ OPTIONS --alt-odb:: Don't require objects present in packs from alternate object - directories to be present in local packs. + database (odb) directories to be present in local packs. --verbose:: Outputs some statistics to stderr. Has a small performance penalty.
Documentation/glossary-content.txt +1 -1
@@ -262,7 +262,7 @@ This commit is referred to as a "merge commit", or sometimes just a identified by its <<def_object_name,object name>>. The objects usually live in `$GIT_DIR/objects/`. -[[def_object_identifier]]object identifier:: +[[def_object_identifier]]object identifier (oid):: Synonym for <<def_object_name,object name>>. [[def_object_name]]object name::
Documentation/technical/commit-graph.txt +1 -1
@@ -17,7 +17,7 @@ There are two main costs here: The commit-graph file is a supplemental data structure that accelerates commit graph walks. If a user downgrades or disables the 'core.commitGraph' -config setting, then the existing ODB is sufficient. The file is stored +config setting, then the existing object database is sufficient. The file is stored as "commit-graph" either in the .git/objects/info directory or in the info directory of an alternate.
Documentation/technical/parallel-checkout.txt +1 -1
@@ -56,7 +56,7 @@ Rejected Multi-Threaded Solution The most "straightforward" implementation would be to spread the set of to-be-updated cache entries across multiple threads. But due to the -thread-unsafe functions in the ODB code, we would have to use locks to +thread-unsafe functions in the object database code, we would have to use locks to coordinate the parallel operation. An early prototype of this solution showed that the multi-threaded checkout would bring performance improvements over the sequential code, but there was still too much lock
Signature · 1 line
2.38.1.windows.1
PATCH v2 3/3 glossary: add reachability bitmap description
In reply to Philip OakleyDescribe the purpose of the reachability bitmap.
--- Documentation/glossary-content.txt | 8 ++++++++ 1 file changed, 8 insertions(+)
Documentation/glossary-content.txt +8 -0
@@ -508,6 +508,14 @@ exclude;; <<def_tree_object,trees>> to the trees or <<def_blob_object,blobs>> that they contain. +[[def_reachability_bitmap]]reachability bitmaps:: + Reachability bitmaps store information about the + <<def_reachable,reachability>> of a selected set of objects in + a packfile, or a multi-pack index (MIDX) to speed up object search. + A repository may have at + most one bitmap. The bitmap may belong to either one pack, or the + repository's multi-pack index (if it exists). + [[def_rebase]]rebase:: To reapply a series of changes from a <<def_branch,branch>> to a different base, and reset the <<def_head,head>> of that branch
Signature · 1 line
2.38.1.windows.1
v2 cover Add some Glossary of terms information
In reply to Philip Oakley via GitGitGadgetwas GitGitGadget #1282,
(in reply to <[email protected]>)
This short series looks to add the basics of the reachability bitmap and commit graph phrases to the glossary of terms. While these techniques are well known to their developers, for some, they are just magic phrases.
[V2] .. since V1
Patch 4/4 has been taken upstream independently, and hence dropped here so we're now just [n/3].
Patch 1/3 Dropped the glossary addition in favour of changing the locations that used ODB (Junio's suggestion). Kept the git pack-redundant's --alt-odb but spelt out 'object database' in full in the man page. The only remaining odbs are within goodbye ;-).
While here, add the (oid) abbreviation to its adjacent entry.
Patch 2/3 Split the 'commit-graph' explanation into two parts to distinguish the speed-up option, from Git's core graph concept of object traversal. Included links to existing terms.
Patch 3/3 Added links to existing terms. Statement for the reachability bitmaps.
added cc: for Stolee (commit-graph) and Abhradeep Chakraborty (Bitmaps) review.
[V1] [GGG PR #1282]
https://lore.kernel.org/git/[email protected]/
The first patch [1/4] is to show OBD as an abbreviation to avoid a UNA [0]
Patch [2/4] provides a basic statement for the Commit-Graph's purpose.
Patch [3/4] provides a similar statement for the reachability bitmaps.
These two patches maybe misses out on some linking information as to the benefits these have and the basics of their heuristic.
Patch [4/4] follows up on a bug report about the lack of idempotence for the `--renormalise' command. See commit message for details.
[0] UNA Un-Named Abbreviation.
Philip Oakley (3):
doc: use 'object database' not ODB or abbreviation
glossary: add "commit graph" description
glossary: add reachability bitmap description
Documentation/git-pack-redundant.txt | 2 +- Documentation/glossary-content.txt | 27 +++++++++++++++++-- Documentation/technical/commit-graph.txt | 2 +- Documentation/technical/parallel-checkout.txt | 2 +- 4 files changed, 28 insertions(+), 5 deletions(-)
Range-diff against v1:
1: 51b55828d5 ! 1: dc0d934b00 glossary: add Object DataBase (ODB) abbreviation
@@ Metadata
Author: Philip Oakley <[email protected]>
## Commit message ##
- glossary: add Object DataBase (ODB) abbreviation
+ doc: use 'object database' not ODB or abbreviation
- ODB abbreviation is used in the technical section without expansion.
- Show the abbreviation in the Glossary.
+ The abbreviation 'ODB' is used in the technical documentation
+ sections for commit-graph and parallel-checkout, along with an
+ 'odb' option in git-pack-redundant, without expansion.
+
+ Use 'object database' in full, in those entries. The text has not
+ been reflowed to keep the changes minimal.
+
+ While in the glossary for object terms, add the commonoid
+ abbreviation to its entry.
- Signed-off-by: Junio C Hamano <[email protected]>
+
+ ## Documentation/git-pack-redundant.txt ## +@@ Documentation/git-pack-redundant.txt: OPTIONS +
+ --alt-odb::
+ Don't require objects present in packs from alternate object
+- directories to be present in local packs.
++ database (odb) directories to be present in local packs.
+
+ --verbose::
+ Outputs some statistics to stderr. Has a small performance penalty.
## Documentation/glossary-content.txt ##
@@ Documentation/glossary-content.txt: This commit is referred to as a "merge commit", or sometimes just a
- <<def_SHA1,SHA-1>> of its contents. Consequently, an
- object cannot be changed.
-
--[[def_object_database]]object database::
-+[[def_object_database]]object database (ODB)::
- Stores a set of "objects", and an individual <<def_object,object>> is
identified by its <<def_object_name,object name>>. The objects usually
live in $GIT_DIR/objects/.
+
+-[[def_object_identifier]]object identifier::
++[[def_object_identifier]]object identifier (oid)::
+ Synonym for <<def_object_name,object name>>.
+
+ [[def_object_name]]object name::
+
+ ## Documentation/technical/commit-graph.txt ##
+@@ Documentation/technical/commit-graph.txt: There are two main costs here:
+
+ The commit-graph file is a supplemental data structure that accelerates
+ commit graph walks. If a user downgrades or disables the 'core.commitGraph'
+-config setting, then the existing ODB is sufficient. The file is stored
++config setting, then the existing object database is sufficient. The file is stored
+ as "commit-graph" either in the .git/objects/info directory or in the info
+ directory of an alternate.
+
+
+ ## Documentation/technical/parallel-checkout.txt ##
+@@ Documentation/technical/parallel-checkout.txt: Rejected Multi-Threaded Solution
+
+ The most "straightforward" implementation would be to spread the set of
+ to-be-updated cache entries across multiple threads. But due to the
+-thread-unsafe functions in the ODB code, we would have to use locks to
++thread-unsafe functions in the object database code, we would have to use locks to
+ coordinate the parallel operation. An early prototype of this solution
+ showed that the multi-threaded checkout would bring performance
+ improvements over the sequential code, but there was still too much lock
2: 6a88bdb7ed ! 2: 77fbf889a5 glossary: add commit graph description
@@ Metadata
Author: Philip Oakley <[email protected]>
## Commit message ##
- glossary: add commit graph description
+ glossary: add "commit graph" description
+
+ Git has an additional "commit graph" capability that supplements the
+ normal commit object's directed acylic graph (DAG). The supplemental
+ commit graph file is designed for speed of access.
+
+ Describe the commit graph both from the normative DAG view point and
+ from the commit graph file perspective.
+
+ Also, clarify the link between the branch ref and branch tip
+ by linking to the ref glossary entry, matching this commit graph
+ entry.
- Signed-off-by: Junio C Hamano <[email protected]>
## Documentation/glossary-content.txt ##
+@@
+ [[def_branch]]branch::
+ A "branch" is a line of development. The most recent
+ <<def_commit,commit>> on a branch is referred to as the tip of
+- that branch. The tip of the branch is referenced by a branch
++ that branch. The tip of the branch is <<def_ref,referenced>> by a branch
+ <<def_head,head>>, which moves forward as additional development
+ is done on the branch. A single Git
+ <<def_repository,repository>> can track an arbitrary number of
@@ Documentation/glossary-content.txt: state in the Git history, by creating a new commit representing the current
state of the <<def_index,index>> and advancing <<def_HEAD,HEAD>>
to point at the new commit.
-+[[def_commit_graph]]commit graph::
-+ The commit-graph file is a supplemental data structure that
-+ accelerates commit graph walks. The existing Object Data Base (ODB)
-+ is the definitive commit graph. The "commit-graph" file is stored
++[[def_commit_graph_general]]commit graph concept, representations and usage::
++ A synonym for the <<def_DAG,DAG>> structure formed by
++ the commits in the object database, <<def_ref,referenced>> by branch tips,
++ using their <<def_chain,chain>> of linked commits.
++ This structure is the definitive commit graph. The
++ graph can be represented in other ways, e.g. the
++ <<def_commit_graph_file,commit graph file>>.
++
++[[def_commit_graph_file]]commit graph file::
++ The commit-graph file is a supplemental representation of
++ the <<def_commit_graph_general,commit graph>> which accelerates
++ commit graph walks. The "commit-graph" file is stored
+ either in the .git/objects/info directory or in the info directory
+ of an alternate object database.
+
3: 564de4c68f ! 3: fde2c58153 glossary: add reachability bitmap description
@@ Metadata
## Commit message ##
glossary: add reachability bitmap description
+ Describe the purpose of the reachability bitmap.
+
- Signed-off-by: Junio C Hamano <[email protected]>
## Documentation/glossary-content.txt ##
@@ Documentation/glossary-content.txt: exclude;;
@@ Documentation/glossary-content.txt: exclude;;
that they contain.
+[[def_reachability_bitmap]]reachability bitmaps::
-+ Reachability bitmaps store information about the set of objects in
-+ a packfile, or a multi-pack index (MIDX). A repository may have at
++ Reachability bitmaps store information about the
++ <<def_reachable,reachability>> of a selected set of objects in
++ a packfile, or a multi-pack index (MIDX) to speed up object search.
++ A repository may have at
+ most one bitmap. The bitmap may belong to either one pack, or the
+ repository's multi-pack index (if it exists).
+
Signature · 1 line
2.38.1.windows.1
Re: [PATCH v2 0/3] Add some Glossary of terms information
Quoted 7 lines · Philip Oakley
was GitGitGadget #1282,
(in reply to <[email protected]>)This short series looks to add the basics of the reachability bitmap and commit graph phrases to the glossary of terms. While these techniques are well known to their developers, for some, they are just magic phrases.
They all looked reasonable to me, but as you sensibly Cc'ed folks who worked on the areas the concepts explained in these patches are the most relevant, these patches would benefit from their inputs, so let's hear them first and then advance the patches to 'next'.
Thanks.
Re: [PATCH v2 3/3] glossary: add reachability bitmap description
In reply to Philip OakleyHey Philip,
Glad that you're working on this :)
Quoted 13 lines · Philip Oakley
Describe the purpose of the reachability bitmap.
Signed-off-by Philip Oakley <[email protected]>--- Documentation/glossary-content.txt | 8 ++++++++ 1 file changed, 8 insertions(+)Documentation/glossary-content.txt +0
-0
Documentation/glossary-content.txt exclude;; · line 514
Quoted 7 lines
Documentation/glossary-content.txt +4
-0@@ -508,6 +508,14 @@ exclude;; <<def_tree_object,trees>> to the trees or <<def_blob_object,blobs>> that they contain. +[[def_reachability_bitmap]]reachability bitmaps:: + Reachability bitmaps store information about the + <<def_reachable,reachability>> of a selected set of objects in + a packfile, or a multi-pack index (MIDX) to speed up object search.
Looks good to me. Initially I thought that we could explain it more but as you already linked the "reachability" here, we don't need to.
Documentation/glossary-content.txt exclude;; · line 518
Quoted 4 lines
Documentation/glossary-content.txt +4
-0+ A repository may have at + most one bitmap. The bitmap may belong to either one pack, or the + repository's multi-pack index (if it exists). +
Small correction here - A repository may have multiple bitmaps (one for each selected commit from the preferred packfile or a multi-pack-index) but it can have only one ".bitmap" file (as of now). Bitmaps for the selected commits are stored in that ".bitmap" file. So I think the below lines (or similar) will work -
The bitmaps are stored in a ".bitmap" file. A repository may have at most one ".bitmap" file. The file may belong to either one pack, or the repository's multi-pack-index (if it exists).
Feel free to rephrase it accordingly.
Thanks :)
Re: [PATCH v2 3/3] glossary: add reachability bitmap description
Quoted 11 lines · Abhradeep Chakraborty
Small correction here - A repository may have multiple bitmaps (one for each selected commit from the preferred packfile or a multi-pack-index) but it can have only one ".bitmap" file (as of now). Bitmaps for the selected commits are stored in that ".bitmap" file. So I think the below lines (or similar) will work -
The bitmaps are stored in a ".bitmap" file. A repository may have at most one ".bitmap" file. The file may belong to either one pack, or the repository's multi-pack-index (if it exists).
Feel free to rephrase it accordingly.
Sounds good to me. Or Philip's original can be tweaked minimally to say "... may have at most one bitmap file (which stores multiple bitmaps)".
Thanks.
Re: [PATCH v2 3/3] glossary: add reachability bitmap description
Quoted 8 lines · Junio C Hamano
Quoted 6 lines · Abhradeep Chakraborty
Small correction here - A repository may have multiple bitmaps (one for each selected commit from the preferred packfile or a multi-pack-index) but it can have only one ".bitmap" file (as of now). Bitmaps for the selected commits are stored in that ".bitmap" file. So I think the below lines (or similar) will work -
Quoted 9 lines
Quoted 5 lines
The bitmaps are stored in a ".bitmap" file. A repository may have at most one ".bitmap" file. The file may belong to either one pack, or the repository's multi-pack-index (if it exists).
Feel free to rephrase it accordingly.
Sounds good to me. Or Philip's original can be tweaked minimally to say "... may have at most one bitmap file (which stores multiple bitmaps)".
Thanks both. I'll tweak the description in a day or so to allow Stolee to comment if required.
P.
Re: [PATCH v2 2/3] glossary: add "commit graph" description
In reply to Philip OakleyQuoted 6 lines · Philip Oakley
Git has an additional "commit graph" capability that supplements the normal commit object's directed acylic graph (DAG). The supplemental commit graph file is designed for speed of access.
Describe the commit graph both from the normative DAG view point and from the commit graph file perspective.
One way to help keep the general term and the file separate is to use different notation. "commit graph" (with a space, no formatting) is the DAG. "commit-graph" (with a dash, code formatting) is the file (and its format).
Quoted 5 lines
+[[def_commit_graph_general]]commit graph concept, representations and usage::
Documentation/glossary-content.txt +4
-0+ A synonym for the <<def_DAG,DAG>> structure formed by + the commits in the object database, <<def_ref,referenced>> by branch tips, + using their <<def_chain,chain>> of linked commits. + This structure is the definitive commit graph. The
Documentation/glossary-content.txt state in the Git history, by creating a new commit representing the current · line 92
Quoted 10 lines
Documentation/glossary-content.txt +10
-0+ graph can be represented in other ways, e.g. the + <<def_commit_graph_file,commit graph file>>. + +[[def_commit_graph_file]]commit graph file:: + The commit-graph file is a supplemental representation of + the <<def_commit_graph_general,commit graph>> which accelerates + commit graph walks. The "commit-graph" file is stored + either in the .git/objects/info directory or in the info directory + of an alternate object database. +
So this would become:
[[def_commit_graph_file]]commit-graph file::
The commit-graph file is a supplemental representation of the <<def_commit_graph_general,commit graph>> which accelerates commit graph walks. The commit-graph file is stored either in the .git/objects/info directory or in the info directory of an alternate object database.
(I did some extra style and word-wrapping changes, too.)
Other than these nits, I find this to be a clear description.
Thanks,
-Stolee
Re: [PATCH v2 3/3] glossary: add reachability bitmap description
In reply to Philip OakleyQuoted 13 lines · Philip Oakley
Quoted 12 lines · Junio C Hamano
Quoted 10 lines · Abhradeep Chakraborty
Small correction here - A repository may have multiple bitmaps (one for each selected commit from the preferred packfile or a multi-pack-index) but it can have only one ".bitmap" file (as of now). Bitmaps for the selected commits are stored in that ".bitmap" file. So I think the below lines (or similar) will work -
The bitmaps are stored in a ".bitmap" file. A repository may have at most one ".bitmap" file. The file may belong to either one pack, or the repository's multi-pack-index (if it exists).
Quoted 7 lines
Quoted 5 lines
Quoted 1 line
Feel free to rephrase it accordingly.
Sounds good to me. Or Philip's original can be tweaked minimally to say "... may have at most one bitmap file (which stores multiple bitmaps)".
Thanks both. I'll tweak the description in a day or so to allow Stolee to comment if required.
I added my comments about the commit-graph file, and agree with Abhradeep's suggestions here.
Adding Taylor as a possible reviewer, too.
The one thing I will say is that there can be multiple .bitmap files, but Git will only use one of them. Not sure if that is worth being pedantic about here, though.
We'll need to keep this glossary section in mind in case things change (such as "at most one bitmap file").
Thanks,
-Stolee
Re: [PATCH v2 3/3] glossary: add reachability bitmap description
Quoted 3 lines · Derrick Stolee
The one thing I will say is that there can be multiple .bitmap files, but Git will only use one of them. Not sure if that is worth being pedantic about here, though.
That matches my understanding, but "can be" is less of the norm these days, no? "repack -b" would refuse without "-a" so we may have more than one by accident, or am I missing a common scenario that we do perfectly normal things and still end up with multiple?
I agree with you that it probably is a good idea to say there can be, so that the readers do not have to alarmed.
Only one '.bitmap' file (which stores multiple reachability bitmaps) per repository is used in a repository (note. it is not wrong to have more than one). The bitmap file may belong to either one pack, or the repository's multi-pack index (if it exists).
But then the readers who do have more than one would next think "how do I get rid of the ones that are not used? they are wasting my precious disk space". So I also am not sure if it helps to write more. "It is generally true that.." white lie may be better than technical correctness in this case.
Quoted 2 lines
We'll need to keep this glossary section in mind in case things change (such as "at most one bitmap file").
True.
Thanks.
Re: [PATCH v2 2/3] glossary: add "commit graph" description
In reply to Derrick StoleeQuoted 11 lines · Derrick Stolee
Quoted 6 lines · Philip Oakley
Git has an additional "commit graph" capability that supplements the normal commit object's directed acylic graph (DAG). The supplemental commit graph file is designed for speed of access.
Describe the commit graph both from the normative DAG view point and from the commit graph file perspective.
One way to help keep the general term and the file separate is to use different notation. "commit graph" (with a space, no formatting) is the DAG. "
commit-graph" (with a dash, code formatting) is the file (and its format).
I did want to have separate entries to make clear the distinction at this level.
The use of the hyphenation is good, and there are only a few places where that isn't followed, so I'll specifically call out the use of hyphenation, and add a patch to update the few places that used the generic term inappropriately.
Using the code formatting for commit-graph would have been extensive.,
Quoted 17 lines
Quoted 5 lines
+[[def_commit_graph_general]]commit graph concept, representations and usage::
Documentation/glossary-content.txt +4
-0+ A synonym for the <<def_DAG,DAG>> structure formed by + the commits in the object database, <<def_ref,referenced>> by branch tips, + using their <<def_chain,chain>> of linked commits. + This structure is the definitive commit graph. TheDocumentation/glossary-content.txt state in the Git history, by creating a new commit representing the current · line 92
Quoted 10 lines
Documentation/glossary-content.txt +10
-0+ graph can be represented in other ways, e.g. the + <<def_commit_graph_file,commit graph file>>. + +[[def_commit_graph_file]]commit graph file:: + The commit-graph file is a supplemental representation of + the <<def_commit_graph_general,commit graph>> which accelerates + commit graph walks. The "commit-graph" file is stored + either in the .git/objects/info directory or in the info directory + of an alternate object database. +So this would become:
Quoted 8 lines
[[
def_commit_graph_file]]commit-graphfile::
Thecommit-graphfile is a supplemental representation of the <<def_commit_graph_general,commit graph>> which accelerates commit graph walks. Thecommit-graphfile is stored either in the.git/objects/infodirectory or in theinfodirectory of an alternate object database.(I did some extra style and word-wrapping changes, too.)
I've used some of that. Thanks.
Philip
Quoted 5 lines
Other than these nits, I find this to be a clear description.
Thanks,
-Stolee
Re: [PATCH v2 3/3] glossary: add reachability bitmap description
In reply to Derrick StoleeQuoted 30 lines · Derrick Stolee
Quoted 13 lines · Philip Oakley
Quoted 12 lines · Junio C Hamano
Quoted 10 lines · Abhradeep Chakraborty
Small correction here - A repository may have multiple bitmaps (one for each selected commit from the preferred packfile or a multi-pack-index) but it can have only one ".bitmap" file (as of now). Bitmaps for the selected commits are stored in that ".bitmap" file. So I think the below lines (or similar) will work -
The bitmaps are stored in a ".bitmap" file. A repository may have at most one ".bitmap" file. The file may belong to either one pack, or the repository's multi-pack-index (if it exists).
Quoted 7 lines
Quoted 5 lines
Quoted 1 line
Feel free to rephrase it accordingly.
Sounds good to me. Or Philip's original can be tweaked minimally to say "... may have at most one bitmap file (which stores multiple bitmaps)".
Thanks both. I'll tweak the description in a day or so to allow Stolee to comment if required.
I added my comments about the commit-graph file, and agree with Abhradeep's suggestions here.
Adding Taylor as a possible reviewer, too.
The one thing I will say is that there can be multiple .bitmap files, but Git will only use one of them. Not sure if that is worth being pedantic about here, though.
Quoted 5 lines
We'll need to keep this glossary section in mind in case things change (such as "at most one bitmap file").
Thanks,
-Stolee
I've gone with the phrase "at most one bitmap file in use." here.
The updated series should be sent shortly.
Philip.
PATCH v3 1/4 doc: use 'object database' not ODB or abbreviation
In reply to Philip OakleyThe abbreviation 'ODB' is used in the technical documentation sections for commit-graph and parallel-checkout, along with an 'odb' option in git-pack-redundant, without expansion.
Use 'object database' in full, in those entries. The text has not been reflowed to keep the changes minimal.
While in the glossary for object terms, add the commonoid abbreviation to its entry.
--- Documentation/git-pack-redundant.txt | 2 +- Documentation/glossary-content.txt | 2 +- Documentation/technical/commit-graph.txt | 2 +- Documentation/technical/parallel-checkout.txt | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-)
Documentation/git-pack-redundant.txt +1 -1
@@ -34,7 +34,7 @@ OPTIONS --alt-odb:: Don't require objects present in packs from alternate object - directories to be present in local packs. + database (odb) directories to be present in local packs. --verbose:: Outputs some statistics to stderr. Has a small performance penalty.
Documentation/glossary-content.txt +1 -1
@@ -262,7 +262,7 @@ This commit is referred to as a "merge commit", or sometimes just a identified by its <<def_object_name,object name>>. The objects usually live in `$GIT_DIR/objects/`. -[[def_object_identifier]]object identifier:: +[[def_object_identifier]]object identifier (oid):: Synonym for <<def_object_name,object name>>. [[def_object_name]]object name::
Documentation/technical/commit-graph.txt +1 -1
@@ -17,7 +17,7 @@ There are two main costs here: The commit-graph file is a supplemental data structure that accelerates commit graph walks. If a user downgrades or disables the 'core.commitGraph' -config setting, then the existing ODB is sufficient. The file is stored +config setting, then the existing object database is sufficient. The file is stored as "commit-graph" either in the .git/objects/info directory or in the info directory of an alternate.
Documentation/technical/parallel-checkout.txt +1 -1
@@ -56,7 +56,7 @@ Rejected Multi-Threaded Solution The most "straightforward" implementation would be to spread the set of to-be-updated cache entries across multiple threads. But due to the -thread-unsafe functions in the ODB code, we would have to use locks to +thread-unsafe functions in the object database code, we would have to use locks to coordinate the parallel operation. An early prototype of this solution showed that the multi-threaded checkout would bring performance improvements over the sequential code, but there was still too much lock
Signature · 1 line
2.38.1.windows.1
PATCH v3 2/4 glossary: add "commit graph" description
In reply to Philip OakleyGit has an additional "commit graph" capability that supplements the normal commit object's directed acyclic graph (DAG). The supplemental commit graph file is designed for speed of access.
Describe the commit graph both from the normative DAG view point and from the commit graph file perspective.
Also, clarify the link between the branch ref and branch tip by linking to the ref glossary entry, matching this commit graph entry.
The commit-graph file is also distinguished by its hyphenation.
Subsequent commit catches the few cases where the hyphenation of commit-graph was missing.
--- Documentation/glossary-content.txt | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-)
Documentation/glossary-content.txt +16 -1
@@ -20,7 +20,7 @@ [[def_branch]]branch:: A "branch" is a line of development. The most recent <<def_commit,commit>> on a branch is referred to as the tip of - that branch. The tip of the branch is referenced by a branch + that branch. The tip of the branch is <<def_ref,referenced>> by a branch <<def_head,head>>, which moves forward as additional development is done on the branch. A single Git <<def_repository,repository>> can track an arbitrary number of
@@ -75,6 +75,21 @@ state in the Git history, by creating a new commit representing the current state of the <<def_index,index>> and advancing <<def_HEAD,HEAD>> to point at the new commit. +[[def_commit_graph_general]]commit graph concept, representations and usage:: + A synonym for the <<def_DAG,DAG>> structure formed by the commits + in the object database, <<def_ref,referenced>> by branch tips, + using their <<def_chain,chain>> of linked commits. + This structure is the definitive commit graph. The + graph can be represented in other ways, e.g. the + <<def_commit_graph_file,"commit-graph" file>>. + +[[def_commit_graph_file]]commit-graph file:: + The "commit-graph" (normally hyphenated) file is a supplemental + representation of the <<def_commit_graph_general,commit graph>> + which accelerates commit graph walks. The "commit-graph" file is + stored either in the .git/objects/info directory or in the info + directory of an alternate object database. + [[def_commit_object]]commit object:: An <<def_object,object>> which contains the information about a particular <<def_revision,revision>>, such as <<def_parent,parents>>, committer,
Signature · 1 line
2.38.1.windows.1
v3 cover Add some Glossary of terms information
In reply to Philip Oakley(in reply to <[email protected]>
This short series looks to add the basics of the reachability bitmap and commit graph phrases to the glossary of terms. While these techniques are well known to their developers, for some, they are just magic phrases.
[V3] .. since V2
1/4 Unchanged.
2/4 The distinction between the generic 'commit graph' of the DAG and the implementation specifics of 'commit-graph' file has been retained for the glossary.
However the deliberate hyphenation has been included, and a fourth patch added to maintain the consistency of 'commit-graph' in other documents.
3/4 Tweaks & links applied to Reachability patch.
4/4 New - maintain the consistency of 'commit-graph' in other documents.
[V2] .. since V1
was GitGitGadget #1282,
(in reply to <[email protected]>) Patch 4/4 has been taken upstream independently, and hence dropped here so we're now just [n/3].
Patch 1/3 Dropped the glossary addition in favour of changing the locations that used ODB (Junio's suggestion). Kept the git pack-redundant's --alt-odb but spelt out 'object database' in full in the man page. The only remaining odbs are within goodbye ;-).
While here, add the (oid) abbreviation to its adjacent entry.
Patch 2/3 Split the 'commit-graph' explanation into two parts to distinguish the speed-up option, from Git's core graph concept of object traversal. Included links to existing terms.
Patch 3/3 Added links to existing terms. Statement for the reachability bitmaps.
added cc: for Stolee (commit-graph) and Abhradeep Chakraborty (Bitmaps) review.
[V1] [GGG PR #1282]
https://lore.kernel.org/git/[email protected]/
The first patch [1/4] is to show OBD as an abbreviation to avoid a UNA [0]
Patch [2/4] provides a basic statement for the Commit-Graph's purpose.
Patch [3/4] provides a similar statement for the reachability bitmaps.
These two patches maybe misses out on some linking information as to the benefits these have and the basics of their heuristic.
Patch [4/4] follows up on a bug report about the lack of idempotence for the `--renormalise' command. See commit message for details.
[0] UNA Un-Named Abbreviation.
Philip Oakley (4):
doc: use 'object database' not ODB or abbreviation
glossary: add "commit graph" description
glossary: add reachability bitmap description
doc: use "commit-graph" hyphenation consistently
Documentation/config/core.txt | 2 +- Documentation/git-pack-redundant.txt | 2 +- Documentation/gitformat-commit-graph.txt | 6 ++--- Documentation/glossary-content.txt | 27 +++++++++++++++++-- Documentation/technical/commit-graph.txt | 8 +++--- Documentation/technical/parallel-checkout.txt | 2 +- 6 files changed, 35 insertions(+), 12 deletions(-)
Range-diff against remotes/gitster/po/glossary-around-traversal (v2?):
1: de164ab78b ! 1: 748b15345e doc: use 'object database' not ODB or abbreviation
@@ Commit message
abbreviation to its entry.
- Signed-off-by: Junio C Hamano <[email protected]>
## Documentation/git-pack-redundant.txt ##
@@ Documentation/git-pack-redundant.txt: OPTIONS
2: f677d57699 ! 2: 052a9568e7 glossary: add "commit graph" description
@@ Commit message
glossary: add "commit graph" description
Git has an additional "commit graph" capability that supplements the
- normal commit object's directed acylic graph (DAG). The supplemental
+ normal commit object's directed acyclic graph (DAG). The supplemental
commit graph file is designed for speed of access.
Describe the commit graph both from the normative DAG view point and
@@ Commit message
by linking to the ref glossary entry, matching this commit graph entry.
+ The commit-graph file is also distinguished by its hyphenation.
+
+ Subsequent commit catches the few cases where the hyphenation of
+ commit-graph was missing.
+
- Signed-off-by: Junio C Hamano <[email protected]>
## Documentation/glossary-content.txt ##
@@
@@ Documentation/glossary-content.txt: state in the Git history, by creating a new
to point at the new commit.
+[[def_commit_graph_general]]commit graph concept, representations and usage::
-+ A synonym for the <<def_DAG,DAG>> structure formed by
-+ the commits in the object database, <<def_ref,referenced>> by branch tips,
++ A synonym for the <<def_DAG,DAG>> structure formed by the commits
++ in the object database, <<def_ref,referenced>> by branch tips,
+ using their <<def_chain,chain>> of linked commits.
+ This structure is the definitive commit graph. The
+ graph can be represented in other ways, e.g. the
-+ <<def_commit_graph_file,commit graph file>>.
++ <<def_commit_graph_file,"commit-graph" file>>.
+
-+[[def_commit_graph_file]]commit graph file::
-+ The commit-graph file is a supplemental representation of
-+ the <<def_commit_graph_general,commit graph>> which accelerates
-+ commit graph walks. The "commit-graph" file is stored
-+ either in the .git/objects/info directory or in the info directory
-+ of an alternate object database.
++[[def_commit_graph_file]]commit-graph file::
++ The "commit-graph" (normally hyphenated) file is a supplemental
++ representation of the <<def_commit_graph_general,commit graph>>
++ which accelerates commit graph walks. The "commit-graph" file is
++ stored either in the .git/objects/info directory or in the info
++ directory of an alternate object database.
+
[[def_commit_object]]commit object::
An <<def_object,object>> which contains the information about a
3: 39e9a282fc ! 3: d56234b70c glossary: add reachability bitmap description
@@ Commit message
Describe the purpose of the reachability bitmap.
- Signed-off-by: Junio C Hamano <[email protected]>
## Documentation/glossary-content.txt ##
@@ Documentation/glossary-content.txt: exclude;;
@@ Documentation/glossary-content.txt: exclude;;
+[[def_reachability_bitmap]]reachability bitmaps::
+ Reachability bitmaps store information about the
-+ <<def_reachable,reachability>> of a selected set of objects in
-+ a packfile, or a multi-pack index (MIDX) to speed up object search.
-+ A repository may have at
-+ most one bitmap. The bitmap may belong to either one pack, or the
-+ repository's multi-pack index (if it exists).
++ <<def_reachable,reachability>> of a selected set of commits in
++ a packfile, or a multi-pack index (MIDX), to speed up object search.
++ The bitmaps are stored in a ".bitmap" file. A repository may have at
++ most one bitmap file in use. The bitmap file may belong to either one
++ pack, or the repository's multi-pack index (if it exists).
+
[[def_rebase]]rebase::
To reapply a series of changes from a <<def_branch,branch>> to a
-: ---------- > 4: 87686e63f9 doc: use "commit-graph" hyphenation consistently
Signature · 1 line
2.38.1.windows.1
PATCH v3 3/4 glossary: add reachability bitmap description
Describe the purpose of the reachability bitmap.
--- Documentation/glossary-content.txt | 8 ++++++++ 1 file changed, 8 insertions(+)
Documentation/glossary-content.txt +8 -0
@@ -508,6 +508,14 @@ exclude;; <<def_tree_object,trees>> to the trees or <<def_blob_object,blobs>> that they contain. +[[def_reachability_bitmap]]reachability bitmaps:: + Reachability bitmaps store information about the + <<def_reachable,reachability>> of a selected set of commits in + a packfile, or a multi-pack index (MIDX), to speed up object search. + The bitmaps are stored in a ".bitmap" file. A repository may have at + most one bitmap file in use. The bitmap file may belong to either one + pack, or the repository's multi-pack index (if it exists). + [[def_rebase]]rebase:: To reapply a series of changes from a <<def_branch,branch>> to a different base, and reset the <<def_head,head>> of that branch
Signature · 1 line
2.38.1.windows.1
PATCH v3 4/4 doc: use "commit-graph" hyphenation consistently
In reply to Philip OakleyNote, historical release notes have not been updated.
# Conflicts:
# Documentation/gitformat-commit-graph.txt
--- Documentation/config/core.txt | 2 +- Documentation/gitformat-commit-graph.txt | 6 +++--- Documentation/technical/commit-graph.txt | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-)
Documentation/config/core.txt +1 -1
@@ -618,7 +618,7 @@ but risks losing recent work in the event of an unclean system shutdown. * `loose-object` hardens objects added to the repo in loose-object form. * `pack` hardens objects added to the repo in packfile form. * `pack-metadata` hardens packfile bitmaps and indexes. -* `commit-graph` hardens the commit graph file. +* `commit-graph` hardens the commit-graph file. * `index` hardens the index when it is modified. * `objects` is an aggregate option that is equivalent to `loose-object,pack`.
Documentation/gitformat-commit-graph.txt +3 -3
@@ -3,7 +3,7 @@ gitformat-commit-graph(5) NAME ---- -gitformat-commit-graph - Git commit graph format +gitformat-commit-graph - Git commit-graph format SYNOPSIS --------
@@ -14,7 +14,7 @@ $GIT_DIR/objects/info/commit-graphs/* DESCRIPTION ----------- -The Git commit graph stores a list of commit OIDs and some associated +The Git commit-graph stores a list of commit OIDs and some associated metadata, including: - The generation number of the commit.
@@ -34,7 +34,7 @@ corresponding to the array position within the list of commit OIDs. Due to some special constants we use to track parents, we can store at most (1 << 30) + (1 << 29) + (1 << 28) - 1 (around 1.8 billion) commits. -== Commit graph files have the following format: +== Commit-graph files have the following format: In order to allow extensions that add extra data to the graph, we organize the body into "chunks" and provide a binary lookup table at the beginning
Documentation/technical/commit-graph.txt +3 -3
@@ -1,4 +1,4 @@ -Git Commit Graph Design Notes +Git Commit-Graph Design Notes ============================= Git walks the commit graph for many reasons, including:
@@ -95,7 +95,7 @@ with default order), but is not used when the topological order is required (such as merge base calculations, "git log --graph"). In practice, we expect some commits to be created recently and not stored -in the commit graph. We can treat these commits as having "infinite" +in the commit-graph. We can treat these commits as having "infinite" generation number and walk until reaching commits with known generation number.
@@ -149,7 +149,7 @@ Design Details helpful for these clones, anyway. The commit-graph will not be read or written when shallow commits are present. -Commit Graphs Chains +Commit-Graphs Chains -------------------- Typically, repos grow with near-constant velocity (commits per day). Over time,
Signature · 1 line
2.38.1.windows.1
Re: [PATCH v3 0/4] Add some Glossary of terms information
In reply to Philip OakleyQuoted 6 lines · Philip Oakley
(in reply to <[email protected]>
This short series looks to add the basics of the reachability bitmap and commit graph phrases to the glossary of terms. While these techniques are well known to their developers, for some, they are just magic phrases.
Thanks, the updated round looks good to me. I applied these on top of the tip of master instead of the existing merge base (which was dc8c8deaa6b (Prepare for 2.36.2, 2022-06-07)).
Will queue.
Thanks,
Taylor
Re: [PATCH v3 0/4] Add some Glossary of terms information
Quoted 7 lines · Taylor Blau
Quoted 6 lines · Philip Oakley
(in reply to <[email protected]>
This short series looks to add the basics of the reachability bitmap and commit graph phrases to the glossary of terms. While these techniques are well known to their developers, for some, they are just magic phrases.
Quoted 8 lines
Thanks, the updated round looks good to me. I applied these on top of the tip of master instead of the existing merge base (which was
dc8c8deaa6b(Prepare for 2.36.2, 2022-06-07)).Will queue.
Thanks,
Taylor
Thanks!
Philip