From 2c653141a83eb5bc3fb1baaff0449195b9e1f6a6 Mon Sep 17 00:00:00 2001 From: Unknwon Date: Wed, 18 Nov 2015 19:32:23 -0500 Subject: [PATCH] #1742 Update default branch in git repository while change in web view --- .bra.toml | 1 + README.md | 2 +- gogs.go | 2 +- modules/git/error.go | 22 ++++++++++++++++++++++ modules/git/repo_branch.go | 13 +++++++++++++ routers/repo/setting.go | 9 ++++++++- templates/.VERSION | 2 +- 7 files changed, 47 insertions(+), 4 deletions(-) create mode 100644 modules/git/error.go diff --git a/.bra.toml b/.bra.toml index 7d49786d30..f1da310aca 100644 --- a/.bra.toml +++ b/.bra.toml @@ -13,6 +13,7 @@ watch_dirs = [ watch_exts = [".go"] build_delay = 1500 cmds = [ + ["go", "install"], ["go", "install", "-race"], # sqlite redis memcache cert pam tidb ["go", "build", "-race"], ["./gogs", "web"] diff --git a/README.md b/README.md index 4d683eadd0..437ac80203 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ Gogs - Go Git Service [![Build Status](https://travis-ci.org/gogits/gogs.svg?bra ![](public/img/gogs-large-resize.png) -##### Current version: 0.7.16 Beta +##### Current version: 0.7.17 Beta diff --git a/gogs.go b/gogs.go index 95c21a5d46..a9601bfbe2 100644 --- a/gogs.go +++ b/gogs.go @@ -17,7 +17,7 @@ import ( "github.com/gogits/gogs/modules/setting" ) -const APP_VER = "0.7.16.1118 Beta" +const APP_VER = "0.7.17.1118 Beta" func init() { runtime.GOMAXPROCS(runtime.NumCPU()) diff --git a/modules/git/error.go b/modules/git/error.go new file mode 100644 index 0000000000..c86c56e546 --- /dev/null +++ b/modules/git/error.go @@ -0,0 +1,22 @@ +// Copyright 2015 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package git + +import ( + "fmt" +) + +type ErrUnsupportedVersion struct { + Required string +} + +func IsErrUnsupportedVersion(err error) bool { + _, ok := err.(ErrUnsupportedVersion) + return ok +} + +func (err ErrUnsupportedVersion) Error() string { + return fmt.Sprintf("Operation requires higher version [required: %s]", err.Required) +} diff --git a/modules/git/repo_branch.go b/modules/git/repo_branch.go index a4e060533c..86c4f538b4 100644 --- a/modules/git/repo_branch.go +++ b/modules/git/repo_branch.go @@ -35,3 +35,16 @@ func (repo *Repository) GetBranches() ([]string, error) { } return branches, nil } + +// SetDefaultBranch sets default branch of repository. +func (repo *Repository) SetDefaultBranch(branchName string) error { + if gitVer.LessThan(MustParseVersion("1.7.10")) { + return ErrUnsupportedVersion{"1.7.10"} + } + + _, stderr, err := com.ExecCmdDir(repo.Path, "git", "symbolic-ref", "HEAD", "refs/heads/"+branchName) + if err != nil { + return concatenateError(err, stderr) + } + return nil +} diff --git a/routers/repo/setting.go b/routers/repo/setting.go index bee29254c5..019949b793 100644 --- a/routers/repo/setting.go +++ b/routers/repo/setting.go @@ -80,8 +80,15 @@ func SettingsPost(ctx *middleware.Context, form auth.RepoSettingForm) { repo.Name = newRepoName repo.LowerName = strings.ToLower(newRepoName) - if ctx.Repo.GitRepo.IsBranchExist(form.Branch) { + if ctx.Repo.GitRepo.IsBranchExist(form.Branch) && + repo.DefaultBranch != form.Branch { repo.DefaultBranch = form.Branch + if err := ctx.Repo.GitRepo.SetDefaultBranch(form.Branch); err != nil { + if !git.IsErrUnsupportedVersion(err) { + ctx.Handle(500, "SetDefaultBranch", err) + return + } + } } repo.Description = form.Description repo.Website = form.Website diff --git a/templates/.VERSION b/templates/.VERSION index 38e57d5a12..9233e6e73c 100644 --- a/templates/.VERSION +++ b/templates/.VERSION @@ -1 +1 @@ -0.7.16.1118 Beta \ No newline at end of file +0.7.17.1118 Beta \ No newline at end of file