mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-30 06:38:37 -04:00 
			
		
		
		
	* 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>
		
			
				
	
	
		
			73 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
		
			Vendored
		
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
		
			Vendored
		
	
	
	
| 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
 | |
| }
 |