diff options
author | Runxi Yu <me@runxiyu.org> | 2025-04-06 11:07:36 +0800 |
---|---|---|
committer | Runxi Yu <me@runxiyu.org> | 2025-04-06 11:07:36 +0800 |
commit | 669924e830df4fadaaa71691dc90942189598dc7 (patch) | |
tree | cf9d2fbf7a689297f19a7a03723b11ec0b31477d | |
parent | CSS: Make lists in the README a bit more sparse (diff) | |
download | forge-669924e830df4fadaaa71691dc90942189598dc7.tar.gz forge-669924e830df4fadaaa71691dc90942189598dc7.tar.zst forge-669924e830df4fadaaa71691dc90942189598dc7.zip |
HTTP: git log should stop on context donev0.1.35
-rw-r--r-- | forged/internal/unsorted/git_misc.go | 10 | ||||
-rw-r--r-- | forged/internal/unsorted/http_handle_repo_log.go | 4 |
2 files changed, 11 insertions, 3 deletions
diff --git a/forged/internal/unsorted/git_misc.go b/forged/internal/unsorted/git_misc.go index ceda3d1..dd93726 100644 --- a/forged/internal/unsorted/git_misc.go +++ b/forged/internal/unsorted/git_misc.go @@ -67,7 +67,7 @@ WHERE g.depth = cardinality($1::text[]) // The pointer to error is guaranteed to be populated with either nil or the // error returned by the commit iterator after the returned iterator is // finished. -func commitIterSeqErr(commitIter object.CommitIter) (iter.Seq[*object.Commit], *error) { +func commitIterSeqErr(ctx context.Context, commitIter object.CommitIter) (iter.Seq[*object.Commit], *error) { var err error return func(yield func(*object.Commit) bool) { for { @@ -79,6 +79,14 @@ func commitIterSeqErr(commitIter object.CommitIter) (iter.Seq[*object.Commit], * err = err2 return } + + select { + case <-ctx.Done(): + err = ctx.Err() + return + default: + } + if !yield(commit) { return } diff --git a/forged/internal/unsorted/http_handle_repo_log.go b/forged/internal/unsorted/http_handle_repo_log.go index fa992b3..5d90871 100644 --- a/forged/internal/unsorted/http_handle_repo_log.go +++ b/forged/internal/unsorted/http_handle_repo_log.go @@ -15,7 +15,7 @@ import ( // // TODO: This currently provides all commits in the branch. It should be // paginated and cached instead. -func (s *Server) httpHandleRepoLog(writer http.ResponseWriter, _ *http.Request, params map[string]any) { +func (s *Server) httpHandleRepoLog(writer http.ResponseWriter, req *http.Request, params map[string]any) { var repo *git.Repository var refHash plumbing.Hash var err error @@ -33,7 +33,7 @@ func (s *Server) httpHandleRepoLog(writer http.ResponseWriter, _ *http.Request, web.ErrorPage500(s.templates, writer, params, "Error getting recent commits: "+err.Error()) return } - params["commits"], params["commits_err"] = commitIterSeqErr(commitIter) + params["commits"], params["commits_err"] = commitIterSeqErr(req.Context(), commitIter) s.renderTemplate(writer, "repo_log", params) } |