diff options
author | Andreas Sandberg <andreas.sandberg@arm.com> | 2016-05-09 11:32:11 +0100 |
---|---|---|
committer | Andreas Sandberg <andreas.sandberg@arm.com> | 2016-05-09 11:32:11 +0100 |
commit | 5131a768c38eed19de983e15bbbfb69967f01091 (patch) | |
tree | b5259bf14c1fdc7435649cce24f477f9a5b1652a /SConstruct | |
parent | 8b412fcfd6e7a97e4fdf184bf177e2418f2a9705 (diff) | |
download | gem5-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-x | SConstruct | 36 |
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() ################################################### # |