[BOLT] Create marker for source changes in nfc-mode testing. (#142931)
Currently NFC tests only trigger when the llvm-bolt binary itself changes. This patch adds `--check-bolt-sources`, which scans git output for any modifications under bolt/, excluding: - bolt/docs - bolt/utils/docker - bolt/utils/dot2html If any matching files change between versions, a `.llvm-bolt.changes` marker is created. Buildbots can then use this marker to trigger in-tree tests.
This commit is contained in:
parent
a8998fa062
commit
d681c73a04
@ -7,6 +7,29 @@ import subprocess
|
||||
import sys
|
||||
import textwrap
|
||||
|
||||
def get_relevant_bolt_changes(dir: str) -> str:
|
||||
# Return a list of bolt source changes that are relevant to testing.
|
||||
all_changes = subprocess.run(
|
||||
shlex.split("git show HEAD --name-only --pretty=''"),
|
||||
cwd=dir,
|
||||
text=True,
|
||||
stdout=subprocess.PIPE,
|
||||
)
|
||||
keep_bolt = subprocess.run(
|
||||
shlex.split("grep '^bolt'"),
|
||||
input=all_changes.stdout,
|
||||
text=True,
|
||||
stdout=subprocess.PIPE,
|
||||
)
|
||||
keep_relevant = subprocess.run(
|
||||
shlex.split(
|
||||
"grep -v -e '^bolt/docs' -e '^bolt/utils/docker' -e '^bolt/utils/dot2html'"
|
||||
),
|
||||
input=keep_bolt.stdout,
|
||||
text=True,
|
||||
stdout=subprocess.PIPE,
|
||||
)
|
||||
return keep_relevant.stdout
|
||||
|
||||
def get_git_ref_or_rev(dir: str) -> str:
|
||||
# Run 'git symbolic-ref -q --short HEAD || git rev-parse --short HEAD'
|
||||
@ -36,6 +59,12 @@ def main():
|
||||
default=os.getcwd(),
|
||||
help="Path to BOLT build directory, default is current " "directory",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--check-bolt-sources",
|
||||
default=False,
|
||||
action="store_true",
|
||||
help="Create a marker file (.llvm-bolt.changes) if any relevant BOLT sources are modified",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--switch-back",
|
||||
default=False,
|
||||
@ -71,6 +100,16 @@ def main():
|
||||
# memorize the old hash for logging
|
||||
old_ref = get_git_ref_or_rev(source_dir)
|
||||
|
||||
if args.check_bolt_sources:
|
||||
marker = f"{args.build_dir}/.llvm-bolt.changes"
|
||||
if os.path.exists(marker):
|
||||
os.remove(marker)
|
||||
file_changes = get_relevant_bolt_changes(source_dir)
|
||||
# Create a marker file if any relevant BOLT source files changed.
|
||||
if len(file_changes) > 0:
|
||||
print(f"BOLT source changes were found:\n{file_changes}")
|
||||
open(marker, "a").close()
|
||||
|
||||
# determine whether a stash is needed
|
||||
stash = subprocess.run(
|
||||
shlex.split("git status --porcelain"),
|
||||
|
Loading…
x
Reference in New Issue
Block a user