Skip to content

Commit c5467d1

Browse files
committed
fix
1 parent 84b6ae4 commit c5467d1

9 files changed

+192
-157
lines changed

modules/structs/repo_file.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,9 @@ type ContentsResponse struct {
124124
SHA string `json:"sha"`
125125
LastCommitSHA string `json:"last_commit_sha"`
126126
// swagger:strfmt date-time
127-
LastCommitWhen time.Time `json:"last_commit_when"`
127+
LastCommitterWhen time.Time `json:"last_committer_when"`
128+
// swagger:strfmt date-time
129+
LastAuthorWhen time.Time `json:"last_author_when"`
128130
// `type` will be `file`, `dir`, `symlink`, or `submodule`
129131
Type string `json:"type"`
130132
Size int64 `json:"size"`

services/repository/files/content.go

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -177,18 +177,22 @@ func GetContents(ctx context.Context, repo *repo_model.Repository, treePath, ref
177177

178178
// All content types have these fields in populated
179179
contentsResponse := &api.ContentsResponse{
180-
Name: entry.Name(),
181-
Path: treePath,
182-
SHA: entry.ID.String(),
183-
LastCommitSHA: lastCommit.ID.String(),
184-
LastCommitWhen: lastCommit.Committer.When,
185-
Size: entry.Size(),
186-
URL: &selfURLString,
180+
Name: entry.Name(),
181+
Path: treePath,
182+
SHA: entry.ID.String(),
183+
LastCommitSHA: lastCommit.ID.String(),
184+
Size: entry.Size(),
185+
URL: &selfURLString,
187186
Links: &api.FileLinksResponse{
188187
Self: &selfURLString,
189188
},
190189
}
191-
190+
if lastCommit.Committer != nil {
191+
contentsResponse.LastCommitterWhen = lastCommit.Committer.When
192+
}
193+
if lastCommit.Author != nil {
194+
contentsResponse.LastAuthorWhen = lastCommit.Author.When
195+
}
192196
// Now populate the rest of the ContentsResponse based on entry type
193197
if entry.IsRegular() || entry.IsExecutable() {
194198
contentsResponse.Type = string(ContentTypeRegular)

templates/swagger/v1_json.tmpl

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

tests/integration/api_repo_file_create_test.go

Lines changed: 58 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import (
88
"fmt"
99
"net/http"
1010
"net/url"
11-
"path/filepath"
11+
"path"
1212
"testing"
1313
"time"
1414

@@ -49,29 +49,41 @@ func getCreateFileOptions() api.CreateFileOptions {
4949
}
5050
}
5151

52-
func getExpectedFileResponseForCreate(repoFullName, commitID, treePath, latestCommitSHA string, latestCommitWhen time.Time) *api.FileResponse {
52+
func normalizeFileContentResponseCommitTime(c *api.ContentsResponse) {
53+
// decoded JSON response may contain different time format, the timezone may differ
54+
c.LastCommitterWhen = c.LastCommitterWhen.UTC()
55+
c.LastAuthorWhen = c.LastAuthorWhen.UTC()
56+
}
57+
58+
type apiFileResponseInfo struct {
59+
repoFullName, commitID, treePath, lastCommitSHA string
60+
lastCommitterWhen, lastAuthorWhen time.Time
61+
}
62+
63+
func getExpectedFileResponseForCreate(info apiFileResponseInfo) *api.FileResponse {
5364
sha := "a635aa942442ddfdba07468cf9661c08fbdf0ebf"
5465
encoding := "base64"
5566
content := "VGhpcyBpcyBuZXcgdGV4dA=="
56-
selfURL := setting.AppURL + "api/v1/repos/" + repoFullName + "/contents/" + treePath + "?ref=master"
57-
htmlURL := setting.AppURL + repoFullName + "/src/branch/master/" + treePath
58-
gitURL := setting.AppURL + "api/v1/repos/" + repoFullName + "/git/blobs/" + sha
59-
downloadURL := setting.AppURL + repoFullName + "/raw/branch/master/" + treePath
60-
return &api.FileResponse{
67+
selfURL := setting.AppURL + "api/v1/repos/" + info.repoFullName + "/contents/" + info.treePath + "?ref=master"
68+
htmlURL := setting.AppURL + info.repoFullName + "/src/branch/master/" + info.treePath
69+
gitURL := setting.AppURL + "api/v1/repos/" + info.repoFullName + "/git/blobs/" + sha
70+
downloadURL := setting.AppURL + info.repoFullName + "/raw/branch/master/" + info.treePath
71+
ret := &api.FileResponse{
6172
Content: &api.ContentsResponse{
62-
Name: filepath.Base(treePath),
63-
Path: treePath,
64-
SHA: sha,
65-
LastCommitSHA: latestCommitSHA,
66-
LastCommitWhen: latestCommitWhen,
67-
Size: 16,
68-
Type: "file",
69-
Encoding: &encoding,
70-
Content: &content,
71-
URL: &selfURL,
72-
HTMLURL: &htmlURL,
73-
GitURL: &gitURL,
74-
DownloadURL: &downloadURL,
73+
Name: path.Base(info.treePath),
74+
Path: info.treePath,
75+
SHA: sha,
76+
LastCommitSHA: info.lastCommitSHA,
77+
LastCommitterWhen: info.lastCommitterWhen,
78+
LastAuthorWhen: info.lastAuthorWhen,
79+
Size: 16,
80+
Type: "file",
81+
Encoding: &encoding,
82+
Content: &content,
83+
URL: &selfURL,
84+
HTMLURL: &htmlURL,
85+
GitURL: &gitURL,
86+
DownloadURL: &downloadURL,
7587
Links: &api.FileLinksResponse{
7688
Self: &selfURL,
7789
GitURL: &gitURL,
@@ -80,10 +92,10 @@ func getExpectedFileResponseForCreate(repoFullName, commitID, treePath, latestCo
8092
},
8193
Commit: &api.FileCommitResponse{
8294
CommitMeta: api.CommitMeta{
83-
URL: setting.AppURL + "api/v1/repos/" + repoFullName + "/git/commits/" + commitID,
84-
SHA: commitID,
95+
URL: setting.AppURL + "api/v1/repos/" + info.repoFullName + "/git/commits/" + info.commitID,
96+
SHA: info.commitID,
8597
},
86-
HTMLURL: setting.AppURL + repoFullName + "/commit/" + commitID,
98+
HTMLURL: setting.AppURL + info.repoFullName + "/commit/" + info.commitID,
8799
Author: &api.CommitUser{
88100
Identity: api.Identity{
89101
Name: "Anne Doe",
@@ -107,6 +119,8 @@ func getExpectedFileResponseForCreate(repoFullName, commitID, treePath, latestCo
107119
Payload: "",
108120
},
109121
}
122+
normalizeFileContentResponseCommitTime(ret.Content)
123+
return ret
110124
}
111125

112126
func BenchmarkAPICreateFileSmall(b *testing.B) {
@@ -168,16 +182,20 @@ func TestAPICreateFile(t *testing.T) {
168182
AddTokenAuth(token2)
169183
resp := MakeRequest(t, req, http.StatusCreated)
170184
gitRepo, _ := gitrepo.OpenRepository(t.Context(), repo1)
185+
defer gitRepo.Close()
171186
commitID, _ := gitRepo.GetBranchCommitID(createFileOptions.NewBranchName)
172-
latestCommit, _ := gitRepo.GetCommitByPath(treePath)
173-
expectedFileResponse := getExpectedFileResponseForCreate("user2/repo1", commitID, treePath, latestCommit.ID.String(), latestCommit.Committer.When)
187+
lastCommit, _ := gitRepo.GetCommitByPath(treePath)
188+
expectedFileResponse := getExpectedFileResponseForCreate(apiFileResponseInfo{
189+
repoFullName: "user2/repo1",
190+
commitID: commitID,
191+
treePath: treePath,
192+
lastCommitSHA: lastCommit.ID.String(),
193+
lastCommitterWhen: lastCommit.Committer.When,
194+
lastAuthorWhen: lastCommit.Author.When,
195+
})
174196
var fileResponse api.FileResponse
175197
DecodeJSON(t, resp, &fileResponse)
176-
177-
// FIXME: This is a workaround to compare time.Time values. This maybe a bug of Golang,
178-
// assume your local timezone is UTC, but a location with zero offset is not equal to UTC but they should be.
179-
expectedFileResponse.Content.LastCommitWhen, _ = time.Parse(time.RFC3339, expectedFileResponse.Content.LastCommitWhen.Format(time.RFC3339))
180-
198+
normalizeFileContentResponseCommitTime(fileResponse.Content)
181199
assert.Equal(t, expectedFileResponse.Content, fileResponse.Content)
182200
assert.Equal(t, expectedFileResponse.Commit.SHA, fileResponse.Commit.SHA)
183201
assert.Equal(t, expectedFileResponse.Commit.HTMLURL, fileResponse.Commit.HTMLURL)
@@ -187,7 +205,6 @@ func TestAPICreateFile(t *testing.T) {
187205
assert.Equal(t, expectedFileResponse.Commit.Committer.Email, fileResponse.Commit.Committer.Email)
188206
assert.Equal(t, expectedFileResponse.Commit.Committer.Name, fileResponse.Commit.Committer.Name)
189207
assert.Equal(t, expectedFileResponse.Commit.Committer.Date, fileResponse.Commit.Committer.Date)
190-
gitRepo.Close()
191208
}
192209

193210
// Test creating a file in a new branch
@@ -291,15 +308,19 @@ func TestAPICreateFile(t *testing.T) {
291308
resp = MakeRequest(t, req, http.StatusCreated)
292309
emptyRepo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{OwnerName: "user2", Name: "empty-repo"}) // public repo
293310
gitRepo, _ := gitrepo.OpenRepository(t.Context(), emptyRepo)
311+
defer gitRepo.Close()
294312
commitID, _ := gitRepo.GetBranchCommitID(createFileOptions.NewBranchName)
295313
latestCommit, _ := gitRepo.GetCommitByPath(treePath)
296-
expectedFileResponse := getExpectedFileResponseForCreate("user2/empty-repo", commitID, treePath, latestCommit.ID.String(), latestCommit.Committer.When)
314+
expectedFileResponse := getExpectedFileResponseForCreate(apiFileResponseInfo{
315+
repoFullName: "user2/empty-repo",
316+
commitID: commitID,
317+
treePath: treePath,
318+
lastCommitSHA: latestCommit.ID.String(),
319+
lastCommitterWhen: latestCommit.Committer.When,
320+
lastAuthorWhen: latestCommit.Author.When,
321+
})
297322
DecodeJSON(t, resp, &fileResponse)
298-
299-
// FIXME: This is a workaround to compare time.Time values. This maybe a bug of Golang,
300-
// assume your local timezone is UTC, but a location with zero offset is not equal to UTC but they should be.
301-
expectedFileResponse.Content.LastCommitWhen, _ = time.Parse(time.RFC3339, expectedFileResponse.Content.LastCommitWhen.Format(time.RFC3339))
302-
323+
normalizeFileContentResponseCommitTime(fileResponse.Content)
303324
assert.Equal(t, expectedFileResponse.Content, fileResponse.Content)
304325
assert.Equal(t, expectedFileResponse.Commit.SHA, fileResponse.Commit.SHA)
305326
assert.Equal(t, expectedFileResponse.Commit.HTMLURL, fileResponse.Commit.HTMLURL)
@@ -309,6 +330,5 @@ func TestAPICreateFile(t *testing.T) {
309330
assert.Equal(t, expectedFileResponse.Commit.Committer.Email, fileResponse.Commit.Committer.Email)
310331
assert.Equal(t, expectedFileResponse.Commit.Committer.Name, fileResponse.Commit.Committer.Name)
311332
assert.Equal(t, expectedFileResponse.Commit.Committer.Date, fileResponse.Commit.Committer.Date)
312-
gitRepo.Close()
313333
})
314334
}

tests/integration/api_repo_file_update_test.go

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,8 @@ import (
88
"fmt"
99
"net/http"
1010
"net/url"
11-
"path/filepath"
11+
"path"
1212
"testing"
13-
"time"
1413

1514
auth_model "code.gitea.io/gitea/models/auth"
1615
repo_model "code.gitea.io/gitea/models/repo"
@@ -48,29 +47,29 @@ func getUpdateFileOptions() *api.UpdateFileOptions {
4847
}
4948
}
5049

51-
func getExpectedFileResponseForUpdate(commitID, treePath, lastCommitSHA string, lastCommitWhen time.Time) *api.FileResponse {
50+
func getExpectedFileResponseForUpdate(info apiFileResponseInfo) *api.FileResponse {
5251
sha := "08bd14b2e2852529157324de9c226b3364e76136"
5352
encoding := "base64"
5453
content := "VGhpcyBpcyB1cGRhdGVkIHRleHQ="
55-
selfURL := setting.AppURL + "api/v1/repos/user2/repo1/contents/" + treePath + "?ref=master"
56-
htmlURL := setting.AppURL + "user2/repo1/src/branch/master/" + treePath
54+
selfURL := setting.AppURL + "api/v1/repos/user2/repo1/contents/" + info.treePath + "?ref=master"
55+
htmlURL := setting.AppURL + "user2/repo1/src/branch/master/" + info.treePath
5756
gitURL := setting.AppURL + "api/v1/repos/user2/repo1/git/blobs/" + sha
58-
downloadURL := setting.AppURL + "user2/repo1/raw/branch/master/" + treePath
57+
downloadURL := setting.AppURL + "user2/repo1/raw/branch/master/" + info.treePath
5958
return &api.FileResponse{
6059
Content: &api.ContentsResponse{
61-
Name: filepath.Base(treePath),
62-
Path: treePath,
63-
SHA: sha,
64-
LastCommitSHA: lastCommitSHA,
65-
LastCommitWhen: lastCommitWhen,
66-
Type: "file",
67-
Size: 20,
68-
Encoding: &encoding,
69-
Content: &content,
70-
URL: &selfURL,
71-
HTMLURL: &htmlURL,
72-
GitURL: &gitURL,
73-
DownloadURL: &downloadURL,
60+
Name: path.Base(info.treePath),
61+
Path: info.treePath,
62+
SHA: sha,
63+
LastCommitSHA: info.lastCommitSHA,
64+
LastCommitterWhen: info.lastCommitterWhen,
65+
Type: "file",
66+
Size: 20,
67+
Encoding: &encoding,
68+
Content: &content,
69+
URL: &selfURL,
70+
HTMLURL: &htmlURL,
71+
GitURL: &gitURL,
72+
DownloadURL: &downloadURL,
7473
Links: &api.FileLinksResponse{
7574
Self: &selfURL,
7675
GitURL: &gitURL,
@@ -79,10 +78,10 @@ func getExpectedFileResponseForUpdate(commitID, treePath, lastCommitSHA string,
7978
},
8079
Commit: &api.FileCommitResponse{
8180
CommitMeta: api.CommitMeta{
82-
URL: setting.AppURL + "api/v1/repos/user2/repo1/git/commits/" + commitID,
83-
SHA: commitID,
81+
URL: setting.AppURL + "api/v1/repos/user2/repo1/git/commits/" + info.commitID,
82+
SHA: info.commitID,
8483
},
85-
HTMLURL: setting.AppURL + "user2/repo1/commit/" + commitID,
84+
HTMLURL: setting.AppURL + "user2/repo1/commit/" + info.commitID,
8685
Author: &api.CommitUser{
8786
Identity: api.Identity{
8887
Name: "John Doe",
@@ -137,22 +136,23 @@ func TestAPIUpdateFile(t *testing.T) {
137136
AddTokenAuth(token2)
138137
resp := MakeRequest(t, req, http.StatusOK)
139138
gitRepo, _ := gitrepo.OpenRepository(t.Context(), repo1)
139+
defer gitRepo.Close()
140140
commitID, _ := gitRepo.GetBranchCommitID(updateFileOptions.NewBranchName)
141141
lasCommit, _ := gitRepo.GetCommitByPath(treePath)
142-
expectedFileResponse := getExpectedFileResponseForUpdate(commitID, treePath, lasCommit.ID.String(), lasCommit.Committer.When)
142+
expectedFileResponse := getExpectedFileResponseForUpdate(apiFileResponseInfo{
143+
commitID: commitID,
144+
treePath: treePath,
145+
lastCommitSHA: lasCommit.ID.String(),
146+
lastCommitterWhen: lasCommit.Committer.When,
147+
lastAuthorWhen: lasCommit.Author.When,
148+
})
143149
var fileResponse api.FileResponse
144150
DecodeJSON(t, resp, &fileResponse)
145-
146-
// FIXME: This is a workaround to compare time.Time values. This maybe a bug of Golang,
147-
// assume your local timezone is UTC, but a location with zero offset is not equal to UTC but they should be.
148-
expectedFileResponse.Content.LastCommitWhen, _ = time.Parse(time.RFC3339, expectedFileResponse.Content.LastCommitWhen.Format(time.RFC3339))
149-
150151
assert.Equal(t, expectedFileResponse.Content, fileResponse.Content)
151152
assert.Equal(t, expectedFileResponse.Commit.SHA, fileResponse.Commit.SHA)
152153
assert.Equal(t, expectedFileResponse.Commit.HTMLURL, fileResponse.Commit.HTMLURL)
153154
assert.Equal(t, expectedFileResponse.Commit.Author.Email, fileResponse.Commit.Author.Email)
154155
assert.Equal(t, expectedFileResponse.Commit.Author.Name, fileResponse.Commit.Author.Name)
155-
gitRepo.Close()
156156
}
157157

158158
// Test updating a file in a new branch

0 commit comments

Comments
 (0)