mirror of
https://github.com/go-gitea/gitea.git
synced 2024-12-23 15:08:11 +08:00
08bf443016
* Inital routes to git refs api * Git refs API implementation * Update swagger * Fix copyright * Make swagger happy add basic test * Fix test * Fix test again :)
35 lines
1.4 KiB
Go
35 lines
1.4 KiB
Go
/*
|
|
Package merkletrie provides support for n-ary trees that are at the same
|
|
time Merkle trees and Radix trees (tries).
|
|
|
|
Git trees are Radix n-ary trees in virtue of the names of their
|
|
tree entries. At the same time, git trees are Merkle trees thanks to
|
|
their hashes.
|
|
|
|
This package defines Merkle tries as nodes that should have:
|
|
|
|
- a hash: the Merkle part of the Merkle trie
|
|
|
|
- a key: the Radix part of the Merkle trie
|
|
|
|
The Merkle hash condition is not enforced by this package though. This
|
|
means that the hash of a node doesn't have to take into account the hashes of
|
|
their children, which is good for testing purposes.
|
|
|
|
Nodes in the Merkle trie are abstracted by the Noder interface. The
|
|
intended use is that git trees implements this interface, either
|
|
directly or using a simple wrapper.
|
|
|
|
This package provides an iterator for merkletries that can skip whole
|
|
directory-like noders and an efficient merkletrie comparison algorithm.
|
|
|
|
When comparing git trees, the simple approach of alphabetically sorting
|
|
their elements and comparing the resulting lists is too slow as it
|
|
depends linearly on the number of files in the trees: When a directory
|
|
has lots of files but none of them has been modified, this approach is
|
|
very expensive. We can do better by prunning whole directories that
|
|
have not change, just by looking at their hashes. This package provides
|
|
the tools to do exactly that.
|
|
*/
|
|
package merkletrie
|