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>
This commit is contained in:
parent
8b412fcfd6
commit
5131a768c3
1 changed files with 28 additions and 8 deletions
36
SConstruct
36
SConstruct
|
@ -260,7 +260,6 @@ main.AppendENVPath('PYTHONPATH', extra_python_paths)
|
||||||
########################################################################
|
########################################################################
|
||||||
|
|
||||||
hgdir = main.root.Dir(".hg")
|
hgdir = main.root.Dir(".hg")
|
||||||
gitdir = main.root.Dir(".git")
|
|
||||||
|
|
||||||
|
|
||||||
style_message = """
|
style_message = """
|
||||||
|
@ -368,11 +367,21 @@ if not ignore_style and hgdir.exists():
|
||||||
print "Error updating", hgrc_path
|
print "Error updating", hgrc_path
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
# Try to wire up git to the style hooks
|
def install_git_style_hooks():
|
||||||
git_pre_commit_hook = gitdir.File("hooks/pre-commit")
|
try:
|
||||||
if not ignore_style and gitdir.exists() and not git_pre_commit_hook.exists():
|
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")
|
git_style_script = File("util/git-pre-commit.py")
|
||||||
|
|
||||||
|
if git_pre_commit_hook.exists():
|
||||||
|
return
|
||||||
|
|
||||||
print git_style_message,
|
print git_style_message,
|
||||||
try:
|
try:
|
||||||
raw_input()
|
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"
|
print "Input exception, exiting scons.\n"
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
try:
|
if not git_hooks.exists():
|
||||||
rel_style_script = os.path.relpath(
|
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_style_script.get_abspath(),
|
||||||
git_pre_commit_hook.Dir(".").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:
|
except:
|
||||||
print "Error updating git pre-commit hook"
|
print "Error updating git pre-commit hook"
|
||||||
raise
|
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()
|
||||||
|
|
||||||
###################################################
|
###################################################
|
||||||
#
|
#
|
||||||
|
|
Loading…
Reference in a new issue