summaryrefslogtreecommitdiff
path: root/SConstruct
diff options
context:
space:
mode:
authorAndreas Sandberg <andreas.sandberg@arm.com>2016-05-09 11:32:11 +0100
committerAndreas Sandberg <andreas.sandberg@arm.com>2016-05-09 11:32:11 +0100
commit5131a768c38eed19de983e15bbbfb69967f01091 (patch)
treeb5259bf14c1fdc7435649cce24f477f9a5b1652a /SConstruct
parent8b412fcfd6e7a97e4fdf184bf177e2418f2a9705 (diff)
downloadgem5-5131a768c38eed19de983e15bbbfb69967f01091.tar.xz
scons: Rewrite git style hook installer
The SCons script currently assumes that .git is a proper directory with all git meta data. This isn't the case if the working directory was checked out using git worktrees. In such case .git is a file with meta data telling git where the repository data is stored. This changeset updates changes the SConstruct file to rely on git rev-parse to get the real git directory. Change-Id: I3d0475eabc12e868193797067a88e540a9b6e927 Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-by: Curtis Dunham <curtis.dunham@arm.com>
Diffstat (limited to 'SConstruct')
-rwxr-xr-xSConstruct36
1 files changed, 28 insertions, 8 deletions
diff --git a/SConstruct b/SConstruct
index 5e4eca940..5b3ab1188 100755
--- a/SConstruct
+++ b/SConstruct
@@ -260,7 +260,6 @@ main.AppendENVPath('PYTHONPATH', extra_python_paths)
########################################################################
hgdir = main.root.Dir(".hg")
-gitdir = main.root.Dir(".git")
style_message = """
@@ -368,11 +367,21 @@ if not ignore_style and hgdir.exists():
print "Error updating", hgrc_path
sys.exit(1)
-# Try to wire up git to the style hooks
-git_pre_commit_hook = gitdir.File("hooks/pre-commit")
-if not ignore_style and gitdir.exists() and not git_pre_commit_hook.exists():
+def install_git_style_hooks():
+ try:
+ gitdir = Dir(readCommand(
+ ["git", "rev-parse", "--git-dir"]).strip("\n"))
+ except Exception, e:
+ print "Warning: Failed to find git repo directory: %s" % e
+ return
+
+ git_hooks = gitdir.Dir("hooks")
+ git_pre_commit_hook = git_hooks.File("pre-commit")
git_style_script = File("util/git-pre-commit.py")
+ if git_pre_commit_hook.exists():
+ return
+
print git_style_message,
try:
raw_input()
@@ -380,15 +389,26 @@ if not ignore_style and gitdir.exists() and not git_pre_commit_hook.exists():
print "Input exception, exiting scons.\n"
sys.exit(1)
- try:
- rel_style_script = os.path.relpath(
+ if not git_hooks.exists():
+ mkdir(git_hooks.get_abspath())
+
+ # Use a relative symlink if the hooks live in the source directory
+ if git_pre_commit_hook.is_under(main.root):
+ script_path = os.path.relpath(
git_style_script.get_abspath(),
git_pre_commit_hook.Dir(".").get_abspath())
- os.symlink(rel_style_script, git_pre_commit_hook.get_abspath())
+ else:
+ script_path = git_style_script.get_abspath()
+
+ try:
+ os.symlink(script_path, git_pre_commit_hook.get_abspath())
except:
print "Error updating git pre-commit hook"
raise
- sys.exit(1)
+
+# Try to wire up git to the style hooks
+if not ignore_style and main.root.Entry(".git").exists():
+ install_git_style_hooks()
###################################################
#