These are intended to help digest the protocol definitions for tvix- store, and how they tie into the whole concept. Co-Authored-By: Vincent Ambo <mail@tazj.in> Change-Id: Ic1ba3ba41ef599209453f15d0ac2e07a6144bcca Reviewed-on: https://cl.tvl.fyi/c/depot/+/7439 Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
		
			
				
	
	
		
			50 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # //tvix/store/docs/castore.md
 | |
| 
 | |
| This provides some more notes on the fields used in castore.proto.
 | |
| 
 | |
| It's meant to supplement `//tvix/store/docs/api.md`.
 | |
| 
 | |
| ## Directory message
 | |
| `Directory` messages use the blake3 hash of their canonical protobuf
 | |
| serialization as its identifier.
 | |
| 
 | |
| A `Directory` message contains three lists, `directories`, `files` and
 | |
| `symlinks`, holding `DirectoryNode`, `FileNode` and `SymlinkNode` messages
 | |
| respectively. They describe all the direct child elements that are contained in
 | |
| a directory.
 | |
| 
 | |
| All three message types have a `name` field, specifying the (base)name of the
 | |
| element (which MUST not contain slashes or null bytes, and MUST not be '.' or '..').
 | |
| For reproducibility reasons, the lists MUST be sorted by that name and also
 | |
| MUST be unique across all three lists.
 | |
| 
 | |
| In addition to the `name` field, the various *Node messages have the following
 | |
| fields:
 | |
| 
 | |
| ## DirectoryNode
 | |
| A `DirectoryNode` message represents a child directory.
 | |
| 
 | |
| It has a `digest` field, which points to the identifier of another `Directory`
 | |
| message, making a `Directory` a merkle tree (or strictly speaking, a graph, as
 | |
| two elements pointing to a child directory with the same contents would point
 | |
| to the same `Directory` message.
 | |
| 
 | |
| There's also a `size` field, containing the (total) number of all child
 | |
| elements in the referenced `Directory`, which helps for inode calculation.
 | |
| 
 | |
| ## FileNode
 | |
| A `FileNode` message represents a child (regular) file.
 | |
| 
 | |
| Its `digest` field contains the blake3 hash of the file contents. It can be
 | |
| looked up in the `BlobService`.
 | |
| 
 | |
| The `size` field contains the size of the blob the `digest` field refers to.
 | |
| 
 | |
| The `executable` field specifies whether the file should be marked as
 | |
| executable or not.
 | |
| 
 | |
| ## SymlinkNode
 | |
| A `SymlinkNode` message represents a child symlink.
 | |
| 
 | |
| In addition to the `name` field, the only additional field is the `target`,
 | |
| which is a string containing the target of the symlink.
 |