Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitaly.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTiago Botelho <tiagonbotelho@hotmail.com>2018-09-11 15:26:53 +0300
committerTiago Botelho <tiagonbotelho@hotmail.com>2018-09-24 17:29:21 +0300
commitaad4516ff2db3d61447635b31c5982e70c63ad55 (patch)
tree53fdfb1d432fe49c4adb5067da8760867b1cffdd
parent0772a2be216304c412a7b136817df83396ebfcf3 (diff)
Adds ListLastCommitsForTree
-rw-r--r--internal/git/ls_tree/last_commits.go39
-rw-r--r--internal/service/commit/list_last_commits_for_tree.go38
2 files changed, 77 insertions, 0 deletions
diff --git a/internal/git/ls_tree/last_commits.go b/internal/git/ls_tree/last_commits.go
new file mode 100644
index 000000000..914c9d945
--- /dev/null
+++ b/internal/git/ls_tree/last_commits.go
@@ -0,0 +1,39 @@
+package ls_tree
+
+import (
+ "context"
+ "io/ioutil"
+ "regexp"
+ "strings"
+
+ "gitlab.com/gitlab-org/gitaly/internal/command"
+ "gitlab.com/gitlab-org/gitaly/internal/git"
+
+ pb "gitlab.com/gitlab-org/gitaly-proto/go"
+
+ "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus"
+ log "github.com/sirupsen/logrus"
+)
+
+func LastCommitsForTree(ctx context.Context, repo *pb.Repository, revision string, path string) (*pb.GitCommit, error) {
+ var commits []*pb.GitCommit
+
+ cmd, err := git.Command(ctx, repo, "ls-tree", "-z", "--full-name", revision, "--", path)
+ if err != nil {
+ return nil, err
+ }
+
+ contents, err := ioutil.ReadAll(cmd)
+ if err != nil {
+ return nil, err
+ }
+
+ re := regex.MustCompile("[0-9a-f]{40}")
+ commitIDs := re.FindAllString(contents, -1)
+
+ for _, commitID := range commitIDs {
+ append(commits, GetCommit(ctx, repo, strings.TrimSpace(string(commitID))))
+ }
+
+ return commits, nil
+}
diff --git a/internal/service/commit/list_last_commits_for_tree.go b/internal/service/commit/list_last_commits_for_tree.go
new file mode 100644
index 000000000..bede08bfb
--- /dev/null
+++ b/internal/service/commit/list_last_commits_for_tree.go
@@ -0,0 +1,38 @@
+package commit
+
+import (
+ "fmt"
+
+ "gitlab.com/gitlab-org/gitaly/internal/git/ls_tree"
+
+ pb "gitlab.com/gitlab-org/gitaly-proto/go"
+
+ "golang.org/x/net/context"
+ "google.golang.org/grpc/codes"
+ "google.golang.org/grpc/status"
+)
+
+func (s *server) ListLastCommitsForTree(ctx context.Context, in *pb.ListLastCommitsForTreeRequest) (*pb.ListLastCommitsForTreeResponse, error) {
+ if err := validateListLastCommitsForTreeRequest(in); err != nil {
+ return nil, status.Errorf(codes.InvalidArgument, "ListLastCommitsForTree: %v", err)
+ }
+
+ path := string(in.GetPath())
+ if len(path) == 0 || path == "/" {
+ path = "."
+ }
+
+ commits, err := ls_tree.LastCommitsForTree(ctx, in.GetRepository(), string(in.GetRevision()), path)
+ if err != nil {
+ return nil, err
+ }
+
+ return &pb.ListLastCommitsForTreeResponse{Commits: commits}, nil
+}
+
+func validateListLastCommitsForTreeRequest(in *pb.ListLastCommitsForTreeRequest) error {
+ if len(in.Revision) == 0 {
+ return fmt.Errorf("empty Revision")
+ }
+ return nil
+}