scons: Detect and remove broken git hook symlinks.
authorGabe Black <gabeblack@google.com>
Sat, 25 Mar 2017 09:06:39 +0000 (02:06 -0700)
committerGabe Black <gabeblack@google.com>
Sun, 26 Mar 2017 17:33:57 +0000 (17:33 +0000)
When installing a git hook, it's possible for the hook to not "exist" if it's
actually a symlink which points to a file that doesn't exist. Trying to create
a new symlink in its place without first removing the old one causes a build
failure in these cases.

If the hook doesn't "exist" but is still a link, that means it's actually a
broken link and should be deleted by the hook installation function before any
new symlink is created.

Change-Id: I59aa51feb5bd74ca33e51e89cde2ceabeb41bd76
Reviewed-on: https://gem5-review.googlesource.com/2540
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>

SConstruct

index b4ab0bfb91a226195acc98fa799a5e56d8262854..4593fdd4b9fe39dc9e7b29ae91a2155635c33432 100755 (executable)
@@ -393,6 +393,10 @@ def install_git_style_hooks():
             print "Warning: Can't install %s, hook already exists." % hook_name
             return
 
+        if hook.islink():
+            print "Warning: Removing broken symlink for hook %s." % hook_name
+            os.unlink(hook.get_abspath())
+
         if not git_hooks.exists():
             mkdir(git_hooks.get_abspath())