forked from forgejo/forgejo
Use git log name-status in get last commit (#16059)
* Improve get last commit using git log --name-status git log --name-status -c provides information about the diff between a commit and its parents. Using this and adjusting the algorithm to use the first change to a path allows for a much faster generation of commit info. There is a subtle change in the results generated but this will cause the results to more closely match those from elsewhere. Signed-off-by: Andrew Thornton <art27@cantab.net> Co-authored-by: 6543 <6543@obermui.de> Co-authored-by: techknowlogick <techknowlogick@gitea.io> Co-authored-by: Lauris BH <lauris@nix.lv>
This commit is contained in:
parent
8fa3bbc424
commit
23358bc55d
40 changed files with 2540 additions and 297 deletions
72
vendor/github.com/djherbis/buffer/file.go
generated
vendored
Normal file
72
vendor/github.com/djherbis/buffer/file.go
generated
vendored
Normal file
|
@ -0,0 +1,72 @@
|
|||
package buffer
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/gob"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/djherbis/buffer/wrapio"
|
||||
)
|
||||
|
||||
// File is used as the backing resource for a the NewFile BufferAt.
|
||||
type File interface {
|
||||
Name() string
|
||||
Stat() (fi os.FileInfo, err error)
|
||||
io.ReaderAt
|
||||
io.WriterAt
|
||||
Close() error
|
||||
}
|
||||
|
||||
type fileBuffer struct {
|
||||
file File
|
||||
*wrapio.Wrapper
|
||||
}
|
||||
|
||||
// NewFile returns a new BufferAt backed by "file" with max-size N.
|
||||
func NewFile(N int64, file File) BufferAt {
|
||||
return &fileBuffer{
|
||||
file: file,
|
||||
Wrapper: wrapio.NewWrapper(file, 0, 0, N),
|
||||
}
|
||||
}
|
||||
|
||||
func init() {
|
||||
gob.Register(&fileBuffer{})
|
||||
}
|
||||
|
||||
func (buf *fileBuffer) MarshalBinary() ([]byte, error) {
|
||||
fullpath, err := filepath.Abs(filepath.Dir(buf.file.Name()))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
base := filepath.Base(buf.file.Name())
|
||||
buf.file.Close()
|
||||
|
||||
buffer := bytes.NewBuffer(nil)
|
||||
fmt.Fprintln(buffer, filepath.Join(fullpath, base))
|
||||
fmt.Fprintln(buffer, buf.Wrapper.N, buf.Wrapper.L, buf.Wrapper.O)
|
||||
return buffer.Bytes(), nil
|
||||
}
|
||||
|
||||
func (buf *fileBuffer) UnmarshalBinary(data []byte) error {
|
||||
buffer := bytes.NewBuffer(data)
|
||||
var filename string
|
||||
var N, L, O int64
|
||||
_, err := fmt.Fscanln(buffer, &filename)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
file, err := os.Open(filename)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
buf.file = file
|
||||
|
||||
_, err = fmt.Fscanln(buffer, &N, &L, &O)
|
||||
buf.Wrapper = wrapio.NewWrapper(file, L, O, N)
|
||||
return err
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue