aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrecht Van Lommel <brecht@blender.org>2024-01-19 06:49:18 +0100
committerGitHub <noreply@github.com>2024-01-19 05:49:18 +0000
commit1167d523c4c24eba4c159cda04e49a49f458afbf (patch)
treec079fbdce2d59fd6b33c16f799c4f0edc76234aa
parentb60a7c3358cdeec3e0a731b68be33b6ba63a6563 (diff)
downloadgitea-1167d523c4c24eba4c159cda04e49a49f458afbf.tar.gz
gitea-1167d523c4c24eba4c159cda04e49a49f458afbf.zip
Fix archive creating LFS hooks and breaking pull requests (#28848)
When LFS hooks are present in gitea-repositories, operations like git push for creating a pull request fail. These repositories are not meant to include LFS files or git push them, that is handled separately. And so they should not have LFS hooks. Installing git-lfs on some systems (like Debian Linux) will automatically set up /etc/gitconfig to create LFS hooks in repositories. For most git commands in Gitea this is not a problem, either because they run on a temporary clone or the git command does not create LFS hooks. But one case where this happens is git archive for creating repository archives. To fix that, add a GIT_CONFIG_NOSYSTEM=1 to disable using the system configuration for that command. According to a comment, GIT_CONFIG_NOSYSTEM is not used for all git commands because the system configuration can be intentionally set up for Gitea to use. Resolves #19810, #21148
-rw-r--r--modules/git/repo_archive.go5
1 files changed, 5 insertions, 0 deletions
diff --git a/modules/git/repo_archive.go b/modules/git/repo_archive.go
index 2b45a50f19..1bf1aa41b9 100644
--- a/modules/git/repo_archive.go
+++ b/modules/git/repo_archive.go
@@ -8,6 +8,7 @@ import (
"context"
"fmt"
"io"
+ "os"
"path/filepath"
"strings"
)
@@ -62,11 +63,15 @@ func (repo *Repository) CreateArchive(ctx context.Context, format ArchiveType, t
cmd.AddOptionFormat("--format=%s", format.String())
cmd.AddDynamicArguments(commitID)
+ // Avoid LFS hooks getting installed because of /etc/gitconfig, which can break pull requests.
+ env := append(os.Environ(), "GIT_CONFIG_NOSYSTEM=1")
+
var stderr strings.Builder
err := cmd.Run(&RunOpts{
Dir: repo.Path,
Stdout: target,
Stderr: &stderr,
+ Env: env,
})
if err != nil {
return ConcatenateError(err, stderr.String())