mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 02:46:04 +01:00 
			
		
		
		
	Ensure rejected push to refs/pull/index/head fails nicely (#11724)
A pre-receive hook that rejects pushes to refs/pull/index/head will cause a broken PR which causes an internal server error whenever it is viewed. This PR handles prevents the internal server error by handling non-existent pr heads and sends a flash error informing the creator there was a problem. Signed-off-by: Andrew Thornton <art27@cantab.net>
This commit is contained in:
		| @@ -443,6 +443,16 @@ func PushToBaseRepo(pr *models.PullRequest) (err error) { | ||||
| 		// Use InternalPushingEnvironment here because we know that pre-receive and post-receive do not run on a refs/pulls/... | ||||
| 		Env: models.InternalPushingEnvironment(pr.Issue.Poster, pr.BaseRepo), | ||||
| 	}); err != nil { | ||||
| 		if git.IsErrPushOutOfDate(err) { | ||||
| 			// This should not happen as we're using force! | ||||
| 			log.Error("Unable to push PR head for %s#%d (%-v:%s) due to ErrPushOfDate: %v", pr.BaseRepo.FullName(), pr.Index, pr.BaseRepo, headFile, err) | ||||
| 			return err | ||||
| 		} else if git.IsErrPushRejected(err) { | ||||
| 			rejectErr := err.(*git.ErrPushRejected) | ||||
| 			log.Info("Unable to push PR head for %s#%d (%-v:%s) due to rejection:\nStdout: %s\nStderr: %s\nError: %v", pr.BaseRepo.FullName(), pr.Index, pr.BaseRepo, headFile, rejectErr.StdOut, rejectErr.StdErr, rejectErr.Err) | ||||
| 			return err | ||||
| 		} | ||||
| 		log.Error("Unable to push PR head for %s#%d (%-v:%s) due to Error: %v", pr.BaseRepo.FullName(), pr.Index, pr.BaseRepo, headFile, err) | ||||
| 		return fmt.Errorf("Push: %s:%s %s:%s %v", pr.HeadRepo.FullName(), pr.HeadBranch, pr.BaseRepo.FullName(), headFile, err) | ||||
| 	} | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user