|
|
|
@ -30,6 +30,11 @@ var (
|
|
|
|
|
wikiWorkingPool = sync.NewExclusivePool()
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
const (
|
|
|
|
|
DefaultRemote = "origin"
|
|
|
|
|
DefaultBranch = "master"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func nameAllowed(name string) error {
|
|
|
|
|
if util.IsStringInSlice(name, reservedWikiNames) {
|
|
|
|
|
return repo_model.ErrWikiReservedName{
|
|
|
|
@ -81,7 +86,7 @@ func InitWiki(ctx context.Context, repo *repo_model.Repository) error {
|
|
|
|
|
return fmt.Errorf("InitRepository: %v", err)
|
|
|
|
|
} else if err = repo_module.CreateDelegateHooks(repo.WikiPath()); err != nil {
|
|
|
|
|
return fmt.Errorf("createDelegateHooks: %v", err)
|
|
|
|
|
} else if _, _, err = git.NewCommand(ctx, "symbolic-ref", "HEAD", git.BranchPrefix+"master").RunStdString(&git.RunOpts{Dir: repo.WikiPath()}); err != nil {
|
|
|
|
|
} else if _, _, err = git.NewCommand(ctx, "symbolic-ref", "HEAD", git.BranchPrefix+DefaultBranch).RunStdString(&git.RunOpts{Dir: repo.WikiPath()}); err != nil {
|
|
|
|
|
return fmt.Errorf("unable to set default wiki branch to master: %v", err)
|
|
|
|
|
}
|
|
|
|
|
return nil
|
|
|
|
@ -94,7 +99,7 @@ func prepareWikiFileName(gitRepo *git.Repository, wikiName string) (bool, string
|
|
|
|
|
escaped := NameToFilename(wikiName)
|
|
|
|
|
|
|
|
|
|
// Look for both files
|
|
|
|
|
filesInIndex, err := gitRepo.LsTree("master", unescaped, escaped)
|
|
|
|
|
filesInIndex, err := gitRepo.LsTree(DefaultBranch, unescaped, escaped)
|
|
|
|
|
if err != nil {
|
|
|
|
|
if strings.Contains(err.Error(), "Not a valid object name master") {
|
|
|
|
|
return false, escaped, nil
|
|
|
|
@ -130,7 +135,7 @@ func updateWikiPage(ctx context.Context, doer *user_model.User, repo *repo_model
|
|
|
|
|
return fmt.Errorf("InitWiki: %v", err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
hasMasterBranch := git.IsBranchExist(ctx, repo.WikiPath(), "master")
|
|
|
|
|
hasMasterBranch := git.IsBranchExist(ctx, repo.WikiPath(), DefaultBranch)
|
|
|
|
|
|
|
|
|
|
basePath, err := repo_module.CreateTemporaryPath("update-wiki")
|
|
|
|
|
if err != nil {
|
|
|
|
@ -148,7 +153,7 @@ func updateWikiPage(ctx context.Context, doer *user_model.User, repo *repo_model
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if hasMasterBranch {
|
|
|
|
|
cloneOpts.Branch = "master"
|
|
|
|
|
cloneOpts.Branch = DefaultBranch
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if err := git.Clone(ctx, repo.WikiPath(), basePath, cloneOpts); err != nil {
|
|
|
|
@ -246,8 +251,8 @@ func updateWikiPage(ctx context.Context, doer *user_model.User, repo *repo_model
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if err := git.Push(gitRepo.Ctx, basePath, git.PushOptions{
|
|
|
|
|
Remote: "origin",
|
|
|
|
|
Branch: fmt.Sprintf("%s:%s%s", commitHash.String(), git.BranchPrefix, "master"),
|
|
|
|
|
Remote: DefaultRemote,
|
|
|
|
|
Branch: fmt.Sprintf("%s:%s%s", commitHash.String(), git.BranchPrefix, DefaultBranch),
|
|
|
|
|
Env: repo_module.FullPushingEnvironment(
|
|
|
|
|
doer,
|
|
|
|
|
doer,
|
|
|
|
@ -299,7 +304,7 @@ func DeleteWikiPage(ctx context.Context, doer *user_model.User, repo *repo_model
|
|
|
|
|
if err := git.Clone(ctx, repo.WikiPath(), basePath, git.CloneRepoOptions{
|
|
|
|
|
Bare: true,
|
|
|
|
|
Shared: true,
|
|
|
|
|
Branch: "master",
|
|
|
|
|
Branch: DefaultBranch,
|
|
|
|
|
}); err != nil {
|
|
|
|
|
log.Error("Failed to clone repository: %s (%v)", repo.FullName(), err)
|
|
|
|
|
return fmt.Errorf("Failed to clone repository: %s (%v)", repo.FullName(), err)
|
|
|
|
@ -360,8 +365,8 @@ func DeleteWikiPage(ctx context.Context, doer *user_model.User, repo *repo_model
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if err := git.Push(gitRepo.Ctx, basePath, git.PushOptions{
|
|
|
|
|
Remote: "origin",
|
|
|
|
|
Branch: fmt.Sprintf("%s:%s%s", commitHash.String(), git.BranchPrefix, "master"),
|
|
|
|
|
Remote: DefaultRemote,
|
|
|
|
|
Branch: fmt.Sprintf("%s:%s%s", commitHash.String(), git.BranchPrefix, DefaultBranch),
|
|
|
|
|
Env: repo_module.PushingEnvironment(doer, repo),
|
|
|
|
|
}); err != nil {
|
|
|
|
|
if git.IsErrPushOutOfDate(err) || git.IsErrPushRejected(err) {
|
|
|
|
|