aboutsummaryrefslogtreecommitdiffstats
path: root/modules/git/tree.go
diff options
context:
space:
mode:
Diffstat (limited to 'modules/git/tree.go')
-rw-r--r--modules/git/tree.go21
1 files changed, 21 insertions, 0 deletions
diff --git a/modules/git/tree.go b/modules/git/tree.go
index 059f0a8287..3671f421e9 100644
--- a/modules/git/tree.go
+++ b/modules/git/tree.go
@@ -6,6 +6,7 @@
package git
import (
+ "bytes"
"strings"
)
@@ -45,3 +46,23 @@ func (t *Tree) SubTree(rpath string) (*Tree, error) {
}
return g, nil
}
+
+// LsTree checks if the given filenames are in the tree
+func (repo *Repository) LsTree(ref string, filenames ...string) ([]string, error) {
+ cmd := NewCommand("ls-tree", "-z", "--name-only", "--", ref)
+ for _, arg := range filenames {
+ if arg != "" {
+ cmd.AddArguments(arg)
+ }
+ }
+ res, err := cmd.RunInDirBytes(repo.Path)
+ if err != nil {
+ return nil, err
+ }
+ filelist := make([]string, 0, len(filenames))
+ for _, line := range bytes.Split(res, []byte{'\000'}) {
+ filelist = append(filelist, string(line))
+ }
+
+ return filelist, err
+}