| Index: git_cl.py | 
| diff --git a/git_cl.py b/git_cl.py | 
| index a08141bbe2967eff217db328b9ce8e9c02c856c2..3a98f8794164328d83efcef7ce138b2c5217b18e 100755 | 
| --- a/git_cl.py | 
| +++ b/git_cl.py | 
| @@ -2314,6 +2314,27 @@ class _GerritChangelistImpl(_ChangelistCodereviewBase): | 
| hostname=parsed_url.netloc) | 
| return None | 
|  | 
| +  def _GerritCommitMsgHookCheck(self, offer_removal): | 
| +    hook = os.path.join(settings.GetRoot(), '.git', 'hooks', 'commit-msg') | 
| +    if not os.path.exists(hook): | 
| +      return | 
| +    # Crude attempt to distinguish Gerrit Codereview hook from potentially | 
| +    # custom developer made one. | 
| +    data = gclient_utils.FileRead(hook) | 
| +    if not('From Gerrit Code Review' in data and 'add_ChangeId()' in data): | 
| +      return | 
| +    print('Warning: you have Gerrit commit-msg hook installed.\n' | 
| +          'It is not neccessary for uploading with git cl in squash mode, ' | 
| +          'and may interfere with it in subtle ways.\n' | 
| +          'We recommend you remove the commit-msg hook.') | 
| +    if offer_removal: | 
| +      reply = ask_for_data('Do you want to remove it now? [Yes/No]') | 
| +      if reply.lower().startswith('y'): | 
| +        gclient_utils.rm_file_or_tree(hook) | 
| +        print('Gerrit commit-msg hook removed.') | 
| +      else: | 
| +        print('OK, will keep Gerrit commit-msg hook in place.') | 
| + | 
| def CMDUploadChange(self, options, args, change): | 
| """Upload the current branch to Gerrit.""" | 
| if options.squash and options.no_squash: | 
| @@ -2329,6 +2350,7 @@ class _GerritChangelistImpl(_ChangelistCodereviewBase): | 
| pending_prefix='') | 
|  | 
| if options.squash: | 
| +      self._GerritCommitMsgHookCheck(offer_removal=not options.force) | 
| if not self.GetIssue(): | 
| # TODO(tandrii): deperecate this after 2016Q2.  Backwards compatibility | 
| # with shadow branch, which used to contain change-id for a given | 
|  |