From e8e41850b50ff2c4840b8e0ce15ec5f820a18dd6 Mon Sep 17 00:00:00 2001
From: decentral1se <cellarspoon@riseup.net>
Date: Wed, 30 Mar 2022 11:31:16 +0200
Subject: [PATCH] fix: pass args to local function invocations too

---
 cli/app/cmd.go | 39 ++++++++++++++++++++++++---------------
 1 file changed, 24 insertions(+), 15 deletions(-)

diff --git a/cli/app/cmd.go b/cli/app/cmd.go
index 7f57dcb89..36cbf1dae 100644
--- a/cli/app/cmd.go
+++ b/cli/app/cmd.go
@@ -79,6 +79,20 @@ Example:
 			logrus.Fatal(err)
 		}
 
+		var parsedCmdArgs string
+		var cmdArgsIdx int
+		var hasCmdArgs bool
+		for idx, arg := range c.Args() {
+			if arg == "--" {
+				cmdArgsIdx = idx
+				hasCmdArgs = true
+			}
+
+			if hasCmdArgs && idx > cmdArgsIdx {
+				parsedCmdArgs += fmt.Sprintf("%s ", c.Args().Get(idx))
+			}
+		}
+
 		if localCmd {
 			cmdName := c.Args().Get(1)
 			if err := ensureCommand(abraSh, app.Recipe, cmdName); err != nil {
@@ -87,8 +101,17 @@ Example:
 
 			logrus.Debugf("--local detected, running %s on local work station", cmdName)
 
-			sourceAndExec := fmt.Sprintf("TARGET=local; APP_NAME=%s; . %s; %s", app.StackName(), abraSh, cmdName)
+			var sourceAndExec string
+			if hasCmdArgs {
+				logrus.Debugf("parsed following command arguments: %s", parsedCmdArgs)
+				sourceAndExec = fmt.Sprintf("TARGET=local; APP_NAME=%s; . %s; %s %s", app.StackName(), abraSh, cmdName, parsedCmdArgs)
+			} else {
+				logrus.Debug("did not detect any command arguments")
+				sourceAndExec = fmt.Sprintf("TARGET=local; APP_NAME=%s; . %s; %s", app.StackName(), abraSh, cmdName)
+			}
+
 			cmd := exec.Command("/bin/sh", "-c", sourceAndExec)
+
 			if err := internal.RunCmd(cmd); err != nil {
 				logrus.Fatal(err)
 			}
@@ -118,20 +141,6 @@ Example:
 
 			logrus.Debugf("running command %s within the context of %s_%s", cmdName, app.StackName(), targetServiceName)
 
-			var parsedCmdArgs string
-			var cmdArgsIdx int
-			var hasCmdArgs bool
-			for idx, arg := range c.Args() {
-				if arg == "--" {
-					cmdArgsIdx = idx
-					hasCmdArgs = true
-				}
-
-				if hasCmdArgs && idx > cmdArgsIdx {
-					parsedCmdArgs += fmt.Sprintf("%s ", c.Args().Get(idx))
-				}
-			}
-
 			if hasCmdArgs {
 				logrus.Debugf("parsed following command arguments: %s", parsedCmdArgs)
 			} else {