Index: git_cl.py |
diff --git a/git_cl.py b/git_cl.py |
index 3cb66231ff896fba995c2e60c8d77b250fe021ce..5e166324f10d66ba82eb5703c94eeca4f17692b5 100755 |
--- a/git_cl.py |
+++ b/git_cl.py |
@@ -1038,6 +1038,12 @@ def urlretrieve(source, destination): |
f.write(urllib2.urlopen(source).read()) |
+def hasSheBang(fname): |
+ """Checks fname is a #! script.""" |
+ with open(fname) as f: |
+ return f.read(2).startswith('#!') |
+ |
+ |
def DownloadHooks(force): |
"""downloads hooks |
@@ -1046,21 +1052,27 @@ def DownloadHooks(force): |
""" |
if not settings.GetIsGerrit(): |
return |
- server_url = settings.GetDefaultServerUrl() |
- src = '%s/tools/hooks/commit-msg' % server_url |
+ src = 'https://gerrit-review.googlesource.com/tools/hooks/commit-msg' |
dst = os.path.join(settings.GetRoot(), '.git', 'hooks', 'commit-msg') |
if not os.access(dst, os.X_OK): |
if os.path.exists(dst): |
if not force: |
return |
- os.remove(dst) |
try: |
urlretrieve(src, dst) |
+ if not hasSheBang(dst): |
+ DieWithError('Not a script: %s\n' |
+ 'You need to download from\n%s\n' |
+ 'into .git/hooks/commit-msg and ' |
+ 'chmod +x .git/hooks/commit-msg' % (dst, src)) |
os.chmod(dst, stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR) |
except Exception: |
if os.path.exists(dst): |
os.remove(dst) |
- DieWithError('\nFailed to download hooks from %s' % src) |
+ DieWithError('\nFailed to download hooks.\n' |
+ 'You need to download from\n%s\n' |
+ 'into .git/hooks/commit-msg and ' |
+ 'chmod +x .git/hooks/commit-msg' % src) |
@subcommand.usage('[repo root containing codereview.settings]') |