Enable restat for sbox rules
Add support to sbox for only writing output files if they are changed to support enabling restat. Move the clearing of the output directory into sbox, and when write if changed is enabled delete obsolete output files without deleting output files that will be replaced. Enable restat for local metalava rules. Restat for metalava rules run remotely is still blocked on b/183630617. Bug: 222095735 Test: TestRuleBuilder_Build Test: m SystemUI Change-Id: If8fc47e711f4a6f43947ab69f17cccc8ba6ae61a
This commit is contained in:
@@ -101,12 +101,7 @@ func (r *RuleBuilder) MissingDeps(missingDeps []string) {
|
||||
}
|
||||
|
||||
// Restat marks the rule as a restat rule, which will be passed to ModuleContext.Rule in BuildParams.Restat.
|
||||
//
|
||||
// Restat is not compatible with Sbox()
|
||||
func (r *RuleBuilder) Restat() *RuleBuilder {
|
||||
if r.sbox {
|
||||
panic("Restat() is not compatible with Sbox()")
|
||||
}
|
||||
r.restat = true
|
||||
return r
|
||||
}
|
||||
@@ -141,8 +136,6 @@ func (r *RuleBuilder) Rewrapper(params *remoteexec.REParams) *RuleBuilder {
|
||||
// point to a location where sbox's manifest will be written and must be outside outputDir. sbox
|
||||
// will ensure that all outputs have been written, and will discard any output files that were not
|
||||
// specified.
|
||||
//
|
||||
// Sbox is not compatible with Restat()
|
||||
func (r *RuleBuilder) Sbox(outputDir WritablePath, manifestPath WritablePath) *RuleBuilder {
|
||||
if r.sbox {
|
||||
panic("Sbox() may not be called more than once")
|
||||
@@ -150,9 +143,6 @@ func (r *RuleBuilder) Sbox(outputDir WritablePath, manifestPath WritablePath) *R
|
||||
if len(r.commands) > 0 {
|
||||
panic("Sbox() may not be called after Command()")
|
||||
}
|
||||
if r.restat {
|
||||
panic("Sbox() is not compatible with Restat()")
|
||||
}
|
||||
r.sbox = true
|
||||
r.outDir = outputDir
|
||||
r.sboxManifestPath = manifestPath
|
||||
@@ -636,11 +626,14 @@ func (r *RuleBuilder) Build(name string, desc string) {
|
||||
ctx: r.ctx,
|
||||
},
|
||||
}
|
||||
sboxCmd.Text("rm -rf").Output(r.outDir)
|
||||
sboxCmd.Text("&&")
|
||||
sboxCmd.builtToolWithoutDeps("sbox").
|
||||
Flag("--sandbox-path").Text(shared.TempDirForOutDir(PathForOutput(r.ctx).String())).
|
||||
Flag("--manifest").Input(r.sboxManifestPath)
|
||||
FlagWithArg("--sandbox-path ", shared.TempDirForOutDir(PathForOutput(r.ctx).String())).
|
||||
FlagWithArg("--output-dir ", r.outDir.String()).
|
||||
FlagWithInput("--manifest ", r.sboxManifestPath)
|
||||
|
||||
if r.restat {
|
||||
sboxCmd.Flag("--write-if-changed")
|
||||
}
|
||||
|
||||
// Replace the command string, and add the sbox tool and manifest textproto to the
|
||||
// dependencies of the final sbox rule.
|
||||
|
Reference in New Issue
Block a user