diff options
Diffstat (limited to 'modules/git/blob.go')
-rw-r--r-- | modules/git/blob.go | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/modules/git/blob.go b/modules/git/blob.go index 68147673a3..df88ac2ede 100644 --- a/modules/git/blob.go +++ b/modules/git/blob.go @@ -6,6 +6,7 @@ package git import ( + "bytes" "encoding/base64" "io" "io/ioutil" @@ -50,6 +51,28 @@ func (b *Blob) GetBlobContent() (string, error) { return string(buf), nil } +// GetBlobLineCount gets line count of lob as raw text +func (b *Blob) GetBlobLineCount() (int, error) { + reader, err := b.DataAsync() + if err != nil { + return 0, err + } + defer reader.Close() + buf := make([]byte, 32*1024) + count := 0 + lineSep := []byte{'\n'} + for { + c, err := reader.Read(buf) + count += bytes.Count(buf[:c], lineSep) + switch { + case err == io.EOF: + return count, nil + case err != nil: + return count, err + } + } +} + // GetBlobContentBase64 Reads the content of the blob with a base64 encode and returns the encoded string func (b *Blob) GetBlobContentBase64() (string, error) { dataRc, err := b.DataAsync() |