fix(repository): git push to an adopted repository fails
Fix adopt repository has empty object name in database (#31333)
Fix #31330
Fix #31311
A workaround to fix the old database is to update object_format_name to
`sha1` if it's empty or null.
(cherry picked from commit 1968c2222dcf47ebd1697afb4e79a81e74702d31)
With tests services/repository/adopt_test.go
(cherry picked from commit 8efef06fb1
)
This commit is contained in:
parent
e997cbc8d5
commit
e953bce5d7
3 changed files with 32 additions and 0 deletions
|
@ -45,6 +45,7 @@ func SyncRepoBranchesWithRepo(ctx context.Context, repo *repo_model.Repository,
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, fmt.Errorf("UpdateRepository: %w", err)
|
return 0, fmt.Errorf("UpdateRepository: %w", err)
|
||||||
}
|
}
|
||||||
|
repo.ObjectFormatName = objFmt.Name() // keep consistent with db
|
||||||
|
|
||||||
allBranches := container.Set[string]{}
|
allBranches := container.Set[string]{}
|
||||||
{
|
{
|
||||||
|
|
1
release-notes/8.0.0/fix/4149.md
Normal file
1
release-notes/8.0.0/fix/4149.md
Normal file
|
@ -0,0 +1 @@
|
||||||
|
git push to an adopted repository fails
|
|
@ -10,9 +10,12 @@ import (
|
||||||
|
|
||||||
"code.gitea.io/gitea/models/db"
|
"code.gitea.io/gitea/models/db"
|
||||||
"code.gitea.io/gitea/models/unittest"
|
"code.gitea.io/gitea/models/unittest"
|
||||||
|
user_model "code.gitea.io/gitea/models/user"
|
||||||
|
"code.gitea.io/gitea/modules/git"
|
||||||
"code.gitea.io/gitea/modules/setting"
|
"code.gitea.io/gitea/modules/setting"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestCheckUnadoptedRepositories_Add(t *testing.T) {
|
func TestCheckUnadoptedRepositories_Add(t *testing.T) {
|
||||||
|
@ -83,3 +86,30 @@ func TestListUnadoptedRepositories_ListOptions(t *testing.T) {
|
||||||
assert.Equal(t, 2, count)
|
assert.Equal(t, 2, count)
|
||||||
assert.Equal(t, unadoptedList[1], repoNames[0])
|
assert.Equal(t, unadoptedList[1], repoNames[0])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestAdoptRepository(t *testing.T) {
|
||||||
|
assert.NoError(t, unittest.PrepareTestDatabase())
|
||||||
|
username := "user2"
|
||||||
|
|
||||||
|
unadopted := "unadopted"
|
||||||
|
assert.NoError(t, unittest.CopyDir(
|
||||||
|
"../../modules/git/tests/repos/repo1_bare",
|
||||||
|
path.Join(setting.RepoRootPath, username, unadopted+".git"),
|
||||||
|
))
|
||||||
|
|
||||||
|
opts := db.ListOptions{Page: 1, PageSize: 1}
|
||||||
|
repoNames, _, err := ListUnadoptedRepositories(db.DefaultContext, "", &opts)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Contains(t, repoNames, path.Join(username, unadopted))
|
||||||
|
|
||||||
|
doer := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
|
||||||
|
owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
|
||||||
|
repo, err := AdoptRepository(db.DefaultContext, doer, owner, CreateRepoOptions{
|
||||||
|
Name: unadopted,
|
||||||
|
Description: "description",
|
||||||
|
IsPrivate: false,
|
||||||
|
AutoInit: true,
|
||||||
|
})
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, git.Sha1ObjectFormat.Name(), repo.ObjectFormatName)
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue