summaryrefslogtreecommitdiffstats
path: root/modules/git/commit.go
diff options
context:
space:
mode:
Diffstat (limited to 'modules/git/commit.go')
-rw-r--r--modules/git/commit.go49
1 files changed, 49 insertions, 0 deletions
diff --git a/modules/git/commit.go b/modules/git/commit.go
index 2f7f53e7ce..83e03c2795 100644
--- a/modules/git/commit.go
+++ b/modules/git/commit.go
@@ -10,6 +10,11 @@ import (
"bytes"
"container/list"
"fmt"
+ "image"
+ "image/color"
+ _ "image/gif" // for processing gif images
+ _ "image/jpeg" // for processing jpeg images
+ _ "image/png" // for processing png images
"io"
"net/http"
"strconv"
@@ -158,6 +163,43 @@ func (c *Commit) IsImageFile(name string) bool {
return isImage
}
+// ImageMetaData represents metadata of an image file
+type ImageMetaData struct {
+ ColorModel color.Model
+ Width int
+ Height int
+ ByteSize int64
+}
+
+// ImageInfo returns information about the dimensions of an image
+func (c *Commit) ImageInfo(name string) (*ImageMetaData, error) {
+ if !c.IsImageFile(name) {
+ return nil, nil
+ }
+
+ blob, err := c.GetBlobByPath(name)
+ if err != nil {
+ return nil, err
+ }
+ reader, err := blob.DataAsync()
+ if err != nil {
+ return nil, err
+ }
+ defer reader.Close()
+ config, _, err := image.DecodeConfig(reader)
+ if err != nil {
+ return nil, err
+ }
+
+ metadata := ImageMetaData{
+ ColorModel: config.ColorModel,
+ Width: config.Width,
+ Height: config.Height,
+ ByteSize: blob.Size(),
+ }
+ return &metadata, nil
+}
+
// GetCommitByPath return the commit of relative path object.
func (c *Commit) GetCommitByPath(relpath string) (*Commit, error) {
return c.repo.getCommitByPathWithID(c.ID, relpath)
@@ -310,6 +352,13 @@ func (c *Commit) FileChangedSinceCommit(filename, pastCommit string) (bool, erro
return c.repo.FileChangedBetweenCommits(filename, pastCommit, c.ID.String())
}
+// HasFile returns true if the file given exists on this commit
+// This does only mean it's there - it does not mean the file was changed during the commit.
+func (c *Commit) HasFile(filename string) (bool, error) {
+ result, err := c.repo.LsFiles(filename)
+ return result[0] == filename, err
+}
+
// GetSubModules get all the sub modules of current revision git tree
func (c *Commit) GetSubModules() (*ObjectCache, error) {
if c.submoduleCache != nil {