@ -233,8 +233,11 @@ def ErrorExit(msg):
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				def  RunShellWithReturnCode ( command ,  print_output = False ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  """ Executes a command and returns the output and the return code. """ 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  p  =  subprocess2 . Popen ( 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      command ,  stdout = subprocess2 . PIPE , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      stderr = subprocess2 . STDOUT ,  universal_newlines = True ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      command , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      cwd = GetRepositoryRoot ( ) , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      stdout = subprocess2 . PIPE , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      stderr = subprocess2 . STDOUT , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      universal_newlines = True ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  if  print_output : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    output_array  =  [ ] 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    while  True : 
 
			
		 
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
			
			 
			 
			
				@ -613,6 +616,17 @@ class ChangeInfo(object):
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  def  _LoadNewFormat ( content ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    return  json . loads ( content ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  def  __str__ ( self ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    out  =  [ ' %s : '  %  self . __class__ . __name__ ] 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    for  k  in  dir ( self ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      if  k . startswith ( ' __ ' ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        continue 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      v  =  getattr ( self ,  k ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      if  v  is  self  or  callable ( getattr ( self ,  k ) ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        continue 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      out . append ( '    %s :  %r '  %  ( k ,  v ) ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    return  ' \n ' . join ( out ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				def  GetChangelistInfoFile ( changename ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  """ Returns the file that stores information about a changelist. """ 
 
			
		 
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
			
			 
			 
			
				@ -679,9 +693,8 @@ def GetModifiedFiles():
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    for  status ,  filename  in  change_info . GetFiles ( ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      files_in_cl [ filename ]  =  change_info . name 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  # Get all the modified files. 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  status_result  =  SVN . CaptureStatus ( None ,  GetRepositoryRoot ( ) ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  for  line  in  status_result : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  # Get all the modified files down the current directory. 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  for  line  in  SVN . CaptureStatus ( None ,  os . getcwd ( ) ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    status  =  line [ 0 ] 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    filename  =  line [ 1 ] 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    if  status [ 0 ]  ==  " ? " : 
 
			
		 
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
			
			 
			 
			
				@ -884,28 +897,31 @@ def CMDupload(change_info, args):
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    if  GetCodeReviewSetting ( " PRIVATE " )  ==  " True " : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      upload_arg . append ( " --private " ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  # Change the current working directory before calling upload.py so that it 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  # shows the correct base. 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  previous_cwd  =  os . getcwd ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  os . chdir ( change_info . GetLocalRoot ( ) ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  # If we have a lot of files with long paths, then we won't be able to fit 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  # the command to "svn diff".  Instead, we generate the diff manually for 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  # each file and concatenate them before passing it to upload.py. 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  if  change_info . patch  is  None : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    change_info . patch  =  GenerateDiff ( change_info . GetFileNames ( ) ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  # Change the current working directory before calling upload.py so that it 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  # shows the correct base. 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  previous_cwd  =  os . getcwd ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  os . chdir ( change_info . GetLocalRoot ( ) ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  try : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    issue ,  patchset  =  upload . RealMain ( upload_arg ,  change_info . patch ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  except  KeyboardInterrupt : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    sys . exit ( 1 ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  if  issue  and  patchset : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    change_info . issue  =  int ( issue ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    change_info . patchset  =  int ( patchset ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    change_info . Save ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    try : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      issue ,  patchset  =  upload . RealMain ( upload_arg ,  change_info . patch ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    except  KeyboardInterrupt : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      sys . exit ( 1 ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    if  issue  and  patchset : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      change_info . issue  =  int ( issue ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      change_info . patchset  =  int ( patchset ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      change_info . Save ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  if  desc_file : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    os . remove ( desc_file ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  change_info . PrimeLint ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  os . chdir ( previous_cwd ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    if  desc_file : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      os . remove ( desc_file ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    change_info . PrimeLint ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  finally : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    os . chdir ( previous_cwd ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  print  " *** Upload does not submit a try; use gcl try to submit a try. *** " 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  return  0 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
			
			 
			 
			
				@ -1011,8 +1027,6 @@ def CMDcommit(change_info, args):
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      commit_cmd  + =  [ ' --file= '  +  commit_filename ] 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      commit_cmd  + =  [ ' --targets= '  +  targets_filename ] 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      # Change the current working directory before calling commit. 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      previous_cwd  =  os . getcwd ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      os . chdir ( change_info . GetLocalRoot ( ) ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      output  =  ' ' 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      try : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        output  =  RunShell ( commit_cmd ,  True ) 
 
			
		 
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
			
			 
			 
			
				@ -1033,7 +1047,6 @@ def CMDcommit(change_info, args):
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      if  viewvc_url : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        change_info . description  + =  " \n Committed:  "  +  viewvc_url  +  revision 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      change_info . CloseIssue ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  os . chdir ( previous_cwd ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  return  0 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
			
			 
			 
			
				@ -1162,6 +1175,8 @@ def CMDlint(change_info, args):
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  Checks  all  the  files  in  the  changelist  for  possible  style  violations . 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  """ 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  # Access to a protected member _XX of a client class 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  # pylint: disable=W0212 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  try : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    import  cpplint 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    import  cpplint_chromium 
 
			
		 
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
			
			 
			 
			
				@ -1171,32 +1186,32 @@ def CMDlint(change_info, args):
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  # shows the correct base. 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  previous_cwd  =  os . getcwd ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  os . chdir ( change_info . GetLocalRoot ( ) ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  # Process cpplints arguments if any. 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  filenames  =  cpplint . ParseArguments ( args  +  change_info . GetFileNames ( ) ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  white_list  =  GetCodeReviewSetting ( " LINT_REGEX " ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  if  not  white_list : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    white_list  =  DEFAULT_LINT_REGEX 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  white_regex  =  re . compile ( white_list ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  black_list  =  GetCodeReviewSetting ( " LINT_IGNORE_REGEX " ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  if  not  black_list : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    black_list  =  DEFAULT_LINT_IGNORE_REGEX 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  black_regex  =  re . compile ( black_list ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  extra_check_functions  =  [ cpplint_chromium . CheckPointerDeclarationWhitespace ] 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  # Access to a protected member _XX of a client class 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  # pylint: disable=W0212 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  for  filename  in  filenames : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    if  white_regex . match ( filename ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      if  black_regex . match ( filename ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        print  " Ignoring file  %s "  %  filename 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  try : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    # Process cpplints arguments if any. 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    filenames  =  cpplint . ParseArguments ( args  +  change_info . GetFileNames ( ) ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    white_list  =  GetCodeReviewSetting ( " LINT_REGEX " ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    if  not  white_list : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      white_list  =  DEFAULT_LINT_REGEX 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    white_regex  =  re . compile ( white_list ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    black_list  =  GetCodeReviewSetting ( " LINT_IGNORE_REGEX " ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    if  not  black_list : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      black_list  =  DEFAULT_LINT_IGNORE_REGEX 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    black_regex  =  re . compile ( black_list ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    extra_check_functions  =  [ cpplint_chromium . CheckPointerDeclarationWhitespace ] 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    for  filename  in  filenames : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      if  white_regex . match ( filename ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        if  black_regex . match ( filename ) : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				          print  " Ignoring file  %s "  %  filename 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        else : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				          cpplint . ProcessFile ( filename ,  cpplint . _cpplint_state . verbose_level , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                              extra_check_functions ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      else : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        cpplint . ProcessFile ( filename ,  cpplint . _cpplint_state . verbose_level , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                            extra_check_functions ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    else : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      print  " Skipping file  %s "  %  filename 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        print  " Skipping file  %s "  %  filename 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  finally : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    os . chdir ( previous_cwd ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  print  " Total errors found:  %d \n "  %  cpplint . _cpplint_state . error_count 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  os . chdir ( previous_cwd ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  return  1