libfossil
libfossil
import "github.com/danmestas/libfossil"Index
- Constants
- Variables
- func Clone(ctx context.Context, path string, t Transport, opts CloneOpts) (*Repo, *CloneResult, error)
- func JulianToTime(j float64) time.Time
- func TimeToJulian(t time.Time) float64
- type AnnotateOpts
- type AnnotatedLine
- type BisectSession
- type BuggifyChecker
- type Checkout
- func (c *Checkout) Add(patterns []string) (int, error)
- func (c *Checkout) Checkin(opts CheckoutCommitOpts) (int64, string, error)
- func (c *Checkout) Close() error
- func (c *Checkout) Dir() string
- func (c *Checkout) Extract(rid int64, opts ExtractOpts) error
- func (c *Checkout) HasChanges() (bool, error)
- func (c *Checkout) Remove(patterns []string) error
- func (c *Checkout) Rename(oldName, newName string) error
- func (c *Checkout) Revert(opts RevertOpts) error
- func (c *Checkout) Status() ([]CheckoutChange, error)
- func (c *Checkout) Update(opts UpdateOpts) error
- func (c *Checkout) Version() (int64, string, error)
- func (c *Checkout) WouldFork() (bool, error)
- type CheckoutChange
- type CheckoutCommitOpts
- type CheckoutCreateOpts
- type CheckoutObserver
- type CheckoutOpenOpts
- type CheckoutOpts
- type CloneOpts
- type CloneResult
- type CommitEnd
- type CommitOpts
- type CommitStart
- type CreateOpts
- type DiffEntry
- type ExtractEnd
- type ExtractOpts
- type ExtractStart
- type FileEntry
- type FileToCommit
- type Fork
- type FslError
- type FslID
- type FslSize
- type HTTPOption
- type HandleEnd
- type HandleOpts
- type HandleStart
- type LogEntry
- type LogOpts
- type MergeConflict
- type MergeConflictError
- type MergeOpts
- type MergeResult
- type MockTransport
- type PullOpts
- type RC
- type Repo
- func Create(path string, opts CreateOpts) (*Repo, error)
- func Open(path string) (*Repo, error)
- func (r *Repo) Annotate(opts AnnotateOpts) ([]AnnotatedLine, error)
- func (r *Repo) BranchTip(name string) (int64, error)
- func (r *Repo) Close() error
- func (r *Repo) Commit(opts CommitOpts) (int64, string, error)
- func (r *Repo) Config(key string) (string, error)
- func (r *Repo) CreateCheckout(dir string, opts CheckoutCreateOpts) (*Checkout, error)
- func (r *Repo) CreateUser(opts UserOpts) error
- func (r *Repo) DB() *db.DB
- func (r *Repo) DeleteUser(login string) error
- func (r *Repo) DetectForks() ([]Fork, error)
- func (r *Repo) Diff(ridA, ridB int64, filePath string) ([]DiffEntry, error)
- func (r *Repo) FindCommonAncestor(ridA, ridB int64) (int64, error)
- func (r *Repo) GetUser(login string) (User, error)
- func (r *Repo) HandleSync(ctx context.Context, payload []byte) ([]byte, error)
- func (r *Repo) HandleSyncWithOpts(ctx context.Context, payload []byte, opts HandleOpts) ([]byte, error)
- func (r *Repo) Inner() *repo.Repo
- func (r *Repo) ListConflictForks() ([]string, error)
- func (r *Repo) ListFiles(rid int64) ([]FileEntry, error)
- func (r *Repo) ListUsers() ([]User, error)
- func (r *Repo) Merge(srcBranch, dstBranch, message, user string) (int64, string, error)
- func (r *Repo) OpenCheckout(dir string, opts CheckoutOpenOpts) (*Checkout, error)
- func (r *Repo) Path() string
- func (r *Repo) Pull(ctx context.Context, url string, opts PullOpts) (*SyncResult, error)
- func (r *Repo) ReadFile(rid int64, filePath string) ([]byte, error)
- func (r *Repo) ReadFileAt(version string, filePath string) ([]byte, error)
- func (r *Repo) Redo(dir string) error
- func (r *Repo) ResolveConflictFork(filename string) error
- func (r *Repo) ResolveVersion(name string) (int64, error)
- func (r *Repo) ServeHTTP(ctx context.Context, addr string) error
- func (r *Repo) SetCaps(login, caps string) error
- func (r *Repo) SetConfig(key, value string) error
- func (r *Repo) SetPassword(login, password string) error
- func (r *Repo) StashApply(dir string, id int64) error
- func (r *Repo) StashClear() error
- func (r *Repo) StashDrop(id int64) error
- func (r *Repo) StashList() ([]StashEntry, error)
- func (r *Repo) StashPop(dir string) error
- func (r *Repo) StashSave(dir, comment string) error
- func (r *Repo) Sync(ctx context.Context, t Transport, opts SyncOpts) (*SyncResult, error)
- func (r *Repo) Tag(opts TagOpts) (int64, error)
- func (r *Repo) Timeline(opts LogOpts) ([]LogEntry, error)
- func (r *Repo) UVDelete(name string, mtime time.Time) error
- func (r *Repo) UVList() ([]UVEntry, error)
- func (r *Repo) UVRead(name string) ([]byte, int64, string, error)
- func (r *Repo) UVWrite(name string, content []byte, mtime time.Time) error
- func (r *Repo) Undo(dir string) error
- func (r *Repo) Verify() error
- func (r *Repo) WithTx(fn func(tx *db.Tx) error) error
- func (r *Repo) XferHandler() http.HandlerFunc
- type RevertOpts
- type RoundStats
- type ScanEnd
- type SessionEnd
- type SessionStart
- type StashEntry
- type StatusEntry
- type StatusOpts
- type SyncObserver
- type SyncOpts
- type SyncResult
- type TableSyncEnd
- type TableSyncStart
- type TagOpts
- type TagSpec
- type Transport
- type TransportFunc
- type UVEntry
- type UpdateChange
- type UpdateOpts
- type User
- type UserOpts
Constants
const (
PhantomSize FslSize = fsltype.PhantomSize
FossilApplicationID int32 = fsltype.FossilApplicationID
)Variables
ErrAmbiguousVersion is returned by ResolveVersion when a UUID prefix matches more than one artifact (collision). Callers can match with errors.Is.
var ErrAmbiguousVersion = errors.New("libfossil: ambiguous version prefix")ErrFileNotFound is returned by ReadFile when the requested filePath is not tracked in the given checkin. Callers can match with errors.Is.
var ErrFileNotFound = errors.New("libfossil: file not found in checkin")ErrMergeConflict is returned (wrapped in a MergeConflictError) when Merge detects any unresolved three-way conflicts. Callers can check with errors.Is(err, ErrMergeConflict) without caring about the file list.
var ErrMergeConflict = errors.New("libfossil: merge has conflicts")ErrVersionNotFound is returned by ResolveVersion when the requested version string does not match any artifact in the repository. Callers can match with errors.Is.
var ErrVersionNotFound = errors.New("libfossil: version not found")func Clone
func Clone(ctx context.Context, path string, t Transport, opts CloneOpts) (*Repo, *CloneResult, error)Clone performs a full repository clone from a remote Fossil server. It creates a new repository at the given path, runs the clone protocol until convergence, and returns the opened Repo handle and a result summary. On error, the partially-created repo file is removed.
func JulianToTime
func JulianToTime(j float64) time.TimeJulianToTime converts a Fossil Julian day number to time.Time.
func TimeToJulian
func TimeToJulian(t time.Time) float64TimeToJulian converts a time.Time to a Fossil Julian day number.
type AnnotateOpts
AnnotateOpts configures an annotate operation.
type AnnotateOpts struct {
FilePath string
StartRID int64
}type AnnotatedLine
AnnotatedLine is a single line of blame/annotate output.
type AnnotatedLine struct {
Text string
UUID string
User string
Date time.Time
}type BisectSession
BisectSession holds state for a binary-search bisect operation.
type BisectSession struct {
// contains filtered or unexported fields
}type BuggifyChecker
BuggifyChecker controls fault injection for deterministic simulation testing.
type BuggifyChecker interface {
Check(site string, probability float64) bool
}type Checkout
Checkout represents a working directory linked to a Fossil repository. A Checkout is not safe for concurrent use. Callers must serialize access to a single Checkout instance.
type Checkout struct {
// contains filtered or unexported fields
}func (*Checkout) Add
func (c *Checkout) Add(patterns []string) (int, error)Add adds files to version tracking. Returns the number of files added. Files already tracked are silently skipped.
func (*Checkout) Checkin
func (c *Checkout) Checkin(opts CheckoutCommitOpts) (int64, string, error)Checkin creates a new checkin from the checkout working directory. Returns the RID and UUID of the new checkin manifest.
func (*Checkout) Close
func (c *Checkout) Close() errorClose closes the checkout database. Does NOT close the repo.
func (*Checkout) Dir
func (c *Checkout) Dir() stringDir returns the checkout directory path.
func (*Checkout) Extract
func (c *Checkout) Extract(rid int64, opts ExtractOpts) errorExtract writes files from the specified checkin to the working directory.
func (*Checkout) HasChanges
func (c *Checkout) HasChanges() (bool, error)HasChanges returns true if the checkout has any modified, deleted, or renamed files. This is a DB-only check; call Extract or scan first to detect on-disk modifications.
func (*Checkout) Remove
func (c *Checkout) Remove(patterns []string) errorRemove removes files from version tracking. Newly added files are deleted from vfile; committed files are marked as deleted.
func (*Checkout) Rename
func (c *Checkout) Rename(oldName, newName string) errorRename marks a tracked file as renamed and moves it on disk.
func (*Checkout) Revert
func (c *Checkout) Revert(opts RevertOpts) errorRevert restores files to their checkout version state. If opts.Files is empty, reverts all changed files.
func (*Checkout) Status
func (c *Checkout) Status() ([]CheckoutChange, error)Status scans the working directory for changes and returns a list of changed files. Wraps ScanChanges + VisitChanges.
func (*Checkout) Update
func (c *Checkout) Update(opts UpdateOpts) errorUpdate updates the checkout to a new version, performing 3-way merge where needed to preserve local modifications.
func (*Checkout) Version
func (c *Checkout) Version() (int64, string, error)Version returns the current checkout version (RID and UUID).
func (*Checkout) WouldFork
func (c *Checkout) WouldFork() (bool, error)WouldFork reports whether committing on the current branch would create a fork. Returns true when another leaf exists on the same branch.
type CheckoutChange
CheckoutChange describes a single file change in the checkout.
type CheckoutChange struct {
Name string
Change string // "added", "modified", "deleted", "renamed", "missing"
}type CheckoutCommitOpts
CommitOpts configures creating a checkin from the checkout. (This type is distinct from the existing libfossil.CommitOpts which takes explicit file content for direct repo commits without a checkout.)
type CheckoutCommitOpts struct {
Message string
User string
Branch string // empty = current branch
Tags []string // additional tag names
Delta bool
}type CheckoutCreateOpts
CheckoutCreateOpts configures creating a new checkout.
type CheckoutCreateOpts struct {
Env *simio.Env // nil = real env
Observer CheckoutObserver // nil = nop
}type CheckoutObserver
CheckoutObserver receives lifecycle callbacks during checkout/commit operations. Use NopCheckoutObserver() for a silent no-op, or StdoutCheckoutObserver() for stderr logging.
type CheckoutObserver interface {
ExtractStarted(info ExtractStart)
ExtractFileCompleted(name string, change UpdateChange)
ExtractCompleted(info ExtractEnd)
ScanStarted(dir string)
ScanCompleted(info ScanEnd)
CommitStarted(info CommitStart)
CommitCompleted(info CommitEnd)
Error(err error)
}func NopCheckoutObserver
func NopCheckoutObserver() CheckoutObserverNopCheckoutObserver returns a CheckoutObserver that silently discards all events.
func StdoutCheckoutObserver
func StdoutCheckoutObserver() CheckoutObserverStdoutCheckoutObserver returns a CheckoutObserver that logs events to stderr.
type CheckoutOpenOpts
CheckoutOpenOpts configures opening an existing checkout.
type CheckoutOpenOpts struct {
SearchParents bool // search parent dirs for .fslckout
Env *simio.Env // nil = real env
Observer CheckoutObserver
}type CheckoutOpts
CheckoutOpts configures a checkout extraction.
type CheckoutOpts struct {
Dir string
Force bool
}type CloneOpts
CloneOpts configures a clone operation.
type CloneOpts struct {
User string
Password string
ProjectCode string
ServerCode string
Observer SyncObserver
Buggify BuggifyChecker // fault injection for DST (nil = no faults)
}type CloneResult
CloneResult reports what happened during a clone.
type CloneResult struct {
Rounds int
BlobsRecvd int
ArtifactsLinked int
ProjectCode string
ServerCode string
Messages []string
}type CommitEnd
CommitEnd describes the completion of a commit operation.
type CommitEnd struct {
UUID string
RID int64
}type CommitOpts
CommitOpts configures a commit operation.
type CommitOpts struct {
Files []FileToCommit
Comment string
User string
Tags []TagSpec
Time time.Time
ParentID int64
// MergeParents lists additional parents for a merge commit. The resulting
// manifest's P-card is [ParentID, MergeParents...]; ParentID is the primary
// parent (branch tip being committed onto), and each MergeParent contributes
// a secondary plink row (isprim=0).
MergeParents []int64
Delta bool
}type CommitStart
CommitStart describes the beginning of a commit operation.
type CommitStart struct {
Comment string
User string
Files int
}type CreateOpts
CreateOpts configures repository creation.
type CreateOpts struct {
User string
// Rand provides random bytes for project-code and server-code generation.
// Nil defaults to crypto/rand (production). Set to simio.NewSeededRand
// for deterministic simulation testing.
Rand simio.Rand
}type DiffEntry
DiffEntry describes a unified diff for a single file.
type DiffEntry struct {
Name string
Unified string
}type ExtractEnd
ExtractEnd describes the completion of a checkout extraction.
type ExtractEnd struct {
FilesWritten int
}type ExtractOpts
ExtractOpts configures file extraction from a checkin.
type ExtractOpts struct {
Force bool // overwrite uncommitted changes
}type ExtractStart
ExtractStart describes the beginning of a checkout extraction.
type ExtractStart struct {
RID int64
Dir string
}type FileEntry
FileEntry describes a file in a manifest.
type FileEntry struct {
Name string
UUID string
Perm string
}type FileToCommit
FileToCommit describes a file to include in a commit.
type FileToCommit struct {
Name string
Content []byte
Perm string
}type Fork
Fork describes a divergence point between two branches.
type Fork struct {
Ancestor int64
LocalTip int64
RemoteTip int64
}type FslError
type FslError struct {
Code RC
Msg string
Cause error
}func (*FslError) Error
func (e *FslError) Error() stringfunc (*FslError) Unwrap
func (e *FslError) Unwrap() errortype FslID
FslID is a row-id in the blob table (content-addressed artifacts).
type FslID = fsltype.FslIDtype FslSize
FslSize represents a blob size; negative values indicate phantom blobs.
type FslSize = fsltype.FslSizetype HTTPOption
HTTPOption configures an HTTP transport.
type HTTPOption func(*httpTransport)func WithHTTPClient
func WithHTTPClient(c *http.Client) HTTPOptionWithHTTPClient sets a custom http.Client for the transport.
type HandleEnd
HandleEnd describes the completion of a server-side sync handle.
type HandleEnd struct {
FilesSent, FilesRecvd int
}type HandleOpts
HandleOpts configures server-side sync handling.
type HandleOpts struct {
Observer SyncObserver
Buggify BuggifyChecker
}type HandleStart
HandleStart describes the beginning of a server-side sync handle.
type HandleStart struct {
RemoteAddr string
}type LogEntry
LogEntry represents a single checkin in the timeline.
type LogEntry struct {
RID int64
UUID string
Comment string
User string
Time time.Time
Parents []string
}type LogOpts
LogOpts configures a log/timeline query.
type LogOpts struct {
Start int64
Limit int
}type MergeConflict
MergeConflict describes a conflict region in a file.
type MergeConflict struct {
Name string
StartLine int
EndLine int
}type MergeConflictError
MergeConflictError reports which files had unresolved merge conflicts. Files is sorted alphabetically for deterministic output.
type MergeConflictError struct {
Files []string
}func (*MergeConflictError) Error
func (e *MergeConflictError) Error() stringfunc (*MergeConflictError) Is
func (e *MergeConflictError) Is(target error) booltype MergeOpts
MergeOpts configures a merge operation.
type MergeOpts struct {
Strategy string
Dir string
}type MergeResult
MergeResult describes the outcome of a merge.
type MergeResult struct {
Clean bool
Conflicts []MergeConflict
}type MockTransport
MockTransport is a test double that delegates to a handler function.
type MockTransport struct {
Handler func(req []byte) []byte
}func (*MockTransport) RoundTrip
func (t *MockTransport) RoundTrip(_ context.Context, payload []byte) ([]byte, error)RoundTrip calls the Handler function if set, otherwise returns empty bytes.
type PullOpts
PullOpts configures a pull-only sync. Fields are a subset of SyncOpts; Pull is hard-coded true and Push is hard-coded false to keep the API surface honest about what Pull does.
type PullOpts struct {
// ProjectCode optionally pins the expected server project code. Empty
// accepts whatever the peer advertises (matches existing Sync semantics).
ProjectCode string
// MaxSend caps the bytes the client will send per round (mostly clones
// of clients with UV files). Zero leaves the existing default in place.
MaxSend int
// Observer receives sync-progress events. nil disables observation.
Observer SyncObserver
}type RC
type RC intconst (
RCOK RC = 0
RCError RC = 100
RCNYI RC = 101
RCOOM RC = 102
RCMisuse RC = 103
RCRange RC = 104
RCAccess RC = 105
RCIO RC = 106
RCNotFound RC = 107
RCAlreadyExists RC = 108
RCConsistency RC = 109
RCRepoNeedsRebuild RC = 110
RCNotARepo RC = 111
RCRepoVersion RC = 112
RCDB RC = 113
RCBreak RC = 114
RCStepRow RC = 115
RCStepDone RC = 116
RCStepError RC = 117
RCType RC = 118
RCNotACkout RC = 119
RCRepoMismatch RC = 120
RCChecksumMismatch RC = 121
RCLocked RC = 122
RCConflict RC = 123
RCSizeMismatch RC = 124
RCPhantom RC = 125
RCUnsupported RC = 126
)func (RC) String
func (rc RC) String() stringtype Repo
Repo is an opaque handle to a Fossil repository.
type Repo struct {
// contains filtered or unexported fields
}func Create
func Create(path string, opts CreateOpts) (*Repo, error)Create creates a new Fossil repository at the given path.
func Open
func Open(path string) (*Repo, error)Open opens an existing Fossil repository.
func (*Repo) Annotate
func (r *Repo) Annotate(opts AnnotateOpts) ([]AnnotatedLine, error)Annotate attributes each line of a file to the commit that last changed it.
func (*Repo) BranchTip
func (r *Repo) BranchTip(name string) (int64, error)BranchTip returns the RID of the most recent checkin on the named branch. Resolves via the ‘branch’ propagating tag: the tip is the checkin with the latest event.mtime whose tagxref still has that branch value active. Returns an error if no such branch exists in the repository.
func (*Repo) Close
func (r *Repo) Close() errorClose closes the repository and releases resources.
func (*Repo) Commit
func (r *Repo) Commit(opts CommitOpts) (int64, string, error)Commit creates a new checkin manifest with the given files and returns the RID (row ID) and UUID of the newly created artifact.
func (*Repo) Config
func (r *Repo) Config(key string) (string, error)Config reads a configuration value from the repo’s config table.
func (*Repo) CreateCheckout
func (r *Repo) CreateCheckout(dir string, opts CheckoutCreateOpts) (*Checkout, error)CreateCheckout creates a new checkout directory linked to this repository. The directory is created if it does not exist. The checkout is initialized to the tip checkin.
func (*Repo) CreateUser
func (r *Repo) CreateUser(opts UserOpts) errorCreateUser creates a new user in the repository.
func (*Repo) DB
func (r *Repo) DB() *db.DBDB returns the underlying database handle for raw SQL queries. Use this when the high-level Repo methods don’t cover your use case.
func (*Repo) DeleteUser
func (r *Repo) DeleteUser(login string) errorDeleteUser removes a user from the repository.
func (*Repo) DetectForks
func (r *Repo) DetectForks() ([]Fork, error)DetectForks finds divergent branches in the repository.
func (*Repo) Diff
func (r *Repo) Diff(ridA, ridB int64, filePath string) ([]DiffEntry, error)Diff returns a unified diff for filePath between two checkins. When the file is absent from a side, that side is treated as empty bytes, so additions and deletions render as pure insert/delete hunks. Returns an empty slice when both sides are byte-identical.
func (*Repo) FindCommonAncestor
func (r *Repo) FindCommonAncestor(ridA, ridB int64) (int64, error)FindCommonAncestor finds the nearest common ancestor of two checkins.
func (*Repo) GetUser
func (r *Repo) GetUser(login string) (User, error)GetUser returns information about a user.
func (*Repo) HandleSync
func (r *Repo) HandleSync(ctx context.Context, payload []byte) ([]byte, error)HandleSync processes an incoming xfer request (server-side). The payload is a raw xfer-encoded byte slice; the response is also raw bytes.
func (*Repo) HandleSyncWithOpts
func (r *Repo) HandleSyncWithOpts(ctx context.Context, payload []byte, opts HandleOpts) ([]byte, error)HandleSyncWithOpts processes an incoming xfer request with optional configuration.
func (*Repo) Inner
func (r *Repo) Inner() *repo.RepoInner returns the underlying internal repo handle. This is exported for use by in-module packages (e.g., cli/) that need direct access to the repo DB for raw SQL or internal package calls.
func (*Repo) ListConflictForks
func (r *Repo) ListConflictForks() ([]string, error)ListConflictForks returns filenames with unresolved conflict-fork entries.
func (*Repo) ListFiles
func (r *Repo) ListFiles(rid int64) ([]FileEntry, error)ListFiles returns the files in a manifest identified by blob row-id.
func (*Repo) ListUsers
func (r *Repo) ListUsers() ([]User, error)ListUsers returns all users in the repository.
func (*Repo) Merge
func (r *Repo) Merge(srcBranch, dstBranch, message, user string) (int64, string, error)Merge performs a three-way merge of srcBranch into dstBranch and creates a merge commit whose primary parent is dstBranch’s tip and whose secondary parent is srcBranch’s tip. Returns (rid, uuid) of the new commit on success.
Conflict policy: any unresolved conflict in any file aborts the whole operation with a *MergeConflictError — no commit is written. Callers should check errors.Is(err, ErrMergeConflict) to detect this case.
File handling:
- Present on both sides: three-way merge against the common ancestor.
- Present on only one side (new file): kept as-is.
- In ancestor, missing on one side, unchanged on the other: agreed deletion.
- In ancestor, missing on one side, modified on the other: modify/delete conflict.
func (*Repo) OpenCheckout
func (r *Repo) OpenCheckout(dir string, opts CheckoutOpenOpts) (*Checkout, error)OpenCheckout opens an existing checkout directory linked to this repository.
func (*Repo) Path
func (r *Repo) Path() stringPath returns the filesystem path to the repository file.
func (*Repo) Pull
func (r *Repo) Pull(ctx context.Context, url string, opts PullOpts) (*SyncResult, error)Pull fetches commits and ancillary objects from a Fossil HTTP peer and applies them to this repo. It is a strict pull — nothing is sent.
Tiger Style: hostile inputs panic via assert at the boundary; transport failures return wrapped errors. Idempotent on a repo already at peer’s tip (returns a SyncResult with Rounds=0–1 and FilesRecvd=0).
func (*Repo) ReadFile
func (r *Repo) ReadFile(rid int64, filePath string) ([]byte, error)ReadFile returns the bytes of filePath as they existed in checkin rid. Returns ErrFileNotFound (wrapped) if the file is not tracked in that checkin. A file that exists but is empty returns ([]byte{}, nil).
func (*Repo) ReadFileAt
func (r *Repo) ReadFileAt(version string, filePath string) ([]byte, error)ReadFileAt reads filePath from the checkin identified by a symbolic version name (e.g. “tip”, “trunk”, a branch name, a UUID, or a UUID prefix). It calls ResolveVersion to obtain the RID, then delegates to ReadFile. Use ReadFile directly when you already have a numeric RID.
func (*Repo) Redo
func (r *Repo) Redo(dir string) errorRedo re-applies the last undone operation. Requires a checkout database; not yet wired.
func (*Repo) ResolveConflictFork
func (r *Repo) ResolveConflictFork(filename string) errorResolveConflictFork marks a conflict-fork entry as resolved.
func (*Repo) ResolveVersion
func (r *Repo) ResolveVersion(name string) (int64, error)ResolveVersion resolves a symbolic version name to a repository artifact RID.
Resolution order:
- "" or “tip” — newest checkin by mtime from the event table.
- “trunk” — tip of the trunk branch via tagxref/tag; falls back to “tip” if the repository has no trunk tag.
- Named branch — tag lookup for “sym-<name>” in tagxref/tag (e.g. “feature-x” resolves via sym-feature-x).
- Full UUID (≥40 chars) — exact match against blob.uuid.
- UUID prefix (4–39 chars) — unique-prefix match; returns ErrAmbiguousVersion if more than one artifact matches.
An empty result or no match returns ErrVersionNotFound (wrapped). An ambiguous prefix returns ErrAmbiguousVersion (wrapped).
func (*Repo) ServeHTTP
func (r *Repo) ServeHTTP(ctx context.Context, addr string) errorServeHTTP starts an HTTP server that accepts Fossil xfer requests. Blocks until ctx is cancelled.
func (*Repo) SetCaps
func (r *Repo) SetCaps(login, caps string) errorSetCaps updates a user’s capability string.
func (*Repo) SetConfig
func (r *Repo) SetConfig(key, value string) errorSetConfig writes a configuration value to the repo’s config table.
func (*Repo) SetPassword
func (r *Repo) SetPassword(login, password string) errorSetPassword updates a user’s password.
func (*Repo) StashApply
func (r *Repo) StashApply(dir string, id int64) errorStashApply restores a stash entry by ID without removing it.
func (*Repo) StashClear
func (r *Repo) StashClear() errorStashClear removes all stash entries.
func (*Repo) StashDrop
func (r *Repo) StashDrop(id int64) errorStashDrop removes a stash entry by ID.
func (*Repo) StashList
func (r *Repo) StashList() ([]StashEntry, error)StashList returns all stash entries.
func (*Repo) StashPop
func (r *Repo) StashPop(dir string) errorStashPop restores the most recent stash entry and removes it.
func (*Repo) StashSave
func (r *Repo) StashSave(dir, comment string) errorStashSave saves working-tree changes to the stash. Requires a checkout database; not yet wired (Repo only wraps the repo DB).
func (*Repo) Sync
func (r *Repo) Sync(ctx context.Context, t Transport, opts SyncOpts) (*SyncResult, error)Sync runs a sync session against the given transport.
func (*Repo) Tag
func (r *Repo) Tag(opts TagOpts) (int64, error)Tag creates a control artifact that adds a tag to a target checkin. Returns the UUID of the tag control artifact.
func (*Repo) Timeline
func (r *Repo) Timeline(opts LogOpts) ([]LogEntry, error)Timeline returns checkin log entries starting from the given RID.
func (*Repo) UVDelete
func (r *Repo) UVDelete(name string, mtime time.Time) errorUVDelete marks an unversioned file as deleted (tombstone).
func (*Repo) UVList
func (r *Repo) UVList() ([]UVEntry, error)UVList returns all unversioned file entries.
func (*Repo) UVRead
func (r *Repo) UVRead(name string) ([]byte, int64, string, error)UVRead reads an unversioned file from the repository. Returns the content, mtime (unix seconds), and content hash.
func (*Repo) UVWrite
func (r *Repo) UVWrite(name string, content []byte, mtime time.Time) errorUVWrite writes an unversioned file to the repository.
func (*Repo) Undo
func (r *Repo) Undo(dir string) errorUndo reverts the last commit or merge. Requires a checkout database; not yet wired.
func (*Repo) Verify
func (r *Repo) Verify() errorVerify checks repository integrity (blob checksums, delta chains).
func (*Repo) WithTx
func (r *Repo) WithTx(fn func(tx *db.Tx) error) errorWithTx executes fn within a database transaction.
func (*Repo) XferHandler
func (r *Repo) XferHandler() http.HandlerFuncXferHandler returns an http.HandlerFunc that decodes Fossil xfer requests, dispatches to HandleSync, and encodes the response. Use this to compose a custom mux alongside operational endpoints (e.g., /healthz).
type RevertOpts
RevertOpts configures reverting file changes.
type RevertOpts struct {
Files []string // empty = revert all
}type RoundStats
RoundStats describes the outcome of a single sync round.
type RoundStats struct {
FilesSent, FilesRecvd, BytesSent, BytesRecvd, Gimmes, IGots int
}type ScanEnd
ScanEnd describes the completion of a working-tree scan.
type ScanEnd struct {
FilesScanned int
}type SessionEnd
SessionEnd describes the completion of a sync session.
type SessionEnd struct {
Rounds, FilesSent, FilesRecvd int
}type SessionStart
SessionStart describes the beginning of a sync session.
type SessionStart struct {
ProjectCode string
Push, Pull, UV bool
}type StashEntry
StashEntry describes a saved stash.
type StashEntry struct {
ID int64
Comment string
Time string
}type StatusEntry
StatusEntry describes a changed file in the working tree.
type StatusEntry struct {
Name string
Change string
}type StatusOpts
StatusOpts configures a working-tree status query.
type StatusOpts struct {
Dir string
}type SyncObserver
SyncObserver receives lifecycle callbacks during sync operations. Use NopSyncObserver() for a silent no-op, or StdoutSyncObserver() for stderr logging.
type SyncObserver interface {
Started(info SessionStart)
RoundStarted(round int)
RoundCompleted(round int, stats RoundStats)
Completed(info SessionEnd)
Error(err error)
HandleStarted(info HandleStart)
HandleCompleted(info HandleEnd)
TableSyncStarted(info TableSyncStart)
TableSyncCompleted(info TableSyncEnd)
}func NopSyncObserver
func NopSyncObserver() SyncObserverNopSyncObserver returns a SyncObserver that silently discards all events.
func StdoutSyncObserver
func StdoutSyncObserver() SyncObserverStdoutSyncObserver returns a SyncObserver that logs events to stderr.
type SyncOpts
SyncOpts configures a sync operation.
type SyncOpts struct {
Push bool
Pull bool
UV bool
ProjectCode string
ServerCode string
User string
Password string
PeerID string // identifies this leaf agent instance
MaxSend int
XTableSync bool // enable extension table sync (peer_registry, etc.)
Private bool // enable private artifact sync
Observer SyncObserver
Buggify BuggifyChecker
}type SyncResult
SyncResult describes the outcome of a sync session.
type SyncResult struct {
Rounds int
FilesSent int
FilesRecvd int
UVFilesSent int
UVFilesRecvd int
UVGimmesSent int
BytesSent int64
BytesRecvd int64
Errors []string
}type TableSyncEnd
TableSyncEnd describes the completion of a config table sync.
type TableSyncEnd struct {
Table string
RowsSent, RowsRecvd int
}type TableSyncStart
TableSyncStart describes the beginning of a config table sync.
type TableSyncStart struct {
Table string
}type TagOpts
TagOpts configures a tag operation.
type TagOpts struct {
Name string
TargetID int64
Value string
User string
Time time.Time
}type TagSpec
TagSpec describes a tag to attach to an artifact.
type TagSpec struct {
Name string
Value string
}type Transport
Transport delivers sync payloads between peers. Implementations handle the network layer (HTTP, NATS, etc.). Payloads are opaque zlib-compressed xfer card streams.
type Transport interface {
RoundTrip(ctx context.Context, payload []byte) ([]byte, error)
}func NewHTTPTransport
func NewHTTPTransport(url string, opts ...HTTPOption) TransportNewHTTPTransport creates a Transport that speaks Fossil’s HTTP /xfer protocol.
type TransportFunc
TransportFunc adapts a plain function to the Transport interface. This is the Transport equivalent of http.HandlerFunc.
type TransportFunc func(ctx context.Context, payload []byte) ([]byte, error)func (TransportFunc) RoundTrip
func (f TransportFunc) RoundTrip(ctx context.Context, payload []byte) ([]byte, error)RoundTrip calls the function.
type UVEntry
UVEntry describes an unversioned file.
type UVEntry struct {
Name string
Size int64
Mtime time.Time
Hash string
}type UpdateChange
UpdateChange classifies how a file changed.
type UpdateChange stringconst (
ChangeAdded UpdateChange = "added"
ChangeModified UpdateChange = "modified"
ChangeDeleted UpdateChange = "deleted"
)type UpdateOpts
UpdateOpts configures updating to a new version with merge.
type UpdateOpts struct {
TargetRID int64 // 0 = tip
Force bool
}type User
User describes a Fossil user.
type User struct {
Login string
Caps string
}type UserOpts
UserOpts configures a user creation or update.
type UserOpts struct {
Login string
Password string
Caps string
}Generated by gomarkdoc