WIP: Add admin function for unadopted repositories #490

Draft
6543 wants to merge 7 commits from 6543/go-sdk:add-admin-adopt into main
5 changed files with 109 additions and 3 deletions

View File

@ -14,9 +14,10 @@ steps:
- name: gitea
image: gitea/gitea:latest
detach: true
environment:
REPO_ROOT: "/tmp/data"
commands:
- mkdir -p /tmp/conf/
- mkdir -p /tmp/data/
- mkdir -p /tmp/conf/ /tmp/data/adoptuser
- echo "[security]" > /tmp/conf/app.ini
- echo "INTERNAL_TOKEN = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYmYiOjE1NTg4MzY4ODB9.LoKQyK5TN_0kMJFVHWUW0uDAyoGjDP6Mkup4ps2VJN4" >> /tmp/conf/app.ini
- echo "INSTALL_LOCK = true" >> /tmp/conf/app.ini

View File

@ -80,7 +80,7 @@ test:
.PHONY: test-instance
test-instance:
rm -f -r ${WORK_DIR}/test 2> /dev/null; \
mkdir -p ${WORK_DIR}/test/conf/ ${WORK_DIR}/test/data/
mkdir -p ${WORK_DIR}/test/conf/ ${WORK_DIR}/test/data/adoptuser; \
wget ${GITEA_DL} -O ${WORK_DIR}/test/gitea-main; \
chmod +x ${WORK_DIR}/test/gitea-main; \
echo "[security]" > ${WORK_DIR}/test/conf/app.ini; \

37
gitea/admin_adopt.go Normal file
View File

@ -0,0 +1,37 @@
// Copyright 2021 The Gitea Authors. All rights reserved.
6543 marked this conversation as resolved Outdated
Outdated
Review

2021

2021
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package gitea
import (
"fmt"
)
// AdminListUnadoptedRepositories lists the unadopted repositories that match the provided names
func (c *Client) AdminListUnadoptedRepositories(opt ListOptions) ([]string, *Response, error) {
Review

Pattern Option missing!

Pattern Option missing!
if err := c.checkServerVersionGreaterThanOrEqual(version1_14_0); err != nil {
return nil, nil, err
}
var repoNames []string
resp, err := c.getParsedResponse("GET", fmt.Sprintf("/admin/unadopted?%s", opt.getURLQuery().Encode()), jsonHeader, nil, &repoNames)
return repoNames, resp, err
}
// AdminAdoptRepository will adopt an unadopted repository
func (c *Client) AdminAdoptRepository(owner, repo string) (*Response, error) {
if err := c.checkServerVersionGreaterThanOrEqual(version1_14_0); err != nil {
return nil, err
}
_, resp, err := c.getResponse("POST", fmt.Sprintf("/admin/unadopted/%s/%s", owner, repo), jsonHeader, nil)
return resp, err
}
// AdminDeleteUnadoptedRepository will delete an unadopted repository
func (c *Client) AdminDeleteUnadoptedRepository(owner, repo string) (*Response, error) {
if err := c.checkServerVersionGreaterThanOrEqual(version1_14_0); err != nil {
return nil, err
}
_, resp, err := c.getResponse("DELETE", fmt.Sprintf("/admin/unadopted/%s/%s", owner, repo), jsonHeader, nil)
return resp, err
}

56
gitea/admin_adopt_test.go Normal file
View File

@ -0,0 +1,56 @@
// Copyright 2021 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package gitea
import (
"log"
"os/exec"
"path"
"path/filepath"
"testing"
"github.com/stretchr/testify/assert"
)
func TestAdminAdopt(t *testing.T) {
log.Println("== TestAdminAdopt ==")
c := newTestClient()
createTestUser(t, "adoptuser", c)
createTestAdoptRepos(t)
repos, _, err := c.AdminListUnadoptedRepositories(ListOptions{})
assert.NoError(t, err)
assert.Len(t, repos, 2)
// cleanup after test
/*
_, err = c.DeleteRepo("adoptuser", "repo1")
assert.NoError(t, err)
_, err = c.DeleteRepo("adoptuser", "repo1")
assert.NoError(t, err)
_, err = c.AdminDeleteUser("adoptuser")
*/
}
func createTestAdoptRepos(t *testing.T) {
repoRoot := getRepoRoot()
out, err := exec.Command("mkdir", "-p", path.Join(repoRoot, "adoptuser")).Output()
assert.NoError(t, err)
assert.EqualValues(t, "", out)
repo1 := filepath.Join(repoRoot, "adoptuser", "repo1.git")
_, err = exec.Command("git", "init", "--bare", repo1).Output()
assert.NoError(t, err)
repo2 := filepath.Join(repoRoot, "adoptuser", "repo2.git")
_, err = exec.Command("git", "init", "--bare", repo2).Output()
assert.NoError(t, err)
/*
- git init --bare /tmp/data/adoptuser/repo1.git
- git init --bare /tmp/data/adoptuser/repo2.git
*/
}

View File

@ -39,6 +39,18 @@ func enableRunGitea() bool {
return r
}
func getRepoRoot() string {
repoRoot := os.Getenv("REPO_ROOT")
if len(repoRoot) != 0 {
return repoRoot
}
pwd, err := os.Getwd()
if err != nil {
panic(err)
}
return filepath.Join(pwd, "../test/data")
}
func newTestClient() *Client {
token := getGiteaToken()
if token == "" {