]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Make git hooks work in git worktrees (#40038)
authorWar Pigeon <54217755+minus1over12@users.noreply.github.com>
Tue, 2 Sep 2025 23:01:43 +0000 (18:01 -0500)
committerGitHub <noreply@github.com>
Tue, 2 Sep 2025 23:01:43 +0000 (01:01 +0200)
Make hooks work in worktrees and cleanup hooks

BuildChecker/git_helper.py
BuildChecker/hooks/post-checkout
BuildChecker/hooks/post-merge

index 96a7bdae2ab1a61111316dd7913a7d5e7cd86acb..66d2463669dbf2f06a440d08e60f11981d5f6896 100644 (file)
@@ -1,17 +1,19 @@
 #!/usr/bin/env python3
-# Installs git hooks, updates them, updates submodules, that kind of thing.
+"""
+Installs git hooks, updates them, updates submodules, that kind of thing.
+"""
 
-import subprocess
-import sys
 import os
 import shutil
+import subprocess
+import sys
 import time
 from pathlib import Path
 from typing import List
 
 SOLUTION_PATH = Path("..") / "SpaceStation14.sln"
 # If this doesn't match the saved version we overwrite them all.
-CURRENT_HOOKS_VERSION = "2"
+CURRENT_HOOKS_VERSION = "3"
 QUIET = len(sys.argv) == 2 and sys.argv[1] == "--quiet"
 
 
@@ -25,12 +27,10 @@ def run_command(command: List[str], capture: bool = False) -> subprocess.Complet
 
     sys.stdout.flush()
 
-    completed = None
-
     if capture:
-        completed = subprocess.run(command, cwd="..", stdout=subprocess.PIPE)
+        completed = subprocess.run(command, stdout=subprocess.PIPE, text=True)
     else:
-        completed = subprocess.run(command, cwd="..")
+        completed = subprocess.run(command)
 
     if completed.returncode != 0:
         print("Error: command exited with code {}!".format(completed.returncode))
@@ -43,7 +43,7 @@ def update_submodules():
     Updates all submodules.
     """
 
-    if ('GITHUB_ACTIONS' in os.environ):
+    if 'GITHUB_ACTIONS' in os.environ:
         return
 
     if os.path.isfile("DISABLE_SUBMODULE_AUTOUPDATE"):
@@ -76,22 +76,21 @@ def install_hooks():
                     print("No hooks change detected.")
                 return
 
-    with open("INSTALLED_HOOKS_VERSION", "w") as f:
-        f.write(CURRENT_HOOKS_VERSION)
-
     print("Hooks need updating.")
 
-    hooks_target_dir = Path("..")/".git"/"hooks"
+    hooks_target_dir = Path(run_command(["git", "rev-parse", "--git-path", "hooks"], True).stdout.strip())
     hooks_source_dir = Path("hooks")
 
     # Clear entire tree since we need to kill deleted files too.
-    for filename in os.listdir(str(hooks_target_dir)):
-        os.remove(str(hooks_target_dir/filename))
+    for filename in os.listdir(hooks_target_dir):
+        os.remove(hooks_target_dir / filename)
 
-    for filename in os.listdir(str(hooks_source_dir)):
+    for filename in os.listdir(hooks_source_dir):
         print("Copying hook {}".format(filename))
-        shutil.copy2(str(hooks_source_dir/filename),
-                        str(hooks_target_dir/filename))
+        shutil.copy2(hooks_source_dir / filename, hooks_target_dir / filename)
+
+    with open("INSTALLED_HOOKS_VERSION", "w") as f:
+        f.write(CURRENT_HOOKS_VERSION)
 
 
 def reset_solution():
@@ -107,8 +106,7 @@ def reset_solution():
 
 def check_for_zip_download():
     # Check if .git exists,
-    cur_dir = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
-    if not os.path.isdir(os.path.join(cur_dir, ".git")):
+    if run_command(["git", "rev-parse"]).returncode != 0:
         print("It appears that you downloaded this repository directly from GitHub. (Using the .zip download option) \n"
               "When downloading straight from GitHub, it leaves out important information that git needs to function. "
               "Such as information to download the engine or even the ability to even be able to create contributions. \n"
index c5662445c272597c24ed2457d4de771cafd28bfa..ee4309de1dad5140010d735de3372fc1f67d28cd 100755 (executable)
@@ -1,10 +1,10 @@
 #!/bin/bash
 
-gitroot=`git rev-parse --show-toplevel`
+gitroot=$(git rev-parse --show-toplevel)
 
-cd "$gitroot/BuildChecker"
+cd "$gitroot/BuildChecker" || exit
 
-if [[ `uname` == MINGW* || `uname` == CYGWIN* ]]; then
+if [[ $(uname) == MINGW* || $(uname) == CYGWIN* ]]; then
     # Windows
     py -3 git_helper.py --quiet
 else
index 85fe61d966c4ecf4ec03e7c6faaad12f965e9bc2..5cf3d91120d54c822a480c3803899d76352124b5 100755 (executable)
@@ -1,5 +1,5 @@
 #!/bin/bash
 
 # Just call post-checkout since it does the same thing.
-gitroot=`git rev-parse --show-toplevel`
-bash "$gitroot/.git/hooks/post-checkout"
+gitroot=$(git rev-parse --git-path hooks)
+bash "$gitroot/post-checkout"