mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-04 05:25:15 +01:00 
			
		
		
		
	* Refactor repo.isBare to repo.isEmpty #5629 Signed-off-by: Andrew Thornton <art27@cantab.net> * Remove Sync call
This commit is contained in:
		
							parent
							
								
									9edc829c17
								
							
						
					
					
						commit
						07802a2bc5
					
				@ -11,7 +11,7 @@ import (
 | 
				
			|||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestBareRepo(t *testing.T) {
 | 
					func TestEmptyRepo(t *testing.T) {
 | 
				
			||||||
	prepareTestEnv(t)
 | 
						prepareTestEnv(t)
 | 
				
			||||||
	subpaths := []string{
 | 
						subpaths := []string{
 | 
				
			||||||
		"commits/master",
 | 
							"commits/master",
 | 
				
			||||||
@ -19,10 +19,10 @@ func TestBareRepo(t *testing.T) {
 | 
				
			|||||||
		"commit/1ae57b34ccf7e18373",
 | 
							"commit/1ae57b34ccf7e18373",
 | 
				
			||||||
		"graph",
 | 
							"graph",
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	bareRepo := models.AssertExistsAndLoadBean(t, &models.Repository{}, models.Cond("is_bare = ?", true)).(*models.Repository)
 | 
						emptyRepo := models.AssertExistsAndLoadBean(t, &models.Repository{}, models.Cond("is_empty = ?", true)).(*models.Repository)
 | 
				
			||||||
	owner := models.AssertExistsAndLoadBean(t, &models.User{ID: bareRepo.OwnerID}).(*models.User)
 | 
						owner := models.AssertExistsAndLoadBean(t, &models.User{ID: emptyRepo.OwnerID}).(*models.User)
 | 
				
			||||||
	for _, subpath := range subpaths {
 | 
						for _, subpath := range subpaths {
 | 
				
			||||||
		req := NewRequestf(t, "GET", "/%s/%s/%s", owner.Name, bareRepo.Name, subpath)
 | 
							req := NewRequestf(t, "GET", "/%s/%s/%s", owner.Name, emptyRepo.Name, subpath)
 | 
				
			||||||
		MakeRequest(t, req, http.StatusNotFound)
 | 
							MakeRequest(t, req, http.StatusNotFound)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -574,13 +574,13 @@ func CommitRepoAction(opts CommitRepoActionOptions) error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	refName := git.RefEndName(opts.RefFullName)
 | 
						refName := git.RefEndName(opts.RefFullName)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Change default branch and bare status only if pushed ref is non-empty branch.
 | 
						// Change default branch and empty status only if pushed ref is non-empty branch.
 | 
				
			||||||
	if repo.IsBare && opts.NewCommitID != git.EmptySHA && strings.HasPrefix(opts.RefFullName, git.BranchPrefix) {
 | 
						if repo.IsEmpty && opts.NewCommitID != git.EmptySHA && strings.HasPrefix(opts.RefFullName, git.BranchPrefix) {
 | 
				
			||||||
		repo.DefaultBranch = refName
 | 
							repo.DefaultBranch = refName
 | 
				
			||||||
		repo.IsBare = false
 | 
							repo.IsEmpty = false
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Change repository bare status and update last updated time.
 | 
						// Change repository empty status and update last updated time.
 | 
				
			||||||
	if err = UpdateRepository(repo, false); err != nil {
 | 
						if err = UpdateRepository(repo, false); err != nil {
 | 
				
			||||||
		return fmt.Errorf("UpdateRepository: %v", err)
 | 
							return fmt.Errorf("UpdateRepository: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
				
			|||||||
@ -175,7 +175,7 @@
 | 
				
			|||||||
  owner_id: 2
 | 
					  owner_id: 2
 | 
				
			||||||
  lower_name: repo15
 | 
					  lower_name: repo15
 | 
				
			||||||
  name: repo15
 | 
					  name: repo15
 | 
				
			||||||
  is_bare: true
 | 
					  is_empty: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-
 | 
					-
 | 
				
			||||||
  id: 16
 | 
					  id: 16
 | 
				
			||||||
 | 
				
			|||||||
@ -208,6 +208,8 @@ var migrations = []Migration{
 | 
				
			|||||||
	NewMigration("add pull request rebase with merge commit", addPullRequestRebaseWithMerge),
 | 
						NewMigration("add pull request rebase with merge commit", addPullRequestRebaseWithMerge),
 | 
				
			||||||
	// v77 -> v78
 | 
						// v77 -> v78
 | 
				
			||||||
	NewMigration("add theme to users", addUserDefaultTheme),
 | 
						NewMigration("add theme to users", addUserDefaultTheme),
 | 
				
			||||||
 | 
						// v78 -> v79
 | 
				
			||||||
 | 
						NewMigration("rename repo is_bare to repo is_empty", renameRepoIsBareToIsEmpty),
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Migrate database to current version
 | 
					// Migrate database to current version
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										42
									
								
								models/migrations/v78.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								models/migrations/v78.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,42 @@
 | 
				
			|||||||
 | 
					// Copyright 2019 The Gitea 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 migrations
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/go-xorm/xorm"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func renameRepoIsBareToIsEmpty(x *xorm.Engine) error {
 | 
				
			||||||
 | 
						type Repository struct {
 | 
				
			||||||
 | 
							ID      int64 `xorm:"pk autoincr"`
 | 
				
			||||||
 | 
							IsBare  bool
 | 
				
			||||||
 | 
							IsEmpty bool `xorm:"INDEX"`
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sess := x.NewSession()
 | 
				
			||||||
 | 
						defer sess.Close()
 | 
				
			||||||
 | 
						if err := sess.Begin(); err != nil {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						var err error
 | 
				
			||||||
 | 
						if models.DbCfg.Type == "mssql" {
 | 
				
			||||||
 | 
							_, err = sess.Query("EXEC sp_rename 'repository.is_bare', 'is_empty', 'COLUMN'")
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							_, err = sess.Query("ALTER TABLE \"repository\" RENAME COLUMN \"is_bare\" TO \"is_empty\";")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							if strings.Contains(err.Error(), "no such column") {
 | 
				
			||||||
 | 
								return nil
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return fmt.Errorf("select repositories: %v", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return sess.Commit()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -187,7 +187,7 @@ type Repository struct {
 | 
				
			|||||||
	NumReleases         int `xorm:"-"`
 | 
						NumReleases         int `xorm:"-"`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	IsPrivate bool `xorm:"INDEX"`
 | 
						IsPrivate bool `xorm:"INDEX"`
 | 
				
			||||||
	IsBare    bool `xorm:"INDEX"`
 | 
						IsEmpty   bool `xorm:"INDEX"`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	IsMirror bool `xorm:"INDEX"`
 | 
						IsMirror bool `xorm:"INDEX"`
 | 
				
			||||||
	*Mirror  `xorm:"-"`
 | 
						*Mirror  `xorm:"-"`
 | 
				
			||||||
@ -291,7 +291,7 @@ func (repo *Repository) innerAPIFormat(e Engine, mode AccessMode, isParent bool)
 | 
				
			|||||||
		FullName:      repo.FullName(),
 | 
							FullName:      repo.FullName(),
 | 
				
			||||||
		Description:   repo.Description,
 | 
							Description:   repo.Description,
 | 
				
			||||||
		Private:       repo.IsPrivate,
 | 
							Private:       repo.IsPrivate,
 | 
				
			||||||
		Empty:         repo.IsBare,
 | 
							Empty:         repo.IsEmpty,
 | 
				
			||||||
		Size:          int(repo.Size / 1024),
 | 
							Size:          int(repo.Size / 1024),
 | 
				
			||||||
		Fork:          repo.IsFork,
 | 
							Fork:          repo.IsFork,
 | 
				
			||||||
		Parent:        parent,
 | 
							Parent:        parent,
 | 
				
			||||||
@ -656,7 +656,7 @@ func (repo *Repository) CanUserFork(user *User) (bool, error) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// CanEnablePulls returns true if repository meets the requirements of accepting pulls.
 | 
					// CanEnablePulls returns true if repository meets the requirements of accepting pulls.
 | 
				
			||||||
func (repo *Repository) CanEnablePulls() bool {
 | 
					func (repo *Repository) CanEnablePulls() bool {
 | 
				
			||||||
	return !repo.IsMirror && !repo.IsBare
 | 
						return !repo.IsMirror && !repo.IsEmpty
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// AllowsPulls returns true if repository meets the requirements of accepting pulls and has them enabled.
 | 
					// AllowsPulls returns true if repository meets the requirements of accepting pulls and has them enabled.
 | 
				
			||||||
@ -954,13 +954,13 @@ func MigrateRepository(doer, u *User, opts MigrateRepoOptions) (*Repository, err
 | 
				
			|||||||
	_, stderr, err := com.ExecCmdDir(repoPath, "git", "log", "-1")
 | 
						_, stderr, err := com.ExecCmdDir(repoPath, "git", "log", "-1")
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		if strings.Contains(stderr, "fatal: bad default revision 'HEAD'") {
 | 
							if strings.Contains(stderr, "fatal: bad default revision 'HEAD'") {
 | 
				
			||||||
			repo.IsBare = true
 | 
								repo.IsEmpty = true
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			return repo, fmt.Errorf("check bare: %v - %s", err, stderr)
 | 
								return repo, fmt.Errorf("check empty: %v - %s", err, stderr)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if !repo.IsBare {
 | 
						if !repo.IsEmpty {
 | 
				
			||||||
		// Try to get HEAD branch and set it as default branch.
 | 
							// Try to get HEAD branch and set it as default branch.
 | 
				
			||||||
		gitRepo, err := git.OpenRepository(repoPath)
 | 
							gitRepo, err := git.OpenRepository(repoPath)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
@ -999,7 +999,7 @@ func MigrateRepository(doer, u *User, opts MigrateRepoOptions) (*Repository, err
 | 
				
			|||||||
		repo, err = CleanUpMigrateInfo(repo)
 | 
							repo, err = CleanUpMigrateInfo(repo)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err != nil && !repo.IsBare {
 | 
						if err != nil && !repo.IsEmpty {
 | 
				
			||||||
		UpdateRepoIndexer(repo)
 | 
							UpdateRepoIndexer(repo)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1214,7 +1214,7 @@ func initRepository(e Engine, repoPath string, u *User, repo *Repository, opts C
 | 
				
			|||||||
		return fmt.Errorf("initRepository: path already exists: %s", repoPath)
 | 
							return fmt.Errorf("initRepository: path already exists: %s", repoPath)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Init bare new repository.
 | 
						// Init git bare new repository.
 | 
				
			||||||
	if err = git.InitRepository(repoPath, true); err != nil {
 | 
						if err = git.InitRepository(repoPath, true); err != nil {
 | 
				
			||||||
		return fmt.Errorf("InitRepository: %v", err)
 | 
							return fmt.Errorf("InitRepository: %v", err)
 | 
				
			||||||
	} else if err = createDelegateHooks(repoPath); err != nil {
 | 
						} else if err = createDelegateHooks(repoPath); err != nil {
 | 
				
			||||||
@ -1249,7 +1249,7 @@ func initRepository(e Engine, repoPath string, u *User, repo *Repository, opts C
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if !opts.AutoInit {
 | 
						if !opts.AutoInit {
 | 
				
			||||||
		repo.IsBare = true
 | 
							repo.IsEmpty = true
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	repo.DefaultBranch = "master"
 | 
						repo.DefaultBranch = "master"
 | 
				
			||||||
 | 
				
			|||||||
@ -124,7 +124,7 @@ func APIContexter() macaron.Handler {
 | 
				
			|||||||
func ReferencesGitRepo() macaron.Handler {
 | 
					func ReferencesGitRepo() macaron.Handler {
 | 
				
			||||||
	return func(ctx *APIContext) {
 | 
						return func(ctx *APIContext) {
 | 
				
			||||||
		// Empty repository does not have reference information.
 | 
							// Empty repository does not have reference information.
 | 
				
			||||||
		if ctx.Repo.Repository.IsBare {
 | 
							if ctx.Repo.Repository.IsEmpty {
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -234,7 +234,7 @@ func repoAssignment(ctx *Context, repo *models.Repository) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	ctx.Repo.Repository = repo
 | 
						ctx.Repo.Repository = repo
 | 
				
			||||||
	ctx.Data["RepoName"] = ctx.Repo.Repository.Name
 | 
						ctx.Data["RepoName"] = ctx.Repo.Repository.Name
 | 
				
			||||||
	ctx.Data["IsBareRepo"] = ctx.Repo.Repository.IsBare
 | 
						ctx.Data["IsEmptyRepo"] = ctx.Repo.Repository.IsEmpty
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// RepoIDAssignment returns a macaron handler which assigns the repo to the context.
 | 
					// RepoIDAssignment returns a macaron handler which assigns the repo to the context.
 | 
				
			||||||
@ -370,8 +370,8 @@ func RepoAssignment() macaron.Handler {
 | 
				
			|||||||
			ctx.Data["IsStaringRepo"] = models.IsStaring(ctx.User.ID, repo.ID)
 | 
								ctx.Data["IsStaringRepo"] = models.IsStaring(ctx.User.ID, repo.ID)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// repo is bare and display enable
 | 
							// repo is empty and display enable
 | 
				
			||||||
		if ctx.Repo.Repository.IsBare {
 | 
							if ctx.Repo.Repository.IsEmpty {
 | 
				
			||||||
			ctx.Data["BranchName"] = ctx.Repo.Repository.DefaultBranch
 | 
								ctx.Data["BranchName"] = ctx.Repo.Repository.DefaultBranch
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@ -520,7 +520,7 @@ func getRefName(ctx *Context, pathType RepoRefType) string {
 | 
				
			|||||||
func RepoRefByType(refType RepoRefType) macaron.Handler {
 | 
					func RepoRefByType(refType RepoRefType) macaron.Handler {
 | 
				
			||||||
	return func(ctx *Context) {
 | 
						return func(ctx *Context) {
 | 
				
			||||||
		// Empty repository does not have reference information.
 | 
							// Empty repository does not have reference information.
 | 
				
			||||||
		if ctx.Repo.Repository.IsBare {
 | 
							if ctx.Repo.Repository.IsEmpty {
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -549,7 +549,7 @@ func RepoRefByType(refType RepoRefType) macaron.Handler {
 | 
				
			|||||||
					ctx.ServerError("GetBranches", err)
 | 
										ctx.ServerError("GetBranches", err)
 | 
				
			||||||
					return
 | 
										return
 | 
				
			||||||
				} else if len(brs) == 0 {
 | 
									} else if len(brs) == 0 {
 | 
				
			||||||
					err = fmt.Errorf("No branches in non-bare repository %s",
 | 
										err = fmt.Errorf("No branches in non-empty repository %s",
 | 
				
			||||||
						ctx.Repo.GitRepo.Path)
 | 
											ctx.Repo.GitRepo.Path)
 | 
				
			||||||
					ctx.ServerError("GetBranches", err)
 | 
										ctx.ServerError("GetBranches", err)
 | 
				
			||||||
					return
 | 
										return
 | 
				
			||||||
 | 
				
			|||||||
@ -578,7 +578,7 @@ quick_guide=Krátká příručka
 | 
				
			|||||||
clone_this_repo=Naklonovat tento repozitář
 | 
					clone_this_repo=Naklonovat tento repozitář
 | 
				
			||||||
create_new_repo_command=Vytvořit nový repozitář na příkazové řádce
 | 
					create_new_repo_command=Vytvořit nový repozitář na příkazové řádce
 | 
				
			||||||
push_exist_repo=Nahrání existujícího repozitáře z příkazové řádky
 | 
					push_exist_repo=Nahrání existujícího repozitáře z příkazové řádky
 | 
				
			||||||
bare_message=Tento repozitář nemá žádný obsah.
 | 
					empty_message=Tento repozitář nemá žádný obsah.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
code=Zdrojový kód
 | 
					code=Zdrojový kód
 | 
				
			||||||
code.desc=Přístup ke zdrojovým kódům, souborům, revizím a větvím.
 | 
					code.desc=Přístup ke zdrojovým kódům, souborům, revizím a větvím.
 | 
				
			||||||
 | 
				
			|||||||
@ -572,7 +572,7 @@ quick_guide=Kurzanleitung
 | 
				
			|||||||
clone_this_repo=Dieses Repository klonen
 | 
					clone_this_repo=Dieses Repository klonen
 | 
				
			||||||
create_new_repo_command=Erstelle ein neues Repository von der Kommandozeile aus
 | 
					create_new_repo_command=Erstelle ein neues Repository von der Kommandozeile aus
 | 
				
			||||||
push_exist_repo=Bestehendes Repository via Kommandozeile pushen
 | 
					push_exist_repo=Bestehendes Repository via Kommandozeile pushen
 | 
				
			||||||
bare_message=Dieses Repository hat noch keinen Inhalt.
 | 
					empty_message=Dieses Repository hat noch keinen Inhalt.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
code=Code
 | 
					code=Code
 | 
				
			||||||
code.desc=Zugriff auf Quellcode, Dateien, Commits und Branches.
 | 
					code.desc=Zugriff auf Quellcode, Dateien, Commits und Branches.
 | 
				
			||||||
 | 
				
			|||||||
@ -578,7 +578,7 @@ quick_guide = Quick Guide
 | 
				
			|||||||
clone_this_repo = Clone this repository
 | 
					clone_this_repo = Clone this repository
 | 
				
			||||||
create_new_repo_command = Creating a new repository on the command line
 | 
					create_new_repo_command = Creating a new repository on the command line
 | 
				
			||||||
push_exist_repo = Pushing an existing repository from the command line
 | 
					push_exist_repo = Pushing an existing repository from the command line
 | 
				
			||||||
bare_message = This repository does not contain any content.
 | 
					empty_message = This repository does not contain any content.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
code = Code
 | 
					code = Code
 | 
				
			||||||
code.desc = Access source code, files, commits and branches.
 | 
					code.desc = Access source code, files, commits and branches.
 | 
				
			||||||
 | 
				
			|||||||
@ -356,7 +356,7 @@ quick_guide=Guía rápida
 | 
				
			|||||||
clone_this_repo=Clonar este repositorio
 | 
					clone_this_repo=Clonar este repositorio
 | 
				
			||||||
create_new_repo_command=Crear un nuevo repositorio desde línea de comandos
 | 
					create_new_repo_command=Crear un nuevo repositorio desde línea de comandos
 | 
				
			||||||
push_exist_repo=Hacer push de un repositorio existente desde línea de comandos
 | 
					push_exist_repo=Hacer push de un repositorio existente desde línea de comandos
 | 
				
			||||||
bare_message=Este repositorio no contiene ningún contenido.
 | 
					empty_message=Este repositorio no contiene ningún contenido.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
code=Código
 | 
					code=Código
 | 
				
			||||||
branch=Rama
 | 
					branch=Rama
 | 
				
			||||||
 | 
				
			|||||||
@ -578,7 +578,7 @@ quick_guide=Introduction rapide
 | 
				
			|||||||
clone_this_repo=Cloner ce dépôt
 | 
					clone_this_repo=Cloner ce dépôt
 | 
				
			||||||
create_new_repo_command=Création d'un nouveau dépôt en ligne de commande
 | 
					create_new_repo_command=Création d'un nouveau dépôt en ligne de commande
 | 
				
			||||||
push_exist_repo=Soumission d'un dépôt existant par ligne de commande
 | 
					push_exist_repo=Soumission d'un dépôt existant par ligne de commande
 | 
				
			||||||
bare_message=Ce dépôt ne contient aucune information.
 | 
					empty_message=Ce dépôt ne contient aucune information.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
code=Code
 | 
					code=Code
 | 
				
			||||||
code.desc=Accéder au code source, fichiers, révisions et branches.
 | 
					code.desc=Accéder au code source, fichiers, révisions et branches.
 | 
				
			||||||
 | 
				
			|||||||
@ -289,7 +289,7 @@ quick_guide=Gyors útmutató
 | 
				
			|||||||
clone_this_repo=Tároló klónozása
 | 
					clone_this_repo=Tároló klónozása
 | 
				
			||||||
create_new_repo_command=Egy új tároló létrehozása a parancssorból
 | 
					create_new_repo_command=Egy új tároló létrehozása a parancssorból
 | 
				
			||||||
push_exist_repo=Meglévő tároló feltöltése parancssorból
 | 
					push_exist_repo=Meglévő tároló feltöltése parancssorból
 | 
				
			||||||
bare_message=A tároló nem tartalmaz semmit, üres.
 | 
					empty_message=A tároló nem tartalmaz semmit, üres.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
code=Kód
 | 
					code=Kód
 | 
				
			||||||
branch=Ág
 | 
					branch=Ág
 | 
				
			||||||
 | 
				
			|||||||
@ -358,7 +358,7 @@ quick_guide=Panduan Cepat
 | 
				
			|||||||
clone_this_repo=Klon repositori ini
 | 
					clone_this_repo=Klon repositori ini
 | 
				
			||||||
create_new_repo_command=Membuat repositori baru pada baris perintah
 | 
					create_new_repo_command=Membuat repositori baru pada baris perintah
 | 
				
			||||||
push_exist_repo=Mendorong sebuah repositori yang ada di baris perintah
 | 
					push_exist_repo=Mendorong sebuah repositori yang ada di baris perintah
 | 
				
			||||||
bare_message=Repositori ini tidak berisi konten apapun.
 | 
					empty_message=Repositori ini tidak berisi konten apapun.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
code=Kode
 | 
					code=Kode
 | 
				
			||||||
branch=Cabang
 | 
					branch=Cabang
 | 
				
			||||||
 | 
				
			|||||||
@ -534,7 +534,7 @@ quick_guide=Guida rapida
 | 
				
			|||||||
clone_this_repo=Clona questo repository
 | 
					clone_this_repo=Clona questo repository
 | 
				
			||||||
create_new_repo_command=Creazione di un nuovo repository da riga di comando
 | 
					create_new_repo_command=Creazione di un nuovo repository da riga di comando
 | 
				
			||||||
push_exist_repo=Push di un repository esistente da riga di comando
 | 
					push_exist_repo=Push di un repository esistente da riga di comando
 | 
				
			||||||
bare_message=Questo repository non contiene alcun contenuto.
 | 
					empty_message=Questo repository non contiene alcun contenuto.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
code=Codice
 | 
					code=Codice
 | 
				
			||||||
code.desc=Accedi al codice sorgente, file, commits e branches.
 | 
					code.desc=Accedi al codice sorgente, file, commits e branches.
 | 
				
			||||||
 | 
				
			|||||||
@ -578,7 +578,7 @@ quick_guide=クイック ガイド
 | 
				
			|||||||
clone_this_repo=このリポジトリのクローンを作成
 | 
					clone_this_repo=このリポジトリのクローンを作成
 | 
				
			||||||
create_new_repo_command=コマンドラインから新しいリポジトリを作成
 | 
					create_new_repo_command=コマンドラインから新しいリポジトリを作成
 | 
				
			||||||
push_exist_repo=コマンドラインから既存のリポジトリをプッシュ
 | 
					push_exist_repo=コマンドラインから既存のリポジトリをプッシュ
 | 
				
			||||||
bare_message=このリポジトリには内容がありません。
 | 
					empty_message=このリポジトリには内容がありません。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
code=コード
 | 
					code=コード
 | 
				
			||||||
code.desc=ソースコード、ファイル、コミット、ブランチにアクセス。
 | 
					code.desc=ソースコード、ファイル、コミット、ブランチにアクセス。
 | 
				
			||||||
 | 
				
			|||||||
@ -270,7 +270,7 @@ quick_guide=퀵 가이드
 | 
				
			|||||||
clone_this_repo=이 저장소 복제
 | 
					clone_this_repo=이 저장소 복제
 | 
				
			||||||
create_new_repo_command=커맨드 라인에서 새 레포리지터리 생성
 | 
					create_new_repo_command=커맨드 라인에서 새 레포리지터리 생성
 | 
				
			||||||
push_exist_repo=커맨드라인에서 기존 레포지터리 푸시
 | 
					push_exist_repo=커맨드라인에서 기존 레포지터리 푸시
 | 
				
			||||||
bare_message=이 레포지터리에는 아무것도 없습니다.
 | 
					empty_message=이 레포지터리에는 아무것도 없습니다.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
code=코드
 | 
					code=코드
 | 
				
			||||||
branch=브렌치
 | 
					branch=브렌치
 | 
				
			||||||
 | 
				
			|||||||
@ -571,7 +571,7 @@ quick_guide=Īsa pamācība
 | 
				
			|||||||
clone_this_repo=Klonēt šo repozitoriju
 | 
					clone_this_repo=Klonēt šo repozitoriju
 | 
				
			||||||
create_new_repo_command=Izveidot jaunu repozitoriju komandrindā
 | 
					create_new_repo_command=Izveidot jaunu repozitoriju komandrindā
 | 
				
			||||||
push_exist_repo=Nosūtīt izmaiņas no komandrindas eksistējošam repozitorijam
 | 
					push_exist_repo=Nosūtīt izmaiņas no komandrindas eksistējošam repozitorijam
 | 
				
			||||||
bare_message=Repozitorijs ir tukšs.
 | 
					empty_message=Repozitorijs ir tukšs.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
code=Kods
 | 
					code=Kods
 | 
				
			||||||
code.desc=Piekļūt pirmkodam, failiem, revīzijām un atzariem.
 | 
					code.desc=Piekļūt pirmkodam, failiem, revīzijām un atzariem.
 | 
				
			||||||
 | 
				
			|||||||
@ -470,7 +470,7 @@ quick_guide=Snelstart gids
 | 
				
			|||||||
clone_this_repo=Kloon deze repository
 | 
					clone_this_repo=Kloon deze repository
 | 
				
			||||||
create_new_repo_command=Maak een nieuwe repository aan vanaf de console
 | 
					create_new_repo_command=Maak een nieuwe repository aan vanaf de console
 | 
				
			||||||
push_exist_repo=Push een bestaande repositorie vanaf de console
 | 
					push_exist_repo=Push een bestaande repositorie vanaf de console
 | 
				
			||||||
bare_message=Deze repository bevat geen inhoud.
 | 
					empty_message=Deze repository bevat geen inhoud.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
code=Code
 | 
					code=Code
 | 
				
			||||||
branch=Branch
 | 
					branch=Branch
 | 
				
			||||||
 | 
				
			|||||||
@ -554,7 +554,7 @@ quick_guide=Skrócona instrukcja
 | 
				
			|||||||
clone_this_repo=Klonuj repozytorium
 | 
					clone_this_repo=Klonuj repozytorium
 | 
				
			||||||
create_new_repo_command=Tworzenie nowego repozytorium z linii poleceń
 | 
					create_new_repo_command=Tworzenie nowego repozytorium z linii poleceń
 | 
				
			||||||
push_exist_repo=Wypychanie istniejącego repozytorium z linii poleceń
 | 
					push_exist_repo=Wypychanie istniejącego repozytorium z linii poleceń
 | 
				
			||||||
bare_message=Repozytorium jest puste.
 | 
					empty_message=Repozytorium jest puste.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
code=Kod
 | 
					code=Kod
 | 
				
			||||||
branch=Gałąź
 | 
					branch=Gałąź
 | 
				
			||||||
 | 
				
			|||||||
@ -578,7 +578,7 @@ quick_guide=Guia Rápido
 | 
				
			|||||||
clone_this_repo=Clonar este repositório
 | 
					clone_this_repo=Clonar este repositório
 | 
				
			||||||
create_new_repo_command=Criando um novo repositório por linha de comando
 | 
					create_new_repo_command=Criando um novo repositório por linha de comando
 | 
				
			||||||
push_exist_repo=Realizando push para um repositório existente por linha de comando
 | 
					push_exist_repo=Realizando push para um repositório existente por linha de comando
 | 
				
			||||||
bare_message=Este repositório está vazio.
 | 
					empty_message=Este repositório está vazio.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
code=Código
 | 
					code=Código
 | 
				
			||||||
code.desc=Acesso a código-fonte, arquivos, commits e branches.
 | 
					code.desc=Acesso a código-fonte, arquivos, commits e branches.
 | 
				
			||||||
 | 
				
			|||||||
@ -562,7 +562,7 @@ quick_guide=Краткое руководство
 | 
				
			|||||||
clone_this_repo=Клонировать репозиторий
 | 
					clone_this_repo=Клонировать репозиторий
 | 
				
			||||||
create_new_repo_command=Создать новый репозиторий из командной строки
 | 
					create_new_repo_command=Создать новый репозиторий из командной строки
 | 
				
			||||||
push_exist_repo=Push существующего репозитория из командной строки
 | 
					push_exist_repo=Push существующего репозитория из командной строки
 | 
				
			||||||
bare_message=В репозитории нет файлов.
 | 
					empty_message=В репозитории нет файлов.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
code=Код
 | 
					code=Код
 | 
				
			||||||
code.desc=Исходный код, файлы, коммиты и ветки.
 | 
					code.desc=Исходный код, файлы, коммиты и ветки.
 | 
				
			||||||
 | 
				
			|||||||
@ -551,7 +551,7 @@ quick_guide=Snabbguide
 | 
				
			|||||||
clone_this_repo=Klona detta repo
 | 
					clone_this_repo=Klona detta repo
 | 
				
			||||||
create_new_repo_command=Skapa en ny utvecklingskatalog på kommandoraden
 | 
					create_new_repo_command=Skapa en ny utvecklingskatalog på kommandoraden
 | 
				
			||||||
push_exist_repo=Pusha en existerande utvecklingskatalog från kommandoraden
 | 
					push_exist_repo=Pusha en existerande utvecklingskatalog från kommandoraden
 | 
				
			||||||
bare_message=Denna utvecklingskatalog är tom.
 | 
					empty_message=Denna utvecklingskatalog är tom.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
code=Kod
 | 
					code=Kod
 | 
				
			||||||
code.desc=Se källkod, filer, commits och brancher.
 | 
					code.desc=Se källkod, filer, commits och brancher.
 | 
				
			||||||
 | 
				
			|||||||
@ -283,7 +283,7 @@ quick_guide=Hızlı Başlangıç Kılavuzu
 | 
				
			|||||||
clone_this_repo=Bu depoyu klonla
 | 
					clone_this_repo=Bu depoyu klonla
 | 
				
			||||||
create_new_repo_command=Komut satırında yeni bir depo oluşturuluyor
 | 
					create_new_repo_command=Komut satırında yeni bir depo oluşturuluyor
 | 
				
			||||||
push_exist_repo=Komut satırından mevcut bir depo itiliyor
 | 
					push_exist_repo=Komut satırından mevcut bir depo itiliyor
 | 
				
			||||||
bare_message=Bu depo herhangi bir içerik içermiyor.
 | 
					empty_message=Bu depo herhangi bir içerik içermiyor.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
code=Kod
 | 
					code=Kod
 | 
				
			||||||
branch=Dal
 | 
					branch=Dal
 | 
				
			||||||
 | 
				
			|||||||
@ -562,7 +562,7 @@ quick_guide=Короткий посібник
 | 
				
			|||||||
clone_this_repo=Кнонувати цей репозиторій
 | 
					clone_this_repo=Кнонувати цей репозиторій
 | 
				
			||||||
create_new_repo_command=Створити новий репозиторій з командного рядка
 | 
					create_new_repo_command=Створити новий репозиторій з командного рядка
 | 
				
			||||||
push_exist_repo=Опублікувати існуючий репозиторій з командного рядка
 | 
					push_exist_repo=Опублікувати існуючий репозиторій з командного рядка
 | 
				
			||||||
bare_message=Цей репозиторій порожній.
 | 
					empty_message=Цей репозиторій порожній.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
code=Код
 | 
					code=Код
 | 
				
			||||||
code.desc=Доступ до коду, файлів, комітів та гілок.
 | 
					code.desc=Доступ до коду, файлів, комітів та гілок.
 | 
				
			||||||
 | 
				
			|||||||
@ -577,7 +577,7 @@ quick_guide=快速帮助
 | 
				
			|||||||
clone_this_repo=克隆当前仓库
 | 
					clone_this_repo=克隆当前仓库
 | 
				
			||||||
create_new_repo_command=从命令行创建一个新的仓库
 | 
					create_new_repo_command=从命令行创建一个新的仓库
 | 
				
			||||||
push_exist_repo=从命令行推送已经创建的仓库
 | 
					push_exist_repo=从命令行推送已经创建的仓库
 | 
				
			||||||
bare_message=这个家伙很懒,什么都没有推送。
 | 
					empty_message=这个家伙很懒,什么都没有推送。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
code=代码
 | 
					code=代码
 | 
				
			||||||
code.desc=查看源码、文件、提交和分支。
 | 
					code.desc=查看源码、文件、提交和分支。
 | 
				
			||||||
 | 
				
			|||||||
@ -275,7 +275,7 @@ quick_guide=快速幫助
 | 
				
			|||||||
clone_this_repo=複製當前儲存庫
 | 
					clone_this_repo=複製當前儲存庫
 | 
				
			||||||
create_new_repo_command=從命令列建立新儲存庫。
 | 
					create_new_repo_command=從命令列建立新儲存庫。
 | 
				
			||||||
push_exist_repo=從命令列推送已存在的儲存庫
 | 
					push_exist_repo=從命令列推送已存在的儲存庫
 | 
				
			||||||
bare_message=此儲存庫未包含任何內容。
 | 
					empty_message=此儲存庫未包含任何內容。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
code=程式碼
 | 
					code=程式碼
 | 
				
			||||||
branch=分支
 | 
					branch=分支
 | 
				
			||||||
 | 
				
			|||||||
@ -500,7 +500,7 @@ quick_guide=快速幫助
 | 
				
			|||||||
clone_this_repo=複製此儲存庫
 | 
					clone_this_repo=複製此儲存庫
 | 
				
			||||||
create_new_repo_command=從命令列建立新儲存庫。
 | 
					create_new_repo_command=從命令列建立新儲存庫。
 | 
				
			||||||
push_exist_repo=從命令行推送已經建立的儲存庫
 | 
					push_exist_repo=從命令行推送已經建立的儲存庫
 | 
				
			||||||
bare_message=此儲存庫未包含任何內容。
 | 
					empty_message=此儲存庫未包含任何內容。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
code=程式碼
 | 
					code=程式碼
 | 
				
			||||||
branch=分支
 | 
					branch=分支
 | 
				
			||||||
 | 
				
			|||||||
@ -39,7 +39,7 @@ func GetRawFile(ctx *context.APIContext) {
 | 
				
			|||||||
	// responses:
 | 
						// responses:
 | 
				
			||||||
	//   200:
 | 
						//   200:
 | 
				
			||||||
	//     description: success
 | 
						//     description: success
 | 
				
			||||||
	if ctx.Repo.Repository.IsBare {
 | 
						if ctx.Repo.Repository.IsEmpty {
 | 
				
			||||||
		ctx.Status(404)
 | 
							ctx.Status(404)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
				
			|||||||
@ -63,7 +63,7 @@ func getForkRepository(ctx *context.Context) *models.Repository {
 | 
				
			|||||||
		return nil
 | 
							return nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if forkRepo.IsBare || !perm.CanRead(models.UnitTypeCode) {
 | 
						if forkRepo.IsEmpty || !perm.CanRead(models.UnitTypeCode) {
 | 
				
			||||||
		ctx.NotFound("getForkRepository", nil)
 | 
							ctx.NotFound("getForkRepository", nil)
 | 
				
			||||||
		return nil
 | 
							return nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
				
			|||||||
@ -28,10 +28,10 @@ const (
 | 
				
			|||||||
	tplMigrate base.TplName = "repo/migrate"
 | 
						tplMigrate base.TplName = "repo/migrate"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// MustBeNotBare render when a repo is a bare git dir
 | 
					// MustBeNotEmpty render when a repo is a empty git dir
 | 
				
			||||||
func MustBeNotBare(ctx *context.Context) {
 | 
					func MustBeNotEmpty(ctx *context.Context) {
 | 
				
			||||||
	if ctx.Repo.Repository.IsBare {
 | 
						if ctx.Repo.Repository.IsEmpty {
 | 
				
			||||||
		ctx.NotFound("MustBeNotBare", nil)
 | 
							ctx.NotFound("MustBeNotEmpty", nil)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -30,10 +30,10 @@ import (
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const (
 | 
					const (
 | 
				
			||||||
	tplRepoBARE base.TplName = "repo/bare"
 | 
						tplRepoEMPTY base.TplName = "repo/empty"
 | 
				
			||||||
	tplRepoHome base.TplName = "repo/home"
 | 
						tplRepoHome  base.TplName = "repo/home"
 | 
				
			||||||
	tplWatchers base.TplName = "repo/watchers"
 | 
						tplWatchers  base.TplName = "repo/watchers"
 | 
				
			||||||
	tplForks    base.TplName = "repo/forks"
 | 
						tplForks     base.TplName = "repo/forks"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func renderDirectory(ctx *context.Context, treeLink string) {
 | 
					func renderDirectory(ctx *context.Context, treeLink string) {
 | 
				
			||||||
@ -321,8 +321,8 @@ func Home(ctx *context.Context) {
 | 
				
			|||||||
func renderCode(ctx *context.Context) {
 | 
					func renderCode(ctx *context.Context) {
 | 
				
			||||||
	ctx.Data["PageIsViewCode"] = true
 | 
						ctx.Data["PageIsViewCode"] = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if ctx.Repo.Repository.IsBare {
 | 
						if ctx.Repo.Repository.IsEmpty {
 | 
				
			||||||
		ctx.HTML(200, tplRepoBARE)
 | 
							ctx.HTML(200, tplRepoEMPTY)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -478,7 +478,7 @@ func RegisterRoutes(m *macaron.Macaron) {
 | 
				
			|||||||
	}, reqSignIn)
 | 
						}, reqSignIn)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// ***** Release Attachment Download without Signin
 | 
						// ***** Release Attachment Download without Signin
 | 
				
			||||||
	m.Get("/:username/:reponame/releases/download/:vTag/:fileName", ignSignIn, context.RepoAssignment(), repo.MustBeNotBare, repo.RedirectDownload)
 | 
						m.Get("/:username/:reponame/releases/download/:vTag/:fileName", ignSignIn, context.RepoAssignment(), repo.MustBeNotEmpty, repo.RedirectDownload)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	m.Group("/:username/:reponame", func() {
 | 
						m.Group("/:username/:reponame", func() {
 | 
				
			||||||
		m.Group("/settings", func() {
 | 
							m.Group("/settings", func() {
 | 
				
			||||||
@ -493,7 +493,7 @@ func RegisterRoutes(m *macaron.Macaron) {
 | 
				
			|||||||
				m.Combo("").Get(repo.ProtectedBranch).Post(repo.ProtectedBranchPost)
 | 
									m.Combo("").Get(repo.ProtectedBranch).Post(repo.ProtectedBranchPost)
 | 
				
			||||||
				m.Combo("/*").Get(repo.SettingsProtectedBranch).
 | 
									m.Combo("/*").Get(repo.SettingsProtectedBranch).
 | 
				
			||||||
					Post(bindIgnErr(auth.ProtectBranchForm{}), repo.SettingsProtectedBranchPost)
 | 
										Post(bindIgnErr(auth.ProtectBranchForm{}), repo.SettingsProtectedBranchPost)
 | 
				
			||||||
			}, repo.MustBeNotBare)
 | 
								}, repo.MustBeNotEmpty)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			m.Group("/hooks", func() {
 | 
								m.Group("/hooks", func() {
 | 
				
			||||||
				m.Get("", repo.Webhooks)
 | 
									m.Get("", repo.Webhooks)
 | 
				
			||||||
@ -607,7 +607,7 @@ func RegisterRoutes(m *macaron.Macaron) {
 | 
				
			|||||||
				m.Post("/upload-file", repo.UploadFileToServer)
 | 
									m.Post("/upload-file", repo.UploadFileToServer)
 | 
				
			||||||
				m.Post("/upload-remove", bindIgnErr(auth.RemoveUploadFileForm{}), repo.RemoveUploadFileFromServer)
 | 
									m.Post("/upload-remove", bindIgnErr(auth.RemoveUploadFileForm{}), repo.RemoveUploadFileFromServer)
 | 
				
			||||||
			}, context.RepoRef(), repo.MustBeEditable, repo.MustBeAbleToUpload)
 | 
								}, context.RepoRef(), repo.MustBeEditable, repo.MustBeAbleToUpload)
 | 
				
			||||||
		}, reqRepoCodeWriter, repo.MustBeNotBare)
 | 
							}, reqRepoCodeWriter, repo.MustBeNotEmpty)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		m.Group("/branches", func() {
 | 
							m.Group("/branches", func() {
 | 
				
			||||||
			m.Group("/_new/", func() {
 | 
								m.Group("/_new/", func() {
 | 
				
			||||||
@ -617,24 +617,24 @@ func RegisterRoutes(m *macaron.Macaron) {
 | 
				
			|||||||
			}, bindIgnErr(auth.NewBranchForm{}))
 | 
								}, bindIgnErr(auth.NewBranchForm{}))
 | 
				
			||||||
			m.Post("/delete", repo.DeleteBranchPost)
 | 
								m.Post("/delete", repo.DeleteBranchPost)
 | 
				
			||||||
			m.Post("/restore", repo.RestoreBranchPost)
 | 
								m.Post("/restore", repo.RestoreBranchPost)
 | 
				
			||||||
		}, reqRepoCodeWriter, repo.MustBeNotBare)
 | 
							}, reqRepoCodeWriter, repo.MustBeNotEmpty)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	}, reqSignIn, context.RepoAssignment(), context.UnitTypes())
 | 
						}, reqSignIn, context.RepoAssignment(), context.UnitTypes())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Releases
 | 
						// Releases
 | 
				
			||||||
	m.Group("/:username/:reponame", func() {
 | 
						m.Group("/:username/:reponame", func() {
 | 
				
			||||||
		m.Group("/releases", func() {
 | 
							m.Group("/releases", func() {
 | 
				
			||||||
			m.Get("/", repo.MustBeNotBare, repo.Releases)
 | 
								m.Get("/", repo.MustBeNotEmpty, repo.Releases)
 | 
				
			||||||
		}, repo.MustBeNotBare, context.RepoRef())
 | 
							}, repo.MustBeNotEmpty, context.RepoRef())
 | 
				
			||||||
		m.Group("/releases", func() {
 | 
							m.Group("/releases", func() {
 | 
				
			||||||
			m.Get("/new", repo.NewRelease)
 | 
								m.Get("/new", repo.NewRelease)
 | 
				
			||||||
			m.Post("/new", bindIgnErr(auth.NewReleaseForm{}), repo.NewReleasePost)
 | 
								m.Post("/new", bindIgnErr(auth.NewReleaseForm{}), repo.NewReleasePost)
 | 
				
			||||||
			m.Post("/delete", repo.DeleteRelease)
 | 
								m.Post("/delete", repo.DeleteRelease)
 | 
				
			||||||
		}, reqSignIn, repo.MustBeNotBare, reqRepoReleaseWriter, context.RepoRef())
 | 
							}, reqSignIn, repo.MustBeNotEmpty, reqRepoReleaseWriter, context.RepoRef())
 | 
				
			||||||
		m.Group("/releases", func() {
 | 
							m.Group("/releases", func() {
 | 
				
			||||||
			m.Get("/edit/*", repo.EditRelease)
 | 
								m.Get("/edit/*", repo.EditRelease)
 | 
				
			||||||
			m.Post("/edit/*", bindIgnErr(auth.EditReleaseForm{}), repo.EditReleasePost)
 | 
								m.Post("/edit/*", bindIgnErr(auth.EditReleaseForm{}), repo.EditReleasePost)
 | 
				
			||||||
		}, reqSignIn, repo.MustBeNotBare, reqRepoReleaseWriter, func(ctx *context.Context) {
 | 
							}, reqSignIn, repo.MustBeNotEmpty, reqRepoReleaseWriter, func(ctx *context.Context) {
 | 
				
			||||||
			var err error
 | 
								var err error
 | 
				
			||||||
			ctx.Repo.Commit, err = ctx.Repo.GitRepo.GetBranchCommit(ctx.Repo.Repository.DefaultBranch)
 | 
								ctx.Repo.Commit, err = ctx.Repo.GitRepo.GetBranchCommit(ctx.Repo.Repository.DefaultBranch)
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
@ -682,13 +682,13 @@ func RegisterRoutes(m *macaron.Macaron) {
 | 
				
			|||||||
		m.Group("/activity", func() {
 | 
							m.Group("/activity", func() {
 | 
				
			||||||
			m.Get("", repo.Activity)
 | 
								m.Get("", repo.Activity)
 | 
				
			||||||
			m.Get("/:period", repo.Activity)
 | 
								m.Get("/:period", repo.Activity)
 | 
				
			||||||
		}, context.RepoRef(), repo.MustBeNotBare, context.RequireRepoReaderOr(models.UnitTypePullRequests, models.UnitTypeIssues, models.UnitTypeReleases))
 | 
							}, context.RepoRef(), repo.MustBeNotEmpty, context.RequireRepoReaderOr(models.UnitTypePullRequests, models.UnitTypeIssues, models.UnitTypeReleases))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		m.Get("/archive/*", repo.MustBeNotBare, reqRepoCodeReader, repo.Download)
 | 
							m.Get("/archive/*", repo.MustBeNotEmpty, reqRepoCodeReader, repo.Download)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		m.Group("/branches", func() {
 | 
							m.Group("/branches", func() {
 | 
				
			||||||
			m.Get("", repo.Branches)
 | 
								m.Get("", repo.Branches)
 | 
				
			||||||
		}, repo.MustBeNotBare, context.RepoRef(), reqRepoCodeReader)
 | 
							}, repo.MustBeNotEmpty, context.RepoRef(), reqRepoCodeReader)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		m.Group("/pulls/:index", func() {
 | 
							m.Group("/pulls/:index", func() {
 | 
				
			||||||
			m.Get(".diff", repo.DownloadPullDiff)
 | 
								m.Get(".diff", repo.DownloadPullDiff)
 | 
				
			||||||
@ -712,7 +712,7 @@ func RegisterRoutes(m *macaron.Macaron) {
 | 
				
			|||||||
			m.Get("/blob/:sha", context.RepoRefByType(context.RepoRefBlob), repo.DownloadByID)
 | 
								m.Get("/blob/:sha", context.RepoRefByType(context.RepoRefBlob), repo.DownloadByID)
 | 
				
			||||||
			// "/*" route is deprecated, and kept for backward compatibility
 | 
								// "/*" route is deprecated, and kept for backward compatibility
 | 
				
			||||||
			m.Get("/*", context.RepoRefByType(context.RepoRefLegacy), repo.SingleDownload)
 | 
								m.Get("/*", context.RepoRefByType(context.RepoRefLegacy), repo.SingleDownload)
 | 
				
			||||||
		}, repo.MustBeNotBare, reqRepoCodeReader)
 | 
							}, repo.MustBeNotEmpty, reqRepoCodeReader)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		m.Group("/commits", func() {
 | 
							m.Group("/commits", func() {
 | 
				
			||||||
			m.Get("/branch/*", context.RepoRefByType(context.RepoRefBranch), repo.RefCommits)
 | 
								m.Get("/branch/*", context.RepoRefByType(context.RepoRefBranch), repo.RefCommits)
 | 
				
			||||||
@ -720,12 +720,12 @@ func RegisterRoutes(m *macaron.Macaron) {
 | 
				
			|||||||
			m.Get("/commit/*", context.RepoRefByType(context.RepoRefCommit), repo.RefCommits)
 | 
								m.Get("/commit/*", context.RepoRefByType(context.RepoRefCommit), repo.RefCommits)
 | 
				
			||||||
			// "/*" route is deprecated, and kept for backward compatibility
 | 
								// "/*" route is deprecated, and kept for backward compatibility
 | 
				
			||||||
			m.Get("/*", context.RepoRefByType(context.RepoRefLegacy), repo.RefCommits)
 | 
								m.Get("/*", context.RepoRefByType(context.RepoRefLegacy), repo.RefCommits)
 | 
				
			||||||
		}, repo.MustBeNotBare, reqRepoCodeReader)
 | 
							}, repo.MustBeNotEmpty, reqRepoCodeReader)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		m.Group("", func() {
 | 
							m.Group("", func() {
 | 
				
			||||||
			m.Get("/graph", repo.Graph)
 | 
								m.Get("/graph", repo.Graph)
 | 
				
			||||||
			m.Get("/commit/:sha([a-f0-9]{7,40})$", repo.SetEditorconfigIfExists, repo.SetDiffViewStyle, repo.Diff)
 | 
								m.Get("/commit/:sha([a-f0-9]{7,40})$", repo.SetEditorconfigIfExists, repo.SetDiffViewStyle, repo.Diff)
 | 
				
			||||||
		}, repo.MustBeNotBare, context.RepoRef(), reqRepoCodeReader)
 | 
							}, repo.MustBeNotEmpty, context.RepoRef(), reqRepoCodeReader)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		m.Group("/src", func() {
 | 
							m.Group("/src", func() {
 | 
				
			||||||
			m.Get("/branch/*", context.RepoRefByType(context.RepoRefBranch), repo.Home)
 | 
								m.Get("/branch/*", context.RepoRefByType(context.RepoRefBranch), repo.Home)
 | 
				
			||||||
@ -739,10 +739,10 @@ func RegisterRoutes(m *macaron.Macaron) {
 | 
				
			|||||||
			m.Get("/forks", repo.Forks)
 | 
								m.Get("/forks", repo.Forks)
 | 
				
			||||||
		}, context.RepoRef(), reqRepoCodeReader)
 | 
							}, context.RepoRef(), reqRepoCodeReader)
 | 
				
			||||||
		m.Get("/commit/:sha([a-f0-9]{7,40})\\.:ext(patch|diff)",
 | 
							m.Get("/commit/:sha([a-f0-9]{7,40})\\.:ext(patch|diff)",
 | 
				
			||||||
			repo.MustBeNotBare, reqRepoCodeReader, repo.RawDiff)
 | 
								repo.MustBeNotEmpty, reqRepoCodeReader, repo.RawDiff)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		m.Get("/compare/:before([a-z0-9]{40})\\.\\.\\.:after([a-z0-9]{40})", repo.SetEditorconfigIfExists,
 | 
							m.Get("/compare/:before([a-z0-9]{40})\\.\\.\\.:after([a-z0-9]{40})", repo.SetEditorconfigIfExists,
 | 
				
			||||||
			repo.SetDiffViewStyle, repo.MustBeNotBare, reqRepoCodeReader, repo.CompareDiff)
 | 
								repo.SetDiffViewStyle, repo.MustBeNotEmpty, reqRepoCodeReader, repo.CompareDiff)
 | 
				
			||||||
	}, ignSignIn, context.RepoAssignment(), context.UnitTypes())
 | 
						}, ignSignIn, context.RepoAssignment(), context.UnitTypes())
 | 
				
			||||||
	m.Group("/:username/:reponame", func() {
 | 
						m.Group("/:username/:reponame", func() {
 | 
				
			||||||
		m.Get("/stars", repo.Stars)
 | 
							m.Get("/stars", repo.Stars)
 | 
				
			||||||
 | 
				
			|||||||
@ -59,7 +59,7 @@ git push -u origin master</code></pre>
 | 
				
			|||||||
						</div>
 | 
											</div>
 | 
				
			||||||
					{{else}}
 | 
										{{else}}
 | 
				
			||||||
						<div class="ui segment center">
 | 
											<div class="ui segment center">
 | 
				
			||||||
							{{.i18n.Tr "repo.bare_message"}}
 | 
												{{.i18n.Tr "repo.empty_message"}}
 | 
				
			||||||
						</div>
 | 
											</div>
 | 
				
			||||||
					{{end}}
 | 
										{{end}}
 | 
				
			||||||
				</div>
 | 
									</div>
 | 
				
			||||||
@ -30,7 +30,7 @@
 | 
				
			|||||||
						{{.NumStars}}
 | 
											{{.NumStars}}
 | 
				
			||||||
					</a>
 | 
										</a>
 | 
				
			||||||
				</div>
 | 
									</div>
 | 
				
			||||||
				{{if and (not .IsBare) ($.Permission.CanRead $.UnitTypeCode)}}
 | 
									{{if and (not .IsEmpty) ($.Permission.CanRead $.UnitTypeCode)}}
 | 
				
			||||||
					<div class="ui compact labeled button" tabindex="0">
 | 
										<div class="ui compact labeled button" tabindex="0">
 | 
				
			||||||
						<a class="ui compact button {{if or (not $.IsSigned) (not $.CanSignedUserFork)}}poping up{{end}}" {{if $.CanSignedUserFork}}href="{{AppSubUrl}}/repo/fork/{{.ID}}"{{else if $.IsSigned}} data-content="{{$.i18n.Tr "repo.fork_from_self"}}" {{ else }} data-content="{{$.i18n.Tr "repo.fork_guest_user" }}" href="{{AppSubUrl}}/user/login?redirect_to={{AppSubUrl}}/repo/fork/{{.ID}}" {{end}} data-position="top center" data-variation="tiny">
 | 
											<a class="ui compact button {{if or (not $.IsSigned) (not $.CanSignedUserFork)}}poping up{{end}}" {{if $.CanSignedUserFork}}href="{{AppSubUrl}}/repo/fork/{{.ID}}"{{else if $.IsSigned}} data-content="{{$.i18n.Tr "repo.fork_from_self"}}" {{ else }} data-content="{{$.i18n.Tr "repo.fork_guest_user" }}" href="{{AppSubUrl}}/user/login?redirect_to={{AppSubUrl}}/repo/fork/{{.ID}}" {{end}} data-position="top center" data-variation="tiny">
 | 
				
			||||||
							<i class="octicon octicon-repo-forked"></i>{{$.i18n.Tr "repo.fork"}}
 | 
												<i class="octicon octicon-repo-forked"></i>{{$.i18n.Tr "repo.fork"}}
 | 
				
			||||||
@ -71,7 +71,7 @@
 | 
				
			|||||||
				</a>
 | 
									</a>
 | 
				
			||||||
			{{end}}
 | 
								{{end}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			{{if and (.Permission.CanRead $.UnitTypeReleases) (not .IsBareRepo) }}
 | 
								{{if and (.Permission.CanRead $.UnitTypeReleases) (not .IsEmptyRepo) }}
 | 
				
			||||||
			<a class="{{if .PageIsReleaseList}}active{{end}} item" href="{{.RepoLink}}/releases">
 | 
								<a class="{{if .PageIsReleaseList}}active{{end}} item" href="{{.RepoLink}}/releases">
 | 
				
			||||||
				<i class="octicon octicon-tag"></i> {{.i18n.Tr "repo.releases"}} <span class="ui {{if not .Repository.NumReleases}}gray{{else}}blue{{end}} small label">{{.Repository.NumReleases}}</span>
 | 
									<i class="octicon octicon-tag"></i> {{.i18n.Tr "repo.releases"}} <span class="ui {{if not .Repository.NumReleases}}gray{{else}}blue{{end}} small label">{{.Repository.NumReleases}}</span>
 | 
				
			||||||
			</a>
 | 
								</a>
 | 
				
			||||||
@ -83,7 +83,7 @@
 | 
				
			|||||||
				</a>
 | 
									</a>
 | 
				
			||||||
			{{end}}
 | 
								{{end}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			{{if and (.Permission.CanReadAny $.UnitTypePullRequests $.UnitTypeIssues $.UnitTypeReleases) (not .IsBareRepo)}}
 | 
								{{if and (.Permission.CanReadAny $.UnitTypePullRequests $.UnitTypeIssues $.UnitTypeReleases) (not .IsEmptyRepo)}}
 | 
				
			||||||
				<a class="{{if .PageIsActivity}}active{{end}} item" href="{{.RepoLink}}/activity">
 | 
									<a class="{{if .PageIsActivity}}active{{end}} item" href="{{.RepoLink}}/activity">
 | 
				
			||||||
					<i class="octicon octicon-pulse"></i> {{.i18n.Tr "repo.activity"}}
 | 
										<i class="octicon octicon-pulse"></i> {{.i18n.Tr "repo.activity"}}
 | 
				
			||||||
				</a>
 | 
									</a>
 | 
				
			||||||
 | 
				
			|||||||
@ -14,7 +14,7 @@
 | 
				
			|||||||
			<form class="ui form" action="{{.Link}}" method="post">
 | 
								<form class="ui form" action="{{.Link}}" method="post">
 | 
				
			||||||
				{{.CsrfTokenHtml}}
 | 
									{{.CsrfTokenHtml}}
 | 
				
			||||||
				<input type="hidden" name="action" value="default_branch">
 | 
									<input type="hidden" name="action" value="default_branch">
 | 
				
			||||||
				{{if not .Repository.IsBare}}
 | 
									{{if not .Repository.IsEmpty}}
 | 
				
			||||||
				<div class="required inline field">
 | 
									<div class="required inline field">
 | 
				
			||||||
					<div class="ui dropdown selection" tabindex="0">
 | 
										<div class="ui dropdown selection" tabindex="0">
 | 
				
			||||||
						<select name="branch">
 | 
											<select name="branch">
 | 
				
			||||||
 | 
				
			|||||||
@ -5,7 +5,7 @@
 | 
				
			|||||||
	<a class="{{if .PageIsSettingsCollaboration}}active{{end}} item" href="{{.RepoLink}}/settings/collaboration">
 | 
						<a class="{{if .PageIsSettingsCollaboration}}active{{end}} item" href="{{.RepoLink}}/settings/collaboration">
 | 
				
			||||||
		{{.i18n.Tr "repo.settings.collaboration"}}
 | 
							{{.i18n.Tr "repo.settings.collaboration"}}
 | 
				
			||||||
	</a>
 | 
						</a>
 | 
				
			||||||
	{{if not .Repository.IsBare}}
 | 
						{{if not .Repository.IsEmpty}}
 | 
				
			||||||
		<a class="{{if .PageIsSettingsBranches}}active{{end}} item" href="{{.RepoLink}}/settings/branches">
 | 
							<a class="{{if .PageIsSettingsBranches}}active{{end}} item" href="{{.RepoLink}}/settings/branches">
 | 
				
			||||||
			{{.i18n.Tr "repo.settings.branches"}}
 | 
								{{.i18n.Tr "repo.settings.branches"}}
 | 
				
			||||||
		</a>
 | 
							</a>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,11 +1,11 @@
 | 
				
			|||||||
<div class="ui segment sub-menu">
 | 
					<div class="ui segment sub-menu">
 | 
				
			||||||
	<div class="ui two horizontal center link list">
 | 
						<div class="ui two horizontal center link list">
 | 
				
			||||||
		{{if and (.Permission.CanRead $.UnitTypeCode) (not .IsBareRepo)}}
 | 
							{{if and (.Permission.CanRead $.UnitTypeCode) (not .IsEmptyRepo)}}
 | 
				
			||||||
			<div class="item{{if .PageIsCommits}} active{{end}}">
 | 
								<div class="item{{if .PageIsCommits}} active{{end}}">
 | 
				
			||||||
				<a href="{{.RepoLink}}/commits{{if .IsViewBranch}}/branch{{else if .IsViewTag}}/tag{{else if .IsViewCommit}}/commit{{end}}/{{EscapePound .BranchName}}"><i class="octicon octicon-history"></i> <b>{{.CommitsCount}}</b> {{.i18n.Tr (TrN .i18n.Lang .CommitsCount "repo.commit" "repo.commits") }}</a>
 | 
									<a href="{{.RepoLink}}/commits{{if .IsViewBranch}}/branch{{else if .IsViewTag}}/tag{{else if .IsViewCommit}}/commit{{end}}/{{EscapePound .BranchName}}"><i class="octicon octicon-history"></i> <b>{{.CommitsCount}}</b> {{.i18n.Tr (TrN .i18n.Lang .CommitsCount "repo.commit" "repo.commits") }}</a>
 | 
				
			||||||
			</div>
 | 
								</div>
 | 
				
			||||||
		{{end}}
 | 
							{{end}}
 | 
				
			||||||
		{{if and (.Permission.CanRead $.UnitTypeCode) (not .IsBareRepo) }}
 | 
							{{if and (.Permission.CanRead $.UnitTypeCode) (not .IsEmptyRepo) }}
 | 
				
			||||||
			<div class="item{{if .PageIsBranches}} active{{end}}">
 | 
								<div class="item{{if .PageIsBranches}} active{{end}}">
 | 
				
			||||||
				<a href="{{.RepoLink}}/branches/"><i class="octicon octicon-git-branch"></i> <b>{{.BranchesCount}}</b> {{.i18n.Tr (TrN .i18n.Lang .BranchesCount "repo.branch" "repo.branches") }}</a>
 | 
									<a href="{{.RepoLink}}/branches/"><i class="octicon octicon-git-branch"></i> <b>{{.BranchesCount}}</b> {{.i18n.Tr (TrN .i18n.Lang .BranchesCount "repo.branch" "repo.branches") }}</a>
 | 
				
			||||||
			</div>
 | 
								</div>
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user