From 0914cd16af3bbe18ec70779b056a9e66e9bd101c Mon Sep 17 00:00:00 2001 From: Lorenzo Bolla Date: Tue, 14 Sep 2021 13:46:04 +0200 Subject: [PATCH] Use global async flag as fallback on per-request flag This way, if no pre-request flag is specified, the globally configured default is used. --- api/api.go | 18 +++++++++++++----- api/api_test.go | 18 ++++++++++++++++++ 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/api/api.go b/api/api.go index cd0491b0..c683dfbf 100644 --- a/api/api.go +++ b/api/api.go @@ -5,6 +5,7 @@ import ( "fmt" "log" "sort" + "strconv" "strings" "github.com/aptly-dev/aptly/aptly" @@ -111,17 +112,24 @@ func runTaskInBackground(name string, resources []string, proc task.Process) (ta }) } -func truthy(value string) bool { - switch strings.ToLower(value) { - case "y", "yes", "t", "true": - return true +func truthy(value interface{}) bool { + switch value.(type) { + case string: + switch strings.ToLower(value.(string)) { + case "y", "yes", "t", "true", "1": + return true + } + case int: + return value.(int) == 1 + case bool: + return value.(bool) } return false } func maybeRunTaskInBackground(c *gin.Context, name string, resources []string, proc task.Process) { // Run this task in background if configured globally or per-request - background := context.Config().AsyncAPI || truthy(c.Query("_async")) + background := truthy(c.DefaultQuery("_async", strconv.FormatBool(context.Config().AsyncAPI))) if background { log.Println("Executing task asynchronously") task, conflictErr := runTaskInBackground(name, resources, proc) diff --git a/api/api_test.go b/api/api_test.go index 1be484f7..38529bef 100644 --- a/api/api_test.go +++ b/api/api_test.go @@ -91,3 +91,21 @@ func (s *ApiSuite) TestGetVersion(c *C) { c.Check(response.Code, Equals, 200) c.Check(response.Body.String(), Matches, ".*Version.*") } + +func (s *ApiSuite) TestTruthy(c *C) { + c.Check(truthy("y"), Equals, true) + c.Check(truthy("yes"), Equals, true) + c.Check(truthy("t"), Equals, true) + c.Check(truthy("true"), Equals, true) + c.Check(truthy("1"), Equals, true) + c.Check(truthy(true), Equals, true) + c.Check(truthy(1), Equals, true) + + c.Check(truthy("no"), Equals, false) + c.Check(truthy("foobar"), Equals, false) + c.Check(truthy(0), Equals, false) + c.Check(truthy(-1), Equals, false) + c.Check(truthy(false), Equals, false) + c.Check(truthy(nil), Equals, false) + c.Check(truthy(gin.H{}), Equals, false) +}