75 lines
1.9 KiB
Go
75 lines
1.9 KiB
Go
package core
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/go-git/go-git/v5"
|
|
)
|
|
|
|
// Repository represents an Onyx repository with both Git and Onyx-specific metadata
|
|
type Repository interface {
|
|
// Init initializes a new Onyx repository at the given path
|
|
Init(path string) error
|
|
|
|
// GetGitRepo returns the underlying Git repository
|
|
GetGitRepo() *git.Repository
|
|
|
|
// GetOnyxMetadata returns Onyx-specific metadata
|
|
GetOnyxMetadata() *OnyxMetadata
|
|
|
|
// Close releases any resources held by the repository
|
|
Close() error
|
|
}
|
|
|
|
// GitBackend provides low-level Git object operations
|
|
type GitBackend interface {
|
|
// CreateCommit creates a new commit object
|
|
CreateCommit(tree, parent, message string) (string, error)
|
|
|
|
// CreateTree creates a new tree object from the given entries
|
|
CreateTree(entries []TreeEntry) (string, error)
|
|
|
|
// UpdateRef updates a Git reference to point to a new SHA
|
|
UpdateRef(name, sha string) error
|
|
|
|
// GetRef retrieves the SHA that a reference points to
|
|
GetRef(name string) (string, error)
|
|
|
|
// CreateBlob creates a new blob object from content
|
|
CreateBlob(content []byte) (string, error)
|
|
|
|
// GetObject retrieves a Git object by its SHA
|
|
GetObject(sha string) (Object, error)
|
|
}
|
|
|
|
// TreeEntry represents an entry in a Git tree object
|
|
type TreeEntry struct {
|
|
Mode int // File mode (e.g., 0100644 for regular file, 040000 for directory)
|
|
Name string // Entry name
|
|
SHA string // Object SHA-1 hash
|
|
}
|
|
|
|
// Object represents a Git object (blob, tree, commit, or tag)
|
|
type Object interface {
|
|
// Type returns the type of the object (blob, tree, commit, tag)
|
|
Type() string
|
|
|
|
// SHA returns the SHA-1 hash of the object
|
|
SHA() string
|
|
|
|
// Size returns the size of the object in bytes
|
|
Size() int64
|
|
}
|
|
|
|
// OnyxMetadata holds Onyx-specific repository metadata
|
|
type OnyxMetadata struct {
|
|
// Version of the Onyx repository format
|
|
Version string
|
|
|
|
// Created timestamp when the repository was initialized
|
|
Created time.Time
|
|
|
|
// Path to the .onx directory
|
|
OnyxPath string
|
|
}
|