| Index: git_cache.py
 | 
| diff --git a/git_cache.py b/git_cache.py
 | 
| index 753ccde34a46c70c24c9748827311ff0138dbc0e..60dfa1c1fa637b26b2e24556052dfaefac0294c6 100755
 | 
| --- a/git_cache.py
 | 
| +++ b/git_cache.py
 | 
| @@ -38,7 +38,7 @@ except NameError:
 | 
|  class LockError(Exception):
 | 
|    pass
 | 
|  
 | 
| -class RefsHeadsFailedToFetch(Exception):
 | 
| +class ClobberNeeded(Exception):
 | 
|    pass
 | 
|  
 | 
|  class Lockfile(object):
 | 
| @@ -246,7 +246,11 @@ class Mirror(object):
 | 
|        cwd = self.mirror_path
 | 
|  
 | 
|      # Don't run git-gc in a daemon.  Bad things can happen if it gets killed.
 | 
| -    self.RunGit(['config', 'gc.autodetach', '0'], cwd=cwd)
 | 
| +    try:
 | 
| +      self.RunGit(['config', 'gc.autodetach', '0'], cwd=cwd)
 | 
| +    except subprocess.CalledProcessError:
 | 
| +      # Hard error, need to clobber.
 | 
| +      raise ClobberNeeded()
 | 
|  
 | 
|      # Don't combine pack files into one big pack file.  It's really slow for
 | 
|      # repositories, and there's no way to track progress and make sure it's
 | 
| @@ -407,7 +411,7 @@ class Mirror(object):
 | 
|          self.RunGit(fetch_cmd + [spec], cwd=rundir, retry=True)
 | 
|        except subprocess.CalledProcessError:
 | 
|          if spec == '+refs/heads/*:refs/heads/*':
 | 
| -          raise RefsHeadsFailedToFetch
 | 
| +          raise ClobberNeeded()  # Corrupted cache.
 | 
|          logging.warn('Fetch of %s failed' % spec)
 | 
|  
 | 
|    def populate(self, depth=None, shallow=False, bootstrap=False,
 | 
| @@ -426,7 +430,7 @@ class Mirror(object):
 | 
|        tempdir = self._ensure_bootstrapped(depth, bootstrap)
 | 
|        rundir = tempdir or self.mirror_path
 | 
|        self._fetch(rundir, verbose, depth)
 | 
| -    except RefsHeadsFailedToFetch:
 | 
| +    except ClobberNeeded:
 | 
|        # This is a major failure, we need to clean and force a bootstrap.
 | 
|        gclient_utils.rmtree(rundir)
 | 
|        self.print(GIT_CACHE_CORRUPT_MESSAGE)
 | 
| 
 |