Index: git_cl.py |
=================================================================== |
--- git_cl.py (revision 121410) |
+++ git_cl.py (working copy) |
@@ -11,9 +11,11 @@ |
import optparse |
import os |
import re |
+import stat |
import sys |
import textwrap |
import urlparse |
+import urllib |
import urllib2 |
try: |
@@ -155,6 +157,8 @@ |
cr_settings_file = FindCodereviewSettingsFile() |
if cr_settings_file: |
LoadCodereviewSettingsFromFile(cr_settings_file) |
+ self.updated = True |
+ DownloadHooks(False) |
self.updated = True |
def GetDefaultServerUrl(self, error_ok=False): |
@@ -734,11 +738,6 @@ |
if 'GERRIT_HOST' in keyvals and 'GERRIT_PORT' in keyvals: |
RunGit(['config', 'gerrit.host', keyvals['GERRIT_HOST']]) |
RunGit(['config', 'gerrit.port', keyvals['GERRIT_PORT']]) |
- # Install the standard commit-msg hook. |
- RunCommand(['scp', '-p', '-P', keyvals['GERRIT_PORT'], |
- '%s:hooks/commit-msg' % keyvals['GERRIT_HOST'], |
- os.path.join(settings.GetRoot(), |
- '.git', 'hooks', 'commit-msg')]) |
if 'PUSH_URL_CONFIG' in keyvals and 'ORIGIN_URL_CONFIG' in keyvals: |
#should be of the form |
@@ -748,6 +747,31 @@ |
keyvals['ORIGIN_URL_CONFIG']]) |
+def DownloadHooks(force): |
+ """downloads hooks |
+ |
+ Args: |
+ force: True to update hooks. False to install hooks if not present. |
+ """ |
+ if not settings.GetIsGerrit(): |
+ return |
+ server_url = settings.GetDefaultServerUrl() |
+ src = '%s/tools/hooks/commit-msg' % server_url |
+ 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: |
+ urllib.urlretrieve(src, dst) |
+ 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) |
+ |
+ |
@usage('[repo root containing codereview.settings]') |
def CMDconfig(parser, args): |
"""edit configuration for this tree""" |
@@ -755,6 +779,7 @@ |
_, args = parser.parse_args(args) |
if len(args) == 0: |
GetCodereviewSettingsInteractively() |
+ DownloadHooks(True) |
return 0 |
url = args[0] |
@@ -763,6 +788,7 @@ |
# Load code review settings and download hooks (if available). |
LoadCodereviewSettingsFromFile(urllib2.urlopen(url)) |
+ DownloadHooks(True) |
return 0 |