| Index: checkout.py
 | 
| diff --git a/checkout.py b/checkout.py
 | 
| index da2d86f73a9ab4a40f9371faf894f043d4f9e492..a303b338aca4d2b35ff0caea8c81f3536b8c39dd 100644
 | 
| --- a/checkout.py
 | 
| +++ b/checkout.py
 | 
| @@ -22,13 +22,6 @@ import scm
 | 
|  import subprocess2
 | 
|  
 | 
|  
 | 
| -# Default timeout of 15 minutes.
 | 
| -GLOBAL_TIMEOUT = 15*60
 | 
| -# Use a larger timeout for checkout since it can be a genuinely slower
 | 
| -# operation.
 | 
| -FETCH_TIMEOUT = 30*60
 | 
| -
 | 
| -
 | 
|  def get_code_review_setting(path, key,
 | 
|      codereview_settings_file='codereview.settings'):
 | 
|    """Parses codereview.settings and return the value for the key if present.
 | 
| @@ -204,8 +197,7 @@ class RawCheckout(CheckoutBase):
 | 
|                        cmd,
 | 
|                        stdin=p.get(False),
 | 
|                        stderr=subprocess2.STDOUT,
 | 
| -                      cwd=self.project_path,
 | 
| -                      timeout=GLOBAL_TIMEOUT))
 | 
| +                      cwd=self.project_path))
 | 
|              elif p.is_new and not os.path.exists(filepath):
 | 
|                # There is only a header. Just create the file.
 | 
|                open(filepath, 'w').close()
 | 
| @@ -284,10 +276,8 @@ class SvnMixIn(object):
 | 
|      """Runs svn and throws an exception if the command failed."""
 | 
|      kwargs.setdefault('cwd', self.project_path)
 | 
|      kwargs.setdefault('stdout', self.VOID)
 | 
| -    kwargs.setdefault('timeout', GLOBAL_TIMEOUT)
 | 
|      return subprocess2.check_call_out(
 | 
| -        self._add_svn_flags(args, False),
 | 
| -        **kwargs)
 | 
| +        self._add_svn_flags(args, False), **kwargs)
 | 
|  
 | 
|    def _check_output_svn(self, args, credentials=True, **kwargs):
 | 
|      """Runs svn and throws an exception if the command failed.
 | 
| @@ -298,7 +288,6 @@ class SvnMixIn(object):
 | 
|      return subprocess2.check_output(
 | 
|          self._add_svn_flags(args, True, credentials),
 | 
|          stderr=subprocess2.STDOUT,
 | 
| -        timeout=GLOBAL_TIMEOUT,
 | 
|          **kwargs)
 | 
|  
 | 
|    @staticmethod
 | 
| @@ -398,10 +387,7 @@ class SvnCheckout(CheckoutBase, SvnMixIn):
 | 
|                ]
 | 
|                stdout.append(
 | 
|                    subprocess2.check_output(
 | 
| -                      cmd,
 | 
| -                      stdin=p.get(False),
 | 
| -                      cwd=self.project_path,
 | 
| -                      timeout=GLOBAL_TIMEOUT))
 | 
| +                    cmd, stdin=p.get(False), cwd=self.project_path))
 | 
|              elif p.is_new and not os.path.exists(filepath):
 | 
|                # There is only a header. Just create the file if it doesn't
 | 
|                # exist.
 | 
| @@ -497,14 +483,11 @@ class SvnCheckout(CheckoutBase, SvnMixIn):
 | 
|        logging.info(
 | 
|            'Directory %s is not present, checking it out.' % self.project_path)
 | 
|        self._check_call_svn(
 | 
| -          ['checkout', self.svn_url, self.project_path] + flags,
 | 
| -          cwd=None,
 | 
| -          timeout=FETCH_TIMEOUT)
 | 
| +          ['checkout', self.svn_url, self.project_path] + flags, cwd=None)
 | 
|      else:
 | 
| -      # TODO(maruel): This command will shell out without a timeout.
 | 
|        scm.SVN.Revert(self.project_path, no_ignore=True)
 | 
|        # Revive files that were deleted in scm.SVN.Revert().
 | 
| -      self._check_call_svn(['update', '--force'] + flags, timeout=FETCH_TIMEOUT)
 | 
| +      self._check_call_svn(['update', '--force'] + flags)
 | 
|      return self._get_revision()
 | 
|  
 | 
|    def _get_revision(self):
 | 
| @@ -554,7 +537,8 @@ class GitCheckoutBase(CheckoutBase):
 | 
|        try:
 | 
|          revision = self._check_output_git(['rev-parse', revision])
 | 
|        except subprocess.CalledProcessError:
 | 
| -        self._fetch_remote()
 | 
| +        self._check_call_git(
 | 
| +            ['fetch', self.remote, self.remote_branch, '--quiet'])
 | 
|          revision = self._check_output_git(['rev-parse', revision])
 | 
|        self._check_call_git(['checkout', '--force', '--quiet', revision])
 | 
|      else:
 | 
| @@ -665,23 +649,18 @@ class GitCheckoutBase(CheckoutBase):
 | 
|    def _check_call_git(self, args, **kwargs):
 | 
|      kwargs.setdefault('cwd', self.project_path)
 | 
|      kwargs.setdefault('stdout', self.VOID)
 | 
| -    kwargs.setdefault('timeout', GLOBAL_TIMEOUT)
 | 
| -    return subprocess2.check_call_out(
 | 
| -        ['git'] + args, **kwargs)
 | 
| +    return subprocess2.check_call_out(['git'] + args, **kwargs)
 | 
|  
 | 
|    def _call_git(self, args, **kwargs):
 | 
|      """Like check_call but doesn't throw on failure."""
 | 
|      kwargs.setdefault('cwd', self.project_path)
 | 
|      kwargs.setdefault('stdout', self.VOID)
 | 
| -    return subprocess2.call(['git'] + args, timeout=GLOBAL_TIMEOUT, **kwargs)
 | 
| +    return subprocess2.call(['git'] + args, **kwargs)
 | 
|  
 | 
|    def _check_output_git(self, args, **kwargs):
 | 
|      kwargs.setdefault('cwd', self.project_path)
 | 
|      return subprocess2.check_output(
 | 
| -        ['git'] + args,
 | 
| -        stderr=subprocess2.STDOUT,
 | 
| -        timeout=GLOBAL_TIMEOUT,
 | 
| -        **kwargs)
 | 
| +        ['git'] + args, stderr=subprocess2.STDOUT, **kwargs)
 | 
|  
 | 
|    def _branches(self):
 | 
|      """Returns the list of branches and the active one."""
 | 
| @@ -716,9 +695,7 @@ class GitCheckout(GitCheckoutBase):
 | 
|    """Git checkout implementation."""
 | 
|    def _fetch_remote(self):
 | 
|      # git fetch is always verbose even with -q -q so redirect its output.
 | 
| -    self._check_call_git(
 | 
| -        ['fetch', self.remote, self.remote_branch, '--quiet'],
 | 
| -        timeout=FETCH_TIMEOUT)
 | 
| +    self._check_output_git(['fetch', self.remote, self.remote_branch])
 | 
|  
 | 
|  
 | 
|  class ReadOnlyCheckout(object):
 | 
| 
 |