From 20f2030e29677e4cef5d2ac58ebb6b870e6fbcf5 Mon Sep 17 00:00:00 2001 From: Cole Faust Date: Thu, 31 Aug 2023 11:00:25 -0700 Subject: [PATCH] Use aquery results to determine if a file should be executable Now that aquery includes this information. Also added rm -f $out to some rules, because since they write files by shell redirection, if the file existed before and was executable, they wouldn't make the file non-executable and visa versa. Fixes: 297366783 Test: m bazel_sandwich Change-Id: Ie5b6c4275b162601f51deaec9912eea4be16988d --- android/bazel_handler.go | 5 +---- android/defs.go | 6 +++--- bazel/aquery.go | 2 ++ 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/android/bazel_handler.go b/android/bazel_handler.go index 42ba9b44e..4b9834564 100644 --- a/android/bazel_handler.go +++ b/android/bazel_handler.go @@ -1382,10 +1382,7 @@ func (c *bazelSingleton) GenerateBuildActions(ctx SingletonContext) { WriteFileRuleVerbatim(ctx, out, "") case "FileWrite", "SourceSymlinkManifest": out := PathForBazelOut(ctx, buildStatement.OutputPaths[0]) - // TODO(b/297366783) This is a hack to make files from skylib's diff_test executable. - // We need to update bazel to have aquery tell us whether a file is supposed to be - // executable or not. - if strings.HasSuffix(buildStatement.OutputPaths[0], "-test.sh") { + if buildStatement.IsExecutable { WriteExecutableFileRuleVerbatim(ctx, out, buildStatement.FileContents) } else { WriteFileRuleVerbatim(ctx, out, buildStatement.FileContents) diff --git a/android/defs.go b/android/defs.go index 682111ea5..b28d2fa3d 100644 --- a/android/defs.go +++ b/android/defs.go @@ -107,8 +107,8 @@ var ( Cat = pctx.AndroidStaticRule("Cat", blueprint.RuleParams{ - Command: "cat $in > $out", - Description: "concatenate licenses $out", + Command: "rm -f $out && cat $in > $out", + Description: "concatenate files to $out", }) // ubuntu 14.04 offcially use dash for /bin/sh, and its builtin echo command @@ -116,7 +116,7 @@ var ( // content to file. writeFile = pctx.AndroidStaticRule("writeFile", blueprint.RuleParams{ - Command: `/bin/bash -c 'echo -e -n "$$0" > $out' $content`, + Command: `rm -f $out && /bin/bash -c 'echo -e -n "$$0" > $out' $content`, Description: "writing file $out", }, "content") diff --git a/bazel/aquery.go b/bazel/aquery.go index d77d59acf..76cd97254 100644 --- a/bazel/aquery.go +++ b/bazel/aquery.go @@ -123,6 +123,7 @@ type BuildStatement struct { // Unlike most properties in BuildStatement, these paths must be relative to the root of // the whole out/ folder, instead of relative to ctx.Config().BazelContext.OutputBase() ImplicitDeps []string + IsExecutable bool } // A helper type for aquery processing which facilitates retrieval of path IDs from their @@ -560,6 +561,7 @@ func (a *aqueryArtifactHandler) fileWriteActionBuildStatement(actionEntry *analy Mnemonic: actionEntry.Mnemonic, InputDepsetHashes: depsetHashes, FileContents: actionEntry.FileContents, + IsExecutable: actionEntry.IsExecutable, }, nil }