From cdd79e391d4f4aedf21caf4b4ab83f72fdb92d0f Mon Sep 17 00:00:00 2001 From: Andrew Thornton Date: Fri, 21 Aug 2020 21:57:29 +0100 Subject: [PATCH] Set context for running CreateArchive in to that of the request Set the context for CreateArchive to that of the request to ensure that archives are only built for as long as a request is requesting them Fix #11551 Signed-off-by: Andrew Thornton --- modules/git/commit_archive.go | 5 +++-- routers/repo/repo.go | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/modules/git/commit_archive.go b/modules/git/commit_archive.go index c7d1d06c4680b..d075ba09115f6 100644 --- a/modules/git/commit_archive.go +++ b/modules/git/commit_archive.go @@ -6,6 +6,7 @@ package git import ( + "context" "fmt" "path/filepath" "strings" @@ -39,7 +40,7 @@ type CreateArchiveOpts struct { } // CreateArchive create archive content to the target path -func (c *Commit) CreateArchive(target string, opts CreateArchiveOpts) error { +func (c *Commit) CreateArchive(ctx context.Context, target string, opts CreateArchiveOpts) error { if opts.Format.String() == "unknown" { return fmt.Errorf("unknown format: %v", opts.Format) } @@ -58,6 +59,6 @@ func (c *Commit) CreateArchive(target string, opts CreateArchiveOpts) error { c.ID.String(), ) - _, err := NewCommand(args...).RunInDir(c.repo.Path) + _, err := NewCommandContext(ctx, args...).RunInDir(c.repo.Path) return err } diff --git a/routers/repo/repo.go b/routers/repo/repo.go index 27c8ff1e03ebb..bde9fba99badb 100644 --- a/routers/repo/repo.go +++ b/routers/repo/repo.go @@ -524,7 +524,7 @@ func Download(ctx *context.Context) { archivePath = path.Join(archivePath, base.ShortSha(commit.ID.String())+ext) if !com.IsFile(archivePath) { - if err := commit.CreateArchive(archivePath, git.CreateArchiveOpts{ + if err := commit.CreateArchive(ctx.Req.Context(), archivePath, git.CreateArchiveOpts{ Format: archiveType, Prefix: setting.Repository.PrefixArchiveFiles, }); err != nil {