- types to represent hash digests to identify git objects.
- used to abstract over different kinds of hashes, like SHA1 and the upcoming SHA256
- API documentation
- Some examples
- decode (zero-copy) borrowed objects
- commit
- tree
- tag
- encode owned objects
- commit
- tree
- tag
- transform borrowed to owned objects
- API documentation
- Some examples
- loose objects
- traverse
- read
- into memory
- streaming
- verify checksum
- streaming write for blobs
- buffer write for small in-memory objects/non-blobs to bring IO down to open-read-close == 3 syscalls
- packs
- traverse pack index
- 'object' abstraction
- decode (zero copy)
- verify checksum
- simple and fast pack traversal
- decode
- full objects
- deltified objects
- streaming
- decode a pack from
Read
input -
Read
toIterator
of entries- read as is, verify hash, and restore partial packs
- create index from pack alone (much faster than git)
- resolve 'thin' packs
- decode a pack from
- encode
- Add support for zlib-ng for 2.5x compression performance and 20% faster decompression
- create new pack
- create 'thin' pack
- verify pack with statistics
- brute force - less memory
- indexed - faster, but more memory
- advanced
- Multi-Pack index file (MIDX)
- 'bitmap' file
- API documentation
- Some examples
- sink
- write objects and obtain id
- alternates
- database that act as link to other known git ODBs on disk
- safe with cycles and recursive configurations
- multi-line with comments and quotes
- multi-odb
- an ODB for object lookup from multiple lower level ODB at once
- promisor
- It's vague, but these seems to be like index files allowing to fetch objects from a server on demand.
- As documented here: https://www.git-scm.com/docs/git-clone#_git_urls
- parse
- ssh URLs and SCP like syntax
- file, git, and SSH
- paths (OS paths, without need for UTF-8)
- username expansion for ssh and git urls
- convert URL to string
- API documentation
- Some examples
- abstract over protocol versions to allow delegates to deal only with a single way of doing things
- credentials
- via git-credentials
- via pure Rust implementation if no git is installed
- fetch & clone
- detailed progress
- control credentials provider to fill, approve and reject
- command: ls-ref
- parse V1 refs as provided during handshake
- parse V2 refs
- handle empty refs, AKA PKT-LINE(zero-id SP "capabilities^{}" NUL capability-list)
- initialize and validate command arguments and features sanely
- abort early for ls-remote capabilities
- packfile negotiation
- delegate can support for all fetch features, including shallow, deepen, etc.
- receive parsed shallow refs
- push
- API documentation
- Some examples
- PKT-Line
- encode
- decode (zero-copy)
- error line
- V2 additions
- side-band mode
-
Read
from packet line with (optional) progress support via sidebands -
Write
with built-in packet line encoding - API documentation
- Some examples
- No matter what we do here, timeouts must be supported to prevent hanging forever and to make interrupts destructor-safe.
- client
- general purpose
connect(…)
for clients- file:// launches service application
- ssh:// launches service application in a remote shell using ssh
- git:// establishes a tcp connection to a git daemon
- http(s):// establishes connections to web server
- pass context for scheme specific configuration, like timeouts
- git://
- V1 handshake
- send values + receive data with sidebands
-
support for receiving 'shallow' refs in case the remote repository is shallow itself (I presume)- Since V2 doesn't seem to support that, let's skip this until there is an actual need. No completionist :D
- V2 handshake
- send command request, receive response with sideband support
- V1 handshake
- http(s)://
- set identity for basic authentication
- V1 handshake
- send values + receive data with sidebands
- V2 handshake
- send command request, receive response with sideband support
-
'dumb'- we opt out using this protocol seems too slow to be useful, unless it downloads entire packs for clones?
- authentication failures are communicated by io::ErrorKind::PermissionDenied, allowing other layers to retry with authentication
- general purpose
- server
- general purpose
accept(…)
for servers
- general purpose
- API documentation
- Some examples
- read and write a git-index file
- add and remove entries
- API documentation
- Some examples
- read-only access
- Graph lookup of commit information to obtain timestamps, generation and parents, and extra edges
- Bloom filter index
- Bloom filter data
- create and update graphs and graph files
- API documentation
- Some examples
- read
- line-wise parsing with decent error messages
- decode value
- boolean
- integer
- color
- path (incl. resolution)
- include
- includeIf
- write
- keep comments and whitespace, and only change lines that are affected by actual changes, to allow truly non-destructive editing
-
Config
type which integrates multiple files into one interface to support system, user and repository levels for config files - API documentation
- Some examples
- initialize
- Proper configuration depending on platform (e.g. ignorecase, filemode, …)
- All mutations are multi-process safe and this is tested and configurable (i.e. abort or wait if lock is encountered)
- Signed commits and tags
- clone
- shallow
- namespaces support
- sparse checkout support
- execute hooks
- .gitignore handling
- checkout/stage conversions clean + smudge as in .gitattributes
- rev-parsing and ref history
- worktree
- remotes with push and pull
- configuration
- merging
- stashing
- Use Commit Graph to speed up certain queries
- API documentation
- Some examples
- create a bundle from an archive
- extract a branch from a bundle into a repository
- API documentation
- Some examples
- Handle symbolic references and packed references
- discover them in typical folder structures
- name validation
- Support for the reftable, see here for a Go/C implementation
- Prepare code for arrival of longer hashes like Sha256. It's part of the V2 proposal
- API documentation
- Some examples
- diffing of git-object::Tree structures
- diffing, merging, working with hunks of data
- find differences between various states, i.e. index, working tree, commit-tree
- Parallel stat calls to check/update objects in index
- API documentation with examples
- interrupt-handler feature toggle
- Interruption for computations when receiving SIGTERM and SIGINT
- can be entirely didsabled with the disable-interrupts feature toggle
- io-pipe feature toggle
- a unix like pipeline for bytes
- parallel feature toggle
- When on…
in_parallel
join
- When off all functions execute serially
- When on…
- fast-sha1
- provides a faster SHA1 implementation using CPU intrinsics
- API documentation
- a terminal user interface seeking to replace and improve on
tig