Artifact 5d319b5458793a901ca3a641eb7b8db42e973b3ab7746d8081c50960ffeaa0ce:
- File
cli/repo_hash.go
— part of check-in
[f5744359d3]
at
2026-04-19 16:30:54
on branch trunk
— Initial open source release
libfossil is a pure-Go implementation of the Fossil SCM, reading and writing the same .fossil SQLite repository format as upstream Fossil.
This is the first public release of code that previously lived in a private repository. The module path is github.com/danmestas/libfossil and the binary is named libfossil to avoid $PATH collisions with upstream fossil.
Included: - Repo lifecycle (create, clone), checkout/checkin, timeline, merge, diff, annotate, shun, tag, branch, bisect, stash, undo/redo - Sync-over-HTTP protocol (client and handler) - Two SQLite drivers: modernc (pure Go, default) and ncruces (wasm-capable) - Observer interfaces (SyncObserver, CheckoutObserver) with an optional OpenTelemetry implementation in observer/otel (separate submodule) - Deterministic simulation testing harness with BUGGIFY fault injection - Kong-based embeddable CLI under cli/ and a standalone binary under cmd/libfossil/ (user: [email protected], size: 616) [annotate] [blame] [check-ins using]
package cli import ( "fmt" "os" "github.com/danmestas/libfossil/internal/hash" ) // RepoHashCmd hashes files using SHA1 or SHA3-256. type RepoHashCmd struct { Files []string `arg:"" required:"" help:"Files to hash"` SHA3 bool `name:"sha3" help:"Use SHA3-256 instead of SHA1"` } func (c *RepoHashCmd) Run(g *Globals) error { for _, path := range c.Files { data, err := os.ReadFile(path) if err != nil { return fmt.Errorf("reading %s: %w", path, err) } var h string if c.SHA3 { h = hash.SHA3(data) } else { h = hash.SHA1(data) } fmt.Printf("%s %s\n", h, path) } return nil }