From 589b1fdc67beef4fe9007212b198407acd88bf81 Mon Sep 17 00:00:00 2001 From: merlleu Date: Sat, 26 Aug 2023 21:20:54 +0200 Subject: [PATCH 1/6] allow "latest" to be used in release vTag when downloading file --- routers/web/repo/repo.go | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/routers/web/repo/repo.go b/routers/web/repo/repo.go index 4409381bc508..e5c8efcc22f0 100644 --- a/routers/web/repo/repo.go +++ b/routers/web/repo/repo.go @@ -373,12 +373,22 @@ func RedirectDownload(ctx *context.Context) { var ( vTag = ctx.Params("vTag") fileName = ctx.Params("fileName") + releases []*repo_model.Release + err error ) - tagNames := []string{vTag} - curRepo := ctx.Repo.Repository - releases, err := repo_model.GetReleasesByRepoIDAndNames(ctx, curRepo.ID, tagNames) + + // GitHub supports the alias "latest" for the latest release + if vTag == "latest" { + release, err := repo_model.GetLatestReleaseByRepoID(ctx, ctx.Repo.Repository.ID) + releases = []*repo_model.Release{release} + } else { + tagNames := []string{vTag} + curRepo := ctx.Repo.Repository + releases, err = repo_model.GetReleasesByRepoIDAndNames(ctx, curRepo.ID, tagNames) + } + if err != nil { - if repo_model.IsErrAttachmentNotExist(err) { + if repo_model.IsErrAttachmentNotExist(err) || repo_model.IsErrReleaseNotExist(err) { ctx.Error(http.StatusNotFound) return } From a7ff826560e1fec6e7140a9ec79ba99c59e92668 Mon Sep 17 00:00:00 2001 From: merlleu Date: Sun, 27 Aug 2023 12:28:38 +0200 Subject: [PATCH 2/6] only attempt to get latest if no release with this tag --- routers/web/repo/repo.go | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/routers/web/repo/repo.go b/routers/web/repo/repo.go index e5c8efcc22f0..ce8e77469447 100644 --- a/routers/web/repo/repo.go +++ b/routers/web/repo/repo.go @@ -373,22 +373,14 @@ func RedirectDownload(ctx *context.Context) { var ( vTag = ctx.Params("vTag") fileName = ctx.Params("fileName") - releases []*repo_model.Release - err error ) - - // GitHub supports the alias "latest" for the latest release - if vTag == "latest" { - release, err := repo_model.GetLatestReleaseByRepoID(ctx, ctx.Repo.Repository.ID) - releases = []*repo_model.Release{release} - } else { - tagNames := []string{vTag} - curRepo := ctx.Repo.Repository - releases, err = repo_model.GetReleasesByRepoIDAndNames(ctx, curRepo.ID, tagNames) - } + + tagNames := []string{vTag} + curRepo := ctx.Repo.Repository + releases, err := repo_model.GetReleasesByRepoIDAndNames(ctx, curRepo.ID, tagNames) if err != nil { - if repo_model.IsErrAttachmentNotExist(err) || repo_model.IsErrReleaseNotExist(err) { + if repo_model.IsErrAttachmentNotExist(err) { ctx.Error(http.StatusNotFound) return } @@ -406,6 +398,23 @@ func RedirectDownload(ctx *context.Context) { ServeAttachment(ctx, att.UUID) return } + } else if vTag == "latest" { + // GitHub supports the alias "latest" for the latest release + // We only fetch the latest release if the tag is "latest" and no release with the tag "latest" exists + release, err := repo_model.GetLatestReleaseByRepoID(ctx, ctx.Repo.Repository.ID) + if err != nil { + ctx.Error(http.StatusNotFound) + return + } + att, err := repo_model.GetAttachmentByReleaseIDFileName(ctx, release.ID, fileName) + if err != nil { + ctx.Error(http.StatusNotFound) + return + } + if att != nil { + ServeAttachment(ctx, att.UUID) + return + } } ctx.Error(http.StatusNotFound) } From 7611bdef85fdd2f55fe89ec2a599e0ae362cb754 Mon Sep 17 00:00:00 2001 From: merlleu Date: Sun, 27 Aug 2023 12:29:58 +0200 Subject: [PATCH 3/6] remove newlines --- routers/web/repo/repo.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/routers/web/repo/repo.go b/routers/web/repo/repo.go index ce8e77469447..c51f43e22b1e 100644 --- a/routers/web/repo/repo.go +++ b/routers/web/repo/repo.go @@ -374,11 +374,9 @@ func RedirectDownload(ctx *context.Context) { vTag = ctx.Params("vTag") fileName = ctx.Params("fileName") ) - tagNames := []string{vTag} curRepo := ctx.Repo.Repository releases, err := repo_model.GetReleasesByRepoIDAndNames(ctx, curRepo.ID, tagNames) - if err != nil { if repo_model.IsErrAttachmentNotExist(err) { ctx.Error(http.StatusNotFound) From 0cfaa09dd584574a36d6127df02c359db0444127 Mon Sep 17 00:00:00 2001 From: merlleu Date: Mon, 28 Aug 2023 12:16:42 +0200 Subject: [PATCH 4/6] fix unexpected argument --- routers/web/repo/repo.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routers/web/repo/repo.go b/routers/web/repo/repo.go index c51f43e22b1e..c6858868ab40 100644 --- a/routers/web/repo/repo.go +++ b/routers/web/repo/repo.go @@ -399,7 +399,7 @@ func RedirectDownload(ctx *context.Context) { } else if vTag == "latest" { // GitHub supports the alias "latest" for the latest release // We only fetch the latest release if the tag is "latest" and no release with the tag "latest" exists - release, err := repo_model.GetLatestReleaseByRepoID(ctx, ctx.Repo.Repository.ID) + release, err := repo_model.GetLatestReleaseByRepoID(ctx.Repo.Repository.ID) if err != nil { ctx.Error(http.StatusNotFound) return From 7eac1d128974f0ec1d6b6bba6772e8b1fa67ddbb Mon Sep 17 00:00:00 2001 From: merlleu Date: Tue, 29 Aug 2023 23:27:03 +0200 Subject: [PATCH 5/6] handle only len(releases) == 0 --- routers/web/repo/repo.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routers/web/repo/repo.go b/routers/web/repo/repo.go index c6858868ab40..a6ad0ce73f1b 100644 --- a/routers/web/repo/repo.go +++ b/routers/web/repo/repo.go @@ -396,7 +396,7 @@ func RedirectDownload(ctx *context.Context) { ServeAttachment(ctx, att.UUID) return } - } else if vTag == "latest" { + } else if len(releases) == 0 && vTag == "latest" { // GitHub supports the alias "latest" for the latest release // We only fetch the latest release if the tag is "latest" and no release with the tag "latest" exists release, err := repo_model.GetLatestReleaseByRepoID(ctx.Repo.Repository.ID) From 14e7e58a5291ed4cdd4ba307626213fac86ba718 Mon Sep 17 00:00:00 2001 From: wxiaoguang Date: Wed, 6 Sep 2023 15:20:24 +0800 Subject: [PATCH 6/6] Remove legacy incorrect code --- routers/web/repo/repo.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/routers/web/repo/repo.go b/routers/web/repo/repo.go index a6ad0ce73f1b..c9cefb68db9e 100644 --- a/routers/web/repo/repo.go +++ b/routers/web/repo/repo.go @@ -378,10 +378,6 @@ func RedirectDownload(ctx *context.Context) { curRepo := ctx.Repo.Repository releases, err := repo_model.GetReleasesByRepoIDAndNames(ctx, curRepo.ID, tagNames) if err != nil { - if repo_model.IsErrAttachmentNotExist(err) { - ctx.Error(http.StatusNotFound) - return - } ctx.ServerError("RedirectDownload", err) return }