Skip to content

Commit 68edeb4

Browse files
author
Derek Ludwig
committed
something!
1 parent 04ec795 commit 68edeb4

File tree

10 files changed

+217
-17
lines changed

10 files changed

+217
-17
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ test-vendor:
157157

158158
.PHONY: test-sqlite
159159
test-sqlite: integrations.sqlite.test
160-
GITEA_ROOT=${CURDIR} GITEA_CONF=integrations/sqlite.ini ./integrations.sqlite.test
160+
GITEA_ROOT=${CURDIR} GITEA_CONF=integrations/sqlite.ini ./integrations.sqlite.test -test.run TestAPIGetTree
161161

162162
.PHONY: test-mysql
163163
test-mysql: integrations.test

integrations/api_tree_test.go

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
// Copyright 2017 The Gitea Authors. All rights reserved.
2+
// Use of this source code is governed by a MIT-style
3+
// license that can be found in the LICENSE file.
4+
5+
package integrations
6+
7+
import (
8+
"bytes"
9+
"fmt"
10+
"net/http"
11+
"testing"
12+
13+
api "code.gitea.io/sdk/gitea"
14+
15+
"github.com/stretchr/testify/assert"
16+
)
17+
18+
func testAPIGetTree(t *testing.T, treePath string, exists bool, entries []*api.TreeEntry) {
19+
prepareTestEnv(t)
20+
21+
session := loginUser(t, "user2")
22+
req := NewRequestf(t, "GET", "/api/v1/repos/user2/repo1/trees/%s", treePath)
23+
resp := session.MakeRequest(t, req, NoExpectedStatus)
24+
if !exists {
25+
assert.EqualValues(t, http.StatusNotFound, resp.HeaderCode)
26+
return
27+
}
28+
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
29+
fmt.Print(bytes.NewBuffer(resp.Body))
30+
var trees []*api.TreeEntry
31+
DecodeJSON(t, resp, &trees)
32+
33+
if assert.EqualValues(t, len(entries), len(trees)) {
34+
for i, tree := range trees {
35+
assert.EqualValues(t, entries[i], tree)
36+
}
37+
}
38+
}
39+
40+
func TestAPIGetTree(t *testing.T) {
41+
for _, test := range []struct {
42+
TreePath string
43+
Exists bool
44+
Entries []*api.TreeEntry
45+
}{
46+
{"master", true, []*api.TreeEntry{
47+
&api.TreeEntry{
48+
Name: "README.md",
49+
ID: "4b4851ad51df6a7d9f25c979345979eaeb5b349f",
50+
Type: "blob",
51+
Size: 30,
52+
},
53+
}},
54+
{"master/doesnotexist", false, []*api.TreeEntry{}},
55+
{"feature/1", true, []*api.TreeEntry{
56+
&api.TreeEntry{
57+
Name: "README.md",
58+
ID: "4b4851ad51df6a7d9f25c979345979eaeb5b349f",
59+
Type: "blob",
60+
Size: 30,
61+
},
62+
}},
63+
{"feature/1/doesnotexist", false, []*api.TreeEntry{}},
64+
} {
65+
testAPIGetTree(t, test.TreePath, test.Exists, test.Entries)
66+
}
67+
}
68+
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"storage":"boltdb","index_type":"upside_down"}
32 KB
Binary file not shown.

routers/api/v1/api.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -383,6 +383,7 @@ func RegisterRoutes(m *macaron.Macaron) {
383383
}, reqToken())
384384
m.Get("/raw/*", context.RepoRef(), repo.GetRawFile)
385385
m.Get("/archive/*", repo.GetArchive)
386+
m.Get("/trees/*", context.RepoRef(), repo.GetTree)
386387
m.Combo("/forks").Get(repo.ListForks).
387388
Post(reqToken(), bind(api.CreateForkOption{}), repo.CreateFork)
388389
m.Group("/branches", func() {

routers/api/v1/repo/tree.go

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
// Copyright 2017 The Gitea Authors. All rights reserved.
2+
// Use of this source code is governed by a MIT-style
3+
// license that can be found in the LICENSE file.
4+
5+
package repo
6+
7+
import (
8+
api "code.gitea.io/sdk/gitea"
9+
"code.gitea.io/git"
10+
11+
// "code.gitea.io/gitea/models"
12+
"code.gitea.io/gitea/modules/context"
13+
// "code.gitea.io/gitea/routers/repo"
14+
)
15+
16+
// GetTree get a tree (directory) by path on a repository
17+
func GetTree(ctx *context.APIContext) {
18+
if !ctx.Repo.HasAccess() {
19+
ctx.Status(404)
20+
return
21+
}
22+
23+
tree, err := ctx.Repo.Commit.SubTree(ctx.Repo.TreePath)
24+
if err != nil {
25+
ctx.NotFoundOrServerError("Repo.Commit.SubTree", git.IsErrNotExist, err)
26+
return
27+
}
28+
29+
entries, err := tree.ListEntries()
30+
if err != nil {
31+
ctx.Handle(500, "ListEntries", err)
32+
return
33+
}
34+
entries.Sort()
35+
36+
moreInfo := make([]*api.TreeEntry, len(entries))
37+
for i, entry := range entries {
38+
moreInfo[i] = &api.TreeEntry {
39+
entry.Name(),
40+
entry.ID.String(),
41+
entry.Size(),
42+
api.ObjectType(entry.Type),
43+
}
44+
}
45+
46+
ctx.JSON(200, moreInfo)
47+
}

vendor/code.gitea.io/sdk/gitea/attachment.go

Lines changed: 17 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/code.gitea.io/sdk/gitea/release.go

Lines changed: 41 additions & 13 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/code.gitea.io/sdk/gitea/repo_tree.go

Lines changed: 38 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/vendor.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@
99
"revisionTime": "2017-08-03T00:53:29Z"
1010
},
1111
{
12-
"checksumSHA1": "Zgp5RqU+20L2p9TNl1rSsUIWEEE=",
12+
"checksumSHA1": "yYw6BoPdui01TR7TO6F3houQA9E=",
1313
"path": "code.gitea.io/sdk/gitea",
14-
"revision": "bc243ad6c268d60658c71185452334b300c268cf",
15-
"revisionTime": "2017-08-21T08:23:17Z"
14+
"revision": "11e0aa8cd45f2042e3180e941acdf9c7fb33c43b",
15+
"revisionTime": "2017-08-23T21:38:18Z"
1616
},
1717
{
1818
"checksumSHA1": "bOODD4Gbw3GfcuQPU2dI40crxxk=",

0 commit comments

Comments
 (0)