@ -16,6 +16,7 @@ $ git commit
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				""" 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				import  ast 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				import  optparse 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				import  os 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				import  re 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				import  sys 
 
			
		 
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
			
			 
			 
			
				@ -80,12 +81,17 @@ def get_solution(gclient_root, dep_path):
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  assert  False ,  ' Could not determine the parent project for  %s '  %  dep_path 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				def  is_git_hash ( revision ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  """ Determines if a given revision is a git hash. """ 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  return  SHA1_RE . match ( revision ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				def  verify_git_revision ( dep_path ,  revision ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  """ Verify that a git revision exists in a repository. """ 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  p  =  Popen ( [ ' git ' ,  ' rev-list ' ,  ' -n ' ,  ' 1 ' ,  revision ] , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            cwd = dep_path ,  stdout = PIPE ,  stderr = PIPE ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  result  =  p . communicate ( ) [ 0 ] . strip ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  if  p . returncode  !=  0  or  not  SHA1_RE. matc  h( result ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  if  p . returncode  !=  0  or  not  is_git_has h( result ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    result  =  None 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  return  result 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
			
			 
			 
			
				@ -156,6 +162,8 @@ def get_git_revision(dep_path, revision):
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    svn_revision  =  revision [ 1 : ] 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  elif  re . search ( ' [a-fA-F] ' ,  revision ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    git_revision  =  verify_git_revision ( dep_path ,  revision ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    if  not  git_revision : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      raise  RuntimeError ( ' Please  \' git fetch origin \'  in  %s '  %  dep_path ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    svn_revision  =  get_svn_revision ( dep_path ,  git_revision ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  elif  len ( revision )  >  6 : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    git_revision  =  verify_git_revision ( dep_path ,  revision ) 
 
			
		 
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
			
			 
			 
			
				@ -272,8 +280,12 @@ def generate_commit_message(deps_section, dep_path, dep_name, new_rev):
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  old_rev_short  =  short_rev ( old_rev ,  dep_path ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  new_rev_short  =  short_rev ( new_rev ,  dep_path ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  url  + =  ' /+log/ %s .. %s '  %  ( old_rev_short ,  new_rev_short ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  old_svn_rev  =  get_svn_revision ( dep_path ,  old_rev ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  new_svn_rev  =  get_svn_revision ( dep_path ,  new_rev ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  try : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    old_svn_rev  =  get_svn_revision ( dep_path ,  old_rev ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    new_svn_rev  =  get_svn_revision ( dep_path ,  new_rev ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  except  Exception : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    # Ignore failures that might arise from the repo not being checked out. 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    old_svn_rev  =  new_svn_rev  =  None 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  svn_range_str  =  ' ' 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  if  old_svn_rev  and  new_svn_rev : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    svn_range_str  =  '  (svn  %s : %s ) '  %  ( old_svn_rev ,  new_svn_rev ) 
 
			
		 
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
			
			 
			 
			
				@ -344,16 +356,28 @@ def update_deps(deps_file, dep_path, dep_name, new_rev, comment):
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				def  main ( argv ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  parser  =  optparse . OptionParser ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  parser . add_option ( ' --no-verify-revision ' , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                    help = ' Don \' t verify the revision passed in. This  ' 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                         ' also skips adding an svn revision comment  ' 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                         ' for git dependencies and requires the passed  ' 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                         ' revision to be a git hash. ' , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                    default = False ,  action = ' store_true ' ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  ( options ,  argv )  =  parser . parse_args ( argv ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  if  len ( argv )  not  in  ( 2 ,  3 ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    print  >>  sys . stderr ,  ( 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        ' Usage: roll_dep.py <dep path> <svn revision> [ <DEPS file> ] ' ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        ' Usage: roll_dep.py [options] <dep path> <svn revision>  ' 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        ' [ <DEPS file> ] ' ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    return  1 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  ( arg_dep_path ,  revision )  =  argv [ 0 : 2 ] 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  gclient_root  =  find_gclient_root ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  dep_path  =  platform_path ( arg_dep_path ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  if  not  os . path . exists ( dep_path ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    dep_path  =  os . path . join ( gclient_root ,  dep_path ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  assert  os . path . isdir ( dep_path ) ,  ' No such directory:  %s '  %  arg_dep_path 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  if  not  options . no_verify_revision : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    # Only require the path to exist if the revision should be verified. A path 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    # to e.g. os deps might not be checked out. 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    assert  os . path . isdir ( dep_path ) ,  ' No such directory:  %s '  %  arg_dep_path 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  if  len ( argv )  >  2 : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    deps_file  =  argv [ 2 ] 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  else : 
 
			
		 
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
			
			 
			 
			
				@ -361,9 +385,16 @@ def main(argv):
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    soln_path  =  os . path . relpath ( os . path . join ( gclient_root ,  soln [ ' name ' ] ) ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    deps_file  =  os . path . join ( soln_path ,  ' DEPS ' ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  dep_name  =  posix_path ( os . path . relpath ( dep_path ,  gclient_root ) ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  ( git_rev ,  svn_rev )  =  get_git_revision ( dep_path ,  revision ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  comment  =  ( ' from svn revision  %s '  %  svn_rev )  if  svn_rev  else  None 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  assert  git_rev ,  ' Could not find git revision matching  %s . '  %  revision 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  if  options . no_verify_revision : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    assert  is_git_hash ( revision ) ,  ( 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        ' The passed revision  %s  must be a git hash when skipping revision  ' 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        ' verification. '  %  revision ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    git_rev  =  revision 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    comment  =  None 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  else : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    ( git_rev ,  svn_rev )  =  get_git_revision ( dep_path ,  revision ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    comment  =  ( ' from svn revision  %s '  %  svn_rev )  if  svn_rev  else  None 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    assert  git_rev ,  ' Could not find git revision matching  %s . '  %  revision 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  return  update_deps ( deps_file ,  dep_path ,  dep_name ,  git_rev ,  comment ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				if  __name__  ==  ' __main__ ' :