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
This commit is contained in:
Cole Faust 2023-08-31 11:00:25 -07:00
parent 8bbe26cad7
commit 20f2030e29
3 changed files with 6 additions and 7 deletions

View file

@ -1382,10 +1382,7 @@ func (c *bazelSingleton) GenerateBuildActions(ctx SingletonContext) {
WriteFileRuleVerbatim(ctx, out, "") WriteFileRuleVerbatim(ctx, out, "")
case "FileWrite", "SourceSymlinkManifest": case "FileWrite", "SourceSymlinkManifest":
out := PathForBazelOut(ctx, buildStatement.OutputPaths[0]) out := PathForBazelOut(ctx, buildStatement.OutputPaths[0])
// TODO(b/297366783) This is a hack to make files from skylib's diff_test executable. if buildStatement.IsExecutable {
// 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") {
WriteExecutableFileRuleVerbatim(ctx, out, buildStatement.FileContents) WriteExecutableFileRuleVerbatim(ctx, out, buildStatement.FileContents)
} else { } else {
WriteFileRuleVerbatim(ctx, out, buildStatement.FileContents) WriteFileRuleVerbatim(ctx, out, buildStatement.FileContents)

View file

@ -107,8 +107,8 @@ var (
Cat = pctx.AndroidStaticRule("Cat", Cat = pctx.AndroidStaticRule("Cat",
blueprint.RuleParams{ blueprint.RuleParams{
Command: "cat $in > $out", Command: "rm -f $out && cat $in > $out",
Description: "concatenate licenses $out", Description: "concatenate files to $out",
}) })
// ubuntu 14.04 offcially use dash for /bin/sh, and its builtin echo command // ubuntu 14.04 offcially use dash for /bin/sh, and its builtin echo command
@ -116,7 +116,7 @@ var (
// content to file. // content to file.
writeFile = pctx.AndroidStaticRule("writeFile", writeFile = pctx.AndroidStaticRule("writeFile",
blueprint.RuleParams{ 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", Description: "writing file $out",
}, },
"content") "content")

View file

@ -123,6 +123,7 @@ type BuildStatement struct {
// Unlike most properties in BuildStatement, these paths must be relative to the root of // 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() // the whole out/ folder, instead of relative to ctx.Config().BazelContext.OutputBase()
ImplicitDeps []string ImplicitDeps []string
IsExecutable bool
} }
// A helper type for aquery processing which facilitates retrieval of path IDs from their // 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, Mnemonic: actionEntry.Mnemonic,
InputDepsetHashes: depsetHashes, InputDepsetHashes: depsetHashes,
FileContents: actionEntry.FileContents, FileContents: actionEntry.FileContents,
IsExecutable: actionEntry.IsExecutable,
}, nil }, nil
} }