@ -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 ) :