@ -373,8 +373,10 @@ class Dependency(gclient_utils.WorkItem, DependencySettings):
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    self . _dependencies  =  [ ] 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    # Keep track of original values, before post-processing (e.g. deps_os). 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    self . _orig_dependencies  =  [ ] 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    self . _orig_deps_hooks  =  [ ] 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    self . _vars  =  { } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    self . _os_dependencies  =  { } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    self . _os_deps_hooks  =  { } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    # A cache of the files affected by the current operation, necessary for 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    # hooks. 
 
			
		 
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
			
			 
			 
			
				@ -784,8 +786,15 @@ class Dependency(gclient_utils.WorkItem, DependencySettings):
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    for  hook  in  local_scope . get ( ' hooks ' ,  [ ] ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      if  hook . get ( ' name ' ,  ' ' )  not  in  hook_names_to_suppress : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        hooks_to_run . append ( hook ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    orig_hooks  =  gclient_utils . freeze ( hooks_to_run ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    if  ' hooks_os '  in  local_scope  and  target_os_list : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      hooks_os  =  local_scope [ ' hooks_os ' ] 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      # Keep original contents of hooks_os for flatten. 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      for  hook_os ,  os_hooks  in  hooks_os . iteritems ( ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        self . _os_deps_hooks [ hook_os ]  =  [ 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            Hook . from_dict ( hook ,  variables = self . _vars )  for  hook  in  os_hooks ] 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      # Specifically append these to ensure that hooks_os run after hooks. 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      for  the_target_os  in  target_os_list : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        the_target_os_hooks  =  hooks_os . get ( the_target_os ,  [ ] ) 
 
			
		 
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
			
			 
			 
			
				@ -802,7 +811,8 @@ class Dependency(gclient_utils.WorkItem, DependencySettings):
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				          local_scope . get ( ' pre_deps_hooks ' ,  [ ] ) ] 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    self . add_dependencies_and_close ( 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        deps_to_add ,  hooks_to_run ,  orig_deps_to_add = orig_deps_to_add ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        deps_to_add ,  hooks_to_run ,  orig_deps_to_add = orig_deps_to_add , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        orig_hooks = orig_hooks ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    logging . info ( ' ParseDepsFile( %s ) done '  %  self . name ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  def  _get_option ( self ,  attr ,  default ) : 
 
			
		 
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
			
			 
			 
			
				@ -812,7 +822,7 @@ class Dependency(gclient_utils.WorkItem, DependencySettings):
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    return  getattr ( obj . _options ,  attr ,  default ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  def  add_dependencies_and_close ( 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      self ,  deps_to_add ,  hooks ,  orig_deps_to_add = None  ): 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      self ,  deps_to_add ,  hooks ,  orig_deps_to_add = None , orig_hooks = None  ): 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    """ Adds the dependencies, hooks and mark the parsing as done. """ 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    for  dep  in  deps_to_add : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      if  dep . verify_validity ( ) : 
 
			
		 
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
			
			 
			 
			
				@ -820,7 +830,9 @@ class Dependency(gclient_utils.WorkItem, DependencySettings):
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    for  dep  in  ( orig_deps_to_add  or  deps_to_add ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      self . add_orig_dependency ( dep ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    self . _mark_as_parsed ( 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        [ Hook . from_dict ( h ,  variables = self . _vars )  for  h  in  hooks ] ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        [ Hook . from_dict ( h ,  variables = self . _vars )  for  h  in  hooks ] , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        orig_hooks = [ Hook . from_dict ( h ,  variables = self . _vars ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                    for  h  in  orig_hooks  or  hooks ] ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  def  findDepsFromNotAllowedHosts ( self ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    """ Returns a list of depenecies from not allowed hosts. 
 
			
		 
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
			
			 
			 
			
				@ -1030,8 +1042,9 @@ class Dependency(gclient_utils.WorkItem, DependencySettings):
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    self . _orig_dependencies . append ( new_dep ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  @gclient_utils.lockedmethod 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  def  _mark_as_parsed ( self ,  new_hooks  ): 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  def  _mark_as_parsed ( self ,  new_hooks , orig_hooks = None  ): 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    self . _deps_hooks . extend ( new_hooks ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    self . _orig_deps_hooks . extend ( orig_hooks  or  new_hooks ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    self . _deps_parsed  =  True 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  @property 
 
			
		 
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
			
			 
			 
			
				@ -1054,6 +1067,16 @@ class Dependency(gclient_utils.WorkItem, DependencySettings):
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  def  deps_hooks ( self ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    return  tuple ( self . _deps_hooks ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  @property 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  @gclient_utils.lockedmethod 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  def  orig_deps_hooks ( self ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    return  tuple ( self . _orig_deps_hooks ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  @property 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  @gclient_utils.lockedmethod 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  def  os_deps_hooks ( self ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    return  dict ( self . _os_deps_hooks ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  @property 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  @gclient_utils.lockedmethod 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  def  pre_deps_hooks ( self ) : 
 
			
		 
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
			
			 
			 
			
				@ -1702,12 +1725,14 @@ def CMDflatten(parser, args):
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  deps  =  { } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  deps_os  =  { } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  hooks  =  [ ] 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  hooks_os  =  { } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  pre_deps_hooks  =  [ ] 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  unpinned_deps  =  { } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  for  solution  in  client . dependencies : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    _FlattenSolution ( 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        solution ,  deps ,  deps_os ,  hooks ,  pre_deps_hooks ,  unpinned_deps ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        solution ,  deps ,  deps_os ,  hooks ,  hooks_os ,  pre_deps_hooks , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        unpinned_deps ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  if  options . require_pinned_revisions  and  unpinned_deps : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    sys . stderr . write ( ' The following dependencies are not pinned: \n ' ) 
 
			
		 
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
			
			 
			 
			
				@ -1722,6 +1747,7 @@ def CMDflatten(parser, args):
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    _DepsOsToLines ( deps_os )  + 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    _HooksToLines ( ' hooks ' ,  hooks )  + 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    _HooksToLines ( ' pre_deps_hooks ' ,  pre_deps_hooks )  + 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    _HooksOsToLines ( hooks_os )  + 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    [ ' ' ]   # Ensure newline at end of file. 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
			
			 
			 
			
				@ -1735,7 +1761,7 @@ def CMDflatten(parser, args):
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				def  _FlattenSolution ( 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    solution ,  deps ,  deps_os ,  hooks ,   pre_deps_hooks,  unpinned_deps ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    solution ,  deps ,  deps_os ,  hooks ,  hooks_os,   pre_deps_hooks,  unpinned_deps ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  """ Visits a solution in order to flatten it (see CMDflatten). 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  Arguments : 
 
			
		 
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
			
			 
			 
			
				@ -1747,6 +1773,8 @@ def _FlattenSolution(
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    deps_os  ( dict  of  os  name  - >  dep  name  - >  Dependency ) :  same  as  above , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        for  OS - specific  deps 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    hooks  ( list  of  ( Dependency ,  hook ) ) :  will  be  filled  with  flattened  hooks 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    hooks_os  ( dict  of  os  name  - >  list  of  ( Dependency ,  hook ) ) :  same  as  above , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        for  OS - specific  hooks 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    pre_deps_hooks  ( list  of  ( Dependency ,  hook ) ) :  will  be  filled  with  flattened 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        pre_deps_hooks 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    unpinned_deps  ( dict  of  name  - >  Dependency ) :  will  be  filled  with  unpinned 
 
			
		 
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
			
			 
			 
			
				@ -1754,11 +1782,14 @@ def _FlattenSolution(
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  """ 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  logging . debug ( ' _FlattenSolution( %r ) ' ,  solution ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  _FlattenDep ( solution ,  deps ,  deps_os ,  hooks ,  pre_deps_hooks ,  unpinned_deps ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  _FlattenRecurse ( solution ,  deps ,  deps_os ,  hooks ,  pre_deps_hooks ,  unpinned_deps ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  _FlattenDep ( solution ,  deps ,  deps_os ,  hooks ,  hooks_os ,  pre_deps_hooks , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				              unpinned_deps ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  _FlattenRecurse ( solution ,  deps ,  deps_os ,  hooks ,  hooks_os ,  pre_deps_hooks , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                  unpinned_deps ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				def  _FlattenDep ( dep ,  deps ,  deps_os ,  hooks ,  pre_deps_hooks ,  unpinned_deps ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				def  _FlattenDep ( dep ,  deps ,  deps_os ,  hooks ,  hooks_os ,  pre_deps_hooks , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                unpinned_deps ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  """ Visits a dependency in order to flatten it (see CMDflatten). 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  Arguments : 
 
			
		 
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
			
			 
			 
			
				@ -1768,6 +1799,7 @@ def _FlattenDep(dep, deps, deps_os, hooks, pre_deps_hooks, unpinned_deps):
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    deps  ( dict ) :  will  be  filled  with  flattened  deps 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    deps_os  ( dict ) :  will  be  filled  with  flattened  deps_os 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    hooks  ( list ) :  will  be  filled  with  flattened  hooks 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    hooks_os  ( dict ) :  will  be  filled  with  flattened  hooks_os 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    pre_deps_hooks  ( list ) :  will  be  filled  with  flattened  pre_deps_hooks 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    unpinned_deps  ( dict ) :  will  be  filled  with  unpinned  deps 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  """ 
 
			
		 
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
			
			 
			 
			
				@ -1782,15 +1814,19 @@ def _FlattenDep(dep, deps, deps_os, hooks, pre_deps_hooks, unpinned_deps):
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  deps_by_name  =  dict ( ( d . name ,  d )  for  d  in  dep . dependencies ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  for  recurse_dep_name  in  ( dep . recursedeps  or  [ ] ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    _FlattenRecurse ( 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        deps_by_name [ recurse_dep_name ] ,  deps ,  deps_os ,  hooks ,  pre_deps_ hooks, 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         unpinned_deps) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        deps_by_name [ recurse_dep_name ] ,  deps ,  deps_os ,  hooks ,   hooks_o s, 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        pre_deps_hooks,   unpinned_deps) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  # TODO(phajdan.jr): also handle hooks_os. 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  hooks . extend ( [ ( dep ,  hook )  for  hook  in  dep .  deps_hooks] ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  hooks . extend ( [ ( dep ,  hook )  for  hook  in  dep . orig_ deps_hooks] ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  pre_deps_hooks . extend ( [ ( dep ,  hook )  for  hook  in  dep . pre_deps_hooks ] ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  for  hook_os ,  os_hooks  in  dep . os_deps_hooks . iteritems ( ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    hooks_os . setdefault ( hook_os ,  [ ] ) . extend ( [ ( dep ,  hook )  for  hook  in  os_hooks ] ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				def  _FlattenRecurse ( dep ,  deps ,  deps_os ,  hooks ,  pre_deps_hooks ,  unpinned_deps ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				def  _FlattenRecurse ( dep ,  deps ,  deps_os ,  hooks ,  hooks_os ,  pre_deps_hooks , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                    unpinned_deps ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  """ Helper for flatten that recurses into |dep| ' s dependencies. 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  Arguments : 
 
			
		 
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
			
			 
			 
			
				@ -1800,14 +1836,15 @@ def _FlattenRecurse(dep, deps, deps_os, hooks, pre_deps_hooks, unpinned_deps):
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    deps  ( dict ) :  will  be  filled  with  flattened  deps 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    deps_os  ( dict ) :  will  be  filled  with  flattened  deps_os 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    hooks  ( list ) :  will  be  filled  with  flattened  hooks 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    hooks_os  ( dict ) :  will  be  filled  with  flattened  hooks_os 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    pre_deps_hooks  ( list ) :  will  be  filled  with  flattened  pre_deps_hooks 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    unpinned_deps  ( dict ) :  will  be  filled  with  unpinned  deps 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  """ 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  logging . debug ( ' _FlattenRecurse( %r ) ' ,  dep ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  # TODO(phajdan.jr): also handle deps_os. 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  for  sub_dep  in  dep . orig_dependencies : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    _FlattenDep ( sub_dep ,  deps ,  deps_os ,  hooks ,  pre_deps_hooks ,  unpinned_deps ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    _FlattenDep ( sub_dep ,  deps ,  deps_os ,  hooks ,  hooks_os ,  pre_deps_hooks , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                unpinned_deps ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				def  _AddDep ( dep ,  deps ,  unpinned_deps ) : 
 
			
		 
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
			
			 
			 
			
				@ -1903,6 +1940,32 @@ def _HooksToLines(name, hooks):
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  return  s 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				def  _HooksOsToLines ( hooks_os ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  """ Converts |hooks| list to list of lines for output. """ 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  s  =  [ ' hooks_os =  { ' ] 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  for  hook_os ,  os_hooks  in  hooks_os . iteritems ( ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    s . append ( '    " %s " :  { '  %  hook_os ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    for  dep ,  hook  in  os_hooks : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      s . extend ( [ 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				          '     #  %s '  %  dep . hierarchy ( include_url = False ) , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				          '      { ' , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      ] ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      if  hook . name  is  not  None : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        s . append ( '        " name " :  " %s " , '  %  hook . name ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      if  hook . pattern  is  not  None : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        s . append ( '        " pattern " :  " %s " , '  %  hook . pattern ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      s . extend ( 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				          # Hooks run in the parent directory of their dep. 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				          [ '        " cwd " :  " %s " , '  %  os . path . normpath ( os . path . dirname ( dep . name ) ) ]  + 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				          [ '        " action " : [ ' ]  + 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				          [ '            " %s " , '  %  arg  for  arg  in  hook . action ]  + 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				          [ '       ] ' ,  '     }, ' ,  ' ' ] 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    s . extend ( [ '   }, ' ,  ' ' ] ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  s . extend ( [ ' } ' ,  ' ' ] ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  return  s 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				def  CMDgrep ( parser ,  args ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  """ Greps through git repos managed by gclient.