mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-12-01 05:36:19 +01:00
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 {
|
||||
return 0, fmt.Errorf("UpdateRepository: %w", err)
|
||||
}
|
||||
repo.ObjectFormatName = objFmt.Name() // keep consistent with db
|
||||
|
||||
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/unittest"
|
||||
user_model "code.gitea.io/gitea/models/user"
|
||||
"code.gitea.io/gitea/modules/git"
|
||||
"code.gitea.io/gitea/modules/setting"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestCheckUnadoptedRepositories_Add(t *testing.T) {
|
||||
|
@ -83,3 +86,30 @@ func TestListUnadoptedRepositories_ListOptions(t *testing.T) {
|
|||
assert.Equal(t, 2, count)
|
||||
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