mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 10:57:44 +09:00 
			
		
		
		
	Check if label template exist first (#14384)
* add check * refactor * rollback repo on error after session closed
This commit is contained in:
		| @@ -27,6 +27,13 @@ func CreateRepository(doer, u *models.User, opts models.CreateRepoOptions) (*mod | ||||
| 		opts.DefaultBranch = setting.Repository.DefaultBranch | ||||
| 	} | ||||
|  | ||||
| 	// Check if label template exist | ||||
| 	if len(opts.IssueLabels) > 0 { | ||||
| 		if _, err := models.GetLabelTemplateFile(opts.IssueLabels); err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	repo := &models.Repository{ | ||||
| 		OwnerID:                         u.ID, | ||||
| 		Owner:                           u, | ||||
| @@ -45,6 +52,8 @@ func CreateRepository(doer, u *models.User, opts models.CreateRepoOptions) (*mod | ||||
| 		TrustModel:                      opts.TrustModel, | ||||
| 	} | ||||
|  | ||||
| 	var rollbackRepo *models.Repository | ||||
|  | ||||
| 	if err := models.WithTx(func(ctx models.DBContext) error { | ||||
| 		if err := models.CreateRepository(ctx, doer, u, repo, false); err != nil { | ||||
| 			return err | ||||
| @@ -76,7 +85,7 @@ func CreateRepository(doer, u *models.User, opts models.CreateRepoOptions) (*mod | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		if err := initRepository(ctx, repoPath, doer, repo, opts); err != nil { | ||||
| 		if err = initRepository(ctx, repoPath, doer, repo, opts); err != nil { | ||||
| 			if err2 := util.RemoveAll(repoPath); err2 != nil { | ||||
| 				log.Error("initRepository: %v", err) | ||||
| 				return fmt.Errorf( | ||||
| @@ -87,10 +96,9 @@ func CreateRepository(doer, u *models.User, opts models.CreateRepoOptions) (*mod | ||||
|  | ||||
| 		// Initialize Issue Labels if selected | ||||
| 		if len(opts.IssueLabels) > 0 { | ||||
| 			if err := models.InitializeLabels(ctx, repo.ID, opts.IssueLabels, false); err != nil { | ||||
| 				if errDelete := models.DeleteRepository(doer, u.ID, repo.ID); errDelete != nil { | ||||
| 					log.Error("Rollback deleteRepository: %v", errDelete) | ||||
| 				} | ||||
| 			if err = models.InitializeLabels(ctx, repo.ID, opts.IssueLabels, false); err != nil { | ||||
| 				rollbackRepo = repo | ||||
| 				rollbackRepo.OwnerID = u.ID | ||||
| 				return fmt.Errorf("InitializeLabels: %v", err) | ||||
| 			} | ||||
| 		} | ||||
| @@ -99,13 +107,18 @@ func CreateRepository(doer, u *models.User, opts models.CreateRepoOptions) (*mod | ||||
| 			SetDescription(fmt.Sprintf("CreateRepository(git update-server-info): %s", repoPath)). | ||||
| 			RunInDir(repoPath); err != nil { | ||||
| 			log.Error("CreateRepository(git update-server-info) in %v: Stdout: %s\nError: %v", repo, stdout, err) | ||||
| 			if errDelete := models.DeleteRepository(doer, u.ID, repo.ID); errDelete != nil { | ||||
| 				log.Error("Rollback deleteRepository: %v", errDelete) | ||||
| 			} | ||||
| 			rollbackRepo = repo | ||||
| 			rollbackRepo.OwnerID = u.ID | ||||
| 			return fmt.Errorf("CreateRepository(git update-server-info): %v", err) | ||||
| 		} | ||||
| 		return nil | ||||
| 	}); err != nil { | ||||
| 		if rollbackRepo != nil { | ||||
| 			if errDelete := models.DeleteRepository(doer, rollbackRepo.OwnerID, rollbackRepo.ID); errDelete != nil { | ||||
| 				log.Error("Rollback deleteRepository: %v", errDelete) | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user