mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-06-10 08:29:32 +00:00
[mod]: Bump gopkg.in/src-d/go-git.v4 from 4.8.0 to 4.10.0 (#6662)
Bumps [gopkg.in/src-d/go-git.v4](https://github.com/src-d/go-git) from 4.8.0 to 4.10.0. - [Release notes](https://github.com/src-d/go-git/releases) - [Commits](https://github.com/src-d/go-git/compare/v4.8.0...v4.10.0)
This commit is contained in:
parent
62b35964e3
commit
4183c846e3
28 changed files with 597 additions and 189 deletions
3
vendor/gopkg.in/src-d/go-git.v4/storage/filesystem/dotgit/dotgit.go
generated
vendored
3
vendor/gopkg.in/src-d/go-git.v4/storage/filesystem/dotgit/dotgit.go
generated
vendored
|
@ -14,6 +14,7 @@ import (
|
|||
|
||||
"gopkg.in/src-d/go-billy.v4/osfs"
|
||||
"gopkg.in/src-d/go-git.v4/plumbing"
|
||||
"gopkg.in/src-d/go-git.v4/storage"
|
||||
"gopkg.in/src-d/go-git.v4/utils/ioutil"
|
||||
|
||||
"gopkg.in/src-d/go-billy.v4"
|
||||
|
@ -596,7 +597,7 @@ func (d *DotGit) checkReferenceAndTruncate(f billy.File, old *plumbing.Reference
|
|||
return err
|
||||
}
|
||||
if ref.Hash() != old.Hash() {
|
||||
return fmt.Errorf("reference has changed concurrently")
|
||||
return storage.ErrReferenceHasChanged
|
||||
}
|
||||
_, err = f.Seek(0, io.SeekStart)
|
||||
if err != nil {
|
||||
|
|
51
vendor/gopkg.in/src-d/go-git.v4/storage/filesystem/dotgit/dotgit_setref.go
generated
vendored
51
vendor/gopkg.in/src-d/go-git.v4/storage/filesystem/dotgit/dotgit_setref.go
generated
vendored
|
@ -1,15 +1,24 @@
|
|||
// +build !norwfs
|
||||
|
||||
package dotgit
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"gopkg.in/src-d/go-git.v4/plumbing"
|
||||
"gopkg.in/src-d/go-git.v4/utils/ioutil"
|
||||
|
||||
"gopkg.in/src-d/go-billy.v4"
|
||||
)
|
||||
|
||||
func (d *DotGit) setRef(fileName, content string, old *plumbing.Reference) (err error) {
|
||||
if billy.CapabilityCheck(d.fs, billy.ReadAndWriteCapability) {
|
||||
return d.setRefRwfs(fileName, content, old)
|
||||
}
|
||||
|
||||
return d.setRefNorwfs(fileName, content, old)
|
||||
}
|
||||
|
||||
func (d *DotGit) setRefRwfs(fileName, content string, old *plumbing.Reference) (err error) {
|
||||
// If we are not checking an old ref, just truncate the file.
|
||||
mode := os.O_RDWR | os.O_CREATE
|
||||
if old == nil {
|
||||
|
@ -41,3 +50,41 @@ func (d *DotGit) setRef(fileName, content string, old *plumbing.Reference) (err
|
|||
_, err = f.Write([]byte(content))
|
||||
return err
|
||||
}
|
||||
|
||||
// There are some filesystems that don't support opening files in RDWD mode.
|
||||
// In these filesystems the standard SetRef function can not be used as it
|
||||
// reads the reference file to check that it's not modified before updating it.
|
||||
//
|
||||
// This version of the function writes the reference without extra checks
|
||||
// making it compatible with these simple filesystems. This is usually not
|
||||
// a problem as they should be accessed by only one process at a time.
|
||||
func (d *DotGit) setRefNorwfs(fileName, content string, old *plumbing.Reference) error {
|
||||
_, err := d.fs.Stat(fileName)
|
||||
if err == nil && old != nil {
|
||||
fRead, err := d.fs.Open(fileName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
ref, err := d.readReferenceFrom(fRead, old.Name().String())
|
||||
fRead.Close()
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if ref.Hash() != old.Hash() {
|
||||
return fmt.Errorf("reference has changed concurrently")
|
||||
}
|
||||
}
|
||||
|
||||
f, err := d.fs.Create(fileName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
defer f.Close()
|
||||
|
||||
_, err = f.Write([]byte(content))
|
||||
return err
|
||||
}
|
||||
|
|
47
vendor/gopkg.in/src-d/go-git.v4/storage/filesystem/dotgit/dotgit_setref_norwfs.go
generated
vendored
47
vendor/gopkg.in/src-d/go-git.v4/storage/filesystem/dotgit/dotgit_setref_norwfs.go
generated
vendored
|
@ -1,47 +0,0 @@
|
|||
// +build norwfs
|
||||
|
||||
package dotgit
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"gopkg.in/src-d/go-git.v4/plumbing"
|
||||
)
|
||||
|
||||
// There are some filesystems that don't support opening files in RDWD mode.
|
||||
// In these filesystems the standard SetRef function can not be used as i
|
||||
// reads the reference file to check that it's not modified before updating it.
|
||||
//
|
||||
// This version of the function writes the reference without extra checks
|
||||
// making it compatible with these simple filesystems. This is usually not
|
||||
// a problem as they should be accessed by only one process at a time.
|
||||
func (d *DotGit) setRef(fileName, content string, old *plumbing.Reference) error {
|
||||
_, err := d.fs.Stat(fileName)
|
||||
if err == nil && old != nil {
|
||||
fRead, err := d.fs.Open(fileName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
ref, err := d.readReferenceFrom(fRead, old.Name().String())
|
||||
fRead.Close()
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if ref.Hash() != old.Hash() {
|
||||
return fmt.Errorf("reference has changed concurrently")
|
||||
}
|
||||
}
|
||||
|
||||
f, err := d.fs.Create(fileName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
defer f.Close()
|
||||
|
||||
_, err = f.Write([]byte(content))
|
||||
return err
|
||||
}
|
60
vendor/gopkg.in/src-d/go-git.v4/storage/filesystem/object.go
generated
vendored
60
vendor/gopkg.in/src-d/go-git.v4/storage/filesystem/object.go
generated
vendored
|
@ -20,24 +20,25 @@ import (
|
|||
type ObjectStorage struct {
|
||||
options Options
|
||||
|
||||
// deltaBaseCache is an object cache uses to cache delta's bases when
|
||||
deltaBaseCache cache.Object
|
||||
// objectCache is an object cache uses to cache delta's bases and also recently
|
||||
// loaded loose objects
|
||||
objectCache cache.Object
|
||||
|
||||
dir *dotgit.DotGit
|
||||
index map[plumbing.Hash]idxfile.Index
|
||||
}
|
||||
|
||||
// NewObjectStorage creates a new ObjectStorage with the given .git directory and cache.
|
||||
func NewObjectStorage(dir *dotgit.DotGit, cache cache.Object) *ObjectStorage {
|
||||
return NewObjectStorageWithOptions(dir, cache, Options{})
|
||||
func NewObjectStorage(dir *dotgit.DotGit, objectCache cache.Object) *ObjectStorage {
|
||||
return NewObjectStorageWithOptions(dir, objectCache, Options{})
|
||||
}
|
||||
|
||||
// NewObjectStorageWithOptions creates a new ObjectStorage with the given .git directory, cache and extra options
|
||||
func NewObjectStorageWithOptions(dir *dotgit.DotGit, cache cache.Object, ops Options) *ObjectStorage {
|
||||
func NewObjectStorageWithOptions(dir *dotgit.DotGit, objectCache cache.Object, ops Options) *ObjectStorage {
|
||||
return &ObjectStorage{
|
||||
options: ops,
|
||||
deltaBaseCache: cache,
|
||||
dir: dir,
|
||||
options: ops,
|
||||
objectCache: objectCache,
|
||||
dir: dir,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -206,7 +207,7 @@ func (s *ObjectStorage) encodedObjectSizeFromPackfile(h plumbing.Hash) (
|
|||
idx := s.index[pack]
|
||||
hash, err := idx.FindHash(offset)
|
||||
if err == nil {
|
||||
obj, ok := s.deltaBaseCache.Get(hash)
|
||||
obj, ok := s.objectCache.Get(hash)
|
||||
if ok {
|
||||
return obj.Size(), nil
|
||||
}
|
||||
|
@ -215,8 +216,8 @@ func (s *ObjectStorage) encodedObjectSizeFromPackfile(h plumbing.Hash) (
|
|||
}
|
||||
|
||||
var p *packfile.Packfile
|
||||
if s.deltaBaseCache != nil {
|
||||
p = packfile.NewPackfileWithCache(idx, s.dir.Fs(), f, s.deltaBaseCache)
|
||||
if s.objectCache != nil {
|
||||
p = packfile.NewPackfileWithCache(idx, s.dir.Fs(), f, s.objectCache)
|
||||
} else {
|
||||
p = packfile.NewPackfile(idx, s.dir.Fs(), f)
|
||||
}
|
||||
|
@ -241,9 +242,19 @@ func (s *ObjectStorage) EncodedObjectSize(h plumbing.Hash) (
|
|||
// EncodedObject returns the object with the given hash, by searching for it in
|
||||
// the packfile and the git object directories.
|
||||
func (s *ObjectStorage) EncodedObject(t plumbing.ObjectType, h plumbing.Hash) (plumbing.EncodedObject, error) {
|
||||
obj, err := s.getFromUnpacked(h)
|
||||
if err == plumbing.ErrObjectNotFound {
|
||||
var obj plumbing.EncodedObject
|
||||
var err error
|
||||
|
||||
if s.index != nil {
|
||||
obj, err = s.getFromPackfile(h, false)
|
||||
if err == plumbing.ErrObjectNotFound {
|
||||
obj, err = s.getFromUnpacked(h)
|
||||
}
|
||||
} else {
|
||||
obj, err = s.getFromUnpacked(h)
|
||||
if err == plumbing.ErrObjectNotFound {
|
||||
obj, err = s.getFromPackfile(h, false)
|
||||
}
|
||||
}
|
||||
|
||||
// If the error is still object not found, check if it's a shared object
|
||||
|
@ -254,7 +265,7 @@ func (s *ObjectStorage) EncodedObject(t plumbing.ObjectType, h plumbing.Hash) (p
|
|||
// Create a new object storage with the DotGit(s) and check for the
|
||||
// required hash object. Skip when not found.
|
||||
for _, dg := range dotgits {
|
||||
o := NewObjectStorage(dg, s.deltaBaseCache)
|
||||
o := NewObjectStorage(dg, s.objectCache)
|
||||
enobj, enerr := o.EncodedObject(t, h)
|
||||
if enerr != nil {
|
||||
continue
|
||||
|
@ -304,9 +315,12 @@ func (s *ObjectStorage) getFromUnpacked(h plumbing.Hash) (obj plumbing.EncodedOb
|
|||
|
||||
return nil, err
|
||||
}
|
||||
|
||||
defer ioutil.CheckClose(f, &err)
|
||||
|
||||
if cacheObj, found := s.objectCache.Get(h); found {
|
||||
return cacheObj, nil
|
||||
}
|
||||
|
||||
obj = s.NewEncodedObject()
|
||||
r, err := objfile.NewReader(f)
|
||||
if err != nil {
|
||||
|
@ -327,6 +341,8 @@ func (s *ObjectStorage) getFromUnpacked(h plumbing.Hash) (obj plumbing.EncodedOb
|
|||
return nil, err
|
||||
}
|
||||
|
||||
s.objectCache.Put(obj)
|
||||
|
||||
_, err = io.Copy(w, r)
|
||||
return obj, err
|
||||
}
|
||||
|
@ -369,7 +385,7 @@ func (s *ObjectStorage) decodeObjectAt(
|
|||
) (plumbing.EncodedObject, error) {
|
||||
hash, err := idx.FindHash(offset)
|
||||
if err == nil {
|
||||
obj, ok := s.deltaBaseCache.Get(hash)
|
||||
obj, ok := s.objectCache.Get(hash)
|
||||
if ok {
|
||||
return obj, nil
|
||||
}
|
||||
|
@ -380,8 +396,8 @@ func (s *ObjectStorage) decodeObjectAt(
|
|||
}
|
||||
|
||||
var p *packfile.Packfile
|
||||
if s.deltaBaseCache != nil {
|
||||
p = packfile.NewPackfileWithCache(idx, s.dir.Fs(), f, s.deltaBaseCache)
|
||||
if s.objectCache != nil {
|
||||
p = packfile.NewPackfileWithCache(idx, s.dir.Fs(), f, s.objectCache)
|
||||
} else {
|
||||
p = packfile.NewPackfile(idx, s.dir.Fs(), f)
|
||||
}
|
||||
|
@ -400,11 +416,7 @@ func (s *ObjectStorage) decodeDeltaObjectAt(
|
|||
}
|
||||
|
||||
p := packfile.NewScanner(f)
|
||||
if _, err := p.SeekFromStart(offset); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
header, err := p.NextObjectHeader()
|
||||
header, err := p.SeekObjectHeader(offset)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -495,7 +507,7 @@ func (s *ObjectStorage) buildPackfileIters(
|
|||
}
|
||||
return newPackfileIter(
|
||||
s.dir.Fs(), pack, t, seen, s.index[h],
|
||||
s.deltaBaseCache, s.options.KeepDescriptors,
|
||||
s.objectCache, s.options.KeepDescriptors,
|
||||
)
|
||||
},
|
||||
}, nil
|
||||
|
|
6
vendor/gopkg.in/src-d/go-git.v4/storage/filesystem/storage.go
generated
vendored
6
vendor/gopkg.in/src-d/go-git.v4/storage/filesystem/storage.go
generated
vendored
|
@ -51,11 +51,7 @@ func NewStorageWithOptions(fs billy.Filesystem, cache cache.Object, ops Options)
|
|||
fs: fs,
|
||||
dir: dir,
|
||||
|
||||
ObjectStorage: ObjectStorage{
|
||||
options: ops,
|
||||
deltaBaseCache: cache,
|
||||
dir: dir,
|
||||
},
|
||||
ObjectStorage: *NewObjectStorageWithOptions(dir, cache, ops),
|
||||
ReferenceStorage: ReferenceStorage{dir: dir},
|
||||
IndexStorage: IndexStorage{dir: dir},
|
||||
ShallowStorage: ShallowStorage{dir: dir},
|
||||
|
|
3
vendor/gopkg.in/src-d/go-git.v4/storage/memory/storage.go
generated
vendored
3
vendor/gopkg.in/src-d/go-git.v4/storage/memory/storage.go
generated
vendored
|
@ -13,7 +13,6 @@ import (
|
|||
)
|
||||
|
||||
var ErrUnsupportedObjectType = fmt.Errorf("unsupported object type")
|
||||
var ErrRefHasChanged = fmt.Errorf("reference has changed concurrently")
|
||||
|
||||
// Storage is an implementation of git.Storer that stores data on memory, being
|
||||
// ephemeral. The use of this storage should be done in controlled envoriments,
|
||||
|
@ -258,7 +257,7 @@ func (r ReferenceStorage) CheckAndSetReference(ref, old *plumbing.Reference) err
|
|||
if old != nil {
|
||||
tmp := r[ref.Name()]
|
||||
if tmp != nil && tmp.Hash() != old.Hash() {
|
||||
return ErrRefHasChanged
|
||||
return storage.ErrReferenceHasChanged
|
||||
}
|
||||
}
|
||||
r[ref.Name()] = ref
|
||||
|
|
4
vendor/gopkg.in/src-d/go-git.v4/storage/storer.go
generated
vendored
4
vendor/gopkg.in/src-d/go-git.v4/storage/storer.go
generated
vendored
|
@ -1,10 +1,14 @@
|
|||
package storage
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"gopkg.in/src-d/go-git.v4/config"
|
||||
"gopkg.in/src-d/go-git.v4/plumbing/storer"
|
||||
)
|
||||
|
||||
var ErrReferenceHasChanged = errors.New("reference has changed concurrently")
|
||||
|
||||
// Storer is a generic storage of objects, references and any information
|
||||
// related to a particular repository. The package gopkg.in/src-d/go-git.v4/storage
|
||||
// contains two implementation a filesystem base implementation (such as `.git`)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue