|
|
@ -53,20 +53,15 @@ type Repository struct {
|
|
|
|
RepoLink string
|
|
|
|
RepoLink string
|
|
|
|
GitRepo *git.Repository
|
|
|
|
GitRepo *git.Repository
|
|
|
|
|
|
|
|
|
|
|
|
// these fields indicate the current ref type, for example: ".../src/branch/master" means IsViewBranch=true
|
|
|
|
// RefFullName is the full ref name that the user is viewing
|
|
|
|
IsViewBranch bool
|
|
|
|
|
|
|
|
IsViewTag bool
|
|
|
|
|
|
|
|
IsViewCommit bool
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
RefFullName git.RefName
|
|
|
|
RefFullName git.RefName
|
|
|
|
BranchName string
|
|
|
|
BranchName string // it is the RefFullName's short name if its type is "branch"
|
|
|
|
TagName string
|
|
|
|
TagName string // it is the RefFullName's short name if its type is "tag"
|
|
|
|
TreePath string
|
|
|
|
TreePath string
|
|
|
|
|
|
|
|
|
|
|
|
// Commit it is always set to the commit for the branch or tag
|
|
|
|
// Commit it is always set to the commit for the branch or tag, or just the commit that the user is viewing
|
|
|
|
Commit *git.Commit
|
|
|
|
Commit *git.Commit
|
|
|
|
CommitID string
|
|
|
|
CommitID string
|
|
|
|
|
|
|
|
|
|
|
|
CommitsCount int64
|
|
|
|
CommitsCount int64
|
|
|
|
|
|
|
|
|
|
|
|
PullRequest *PullRequest
|
|
|
|
PullRequest *PullRequest
|
|
|
@ -79,7 +74,7 @@ func (r *Repository) CanWriteToBranch(ctx context.Context, user *user_model.User
|
|
|
|
|
|
|
|
|
|
|
|
// CanEnableEditor returns true if repository is editable and user has proper access level.
|
|
|
|
// CanEnableEditor returns true if repository is editable and user has proper access level.
|
|
|
|
func (r *Repository) CanEnableEditor(ctx context.Context, user *user_model.User) bool {
|
|
|
|
func (r *Repository) CanEnableEditor(ctx context.Context, user *user_model.User) bool {
|
|
|
|
return r.IsViewBranch && r.CanWriteToBranch(ctx, user, r.BranchName) && r.Repository.CanEnableEditor() && !r.Repository.IsArchived
|
|
|
|
return r.RefFullName.IsBranch() && r.CanWriteToBranch(ctx, user, r.BranchName) && r.Repository.CanEnableEditor() && !r.Repository.IsArchived
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// CanCreateBranch returns true if repository is editable and user has proper access level.
|
|
|
|
// CanCreateBranch returns true if repository is editable and user has proper access level.
|
|
|
@ -174,15 +169,9 @@ func (r *Repository) GetCommitsCount() (int64, error) {
|
|
|
|
if r.Commit == nil {
|
|
|
|
if r.Commit == nil {
|
|
|
|
return 0, nil
|
|
|
|
return 0, nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
var contextName string
|
|
|
|
contextName := r.RefFullName.ShortName()
|
|
|
|
if r.IsViewBranch {
|
|
|
|
isRef := r.RefFullName.IsBranch() || r.RefFullName.IsTag()
|
|
|
|
contextName = r.BranchName
|
|
|
|
return cache.GetInt64(r.Repository.GetCommitsCountCacheKey(contextName, isRef), func() (int64, error) {
|
|
|
|
} else if r.IsViewTag {
|
|
|
|
|
|
|
|
contextName = r.TagName
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
contextName = r.CommitID
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return cache.GetInt64(r.Repository.GetCommitsCountCacheKey(contextName, r.IsViewBranch || r.IsViewTag), func() (int64, error) {
|
|
|
|
|
|
|
|
return r.Commit.CommitsCount()
|
|
|
|
return r.Commit.CommitsCount()
|
|
|
|
})
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -798,7 +787,6 @@ func RepoRefByType(detectRefType git.RefType) func(*Context) {
|
|
|
|
// Empty repository does not have reference information.
|
|
|
|
// Empty repository does not have reference information.
|
|
|
|
if ctx.Repo.Repository.IsEmpty {
|
|
|
|
if ctx.Repo.Repository.IsEmpty {
|
|
|
|
// assume the user is viewing the (non-existent) default branch
|
|
|
|
// assume the user is viewing the (non-existent) default branch
|
|
|
|
ctx.Repo.IsViewBranch = true
|
|
|
|
|
|
|
|
ctx.Repo.BranchName = ctx.Repo.Repository.DefaultBranch
|
|
|
|
ctx.Repo.BranchName = ctx.Repo.Repository.DefaultBranch
|
|
|
|
ctx.Repo.RefFullName = git.RefNameFromBranch(ctx.Repo.BranchName)
|
|
|
|
ctx.Repo.RefFullName = git.RefNameFromBranch(ctx.Repo.BranchName)
|
|
|
|
// these variables are used by the template to "add/upload" new files
|
|
|
|
// these variables are used by the template to "add/upload" new files
|
|
|
@ -834,7 +822,6 @@ func RepoRefByType(detectRefType git.RefType) func(*Context) {
|
|
|
|
ctx.ServerError("GetBranchCommit", err)
|
|
|
|
ctx.ServerError("GetBranchCommit", err)
|
|
|
|
return
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
ctx.Repo.IsViewBranch = true
|
|
|
|
|
|
|
|
} else { // there is a path in request
|
|
|
|
} else { // there is a path in request
|
|
|
|
guessLegacyPath := refType == ""
|
|
|
|
guessLegacyPath := refType == ""
|
|
|
|
if guessLegacyPath {
|
|
|
|
if guessLegacyPath {
|
|
|
@ -853,7 +840,6 @@ func RepoRefByType(detectRefType git.RefType) func(*Context) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if refType == git.RefTypeBranch && ctx.Repo.GitRepo.IsBranchExist(refShortName) {
|
|
|
|
if refType == git.RefTypeBranch && ctx.Repo.GitRepo.IsBranchExist(refShortName) {
|
|
|
|
ctx.Repo.IsViewBranch = true
|
|
|
|
|
|
|
|
ctx.Repo.BranchName = refShortName
|
|
|
|
ctx.Repo.BranchName = refShortName
|
|
|
|
ctx.Repo.RefFullName = git.RefNameFromBranch(refShortName)
|
|
|
|
ctx.Repo.RefFullName = git.RefNameFromBranch(refShortName)
|
|
|
|
|
|
|
|
|
|
|
@ -864,7 +850,6 @@ func RepoRefByType(detectRefType git.RefType) func(*Context) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
ctx.Repo.CommitID = ctx.Repo.Commit.ID.String()
|
|
|
|
ctx.Repo.CommitID = ctx.Repo.Commit.ID.String()
|
|
|
|
} else if refType == git.RefTypeTag && ctx.Repo.GitRepo.IsTagExist(refShortName) {
|
|
|
|
} else if refType == git.RefTypeTag && ctx.Repo.GitRepo.IsTagExist(refShortName) {
|
|
|
|
ctx.Repo.IsViewTag = true
|
|
|
|
|
|
|
|
ctx.Repo.RefFullName = git.RefNameFromTag(refShortName)
|
|
|
|
ctx.Repo.RefFullName = git.RefNameFromTag(refShortName)
|
|
|
|
ctx.Repo.TagName = refShortName
|
|
|
|
ctx.Repo.TagName = refShortName
|
|
|
|
|
|
|
|
|
|
|
@ -879,7 +864,6 @@ func RepoRefByType(detectRefType git.RefType) func(*Context) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
ctx.Repo.CommitID = ctx.Repo.Commit.ID.String()
|
|
|
|
ctx.Repo.CommitID = ctx.Repo.Commit.ID.String()
|
|
|
|
} else if git.IsStringLikelyCommitID(ctx.Repo.GetObjectFormat(), refShortName, 7) {
|
|
|
|
} else if git.IsStringLikelyCommitID(ctx.Repo.GetObjectFormat(), refShortName, 7) {
|
|
|
|
ctx.Repo.IsViewCommit = true
|
|
|
|
|
|
|
|
ctx.Repo.RefFullName = git.RefNameFromCommit(refShortName)
|
|
|
|
ctx.Repo.RefFullName = git.RefNameFromCommit(refShortName)
|
|
|
|
ctx.Repo.CommitID = refShortName
|
|
|
|
ctx.Repo.CommitID = refShortName
|
|
|
|
|
|
|
|
|
|
|
@ -915,13 +899,10 @@ func RepoRefByType(detectRefType git.RefType) func(*Context) {
|
|
|
|
ctx.Data["RefTypeNameSubURL"] = ctx.Repo.RefTypeNameSubURL()
|
|
|
|
ctx.Data["RefTypeNameSubURL"] = ctx.Repo.RefTypeNameSubURL()
|
|
|
|
ctx.Data["TreePath"] = ctx.Repo.TreePath
|
|
|
|
ctx.Data["TreePath"] = ctx.Repo.TreePath
|
|
|
|
|
|
|
|
|
|
|
|
ctx.Data["IsViewBranch"] = ctx.Repo.IsViewBranch
|
|
|
|
|
|
|
|
ctx.Data["BranchName"] = ctx.Repo.BranchName
|
|
|
|
ctx.Data["BranchName"] = ctx.Repo.BranchName
|
|
|
|
|
|
|
|
|
|
|
|
ctx.Data["IsViewTag"] = ctx.Repo.IsViewTag
|
|
|
|
|
|
|
|
ctx.Data["TagName"] = ctx.Repo.TagName
|
|
|
|
ctx.Data["TagName"] = ctx.Repo.TagName
|
|
|
|
|
|
|
|
|
|
|
|
ctx.Data["IsViewCommit"] = ctx.Repo.IsViewCommit
|
|
|
|
|
|
|
|
ctx.Data["CommitID"] = ctx.Repo.CommitID
|
|
|
|
ctx.Data["CommitID"] = ctx.Repo.CommitID
|
|
|
|
|
|
|
|
|
|
|
|
ctx.Data["CanCreateBranch"] = ctx.Repo.CanCreateBranch() // only used by the branch selector dropdown: AllowCreateNewRef
|
|
|
|
ctx.Data["CanCreateBranch"] = ctx.Repo.CanCreateBranch() // only used by the branch selector dropdown: AllowCreateNewRef
|
|
|
|