Skip to content

Commit 4d5911d

Browse files
committed
Merge pull request #2746 from joshfng/feature-delete-wiki-pages
Add ability to delete single wiki pages.
2 parents d57a2b9 + 2f228dd commit 4d5911d

File tree

6 files changed

+761
-906
lines changed

6 files changed

+761
-906
lines changed

cmd/web.go

+1
Original file line numberDiff line numberDiff line change
@@ -495,6 +495,7 @@ func runWeb(ctx *cli.Context) {
495495
Post(bindIgnErr(auth.NewWikiForm{}), repo.NewWikiPost)
496496
m.Combo("/:page/_edit").Get(repo.EditWiki).
497497
Post(bindIgnErr(auth.NewWikiForm{}), repo.EditWikiPost)
498+
m.Post("/:page/delete", bindIgnErr(auth.NewWikiForm{}), repo.DeleteWikiPagePost)
498499
}, reqSignIn, reqRepoPusher)
499500
}, repo.MustEnableWiki, middleware.RepoRef())
500501

conf/locale/locale_en-US.ini

+2
Original file line numberDiff line numberDiff line change
@@ -560,6 +560,8 @@ wiki.save_page = Save Page
560560
wiki.last_commit_info = %s edited this page %s
561561
wiki.edit_page_button = Edit
562562
wiki.new_page_button = New Page
563+
wiki.delete_page_button = Delete Page
564+
wiki.delete_page_notice_1 = This will delete the page <code>"%s"</code>. Please be certain.
563565
wiki.page_already_exists = Wiki page with same name already exists.
564566
wiki.pages = Pages
565567
wiki.last_updated = Last updated %s

models/wiki.go

+37
Original file line numberDiff line numberDiff line change
@@ -178,3 +178,40 @@ func (repo *Repository) AddWikiPage(doer *User, title, content, message string)
178178
func (repo *Repository) EditWikiPage(doer *User, oldTitle, title, content, message string) error {
179179
return repo.updateWikiPage(doer, oldTitle, title, content, message, false)
180180
}
181+
182+
func (repo *Repository) DeleteWikiPage(doer *User, title string) (err error) {
183+
wikiWorkingPool.CheckIn(com.ToStr(repo.ID))
184+
defer wikiWorkingPool.CheckOut(com.ToStr(repo.ID))
185+
186+
localPath := repo.LocalWikiPath()
187+
188+
// Discard local commits make sure even to remote when local copy exists.
189+
if com.IsExist(localPath) {
190+
// No need to check if nothing in the repository.
191+
if git.IsBranchExist(localPath, "master") {
192+
if err = git.ResetHEAD(localPath, true, "origin/master"); err != nil {
193+
return fmt.Errorf("Reset: %v", err)
194+
}
195+
}
196+
}
197+
198+
if err = repo.UpdateLocalWiki(); err != nil {
199+
return fmt.Errorf("UpdateLocalWiki: %v", err)
200+
}
201+
202+
filename := path.Join(localPath, title+".md")
203+
204+
os.Remove(filename)
205+
206+
message := "Delete page '" + title + "'"
207+
208+
if err = git.AddChanges(localPath, true); err != nil {
209+
return fmt.Errorf("AddChanges: %v", err)
210+
} else if err = git.CommitChanges(localPath, message, doer.NewGitSig()); err != nil {
211+
return fmt.Errorf("CommitChanges: %v", err)
212+
} else if err = git.Push(localPath, "origin", "master"); err != nil {
213+
return fmt.Errorf("Push: %v", err)
214+
}
215+
216+
return nil
217+
}

0 commit comments

Comments
 (0)