ray/ci/travis/bazel-preclean.sh
mehrdadn 3d65682e62
Bazel selects compiler flags based on compiler (#9313)
Co-authored-by: Mehrdad <noreply@github.com>
2020-07-13 15:31:46 -07:00

44 lines
1.2 KiB
Bash
Executable file

#!/usr/bin/env bash
# Args: [Bazel-target]
#
# This script cleans up any genrule() outputs in the transitive dependencies of the provided target.
#
# This is useful for forcing genrule actions to re-run, because the _true_ outputs of those actions
# can include a larger set of files (e.g. files copied to the workspace) which Bazel is unable to
# detect changes to (or delete changes of).
#
# Usually, you would run this script along with 'git clean -f', to make sure Bazel re-copies outputs
# the next time a build occurs.
(
set -euo pipefail
bazel aquery --output=textproto \
"mnemonic(\"Genrule\", deps(${1-//:*}))" | awk '
{
body = 0;
}
/^^ / {
body = 1;
}
/^^\S.* {$/ {
section = $1;
delete arr;
}
body {
if (section == "artifacts") {
p = $2;
if ($1 == "exec_path:") {
p = substr(p, 2, length(p) - 2); # strip quotes
}
arr[$1] = p;
}
}
/^^}/ {
artifacts[arr["id:"]] = arr["exec_path:"]; # save the ID -> artifact mapping
}
/^^ *output_ids:/ {
print(artifacts[$2]); # print the output artifact
}
' | tr "\n" "\0" | xargs -0 -r -- rm -f --
)