From 52cfd2743c0e85b36081cf80a850e6a5901f1865 Mon Sep 17 00:00:00 2001 From: zeripath Date: Thu, 26 Mar 2020 19:14:51 +0000 Subject: Option to set default branch at repository creation (#10803) * Option to set default branch at repository creation * Handle template repos with non-default master branch * Add DefaultBranch handling on creation to API Fix #9542 Signed-off-by: Andrew Thornton --- modules/repository/generate.go | 7 ++++--- modules/repository/init.go | 14 +++++++++++--- 2 files changed, 15 insertions(+), 6 deletions(-) (limited to 'modules/repository') diff --git a/modules/repository/generate.go b/modules/repository/generate.go index 52502e8eb3..6d80488de7 100644 --- a/modules/repository/generate.go +++ b/modules/repository/generate.go @@ -113,7 +113,8 @@ func generateRepoCommit(repo, templateRepo, generateRepo *models.Repository, tmp // Clone to temporary path and do the init commit. templateRepoPath := templateRepo.RepoPath() if err := git.Clone(templateRepoPath, tmpDir, git.CloneRepoOptions{ - Depth: 1, + Depth: 1, + Branch: templateRepo.DefaultBranch, }); err != nil { return fmt.Errorf("git clone: %v", err) } @@ -180,7 +181,7 @@ func generateRepoCommit(repo, templateRepo, generateRepo *models.Repository, tmp return fmt.Errorf("git remote add: %v", err) } - return initRepoCommit(tmpDir, repo, repo.Owner) + return initRepoCommit(tmpDir, repo, repo.Owner, templateRepo.DefaultBranch) } func generateGitContent(ctx models.DBContext, repo, templateRepo, generateRepo *models.Repository) (err error) { @@ -204,7 +205,7 @@ func generateGitContent(ctx models.DBContext, repo, templateRepo, generateRepo * return fmt.Errorf("getRepositoryByID: %v", err) } - repo.DefaultBranch = "master" + repo.DefaultBranch = templateRepo.DefaultBranch if err = models.UpdateRepositoryCtx(ctx, repo, false); err != nil { return fmt.Errorf("updateRepository: %v", err) } diff --git a/modules/repository/init.go b/modules/repository/init.go index 7b7d07f43e..320fba53fc 100644 --- a/modules/repository/init.go +++ b/modules/repository/init.go @@ -98,7 +98,7 @@ func prepareRepoCommit(ctx models.DBContext, repo *models.Repository, tmpDir, re } // initRepoCommit temporarily changes with work directory. -func initRepoCommit(tmpPath string, repo *models.Repository, u *models.User) (err error) { +func initRepoCommit(tmpPath string, repo *models.Repository, u *models.User, defaultBranch string) (err error) { commitTimeStr := time.Now().Format(time.RFC3339) sig := u.NewGitSig() @@ -145,7 +145,11 @@ func initRepoCommit(tmpPath string, repo *models.Repository, u *models.User) (er return fmt.Errorf("git commit: %v", err) } - if stdout, err := git.NewCommand("push", "origin", "master"). + if len(defaultBranch) == 0 { + defaultBranch = "master" + } + + if stdout, err := git.NewCommand("push", "origin", "master:"+defaultBranch). SetDescription(fmt.Sprintf("initRepoCommit (git push): %s", tmpPath)). RunInDirWithEnv(tmpPath, models.InternalPushingEnvironment(u, repo)); err != nil { log.Error("Failed to push back to master: Stdout: %s\nError: %v", stdout, err) @@ -190,7 +194,7 @@ func initRepository(ctx models.DBContext, repoPath string, u *models.User, repo } // Apply changes and commit. - if err = initRepoCommit(tmpDir, repo, u); err != nil { + if err = initRepoCommit(tmpDir, repo, u, opts.DefaultBranch); err != nil { return fmt.Errorf("initRepoCommit: %v", err) } } @@ -206,6 +210,10 @@ func initRepository(ctx models.DBContext, repoPath string, u *models.User, repo } repo.DefaultBranch = "master" + if len(opts.DefaultBranch) > 0 { + repo.DefaultBranch = opts.DefaultBranch + } + if err = models.UpdateRepositoryCtx(ctx, repo, false); err != nil { return fmt.Errorf("updateRepository: %v", err) } -- cgit v1.2.3