Переглянути джерело

Web editor: improve delete file

Unknwon 8 роки тому
батько
коміт
54e0ada9d5

+ 8 - 3
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() {

+ 0 - 37
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
-}
-
 //  ____ ___        .__                    .___ ___________.___.__
 // |    |   \______ |  |   _________     __| _/ \_   _____/|   |  |   ____   ______
 // |    |   /\____ \|  |  /  _ \__  \   / __ |   |    __)  |   |  | _/ __ \ /  ___/

+ 60 - 0
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
+}

+ 0 - 49
routers/repo/delete.go

@@ -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)
-}

+ 17 - 6
routers/repo/edit.go → 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)
+}

+ 1 - 3
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
 			}
 		}

+ 1 - 1
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}}"

+ 2 - 2
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="">