Documentation ¶
Index ¶
- Variables
- type AlreadyLockedError
- type FileDirectoryConflictError
- type InTransactionConflictError
- type InvalidReferenceFormatError
- type MismatchingStateError
- type MultipleUpdatesError
- type NonCommitObjectError
- type NonExistentObjectError
- type ReferenceAlreadyExistsError
- type Updater
- func (u *Updater) Close() error
- func (u *Updater) Commit() error
- func (u *Updater) Create(reference git.ReferenceName, oid git.ObjectID) error
- func (u *Updater) Delete(reference git.ReferenceName) error
- func (u *Updater) Prepare() error
- func (u *Updater) Start() error
- func (u *Updater) Update(reference git.ReferenceName, newOID, oldOID git.ObjectID) error
- type UpdaterOpt
Constants ¶
This section is empty.
Variables ¶
var ( // ErrPackedRefsLocked indicates an operation failed due to the 'packed-refs' being locked. This is // the case if either `packed-refs.new` or `packed-refs.lock` exists in the repository. ErrPackedRefsLocked = errors.New("packed-refs locked") )
Functions ¶
This section is empty.
Types ¶
type AlreadyLockedError ¶
type AlreadyLockedError struct { // ReferenceName is the name of the reference that is already locked. ReferenceName string }
AlreadyLockedError indicates a reference cannot be locked because another process has already locked it.
func (AlreadyLockedError) Error ¶
func (e AlreadyLockedError) Error() string
func (AlreadyLockedError) ErrorMetadata ¶ added in v16.2.0
func (e AlreadyLockedError) ErrorMetadata() []structerr.MetadataItem
ErrorMetadata implements the `structerr.ErrorMetadater` interface and provides the name of the reference that was locked already.
type FileDirectoryConflictError ¶
type FileDirectoryConflictError struct { // ConflictingReferenceName is the name of the reference that would have conflicted. ConflictingReferenceName string // ExistingReferenceName is the name of the already existing reference. ExistingReferenceName string }
FileDirectoryConflictError is returned when an operation would causes a file-directory conflict in the reference store.
func (FileDirectoryConflictError) Error ¶
func (e FileDirectoryConflictError) Error() string
func (FileDirectoryConflictError) ErrorMetadata ¶ added in v16.2.0
func (e FileDirectoryConflictError) ErrorMetadata() []structerr.MetadataItem
ErrorMetadata implements the `structerr.ErrorMetadater` interface and provides the name of preexisting and conflicting reference names.
type InTransactionConflictError ¶
type InTransactionConflictError struct { // FirstReferenceName is the name of the first reference that was created. FirstReferenceName string // SecondReferenceName is the name of the second reference that was created. SecondReferenceName string }
InTransactionConflictError is returned when creating two F/D or D/F conflicting references in the same transaction. For example creation of 'refs/heads/parent' and creation of 'refs/heads/parent/child' is not allowed in the same transaction.
func (InTransactionConflictError) Error ¶
func (e InTransactionConflictError) Error() string
func (InTransactionConflictError) ErrorMetadata ¶ added in v16.2.0
func (e InTransactionConflictError) ErrorMetadata() []structerr.MetadataItem
ErrorMetadata implements the `structerr.ErrorMetadater` interface and provides the name of the first and second conflicting reference names.
type InvalidReferenceFormatError ¶
type InvalidReferenceFormatError struct { // ReferenceName is the invalid reference name. ReferenceName string }
InvalidReferenceFormatError indicates a reference name was invalid.
func (InvalidReferenceFormatError) Error ¶
func (e InvalidReferenceFormatError) Error() string
func (InvalidReferenceFormatError) ErrorMetadata ¶ added in v16.2.0
func (e InvalidReferenceFormatError) ErrorMetadata() []structerr.MetadataItem
ErrorMetadata implements the `structerr.ErrorMetadater` interface and provides the name of the reference that was invalid.
type MismatchingStateError ¶ added in v16.2.0
type MismatchingStateError struct { // ReferenceName is the name of the reference that was being updated. ReferenceName string // ExpectedObjectID is the expected object ID as specified by the caller. ExpectedObjectID string // ActualObjectID is the actual object ID that the reference was pointing to. ActualObjectID string }
MismatchingStateError is returned when attempting to update a reference where the expected object ID does not match the actual object ID that the reference currently points to.
func (MismatchingStateError) Error ¶ added in v16.2.0
func (e MismatchingStateError) Error() string
func (MismatchingStateError) ErrorMetadata ¶ added in v16.2.0
func (e MismatchingStateError) ErrorMetadata() []structerr.MetadataItem
ErrorMetadata implements the `structerr.ErrorMetadater` interface and provides error metadata about the expected and actual object ID of the failed reference update.
type MultipleUpdatesError ¶ added in v16.4.0
type MultipleUpdatesError struct { // ReferenceName is the name of the reference that has multiple updates. ReferenceName string }
MultipleUpdatesError indicates that a reference cannot have multiple updates within the same transaction.
func (MultipleUpdatesError) Error ¶ added in v16.4.0
func (e MultipleUpdatesError) Error() string
func (MultipleUpdatesError) ErrorMetadata ¶ added in v16.4.0
func (e MultipleUpdatesError) ErrorMetadata() []structerr.MetadataItem
ErrorMetadata implements the `structerr.ErrorMetadater` interface and provides the name of the reference that has multiple updates.
type NonCommitObjectError ¶
type NonCommitObjectError struct { // ReferenceName is the name of the branch that was being updated. ReferenceName string // ObjectID is the object ID of the non-commit object. ObjectID string }
NonCommitObjectError is returned when attempting to point a branch to an object that is not an object.
func (NonCommitObjectError) Error ¶
func (e NonCommitObjectError) Error() string
func (NonCommitObjectError) ErrorMetadata ¶ added in v16.2.0
func (e NonCommitObjectError) ErrorMetadata() []structerr.MetadataItem
ErrorMetadata implements the `structerr.ErrorMetadater` interface and provides the object that is not a commit as well as the reference that should have been updated to point to it.
type NonExistentObjectError ¶
type NonExistentObjectError struct { // ReferenceName is the name of the reference that was being updated. ReferenceName string // ObjectID is the object ID of the non-existent object. ObjectID string }
NonExistentObjectError is returned when attempting to point a reference to an object that does not exist in the object database.
func (NonExistentObjectError) Error ¶
func (e NonExistentObjectError) Error() string
func (NonExistentObjectError) ErrorMetadata ¶ added in v16.2.0
func (e NonExistentObjectError) ErrorMetadata() []structerr.MetadataItem
ErrorMetadata implements the `structerr.ErrorMetadater` interface and provides the missing object as well as the reference that should have been updated to point to it.
type ReferenceAlreadyExistsError ¶ added in v16.4.0
type ReferenceAlreadyExistsError struct { // ReferenceName is the name of the reference that already exists. ReferenceName string }
ReferenceAlreadyExistsError is returned when attempting to create a reference that already exists.
func (ReferenceAlreadyExistsError) Error ¶ added in v16.4.0
func (e ReferenceAlreadyExistsError) Error() string
func (ReferenceAlreadyExistsError) ErrorMetadata ¶ added in v16.4.0
func (e ReferenceAlreadyExistsError) ErrorMetadata() []structerr.MetadataItem
ErrorMetadata implements the `structerr.ErrorMetadater` interface and provides the name of the reference that already existed.
type Updater ¶
type Updater struct {
// contains filtered or unexported fields
}
Updater wraps a `git update-ref --stdin` process, presenting an interface that allows references to be easily updated in bulk. It is not suitable for concurrent use.
Correct usage of the Updater is as follows:
- Transaction must be started before anything else.
- Transaction can't be started if there is an active transaction.
- Updates can be staged only when there is an unprepared transaction.
- Prepare can be called only with an unprepared transaction.
- Commit can be called only with an active transaction. The transaction can be committed unprepared or prepared.
- Close can be called at any time. The active transaction is aborted.
- Any sort of error causes the updater to close.
func New ¶
func New(ctx context.Context, repo git.RepositoryExecutor, opts ...UpdaterOpt) (*Updater, error)
New returns a new bulk updater, wrapping a `git update-ref` process. Call the various methods to enqueue updates, then call Commit() to attempt to apply all the updates at once.
It is important that ctx gets canceled somewhere. If it doesn't, the process spawned by New() may never terminate.
func (*Updater) Close ¶
Close closes the updater and aborts a possible open transaction. No changes will be written to disk, all lockfiles will be cleaned up and the process will exit.
func (*Updater) Commit ¶
Commit applies the commands specified in other calls to the Updater. Commit finishes the reference transaction and another one must be started before further changes can be staged.
func (*Updater) Create ¶
Create commands the reference to be created with the given object ID. The ref must not exist.
A reference transaction must be started before calling Create.
func (*Updater) Delete ¶
func (u *Updater) Delete(reference git.ReferenceName) error
Delete commands the reference to be removed from the repository. This command will ignore any old state of the reference and just force-remove it.
A reference transaction must be started before calling Delete.
func (*Updater) Prepare ¶
Prepare prepares the reference transaction by locking all references and determining their current values. The updates are not yet committed and will be rolled back in case there is no call to `Commit()`. This call is optional.
func (*Updater) Start ¶
Start begins a new reference transaction. The reference changes are not performed until Commit is explicitly called.
func (*Updater) Update ¶
Update commands the reference to be updated to point at the object ID specified in newOID. If newOID is the zero OID, then the branch will be deleted. If oldOID is a non-empty string, then the reference will only be updated if its current value matches the old value. If the old value is the zero OID, then the branch must not exist.
A reference transaction must be started before calling Update.
type UpdaterOpt ¶
type UpdaterOpt func(*updaterConfig)
UpdaterOpt is a type representing options for the Updater.
func WithDisabledTransactions ¶
func WithDisabledTransactions() UpdaterOpt
WithDisabledTransactions disables hooks such that no reference-transactions are used for the updater.
func WithNoDeref ¶
func WithNoDeref() UpdaterOpt
WithNoDeref disables de-reference while updating ref. If this option is turned on, <ref> itself is overwritten, rather than the result of following the symbolic ref.