Fix PATCH /repos/{owner}/{repo} panic (#14637)
* Fix a runtime error when modifying a repository through API call
Using the `PATCH /repos/{owner}/{repo}` endpoint and attempting to
modify `default_branch` on an empty repository will cause a
panic. This commit adds a check for a nil pointer before attempting
to dereference it.
* Apply suggestions from code review
* Apply suggestions from code review
* Ensure that the git repository is loaded
If you change the default branch for a repository you must change it in
git too. Therefore you must open the repository before changing the
default branch.
Signed-off-by: Andrew Thornton <art27@cantab.net>
* Allow empty repos to have their default branches changed
Signed-off-by: Andrew Thornton <art27@cantab.net>
Co-authored-by: Anton Khimich <anton.khimicha@mail.utoronto.ca>
Co-authored-by: 6543 <6543@obermui.de>
Co-authored-by: Andrew Thornton <art27@cantab.net>
	
	
This commit is contained in:
		
					parent
					
						
							
								441f3f0f20
							
						
					
				
			
			
				commit
				
					
						5a18712dd7
					
				
			
		
					 1 changed files with 14 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -574,8 +574,20 @@ func updateBasicProperties(ctx *context.APIContext, opts api.EditRepoOption) err
 | 
			
		|||
		repo.IsTemplate = *opts.Template
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Default branch only updated if changed and exist
 | 
			
		||||
	if opts.DefaultBranch != nil && repo.DefaultBranch != *opts.DefaultBranch && ctx.Repo.GitRepo.IsBranchExist(*opts.DefaultBranch) {
 | 
			
		||||
	if ctx.Repo.GitRepo == nil {
 | 
			
		||||
		var err error
 | 
			
		||||
		ctx.Repo.GitRepo, err = git.OpenRepository(ctx.Repo.Repository.RepoPath())
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			ctx.Error(http.StatusInternalServerError, "Unable to OpenRepository", err)
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
		defer ctx.Repo.GitRepo.Close()
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Default branch only updated if changed and exist or the repository is empty
 | 
			
		||||
	if opts.DefaultBranch != nil &&
 | 
			
		||||
		repo.DefaultBranch != *opts.DefaultBranch &&
 | 
			
		||||
		(ctx.Repo.Repository.IsEmpty || ctx.Repo.GitRepo.IsBranchExist(*opts.DefaultBranch)) {
 | 
			
		||||
		if err := ctx.Repo.GitRepo.SetDefaultBranch(*opts.DefaultBranch); err != nil {
 | 
			
		||||
			if !git.IsErrUnsupportedVersion(err) {
 | 
			
		||||
				ctx.Error(http.StatusInternalServerError, "SetDefaultBranch", err)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue