[PATCH] D126941: [BOLT][UTILS] Usability improvements for nfc-check-setup

Amir Ayupov via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Jun 3 22:55:03 PDT 2022


This revision was automatically updated to reflect the committed changes.
Closed by commit rGb346af6d4497: [BOLT][UTILS] Usability improvements for nfc-check-setup (authored by Amir).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D126941/new/

https://reviews.llvm.org/D126941

Files:
  bolt/utils/nfc-check-setup.py


Index: bolt/utils/nfc-check-setup.py
===================================================================
--- bolt/utils/nfc-check-setup.py
+++ bolt/utils/nfc-check-setup.py
@@ -7,6 +7,17 @@
 import sys
 import textwrap
 
+def get_git_ref_or_rev(dir: str) -> str:
+    # Run 'git symbolic-ref -q --short HEAD || git rev-parse --short HEAD'
+    cmd_ref = 'git symbolic-ref -q --short HEAD'
+    ref = subprocess.run(shlex.split(cmd_ref), cwd=dir, text=True,
+                         stdout=subprocess.PIPE)
+    if not ref.returncode:
+        return ref.stdout.strip()
+    cmd_rev = 'git rev-parse --short HEAD'
+    return subprocess.check_output(shlex.split(cmd_rev), cwd=dir,
+                                   text=True).strip()
+
 
 def main():
     parser = argparse.ArgumentParser(description=textwrap.dedent('''
@@ -29,16 +40,22 @@
     if not source_dir:
         sys.exit("Source directory is not found")
 
-    wrapper_path = os.path.abspath(
-        f'{source_dir}/../bolt/utils/llvm-bolt-wrapper.py')
+    script_dir = os.path.dirname(os.path.abspath(__file__))
+    wrapper_path = f'{script_dir}/llvm-bolt-wrapper.py'
     # build the current commit
     subprocess.run(shlex.split("cmake --build . --target llvm-bolt"),
                    cwd=args.build_dir)
     # rename llvm-bolt
     os.replace(bolt_path, f'{bolt_path}.new')
+    # memorize the old hash for logging
+    old_ref = get_git_ref_or_rev(source_dir)
+
+    # save local changes before checkout
+    subprocess.run(shlex.split("git stash"), cwd=source_dir)
     # check out the previous commit
-    subprocess.run(shlex.split("git checkout -f HEAD^"),
-                   cwd=source_dir)
+    subprocess.run(shlex.split("git checkout -f HEAD^"), cwd=source_dir)
+    # get the parent commit hash for logging
+    new_ref = get_git_ref_or_rev(source_dir)
     # build the previous commit
     subprocess.run(shlex.split("cmake --build . --target llvm-bolt"),
                    cwd=args.build_dir)
@@ -53,6 +70,12 @@
         f.write(ini)
     # symlink llvm-bolt-wrapper
     os.symlink(wrapper_path, bolt_path)
+    print(f"The repository {source_dir} has been switched from rev {old_ref} "
+          f"to {new_ref}. Local changes were stashed. Switch back using\n\t"
+          f"git checkout {old_ref}\n"
+          "Current build directory is ready to run BOLT tests, e.g.\n\t"
+          "bin/llvm-lit -sv tools/bolt/test\nor\n\t"
+          "bin/llvm-lit -sv tools/bolttests")
 
 
 if __name__ == "__main__":


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D126941.434245.patch
Type: text/x-patch
Size: 2503 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220604/011e5049/attachment.bin>


More information about the llvm-commits mailing list