libra hash-object
Command reference for `libra hash-object`
Compute the Git-compatible object ID for raw file contents or standard input.
libra hash-object [OPTIONS] <PATH>...
libra hash-object --stdin [OPTIONS]
libra hash-object --stdin-paths [OPTIONS]It supports the four Git object types — blob (default), commit, tree, and
tag — computing the object id from the <type> <size>\0<content> header using the
current repository object format, byte-for-byte identical to git hash-object -t <type>. Without --literally, commit/tree/tag content is validated as a well-formed
object of that type (a blob accepts any bytes). It does not apply clean filters,
attributes, or LFS pointer conversion. --path is accepted as a Git compatibility
path context and stdin JSON source label; it does not change the hashed bytes until
path-based filters are implemented.
Read-only hashing does not require a Libra repository and defaults to SHA-1
when no repository object format is available. -w / --write requires a
repository because it stores the object in the repository object database.
Options
| Option | Short | Description |
|---|---|---|
<PATH>... | File paths to hash | |
--stdin | Read bytes from standard input instead of file paths | |
--stdin-paths | Read file paths from standard input (one per line) and hash each | |
--write | -w | Store the computed object in the repository object database |
--type <TYPE> | -t | Object type to hash: blob (default), commit, tree, or tag |
--literally | Hash the bytes as the given type without verifying the content is a well-formed object of that type | |
--path <PATH> | Path context label for compatibility with Git hash-object | |
--no-filters | Explicitly hash raw bytes without path-based filters | |
--json | Emit a structured JSON envelope | |
--machine | Emit the same envelope as one compact JSON line |
Examples
Hash a file without writing the object:
libra hash-object README.mdHash and write a file as a blob object:
libra hash-object -w src/main.rsHash file content as a typed object (the id matches git hash-object -t <type>); the
content is validated as a well-formed object of that type unless --literally is given:
libra hash-object -t commit commit-payload
libra hash-object -t tag --literally arbitrary-bytesHash bytes from standard input:
printf 'hello' | libra hash-object --stdinHash stdin with a Git-compatible path context label:
printf 'hello' | libra hash-object --stdin --path README.mdOutput
Human output prints one object ID per input:
b6fc4c620b67d95f953a5c1c1230aaab5db5a1b0Structured output:
{
"ok": true,
"command": "hash-object",
"data": {
"object_type": "blob",
"write": false,
"objects": [
{
"source": "-",
"oid": "b6fc4c620b67d95f953a5c1c1230aaab5db5a1b0",
"size": 5,
"written": false
}
]
}
}Compatibility
| Feature | Libra | Git | Jujutsu |
|---|---|---|---|
| Hash file as blob | libra hash-object <path> | git hash-object <path> | N/A |
| Read from stdin | --stdin | --stdin | N/A |
| Read paths from stdin | --stdin-paths | --stdin-paths | N/A |
| Write object | -w / --write | -w | N/A |
| Select object type | -t blob/commit/tree/tag | -t <type> | N/A |
| Path context | --path <path> accepted, no filters applied | --path <path> | N/A |
| Disable filters | --no-filters accepted | --no-filters | N/A |
| Path filters / attributes | Not supported | filters / attributes | N/A |
| Hash literally invalid objects | --literally (known types only) | --literally (any type string) | N/A |
Errors
| Condition | Stable code | Exit | Hint |
|---|---|---|---|
| Object type outside blob/commit/tree/tag | LBR-CLI-002 | 129 | hash-object supports blob, commit, tree, and tag |
Content is not a well-formed object of -t <type> (without --literally) | LBR-CLI-002 | 129 | pass --literally to hash malformed content without validation |
| Input file cannot be read | LBR-IO-001 | 128 | Verify the path exists and is readable |
| Object cannot be written | LBR-IO-002 | 128 | Check object storage permissions and disk space |