mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-30 06:38:37 -04:00 
			
		
		
		
	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:
		
							
								
								
									
										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 | ||||
| } | ||||
		Reference in New Issue
	
	Block a user