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:
parent
8bbe26cad7
commit
20f2030e29
3 changed files with 6 additions and 7 deletions
|
@ -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)
|
||||||
|
|
|
@ -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")
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue