-
-
Notifications
You must be signed in to change notification settings - Fork 5.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix bug of branches API with tests (#25578)
Fix #25558 Extract from #22743 This PR added a repository's check when creating/deleting branches via API. Mirror repository and archive repository cannot do that.
- Loading branch information
Showing
26 changed files
with
258 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
- | ||
id: 1 | ||
repo_id: 5 | ||
interval: 3600 | ||
enable_prune: false | ||
updated_unix: 0 | ||
next_update_unix: 0 | ||
lfs_enabled: false | ||
lfs_endpoint: "" | ||
|
||
- | ||
id: 2 | ||
repo_id: 25 | ||
interval: 3600 | ||
enable_prune: false | ||
updated_unix: 0 | ||
next_update_unix: 0 | ||
lfs_enabled: false | ||
lfs_endpoint: "" | ||
|
||
- | ||
id: 3 | ||
repo_id: 26 | ||
interval: 3600 | ||
enable_prune: false | ||
updated_unix: 0 | ||
next_update_unix: 0 | ||
lfs_enabled: false | ||
lfs_endpoint: "" | ||
|
||
- | ||
id: 4 | ||
repo_id: 27 | ||
interval: 3600 | ||
enable_prune: false | ||
updated_unix: 0 | ||
next_update_unix: 0 | ||
lfs_enabled: false | ||
lfs_endpoint: "" | ||
|
||
- | ||
id: 5 | ||
repo_id: 28 | ||
interval: 3600 | ||
enable_prune: false | ||
updated_unix: 0 | ||
next_update_unix: 0 | ||
lfs_enabled: false | ||
lfs_endpoint: "" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
ref: refs/heads/master |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
[core] | ||
repositoryformatversion = 0 | ||
filemode = true | ||
bare = true | ||
ignorecase = true | ||
precomposeunicode = true |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
Unnamed repository; edit this file 'description' to name the repository. |
7 changes: 7 additions & 0 deletions
7
tests/gitea-repositories-meta/user3/repo5.git/hooks/post-receive
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
#!/usr/bin/env bash | ||
ORI_DIR=`pwd` | ||
SHELL_FOLDER=$(cd "$(dirname "$0")";pwd) | ||
cd "$ORI_DIR" | ||
for i in `ls "$SHELL_FOLDER/post-receive.d"`; do | ||
sh "$SHELL_FOLDER/post-receive.d/$i" | ||
done |
2 changes: 2 additions & 0 deletions
2
tests/gitea-repositories-meta/user3/repo5.git/hooks/post-receive.d/gitea
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
#!/usr/bin/env bash | ||
"$GITEA_ROOT/gitea" hook --config="$GITEA_ROOT/$GITEA_CONF" post-receive |
7 changes: 7 additions & 0 deletions
7
tests/gitea-repositories-meta/user3/repo5.git/hooks/pre-receive
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
#!/usr/bin/env bash | ||
ORI_DIR=`pwd` | ||
SHELL_FOLDER=$(cd "$(dirname "$0")";pwd) | ||
cd "$ORI_DIR" | ||
for i in `ls "$SHELL_FOLDER/pre-receive.d"`; do | ||
sh "$SHELL_FOLDER/pre-receive.d/$i" | ||
done |
2 changes: 2 additions & 0 deletions
2
tests/gitea-repositories-meta/user3/repo5.git/hooks/pre-receive.d/gitea
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
#!/usr/bin/env bash | ||
"$GITEA_ROOT/gitea" hook --config="$GITEA_ROOT/$GITEA_CONF" pre-receive |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
#!/usr/bin/env bash | ||
ORI_DIR=`pwd` | ||
SHELL_FOLDER=$(cd "$(dirname "$0")";pwd) | ||
cd "$ORI_DIR" | ||
for i in `ls "$SHELL_FOLDER/update.d"`; do | ||
sh "$SHELL_FOLDER/update.d/$i" $1 $2 $3 | ||
done |
2 changes: 2 additions & 0 deletions
2
tests/gitea-repositories-meta/user3/repo5.git/hooks/update.d/gitea
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
#!/usr/bin/env bash | ||
"$GITEA_ROOT/gitea" hook --config="$GITEA_ROOT/$GITEA_CONF" update $1 $2 $3 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
# git ls-files --others --exclude-from=.git/info/exclude | ||
# Lines that start with '#' are comments. | ||
# For a project mostly in C, the following would be a good set of | ||
# exclude patterns (uncomment them if you want to use them): | ||
# *.[oa] | ||
# *~ |
Binary file added
BIN
+84 Bytes
...gitea-repositories-meta/user3/repo5.git/objects/20/ade30d25e0ecaeec84e7f542a8456900858240
Binary file not shown.
Binary file added
BIN
+51 Bytes
...gitea-repositories-meta/user3/repo5.git/objects/27/74debeea6dc742cc4971a92db0e08b95b60588
Binary file not shown.
Binary file added
BIN
+760 Bytes
...gitea-repositories-meta/user3/repo5.git/objects/2a/47ca4b614a9f5a43abbd5ad851a54a616ffee6
Binary file not shown.
Binary file added
BIN
+37 Bytes
...gitea-repositories-meta/user3/repo5.git/objects/2f/9b22fd3159a43b7b4e5dd806fcd544edf8716f
Binary file not shown.
Binary file added
BIN
+814 Bytes
...gitea-repositories-meta/user3/repo5.git/objects/d2/2b4d4daa5be07329fcef6ed458f00cf3392da0
Binary file not shown.
Binary file added
BIN
+42 Bytes
...gitea-repositories-meta/user3/repo5.git/objects/d5/6a3073c1dbb7b15963110a049d50cdb5db99fc
Binary file not shown.
Binary file added
BIN
+62 Bytes
...gitea-repositories-meta/user3/repo5.git/objects/ec/f0db3c1ec806522de4b491fb9a3c7457398c61
Binary file not shown.
Binary file added
BIN
+84 Bytes
...gitea-repositories-meta/user3/repo5.git/objects/ee/16d127df463aa491e08958120f2108b02468df
Binary file not shown.
1 change: 1 addition & 0 deletions
1
tests/gitea-repositories-meta/user3/repo5.git/refs/heads/master
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
2a47ca4b614a9f5a43abbd5ad851a54a616ffee6 |
1 change: 1 addition & 0 deletions
1
tests/gitea-repositories-meta/user3/repo5.git/refs/heads/test_branch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
d22b4d4daa5be07329fcef6ed458f00cf3392da0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,126 @@ | ||
// Copyright 2021 The Gitea Authors. All rights reserved. | ||
// SPDX-License-Identifier: MIT | ||
|
||
package integration | ||
|
||
import ( | ||
"bytes" | ||
"fmt" | ||
"io" | ||
"net/http" | ||
"net/url" | ||
"testing" | ||
|
||
auth_model "code.gitea.io/gitea/models/auth" | ||
repo_model "code.gitea.io/gitea/models/repo" | ||
"code.gitea.io/gitea/models/unittest" | ||
user_model "code.gitea.io/gitea/models/user" | ||
"code.gitea.io/gitea/modules/json" | ||
"code.gitea.io/gitea/modules/setting" | ||
api "code.gitea.io/gitea/modules/structs" | ||
"code.gitea.io/gitea/tests" | ||
|
||
"github.com/stretchr/testify/assert" | ||
) | ||
|
||
func TestAPIRepoBranchesPlain(t *testing.T) { | ||
onGiteaRun(t, func(*testing.T, *url.URL) { | ||
repo3 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 3}) | ||
user1 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1}) | ||
session := loginUser(t, user1.LowerName) | ||
token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteRepository) | ||
|
||
link, _ := url.Parse(fmt.Sprintf("/api/v1/repos/user3/%s/branches", repo3.Name)) // a plain repo | ||
link.RawQuery = url.Values{"token": {token}}.Encode() | ||
resp := MakeRequest(t, NewRequest(t, "GET", link.String()), http.StatusOK) | ||
bs, err := io.ReadAll(resp.Body) | ||
assert.NoError(t, err) | ||
|
||
var branches []*api.Branch | ||
assert.NoError(t, json.Unmarshal(bs, &branches)) | ||
assert.Len(t, branches, 2) | ||
assert.EqualValues(t, "test_branch", branches[0].Name) | ||
assert.EqualValues(t, "master", branches[1].Name) | ||
|
||
link2, _ := url.Parse(fmt.Sprintf("/api/v1/repos/user3/%s/branches/test_branch", repo3.Name)) | ||
link2.RawQuery = url.Values{"token": {token}}.Encode() | ||
resp = MakeRequest(t, NewRequest(t, "GET", link2.String()), http.StatusOK) | ||
bs, err = io.ReadAll(resp.Body) | ||
assert.NoError(t, err) | ||
var branch api.Branch | ||
assert.NoError(t, json.Unmarshal(bs, &branch)) | ||
assert.EqualValues(t, "test_branch", branch.Name) | ||
|
||
req := NewRequest(t, "POST", link.String()) | ||
req.Header.Add("Content-Type", "application/json") | ||
req.Body = io.NopCloser(bytes.NewBufferString(`{"new_branch_name":"test_branch2", "old_branch_name": "test_branch", "old_ref_name":"refs/heads/test_branch"}`)) | ||
resp = MakeRequest(t, req, http.StatusCreated) | ||
bs, err = io.ReadAll(resp.Body) | ||
assert.NoError(t, err) | ||
var branch2 api.Branch | ||
assert.NoError(t, json.Unmarshal(bs, &branch2)) | ||
assert.EqualValues(t, "test_branch2", branch2.Name) | ||
assert.EqualValues(t, branch.Commit.ID, branch2.Commit.ID) | ||
|
||
resp = MakeRequest(t, NewRequest(t, "GET", link.String()), http.StatusOK) | ||
bs, err = io.ReadAll(resp.Body) | ||
assert.NoError(t, err) | ||
|
||
branches = []*api.Branch{} | ||
assert.NoError(t, json.Unmarshal(bs, &branches)) | ||
assert.Len(t, branches, 3) | ||
assert.EqualValues(t, "test_branch", branches[0].Name) | ||
assert.EqualValues(t, "test_branch2", branches[1].Name) | ||
assert.EqualValues(t, "master", branches[2].Name) | ||
|
||
link3, _ := url.Parse(fmt.Sprintf("/api/v1/repos/user3/%s/branches/test_branch2", repo3.Name)) | ||
MakeRequest(t, NewRequest(t, "DELETE", link3.String()), http.StatusNotFound) | ||
|
||
link3.RawQuery = url.Values{"token": {token}}.Encode() | ||
MakeRequest(t, NewRequest(t, "DELETE", link3.String()), http.StatusNoContent) | ||
assert.NoError(t, err) | ||
}) | ||
} | ||
|
||
func TestAPIRepoBranchesMirror(t *testing.T) { | ||
defer tests.PrepareTestEnv(t)() | ||
|
||
repo5 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 5}) | ||
user1 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1}) | ||
session := loginUser(t, user1.LowerName) | ||
token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteRepository) | ||
|
||
link, _ := url.Parse(fmt.Sprintf("/api/v1/repos/user3/%s/branches", repo5.Name)) // a mirror repo | ||
link.RawQuery = url.Values{"token": {token}}.Encode() | ||
resp := MakeRequest(t, NewRequest(t, "GET", link.String()), http.StatusOK) | ||
bs, err := io.ReadAll(resp.Body) | ||
assert.NoError(t, err) | ||
|
||
var branches []*api.Branch | ||
assert.NoError(t, json.Unmarshal(bs, &branches)) | ||
assert.Len(t, branches, 2) | ||
assert.EqualValues(t, "test_branch", branches[0].Name) | ||
assert.EqualValues(t, "master", branches[1].Name) | ||
|
||
link2, _ := url.Parse(fmt.Sprintf("/api/v1/repos/user3/%s/branches/test_branch", repo5.Name)) | ||
link2.RawQuery = url.Values{"token": {token}}.Encode() | ||
resp = MakeRequest(t, NewRequest(t, "GET", link2.String()), http.StatusOK) | ||
bs, err = io.ReadAll(resp.Body) | ||
assert.NoError(t, err) | ||
var branch api.Branch | ||
assert.NoError(t, json.Unmarshal(bs, &branch)) | ||
assert.EqualValues(t, "test_branch", branch.Name) | ||
|
||
req := NewRequest(t, "POST", link.String()) | ||
req.Header.Add("Content-Type", "application/json") | ||
req.Body = io.NopCloser(bytes.NewBufferString(`{"new_branch_name":"test_branch2", "old_branch_name": "test_branch", "old_ref_name":"refs/heads/test_branch"}`)) | ||
resp = MakeRequest(t, req, http.StatusForbidden) | ||
bs, err = io.ReadAll(resp.Body) | ||
assert.NoError(t, err) | ||
assert.EqualValues(t, "{\"message\":\"Git Repository is a mirror.\",\"url\":\""+setting.AppURL+"api/swagger\"}\n", string(bs)) | ||
|
||
resp = MakeRequest(t, NewRequest(t, "DELETE", link2.String()), http.StatusForbidden) | ||
bs, err = io.ReadAll(resp.Body) | ||
assert.NoError(t, err) | ||
assert.EqualValues(t, "{\"message\":\"Git Repository is a mirror.\",\"url\":\""+setting.AppURL+"api/swagger\"}\n", string(bs)) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters