forked from forgejo/forgejo
Implement git refs API for listing references (branches, tags and other) (#5354)
* Inital routes to git refs api * Git refs API implementation * Update swagger * Fix copyright * Make swagger happy add basic test * Fix test * Fix test again :)
This commit is contained in:
parent
294904321c
commit
08bf443016
268 changed files with 48603 additions and 10 deletions
66
vendor/gopkg.in/src-d/go-git.v4/prune.go
generated
vendored
Normal file
66
vendor/gopkg.in/src-d/go-git.v4/prune.go
generated
vendored
Normal file
|
@ -0,0 +1,66 @@
|
|||
package git
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"time"
|
||||
|
||||
"gopkg.in/src-d/go-git.v4/plumbing"
|
||||
"gopkg.in/src-d/go-git.v4/plumbing/storer"
|
||||
)
|
||||
|
||||
type PruneHandler func(unreferencedObjectHash plumbing.Hash) error
|
||||
type PruneOptions struct {
|
||||
// OnlyObjectsOlderThan if set to non-zero value
|
||||
// selects only objects older than the time provided.
|
||||
OnlyObjectsOlderThan time.Time
|
||||
// Handler is called on matching objects
|
||||
Handler PruneHandler
|
||||
}
|
||||
|
||||
var ErrLooseObjectsNotSupported = errors.New("Loose objects not supported")
|
||||
|
||||
// DeleteObject deletes an object from a repository.
|
||||
// The type conveniently matches PruneHandler.
|
||||
func (r *Repository) DeleteObject(hash plumbing.Hash) error {
|
||||
los, ok := r.Storer.(storer.LooseObjectStorer)
|
||||
if !ok {
|
||||
return ErrLooseObjectsNotSupported
|
||||
}
|
||||
|
||||
return los.DeleteLooseObject(hash)
|
||||
}
|
||||
|
||||
func (r *Repository) Prune(opt PruneOptions) error {
|
||||
los, ok := r.Storer.(storer.LooseObjectStorer)
|
||||
if !ok {
|
||||
return ErrLooseObjectsNotSupported
|
||||
}
|
||||
|
||||
pw := newObjectWalker(r.Storer)
|
||||
err := pw.walkAllRefs()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// Now walk all (loose) objects in storage.
|
||||
return los.ForEachObjectHash(func(hash plumbing.Hash) error {
|
||||
// Get out if we have seen this object.
|
||||
if pw.isSeen(hash) {
|
||||
return nil
|
||||
}
|
||||
// Otherwise it is a candidate for pruning.
|
||||
// Check out for too new objects next.
|
||||
if !opt.OnlyObjectsOlderThan.IsZero() {
|
||||
// Errors here are non-fatal. The object may be e.g. packed.
|
||||
// Or concurrently deleted. Skip such objects.
|
||||
t, err := los.LooseObjectTime(hash)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
// Skip too new objects.
|
||||
if !t.Before(opt.OnlyObjectsOlderThan) {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
return opt.Handler(hash)
|
||||
})
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue