diff options
Diffstat (limited to 'modules/git/commit.go')
-rw-r--r-- | modules/git/commit.go | 49 |
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 { |