[BUG] Use correct empty commit ID
- `RemoveFilesFromIndex` used an hardcoded empty commit ID for the SHA1 object format, this would result in an error if the repository was initialized to use the sha256 object format. Get the object format of the Git repository and use that to get the empty commit id. - Adds unit test. - Resolves #3184 (cherry picked from commit eeaef556c2d8cf41023ea4bcc07f7c18037583de)
This commit is contained in:
parent
2879c15858
commit
ef0ce374a5
2 changed files with 36 additions and 1 deletions
|
@ -136,12 +136,19 @@ func (t *TemporaryUploadRepository) LsFiles(filenames ...string) ([]string, erro
|
|||
|
||||
// RemoveFilesFromIndex removes the given files from the index
|
||||
func (t *TemporaryUploadRepository) RemoveFilesFromIndex(filenames ...string) error {
|
||||
objectFormat, err := t.gitRepo.GetObjectFormat()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
stdOut := new(bytes.Buffer)
|
||||
stdErr := new(bytes.Buffer)
|
||||
stdIn := new(bytes.Buffer)
|
||||
for _, file := range filenames {
|
||||
if file != "" {
|
||||
stdIn.WriteString("0 0000000000000000000000000000000000000000\t")
|
||||
stdIn.WriteString("0 ")
|
||||
stdIn.WriteString(objectFormat.EmptyObjectID().String())
|
||||
stdIn.WriteByte('\t')
|
||||
stdIn.WriteString(file)
|
||||
stdIn.WriteByte('\000')
|
||||
}
|
||||
|
|
28
services/repository/files/temp_repo_test.go
Normal file
28
services/repository/files/temp_repo_test.go
Normal file
|
@ -0,0 +1,28 @@
|
|||
// Copyright 2024 The Forgejo Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package files
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"code.gitea.io/gitea/models/db"
|
||||
repo_model "code.gitea.io/gitea/models/repo"
|
||||
"code.gitea.io/gitea/models/unittest"
|
||||
"code.gitea.io/gitea/modules/git"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestRemoveFilesFromIndexSha256(t *testing.T) {
|
||||
if git.CheckGitVersionAtLeast("2.42") != nil {
|
||||
t.Skip("skipping because installed Git version doesn't support SHA256")
|
||||
}
|
||||
unittest.PrepareTestEnv(t)
|
||||
repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})
|
||||
|
||||
temp, err := NewTemporaryUploadRepository(db.DefaultContext, repo)
|
||||
assert.NoError(t, err)
|
||||
assert.NoError(t, temp.Init("sha256"))
|
||||
assert.NoError(t, temp.RemoveFilesFromIndex("README.md"))
|
||||
}
|
Loading…
Reference in a new issue