@ -177,16 +177,17 @@ class SvnMixIn(object):
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  # configuration directory is not necessary. 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  non_interactive  =  False 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  def  _add_svn_flags ( self ,  args ,  non_interactive  ): 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  def  _add_svn_flags ( self ,  args ,  non_interactive , credentials = True  ): 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    args  =  [ ' svn ' ]  +  args 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    if  not  self . svn_config . default : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      args . extend ( [ ' --config-dir ' ,  self . svn_config . svn_config_dir ] ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    if  not  self . svn_config . default  or  self . non_interactive  or  non_interactive : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      args . append ( ' --non-interactive ' ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    if  self . commit_user : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      args . extend ( [ ' --username ' ,  self . commit_user ] ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    if  self . commit_pwd : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      args . extend ( [ ' --password ' ,  self . commit_pwd ] ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    if  credentials : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      if  self . commit_user : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        args . extend ( [ ' --username ' ,  self . commit_user ] ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      if  self . commit_pwd : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        args . extend ( [ ' --password ' ,  self . commit_pwd ] ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    return  args 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  def  _check_call_svn ( self ,  args ,  * * kwargs ) : 
 
			
		 
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
			
			 
			 
			
				@ -196,13 +197,14 @@ class SvnMixIn(object):
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    return  subprocess2 . check_call_out ( 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        self . _add_svn_flags ( args ,  False ) ,  * * kwargs ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  def  _check_output_svn ( self ,  args ,  * * kwargs ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  def  _check_output_svn ( self ,  args ,  credentials = True ,  * * kwargs ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    """ Runs svn and throws an exception if the command failed. 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				     Returns  the  output . 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    """ 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    kwargs . setdefault ( ' cwd ' ,  self . project_path ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    return  subprocess2 . check_output ( self . _add_svn_flags ( args ,  True ) ,  * * kwargs ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    return  subprocess2 . check_output ( 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        self . _add_svn_flags ( args ,  True ,  credentials ) ,  * * kwargs ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  @staticmethod 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  def  _parse_svn_info ( output ,  key ) : 
 
			
		 
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
			
			 
			 
			
				@ -248,9 +250,13 @@ class SvnCheckout(CheckoutBase, SvnMixIn):
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    post_processor  =  post_processor  or  [ ] 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    for  p  in  patches : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      try : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        # It is important to use credentials=False otherwise credentials could 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        # leak in the error message. Credentials are not necessary here for the 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        # following commands anyway. 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        stdout  =  ' ' 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        if  p . is_delete : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				          stdout  + =  self . _check_output_svn ( [ ' delete ' ,  p . filename ,  ' --force ' ] ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				          stdout  + =  self . _check_output_svn ( 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				              [ ' delete ' ,  p . filename ,  ' --force ' ] ,  credentials = False ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        else : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				          new  =  not  os . path . exists ( p . filename ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
			
			 
			 
			
				@ -266,7 +272,7 @@ class SvnCheckout(CheckoutBase, SvnMixIn):
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				          for  dir_to_create  in  reversed ( dirs_to_create ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            os . mkdir ( os . path . join ( self . project_path ,  dir_to_create ) ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            stdout  + =  self . _check_output_svn ( 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                [ ' add ' ,  dir_to_create ,  ' --force ' ]  )
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                [ ' add ' ,  dir_to_create ,  ' --force ' ] , credentials = False  )
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				          if  p . is_binary : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            with  open ( os . path . join ( self . project_path ,  p . filename ) ,  ' wb ' )  as  f : 
 
			
		 
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
			
			 
			 
			
				@ -276,21 +282,29 @@ class SvnCheckout(CheckoutBase, SvnMixIn):
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            stdout  + =  subprocess2 . check_output ( 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                cmd ,  stdin = p . get ( ) ,  cwd = self . project_path ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				          if  new : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            stdout  + =  self . _check_output_svn ( [ ' add ' ,  p . filename ,  ' --force ' ] ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            stdout  + =  self . _check_output_svn ( 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                [ ' add ' ,  p . filename ,  ' --force ' ] ,  credentials = False ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				          for  prop  in  p . svn_properties : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            stdout  + =  self . _check_output_svn ( 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                [ ' propset ' ,  prop [ 0 ] ,  prop [ 1 ] ,  p . filename ]  )
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				          for  prop ,  value  in  self . svn_config . auto_props . iteritems ( ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                [ ' propset ' ,  prop [ 0 ] ,  prop [ 1 ] ,  p . filename ] , credentials = False  )
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				          for  prop ,  value s  in  self . svn_config . auto_props . iteritems ( ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            if  fnmatch . fnmatch ( p . filename ,  prop ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				              stdout  + =  self . _check_output_svn ( 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                  [ ' propset ' ]  +  value . split ( ' = ' ,  1 )  +  [ p . filename ] ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				              for  value  in  values . split ( ' ; ' ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                if  ' = '  not  in  value : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                  params  =  [ value ,  ' * ' ] 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                else : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                  params  =  value . split ( ' = ' ,  1 ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                stdout  + =  self . _check_output_svn ( 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                    [ ' propset ' ]  +  params  +  [ p . filename ] ,  credentials = False ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        for  post  in  post_processor : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				          post ( self ,  p ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      except  OSError ,  e : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        raise  PatchApplicationFailed ( p . filename ,  ' %s %s '  %  ( stdout ,  e ) ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      except  subprocess . CalledProcessError ,  e : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        raise  PatchApplicationFailed ( 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            p . filename ,  ' %s %s '  %  ( stdout ,  getattr ( e ,  ' stdout ' ,  ' ' ) ) ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            p . filename , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            ' While running  %s ; \n %s %s '  %  ( 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				              '   ' . join ( e . cmd ) ,  stdout ,  getattr ( e ,  ' stdout ' ,  ' ' ) ) ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  def  commit ( self ,  commit_message ,  user ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    logging . info ( ' Committing patch for  %s '  %  user )