summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUnknwon <u@gogs.io>2016-08-14 23:38:35 -0700
committerUnknwon <u@gogs.io>2016-08-14 23:52:24 -0700
commit54e0ada9d53c28543a436d266dc73e759cc7658b (patch)
treeadafc14fd67620258077d94e96579f47111e87b1
parentcd89f6c5021ef129ecc4652aa620a3562ae30979 (diff)
downloadgitea-54e0ada9d53c28543a436d266dc73e759cc7658b.tar.gz
gitea-54e0ada9d53c28543a436d266dc73e759cc7658b.zip
Web editor: improve delete file
-rw-r--r--cmd/web.go11
-rw-r--r--models/repo.go37
-rw-r--r--models/repo_editor.go60
-rw-r--r--routers/repo/delete.go49
-rw-r--r--routers/repo/editor.go (renamed from routers/repo/edit.go)23
-rw-r--r--routers/repo/view.go4
-rw-r--r--templates/repo/editor/edit.tmpl2
-rw-r--r--templates/repo/view_file.tmpl4
8 files changed, 89 insertions, 101 deletions
diff --git a/cmd/web.go b/cmd/web.go
index db18890f1d..d14d1efcd9 100644
--- a/cmd/web.go
+++ b/cmd/web.go
@@ -503,14 +503,19 @@ func runWeb(ctx *cli.Context) error {
Post(bindIgnErr(auth.EditRepoFileForm{}), repo.EditFilePost)
m.Combo("/_new/*").Get(repo.NewFile).
Post(bindIgnErr(auth.EditRepoFileForm{}), repo.NewFilePost)
- m.Post("/preview/*", bindIgnErr(auth.EditPreviewDiffForm{}), repo.DiffPreviewPost)
+ m.Post("/_preview/*", bindIgnErr(auth.EditPreviewDiffForm{}), repo.DiffPreviewPost)
m.Combo("/upload/*").Get(repo.UploadFile).
Post(bindIgnErr(auth.UploadRepoFileForm{}), repo.UploadFilePost)
- m.Post("/delete/*", bindIgnErr(auth.DeleteRepoFileForm{}), repo.DeleteFilePost)
+ m.Post("/_delete/*", bindIgnErr(auth.DeleteRepoFileForm{}), repo.DeleteFilePost)
m.Post("/branches", bindIgnErr(auth.NewBranchForm{}), repo.NewBranchPost)
m.Post("/upload-file", repo.UploadFileToServer)
m.Post("/upload-remove", bindIgnErr(auth.RemoveUploadFileForm{}), repo.RemoveUploadFileFromServer)
- }, reqRepoWriter, context.RepoRef())
+ }, reqRepoWriter, context.RepoRef(), func(ctx *context.Context) {
+ if ctx.Repo.IsViewCommit {
+ ctx.Handle(404, "", nil)
+ return
+ }
+ })
}, reqSignIn, context.RepoAssignment(), repo.MustBeNotBare)
m.Group("/:username/:reponame", func() {
diff --git a/models/repo.go b/models/repo.go
index 73950a9fb9..3c2c2650cb 100644
--- a/models/repo.go
+++ b/models/repo.go
@@ -2240,43 +2240,6 @@ func (repo *Repository) GetForks() ([]*Repository, error) {
return forks, x.Find(&forks, &Repository{ForkID: repo.ID})
}
-// ________ .__ __ ___________.__.__
-// \______ \ ____ | | _____/ |_ ____ \_ _____/|__| | ____
-// | | \_/ __ \| | _/ __ \ __\/ __ \ | __) | | | _/ __ \
-// | ` \ ___/| |_\ ___/| | \ ___/ | \ | | |_\ ___/
-// /_______ /\___ >____/\___ >__| \___ > \___ / |__|____/\___ >
-// \/ \/ \/ \/ \/ \/
-//
-
-func (repo *Repository) DeleteRepoFile(doer *User, branch, treeName, message string) (err error) {
- repoWorkingPool.CheckIn(com.ToStr(repo.ID))
- defer repoWorkingPool.CheckOut(com.ToStr(repo.ID))
-
- localPath := repo.LocalCopyPath()
- if err = discardLocalRepoBranchChanges(localPath, branch); err != nil {
- return fmt.Errorf("discardLocalRepoChanges: %v", err)
- } else if err = repo.UpdateLocalCopyBranch(branch); err != nil {
- return fmt.Errorf("UpdateLocalCopyBranch: %v", err)
- }
-
- filePath := path.Join(localPath, treeName)
- os.Remove(filePath)
-
- if len(message) == 0 {
- message = "Delete file '" + treeName + "'"
- }
-
- if err = git.AddChanges(localPath, true); err != nil {
- return fmt.Errorf("AddChanges: %v", err)
- } else if err = git.CommitChanges(localPath, message, doer.NewGitSig()); err != nil {
- return fmt.Errorf("CommitChanges: %v", err)
- } else if err = git.Push(localPath, "origin", branch); err != nil {
- return fmt.Errorf("Push: %v", err)
- }
-
- return nil
-}
-
// ____ ___ .__ .___ ___________.___.__
// | | \______ | | _________ __| _/ \_ _____/| | | ____ ______
// | | /\____ \| | / _ \__ \ / __ | | __) | | | _/ __ \ / ___/
diff --git a/models/repo_editor.go b/models/repo_editor.go
index 843a58b576..070ffc3748 100644
--- a/models/repo_editor.go
+++ b/models/repo_editor.go
@@ -209,3 +209,63 @@ func (repo *Repository) GetDiffPreview(branch, treeName, content string) (diff *
return diff, nil
}
+
+// ________ .__ __ ___________.__.__
+// \______ \ ____ | | _____/ |_ ____ \_ _____/|__| | ____
+// | | \_/ __ \| | _/ __ \ __\/ __ \ | __) | | | _/ __ \
+// | ` \ ___/| |_\ ___/| | \ ___/ | \ | | |_\ ___/
+// /_______ /\___ >____/\___ >__| \___ > \___ / |__|____/\___ >
+// \/ \/ \/ \/ \/ \/
+//
+
+func (repo *Repository) DeleteRepoFile(doer *User, oldCommitID, branch, treeName, message string) (err error) {
+ repoWorkingPool.CheckIn(com.ToStr(repo.ID))
+ defer repoWorkingPool.CheckOut(com.ToStr(repo.ID))
+
+ localPath := repo.LocalCopyPath()
+ if err = discardLocalRepoBranchChanges(localPath, branch); err != nil {
+ return fmt.Errorf("discardLocalRepoChanges: %v", err)
+ } else if err = repo.UpdateLocalCopyBranch(branch); err != nil {
+ return fmt.Errorf("UpdateLocalCopyBranch: %v", err)
+ }
+
+ filePath := path.Join(localPath, treeName)
+ os.Remove(filePath)
+
+ if len(message) == 0 {
+ message = "Delete file '" + treeName + "'"
+ }
+
+ if err = git.AddChanges(localPath, true); err != nil {
+ return fmt.Errorf("AddChanges: %v", err)
+ } else if err = git.CommitChanges(localPath, message, doer.NewGitSig()); err != nil {
+ return fmt.Errorf("CommitChanges: %v", err)
+ } else if err = git.Push(localPath, "origin", branch); err != nil {
+ return fmt.Errorf("Push: %v", err)
+ }
+
+ gitRepo, err := git.OpenRepository(repo.RepoPath())
+ if err != nil {
+ log.Error(4, "OpenRepository: %v", err)
+ return nil
+ }
+ commit, err := gitRepo.GetBranchCommit(branch)
+ if err != nil {
+ log.Error(4, "GetBranchCommit [branch: %s]: %v", branch, err)
+ return nil
+ }
+
+ pushCommits := &PushCommits{
+ Len: 1,
+ Commits: []*PushCommit{CommitToPushCommit(commit)},
+ }
+ if err := CommitRepoAction(doer.ID, repo.MustOwner().ID, doer.Name, doer.Email,
+ repo.ID, repo.MustOwner().Name, repo.Name, git.BRANCH_PREFIX+branch,
+ pushCommits, oldCommitID, commit.ID.String()); err != nil {
+ log.Error(4, "CommitRepoAction: %v", err)
+ return nil
+ }
+ go HookQueue.Add(repo.ID)
+
+ return nil
+}
diff --git a/routers/repo/delete.go b/routers/repo/delete.go
deleted file mode 100644
index a0c615a6d7..0000000000
--- a/routers/repo/delete.go
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright 2016 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 repo
-
-import (
- "github.com/gogits/gogs/models"
- "github.com/gogits/gogs/modules/auth"
- "github.com/gogits/gogs/modules/context"
- "github.com/gogits/gogs/modules/log"
-)
-
-func DeleteFilePost(ctx *context.Context, form auth.DeleteRepoFileForm) {
- branchName := ctx.Repo.BranchName
- treeName := ctx.Repo.TreeName
-
- if ctx.HasError() {
- ctx.Redirect(ctx.Repo.RepoLink + "/src/" + branchName + "/" + treeName)
- return
- }
-
- if err := ctx.Repo.Repository.DeleteRepoFile(ctx.User, branchName, treeName, form.CommitSummary); err != nil {
- ctx.Handle(500, "DeleteRepoFile", err)
- return
- }
-
- // Was successful, so now need to call models.CommitRepoAction() with the new commitID for webhooks and watchers
- if branch, err := ctx.Repo.Repository.GetBranch(branchName); err != nil {
- log.Error(4, "repo.Repository.GetBranch(%s): %v", branchName, err)
- } else if commit, err := branch.GetCommit(); err != nil {
- log.Error(4, "branch.GetCommit(): %v", err)
- } else {
- pc := &models.PushCommits{
- Len: 1,
- Commits: []*models.PushCommit{models.CommitToPushCommit(commit)},
- }
- oldCommitID := ctx.Repo.CommitID
- newCommitID := commit.ID.String()
- if err := models.CommitRepoAction(ctx.User.ID, ctx.Repo.Owner.ID, ctx.User.LowerName, ctx.Repo.Owner.Email,
- ctx.Repo.Repository.ID, ctx.Repo.Owner.LowerName, ctx.Repo.Repository.Name, "refs/heads/"+branchName, pc,
- oldCommitID, newCommitID); err != nil {
- log.Error(4, "models.CommitRepoAction(branch = %s): %v", branchName, err)
- }
- models.HookQueue.Add(ctx.Repo.Repository.ID)
- }
-
- ctx.Redirect(ctx.Repo.RepoLink + "/src/" + branchName)
-}
diff --git a/routers/repo/edit.go b/routers/repo/editor.go
index 19c7c54474..71fb040f9a 100644
--- a/routers/repo/edit.go
+++ b/routers/repo/editor.go
@@ -26,12 +26,6 @@ const (
)
func editFile(ctx *context.Context, isNewFile bool) {
- // Don't allow edit a file in a specific commit.
- if ctx.Repo.IsViewCommit {
- ctx.Handle(404, "", nil)
- return
- }
-
ctx.Data["PageIsEdit"] = true
ctx.Data["IsNewFile"] = isNewFile
ctx.Data["RequireHighlightJS"] = true
@@ -327,3 +321,20 @@ func DiffPreviewPost(ctx *context.Context, form auth.EditPreviewDiffForm) {
ctx.HTML(200, DIFF_PREVIEW)
}
+
+func DeleteFilePost(ctx *context.Context, form auth.DeleteRepoFileForm) {
+ branchName := ctx.Repo.BranchName
+ treeName := ctx.Repo.TreeName
+
+ if ctx.HasError() {
+ ctx.Redirect(ctx.Repo.RepoLink + "/src/" + branchName + "/" + treeName)
+ return
+ }
+
+ if err := ctx.Repo.Repository.DeleteRepoFile(ctx.User, ctx.Repo.CommitID, branchName, treeName, form.CommitSummary); err != nil {
+ ctx.Handle(500, "DeleteRepoFile", err)
+ return
+ }
+
+ ctx.Redirect(ctx.Repo.RepoLink + "/src/" + branchName)
+}
diff --git a/routers/repo/view.go b/routers/repo/view.go
index 1572bb6150..7fe7984c58 100644
--- a/routers/repo/view.go
+++ b/routers/repo/view.go
@@ -53,7 +53,6 @@ func Home(ctx *context.Context) {
rawLink := ctx.Repo.RepoLink + "/raw/" + branchName
editLink := ctx.Repo.RepoLink + "/_edit/" + branchName
newFileLink := ctx.Repo.RepoLink + "/_new/" + branchName
- deleteLink := ctx.Repo.RepoLink + "/delete/" + branchName
forkLink := setting.AppSubUrl + "/repo/fork/" + strconv.FormatInt(ctx.Repo.Repository.ID, 10)
uploadFileLink := ctx.Repo.RepoLink + "/upload/" + branchName
@@ -171,7 +170,6 @@ func Home(ctx *context.Context) {
}
if ctx.Repo.IsWriter() && ctx.Repo.IsViewBranch {
- ctx.Data["FileDeleteLink"] = deleteLink + "/" + treename
ctx.Data["FileDeleteLinkTooltip"] = ctx.Tr("repo.delete_this_file")
} else {
if !ctx.Repo.IsViewBranch {
@@ -259,7 +257,7 @@ func Home(ctx *context.Context) {
ctx.Data["LastCommitUser"] = models.ValidateCommitWithEmail(lastCommit)
if ctx.Repo.IsWriter() && ctx.Repo.IsViewBranch {
ctx.Data["NewFileLink"] = newFileLink + "/" + treename
- if !setting.Repository.Upload.Enabled {
+ if setting.Repository.Upload.Enabled {
ctx.Data["UploadFileLink"] = uploadFileLink + "/" + treename
}
}
diff --git a/templates/repo/editor/edit.tmpl b/templates/repo/editor/edit.tmpl
index 5e3349eaab..f6e16ae7f7 100644
--- a/templates/repo/editor/edit.tmpl
+++ b/templates/repo/editor/edit.tmpl
@@ -30,7 +30,7 @@
<div class="ui top attached tabular menu" data-write="write" data-preview="preview" data-diff="diff">
<a class="active item" data-tab="write"><i class="octicon octicon-code"></i> {{.i18n.Tr "repo.edit_file"}}</a>
<a class="item" data-tab="preview" data-url="{{AppSubUrl}}/api/v1/markdown" data-context="{{.RepoLink}}" data-preview-file-modes="{{.PreviewableFileModes}}"><i class="octicon octicon-eye"></i> {{.i18n.Tr "repo.release.preview"}}</a>
- <a class="item" data-tab="diff" data-url="{{.RepoLink}}/preview/{{.BranchName}}/{{.TreeName}}" data-context="{{.BranchLink}}"><i class="octicon octicon-diff"></i> {{.i18n.Tr "repo.preview_changes"}}</a>
+ <a class="item" data-tab="diff" data-url="{{.RepoLink}}/_preview/{{.BranchName}}/{{.TreeName}}" data-context="{{.BranchLink}}"><i class="octicon octicon-diff"></i> {{.i18n.Tr "repo.preview_changes"}}</a>
</div>
<div class="ui bottom attached active tab segment" data-tab="write">
<textarea id="edit_area" name="content" data-id="repo-{{.Repository.Name}}-{{.TreeName}}"
diff --git a/templates/repo/view_file.tmpl b/templates/repo/view_file.tmpl
index 0321dbd09b..5ddc3768fb 100644
--- a/templates/repo/view_file.tmpl
+++ b/templates/repo/view_file.tmpl
@@ -25,8 +25,8 @@
{{else}}
<i class="octicon btn-octicon octicon-pencil poping up disabled" data-content="{{.FileEditLinkTooltip}}" data-position="bottom center" data-variation="tiny inverted"></i>
{{end}}
- {{if .FileDeleteLink}}
- <form id="delete-file-form" class="ui form inline-form" action="{{EscapePound $.FileDeleteLink}}" method="post">
+ {{if and .IsViewBranch .IsRepositoryWriter}}
+ <form id="delete-file-form" class="ui form inline-form" action="{{.RepoLink}}/_delete/{{EscapePound .BranchName}}/{{.TreeName}}" method="post">
{{.CsrfTokenHtml}}
<button onclick="submitDeleteForm()" class="octicon octicon-trashcan btn-octicon btn-octicon-danger poping up" type="button" data-content="{{.FileDeleteLinkTooltip}}" data-position="bottom center" data-variation="tiny inverted"></button>
<input type="hidden" id="delete-message" name="commit_message" value="">