Copyright 2020 The Monogon Project Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.


From 6313aef65ed37aa971737058af391f5be1ae976c Mon Sep 17 00:00:00 2001
From: Lorenz Brun <lorenz@nexantic.com>
Date: Wed, 3 Feb 2021 18:11:03 +0100
Subject: [PATCH] Don't use run_shell with list as cmd

Going upstream at https://github.com/kubernetes/repo-infra/pull/225
---
 defs/go.bzl | 26 ++++++++++++++------------
 1 file changed, 14 insertions(+), 12 deletions(-)

diff --git a/defs/go.bzl b/defs/go.bzl
index 21cffdd..f4617e1 100644
--- a/defs/go.bzl
+++ b/defs/go.bzl
@@ -63,16 +63,7 @@ def _go_genrule_impl(ctx):
 
     srcs = [src for srcs in ctx.attr.srcs for src in srcs.files.to_list()]
 
-    deps = depset(
-        gopath_files + srcs,
-        transitive =
-            # tools
-            [dep.files for dep in ctx.attr.tools] +
-            # go toolchain
-            [depset(go.sdk.libs + go.sdk.srcs + go.sdk.tools + [go.sdk.go])],
-    )
-
-    _, cmd, _ = ctx.resolve_command(
+    inputs, cmd, input_manifests = ctx.resolve_command(
         command = ctx.attr.cmd,
         attribute = "cmd",
         expand_locations = True,
@@ -83,6 +74,15 @@ def _go_genrule_impl(ctx):
         tools = ctx.attr.tools,
     )
 
+    deps = depset(
+        gopath_files + srcs + inputs,
+        transitive =
+            # tools
+            [dep.files for dep in ctx.attr.tools] +
+            # go toolchain
+            [depset(go.sdk.libs + go.sdk.srcs + go.sdk.tools + [go.sdk.go])],
+    )
+
     env = dict()
     env.update(ctx.configuration.default_shell_env)
     env.update(go.env)
@@ -92,11 +92,13 @@ def _go_genrule_impl(ctx):
         "GOROOT": paths.dirname(go.sdk.root_file.path),
     })
 
-    ctx.actions.run_shell(
+    ctx.actions.run(
         inputs = deps,
         outputs = ctx.outputs.outs,
         env = env,
-        command = cmd,
+        executable = cmd[0],
+        arguments = cmd[1:],
+        input_manifests = input_manifests,
         progress_message = "%s %s" % (ctx.attr.message, ctx),
         mnemonic = "GoGenrule",
     )
-- 
2.25.1

