aboutsummaryrefslogtreecommitdiffstats
path: root/modules/repofiles/temp_repo.go
diff options
context:
space:
mode:
Diffstat (limited to 'modules/repofiles/temp_repo.go')
-rw-r--r--modules/repofiles/temp_repo.go24
1 files changed, 22 insertions, 2 deletions
diff --git a/modules/repofiles/temp_repo.go b/modules/repofiles/temp_repo.go
index f7e3935c25..d8b816dfa1 100644
--- a/modules/repofiles/temp_repo.go
+++ b/modules/repofiles/temp_repo.go
@@ -242,8 +242,28 @@ func (t *TemporaryUploadRepository) CommitTreeWithDate(author, committer *models
func (t *TemporaryUploadRepository) Push(doer *models.User, commitHash string, branch string) error {
// Because calls hooks we need to pass in the environment
env := models.PushingEnvironment(doer, t.repo)
-
- if stdout, err := git.NewCommand("push", t.repo.RepoPath(), strings.TrimSpace(commitHash)+":refs/heads/"+strings.TrimSpace(branch)).RunInDirWithEnv(t.basePath, env); err != nil {
+ stdout := &strings.Builder{}
+ stderr := &strings.Builder{}
+
+ if err := git.NewCommand("push", t.repo.RepoPath(), strings.TrimSpace(commitHash)+":refs/heads/"+strings.TrimSpace(branch)).RunInDirTimeoutEnvPipeline(env, -1, t.basePath, stdout, stderr); err != nil {
+ errString := stderr.String()
+ if strings.Contains(errString, "non-fast-forward") {
+ return models.ErrMergePushOutOfDate{
+ StdOut: stdout.String(),
+ StdErr: errString,
+ Err: err,
+ }
+ } else if strings.Contains(errString, "! [remote rejected]") {
+ log.Error("Unable to push back to repo from temporary repo due to rejection: %s (%s)\nStdout: %s\nStderr: %s\nError: %v",
+ t.repo.FullName(), t.basePath, stdout, errString, err)
+ err := models.ErrPushRejected{
+ StdOut: stdout.String(),
+ StdErr: errString,
+ Err: err,
+ }
+ err.GenerateMessage()
+ return err
+ }
log.Error("Unable to push back to repo from temporary repo: %s (%s)\nStdout: %s\nError: %v",
t.repo.FullName(), t.basePath, stdout, err)
return fmt.Errorf("Unable to push back to repo from temporary repo: %s (%s) Error: %v",