diff options
author | zeripath <art27@cantab.net> | 2021-11-30 20:06:32 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-30 20:06:32 +0000 |
commit | 01087e9eef21ff5ea1cebbb1e84933954671fdf2 (patch) | |
tree | ae618785a3bd46e012096683e2fd2309f87c571d /routers | |
parent | d894c90b703ce215e2319ae2e2bf95989f77805d (diff) | |
download | gitea-01087e9eef21ff5ea1cebbb1e84933954671fdf2.tar.gz gitea-01087e9eef21ff5ea1cebbb1e84933954671fdf2.zip |
Make Requests Processes and create process hierarchy. Associate OpenRepository with context. (#17125)
This PR registers requests with the process manager and manages hierarchy within the processes.
Git repos are then associated with a context, (usually the request's context) - with sub commands using this context as their base context.
Signed-off-by: Andrew Thornton <art27@cantab.net>
Diffstat (limited to 'routers')
-rw-r--r-- | routers/api/v1/repo/branch.go | 2 | ||||
-rw-r--r-- | routers/common/middleware.go | 5 | ||||
-rw-r--r-- | routers/web/admin/admin.go | 6 | ||||
-rw-r--r-- | routers/web/repo/branch.go | 2 | ||||
-rw-r--r-- | routers/web/repo/http.go | 10 | ||||
-rw-r--r-- | routers/web/repo/issue.go | 2 | ||||
-rw-r--r-- | routers/web/repo/pull.go | 2 | ||||
-rw-r--r-- | routers/web/repo/setting.go | 2 |
8 files changed, 16 insertions, 15 deletions
diff --git a/routers/api/v1/repo/branch.go b/routers/api/v1/repo/branch.go index 70e5b3e2b8..e511152e57 100644 --- a/routers/api/v1/repo/branch.go +++ b/routers/api/v1/repo/branch.go @@ -405,7 +405,7 @@ func CreateBranchProtection(ctx *context.APIContext) { repo := ctx.Repo.Repository // Currently protection must match an actual branch - if !git.IsBranchExist(ctx.Repo.Repository.RepoPath(), form.BranchName) { + if !git.IsBranchExist(ctx.Req.Context(), ctx.Repo.Repository.RepoPath(), form.BranchName) { ctx.NotFound() return } diff --git a/routers/common/middleware.go b/routers/common/middleware.go index 7c5c72f5cc..75d3777e49 100644 --- a/routers/common/middleware.go +++ b/routers/common/middleware.go @@ -11,6 +11,7 @@ import ( "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/log" + "code.gitea.io/gitea/modules/process" "code.gitea.io/gitea/modules/setting" "github.com/chi-middleware/proxy" @@ -22,7 +23,9 @@ func Middlewares() []func(http.Handler) http.Handler { var handlers = []func(http.Handler) http.Handler{ func(next http.Handler) http.Handler { return http.HandlerFunc(func(resp http.ResponseWriter, req *http.Request) { - next.ServeHTTP(context.NewResponse(resp), req) + ctx, _, finished := process.GetManager().AddContext(req.Context(), fmt.Sprintf("%s: %s", req.Method, req.RequestURI)) + defer finished() + next.ServeHTTP(context.NewResponse(resp), req.WithContext(ctx)) }) }, } diff --git a/routers/web/admin/admin.go b/routers/web/admin/admin.go index 8cbe852718..7e25f96ee0 100644 --- a/routers/web/admin/admin.go +++ b/routers/web/admin/admin.go @@ -326,7 +326,7 @@ func Monitor(ctx *context.Context) { ctx.Data["Title"] = ctx.Tr("admin.monitor") ctx.Data["PageIsAdmin"] = true ctx.Data["PageIsAdminMonitor"] = true - ctx.Data["Processes"] = process.GetManager().Processes() + ctx.Data["Processes"] = process.GetManager().Processes(true) ctx.Data["Entries"] = cron.ListTasks() ctx.Data["Queues"] = queue.GetManager().ManagedQueues() ctx.HTML(http.StatusOK, tplMonitor) @@ -334,8 +334,8 @@ func Monitor(ctx *context.Context) { // MonitorCancel cancels a process func MonitorCancel(ctx *context.Context) { - pid := ctx.ParamsInt64("pid") - process.GetManager().Cancel(pid) + pid := ctx.Params("pid") + process.GetManager().Cancel(process.IDType(pid)) ctx.JSON(http.StatusOK, map[string]interface{}{ "redirect": setting.AppSubURL + "/admin/monitor", }) diff --git a/routers/web/repo/branch.go b/routers/web/repo/branch.go index 64fb1afb2d..05b45eba4b 100644 --- a/routers/web/repo/branch.go +++ b/routers/web/repo/branch.go @@ -124,7 +124,7 @@ func RestoreBranchPost(ctx *context.Context) { return } - if err := git.Push(ctx.Repo.Repository.RepoPath(), git.PushOptions{ + if err := git.Push(ctx, ctx.Repo.Repository.RepoPath(), git.PushOptions{ Remote: ctx.Repo.Repository.RepoPath(), Branch: fmt.Sprintf("%s:%s%s", deletedBranch.Commit, git.BranchPrefix, deletedBranch.Name), Env: models.PushingEnvironment(ctx.User, ctx.Repo.Repository), diff --git a/routers/web/repo/http.go b/routers/web/repo/http.go index d1978aefe2..3aa8e84f57 100644 --- a/routers/web/repo/http.go +++ b/routers/web/repo/http.go @@ -8,7 +8,6 @@ package repo import ( "bytes" "compress/gzip" - gocontext "context" "fmt" "net/http" "os" @@ -485,8 +484,10 @@ func serviceRPC(h serviceHandler, service string) { h.environ = append(h.environ, "GIT_PROTOCOL="+protocol) } - ctx, cancel := gocontext.WithCancel(git.DefaultContext) - defer cancel() + // ctx, cancel := gocontext.WithCancel(git.DefaultContext) + ctx, _, finished := process.GetManager().AddContext(h.r.Context(), fmt.Sprintf("%s %s %s [repo_path: %s]", git.GitExecutable, service, "--stateless-rpc", h.dir)) + defer finished() + var stderr bytes.Buffer cmd := exec.CommandContext(ctx, git.GitExecutable, service, "--stateless-rpc", h.dir) cmd.Dir = h.dir @@ -495,9 +496,6 @@ func serviceRPC(h serviceHandler, service string) { cmd.Stdin = reqBody cmd.Stderr = &stderr - pid := process.GetManager().Add(fmt.Sprintf("%s %s %s [repo_path: %s]", git.GitExecutable, service, "--stateless-rpc", h.dir), cancel) - defer process.GetManager().Remove(pid) - if err := cmd.Run(); err != nil { log.Error("Fail to serve RPC(%s) in %s: %v - %s", service, h.dir, err, stderr.String()) return diff --git a/routers/web/repo/issue.go b/routers/web/repo/issue.go index 2e0118e03f..f0857b18c0 100644 --- a/routers/web/repo/issue.go +++ b/routers/web/repo/issue.go @@ -1594,7 +1594,7 @@ func ViewIssue(ctx *context.Context) { } ctx.Data["IsPullBranchDeletable"] = canDelete && pull.HeadRepo != nil && - git.IsBranchExist(pull.HeadRepo.RepoPath(), pull.HeadBranch) && + git.IsBranchExist(ctx, pull.HeadRepo.RepoPath(), pull.HeadBranch) && (!pull.HasMerged || ctx.Data["HeadBranchCommitID"] == ctx.Data["PullHeadCommitID"]) stillCanManualMerge := func() bool { diff --git a/routers/web/repo/pull.go b/routers/web/repo/pull.go index 19e757dad8..7593e7fbc8 100644 --- a/routers/web/repo/pull.go +++ b/routers/web/repo/pull.go @@ -436,7 +436,7 @@ func PrepareViewPullInfo(ctx *context.Context, issue *models.Issue) *git.Compare if pull.Flow == models.PullRequestFlowGithub { headBranchExist = headGitRepo.IsBranchExist(pull.HeadBranch) } else { - headBranchExist = git.IsReferenceExist(baseGitRepo.Path, pull.GetGitRefName()) + headBranchExist = git.IsReferenceExist(ctx, baseGitRepo.Path, pull.GetGitRefName()) } if headBranchExist { diff --git a/routers/web/repo/setting.go b/routers/web/repo/setting.go index 76a24d9f40..4fc1e91c25 100644 --- a/routers/web/repo/setting.go +++ b/routers/web/repo/setting.go @@ -178,7 +178,7 @@ func SettingsPost(ctx *context.Context) { } } - u, _ := git.GetRemoteAddress(ctx.Repo.Repository.RepoPath(), ctx.Repo.Mirror.GetRemoteName()) + u, _ := git.GetRemoteAddress(ctx, ctx.Repo.Repository.RepoPath(), ctx.Repo.Mirror.GetRemoteName()) if u.User != nil && form.MirrorPassword == "" && form.MirrorUsername == u.User.Username() { form.MirrorPassword, _ = u.User.Password() } |