| Index: tests/presubmit_unittest.py | 
| diff --git a/tests/presubmit_unittest.py b/tests/presubmit_unittest.py | 
| index 831640edefef7679fb38605f79037bd753704729..8f39b39b94c31959f3bb832a035273b5aa94ba8c 100755 | 
| --- a/tests/presubmit_unittest.py | 
| +++ b/tests/presubmit_unittest.py | 
| @@ -342,7 +342,7 @@ class PresubmitUnittest(PresubmitTestsBase): | 
|  | 
| change = presubmit.Change('mychange', '\n'.join(description_lines), | 
| self.fake_root_dir, files, 0, 0) | 
| -    executer = presubmit.PresubmitExecuter(change, False) | 
| +    executer = presubmit.PresubmitExecuter(change, False, False, None) | 
| self.failIf(executer.ExecPresubmitScript('', fake_presubmit)) | 
| # No error if no on-upload entry point | 
| self.failIf(executer.ExecPresubmitScript( | 
| @@ -351,7 +351,7 @@ class PresubmitUnittest(PresubmitTestsBase): | 
| fake_presubmit | 
| )) | 
|  | 
| -    executer = presubmit.PresubmitExecuter(change, True) | 
| +    executer = presubmit.PresubmitExecuter(change, True, False, None) | 
| # No error if no on-commit entry point | 
| self.failIf(executer.ExecPresubmitScript( | 
| ('def CheckChangeOnUpload(input_api, output_api):\n' | 
| @@ -700,12 +700,14 @@ class InputApiUnittest(PresubmitTestsBase): | 
| 'LocalToDepotPath', | 
| 'PresubmitLocalPath', 'ReadFile', 'RightHandSideLines', 'ServerPaths', | 
| 'basename', 'cPickle', 'cStringIO', 'canned_checks', 'change', 'environ', | 
| -      'host_url', 'is_committing', 'is_tbr', 'json', 'marshal', 'os_path', | 
| +      'host_url', 'is_committing', 'json', 'marshal', 'os_path', | 
| 'owners_db', 'pickle', 'platform', 'python_executable', 're', | 
| -      'subprocess', 'tempfile', 'traceback', 'unittest', 'urllib2', 'version', | 
| +      'subprocess', 'tbr', 'tempfile', 'traceback', 'unittest', 'urllib2', | 
| +      'version', | 
| ] | 
| # If this test fails, you should add the relevant test. | 
| -    self.compareMembers(presubmit.InputApi(self.fake_change, './.', False), | 
| +    self.compareMembers(presubmit.InputApi(self.fake_change, './.', False, | 
| +                                           False, None), | 
| members) | 
|  | 
| def testDepotToLocalPath(self): | 
| @@ -714,31 +716,32 @@ class InputApiUnittest(PresubmitTestsBase): | 
| presubmit.scm.SVN.CaptureInfo('svn:/foo/notfound/burp').AndReturn({}) | 
| self.mox.ReplayAll() | 
|  | 
| -    path = presubmit.InputApi(self.fake_change, './p', False).DepotToLocalPath( | 
| -        'svn://foo/smurf') | 
| +    path = presubmit.InputApi(self.fake_change, './p', False, False, | 
| +        None).DepotToLocalPath('svn://foo/smurf') | 
| self.failUnless(path == 'prout') | 
| -    path = presubmit.InputApi(self.fake_change, './p', False).DepotToLocalPath( | 
| -        'svn:/foo/notfound/burp') | 
| +    path = presubmit.InputApi(self.fake_change, './p', False, False, | 
| +        None).DepotToLocalPath('svn:/foo/notfound/burp') | 
| self.failUnless(path == None) | 
|  | 
| def testLocalToDepotPath(self): | 
| presubmit.scm.SVN.CaptureInfo('smurf').AndReturn({'URL': 'svn://foo'}) | 
| presubmit.scm.SVN.CaptureInfo('notfound-food').AndReturn({}) | 
| self.mox.ReplayAll() | 
| -    path = presubmit.InputApi(self.fake_change, './p', False).LocalToDepotPath( | 
| -        'smurf') | 
| +    path = presubmit.InputApi(self.fake_change, './p', False, False, | 
| +        None).LocalToDepotPath('smurf') | 
| self.assertEqual(path, 'svn://foo') | 
| -    path = presubmit.InputApi(self.fake_change, './p', False).LocalToDepotPath( | 
| -        'notfound-food') | 
| +    path = presubmit.InputApi(self.fake_change, './p', False, False, | 
| +        None).LocalToDepotPath('notfound-food') | 
| self.failUnless(path == None) | 
|  | 
| def testInputApiConstruction(self): | 
| self.mox.ReplayAll() | 
| api = presubmit.InputApi(self.fake_change, | 
| presubmit_path='foo/path/PRESUBMIT.py', | 
| -                             is_committing=False) | 
| +                             is_committing=False, tbr=False, host_url=None) | 
| self.assertEquals(api.PresubmitLocalPath(), 'foo/path') | 
| self.assertEquals(api.change, self.fake_change) | 
| +    self.assertEquals(api.host_url, 'http://codereview.chromium.org') | 
|  | 
| def testInputApiPresubmitScriptFiltering(self): | 
| join = presubmit.os.path.join | 
| @@ -794,7 +797,7 @@ class InputApiUnittest(PresubmitTestsBase): | 
| input_api = presubmit.InputApi(change, | 
| join(self.fake_root_dir, 'foo', | 
| 'PRESUBMIT.py'), | 
| -                                   False) | 
| +                                   False, False, None) | 
| # Doesn't filter much | 
| got_files = input_api.AffectedFiles() | 
| self.assertEquals(len(got_files), 7) | 
| @@ -879,7 +882,8 @@ class InputApiUnittest(PresubmitTestsBase): | 
| ], | 
| ), | 
| ] | 
| -    input_api = presubmit.InputApi(self.fake_change, './PRESUBMIT.py', False) | 
| +    input_api = presubmit.InputApi(self.fake_change, './PRESUBMIT.py', False, | 
| +        False, None) | 
| self.mox.ReplayAll() | 
|  | 
| self.assertEqual(len(input_api.DEFAULT_WHITE_LIST), 22) | 
| @@ -910,7 +914,7 @@ class InputApiUnittest(PresubmitTestsBase): | 
| input_api = presubmit.InputApi(change, | 
| presubmit.os.path.join(self.fake_root_dir, | 
| 'PRESUBMIT.py'), | 
| -                                   False) | 
| +                                   False, False, None) | 
| got_files = input_api.AffectedSourceFiles(FilterSourceFile) | 
| self.assertEquals(len(got_files), 2) | 
| self.assertEquals(got_files[0].LocalPath(), 'eeaee') | 
| @@ -929,7 +933,8 @@ class InputApiUnittest(PresubmitTestsBase): | 
|  | 
| change = presubmit.SvnChange('mychange', '', self.fake_root_dir, files, 0, | 
| 0) | 
| -    input_api = presubmit.InputApi(change, './PRESUBMIT.py', False) | 
| +    input_api = presubmit.InputApi(change, './PRESUBMIT.py', False, | 
| +                                   False, None) | 
| # Sample usage of overiding the default white and black lists. | 
| got_files = input_api.AffectedSourceFiles( | 
| lambda x: input_api.FilterSourceFile(x, white_list, black_list)) | 
| @@ -969,7 +974,7 @@ class InputApiUnittest(PresubmitTestsBase): | 
| presubmit_path = join(self.fake_root_dir, 'isdir', 'PRESUBMIT.py') | 
| api = presubmit.InputApi(change=change, | 
| presubmit_path=presubmit_path, | 
| -                             is_committing=True) | 
| +                             is_committing=True, tbr=False, host_url=None) | 
| paths_from_api = api.AbsoluteLocalPaths(include_dirs=True) | 
| self.assertEqual(len(paths_from_api), 2) | 
| for absolute_paths in [paths_from_change, paths_from_api]: | 
| @@ -985,7 +990,8 @@ class InputApiUnittest(PresubmitTestsBase): | 
| change = presubmit.Change('mychange', '', self.fake_root_dir, [], 0, 0) | 
| api = presubmit.InputApi( | 
| change, | 
| -        presubmit.os.path.join(self.fake_root_dir, 'foo', 'PRESUBMIT.py'), True) | 
| +        presubmit.os.path.join(self.fake_root_dir, 'foo', 'PRESUBMIT.py'), True, | 
| +        False, None) | 
| api.AffectedTextFiles(include_deletes=False) | 
|  | 
| def testReadFileStringDenied(self): | 
| @@ -994,7 +1000,8 @@ class InputApiUnittest(PresubmitTestsBase): | 
| change = presubmit.Change('foo', 'foo', self.fake_root_dir, [('M', 'AA')], | 
| 0, 0) | 
| input_api = presubmit.InputApi( | 
| -        change, presubmit.os.path.join(self.fake_root_dir, '/p'), False) | 
| +        change, presubmit.os.path.join(self.fake_root_dir, '/p'), False, | 
| +        False, None) | 
| self.assertRaises(IOError, input_api.ReadFile, 'boo', 'x') | 
|  | 
| def testReadFileStringAccepted(self): | 
| @@ -1005,7 +1012,8 @@ class InputApiUnittest(PresubmitTestsBase): | 
| change = presubmit.Change('foo', 'foo', self.fake_root_dir, [('M', 'AA')], | 
| 0, 0) | 
| input_api = presubmit.InputApi( | 
| -        change, presubmit.os.path.join(self.fake_root_dir, '/p'), False) | 
| +        change, presubmit.os.path.join(self.fake_root_dir, '/p'), False, | 
| +        False, None) | 
| input_api.ReadFile(path, 'x') | 
|  | 
| def testReadFileAffectedFileDenied(self): | 
| @@ -1015,7 +1023,8 @@ class InputApiUnittest(PresubmitTestsBase): | 
| change = presubmit.Change('foo', 'foo', self.fake_root_dir, [('M', 'AA')], | 
| 0, 0) | 
| input_api = presubmit.InputApi( | 
| -        change, presubmit.os.path.join(self.fake_root_dir, '/p'), False) | 
| +        change, presubmit.os.path.join(self.fake_root_dir, '/p'), False, | 
| +        False, None) | 
| self.assertRaises(IOError, input_api.ReadFile, fileobj, 'x') | 
|  | 
| def testReadFileAffectedFileAccepted(self): | 
| @@ -1027,7 +1036,8 @@ class InputApiUnittest(PresubmitTestsBase): | 
| change = presubmit.Change('foo', 'foo', self.fake_root_dir, [('M', 'AA')], | 
| 0, 0) | 
| input_api = presubmit.InputApi( | 
| -        change, presubmit.os.path.join(self.fake_root_dir, '/p'), False) | 
| +        change, presubmit.os.path.join(self.fake_root_dir, '/p'), False, | 
| +        False, None) | 
| input_api.ReadFile(fileobj, 'x') | 
|  | 
|  | 
| @@ -1045,23 +1055,17 @@ class OuputApiUnittest(PresubmitTestsBase): | 
| def testOutputApiBasics(self): | 
| self.mox.ReplayAll() | 
| self.failUnless(presubmit.OutputApi.PresubmitError('').IsFatal()) | 
| -    self.failUnless(presubmit.OutputApi.PresubmitError('').IsMessage()) | 
| self.failIf(presubmit.OutputApi.PresubmitError('').ShouldPrompt()) | 
|  | 
| self.failIf(presubmit.OutputApi.PresubmitPromptWarning('').IsFatal()) | 
| self.failUnless( | 
| presubmit.OutputApi.PresubmitPromptWarning('').ShouldPrompt()) | 
| -    self.failUnless( | 
| -        presubmit.OutputApi.PresubmitPromptWarning('').IsMessage()) | 
|  | 
| self.failIf(presubmit.OutputApi.PresubmitNotifyResult('').IsFatal()) | 
| self.failIf(presubmit.OutputApi.PresubmitNotifyResult('').ShouldPrompt()) | 
| -    self.failUnless( | 
| -        presubmit.OutputApi.PresubmitNotifyResult('foo').IsMessage()) | 
|  | 
| self.failIf(presubmit.OutputApi.PresubmitAddText('foo').IsFatal()) | 
| self.failIf(presubmit.OutputApi.PresubmitAddText('foo').ShouldPrompt()) | 
| -    self.failIf(presubmit.OutputApi.PresubmitAddText('foo').IsMessage()) | 
|  | 
| # TODO(joi) Test MailTextResult once implemented. | 
|  | 
| @@ -1216,7 +1220,7 @@ class CannedChecksUnittest(PresubmitTestsBase): | 
| input_api.change = change | 
| input_api.host_url = 'http://localhost' | 
| input_api.is_committing = committing | 
| -    input_api.ts_tbr = False | 
| +    input_api.tbr = False | 
| input_api.python_executable = 'pyyyyython' | 
| return input_api | 
|  | 
| @@ -1859,7 +1863,7 @@ mac|success|blew | 
| self.assertEquals(results[0].__class__, | 
| presubmit.OutputApi.PresubmitNotifyResult) | 
|  | 
| -  def OwnersTest(self, is_committing, is_tbr=False, change_tags=None, | 
| +  def OwnersTest(self, is_committing, tbr=False, change_tags=None, | 
| suggested_reviewers=None, approvers=None, | 
| uncovered_files=None, expected_results=None): | 
| affected_file = self.mox.CreateMock(presubmit.SvnAffectedFile) | 
| @@ -1872,14 +1876,14 @@ mac|success|blew | 
| fake_db.email_regexp = input_api.re.compile(owners.BASIC_EMAIL_REGEXP) | 
| input_api.owners_db = fake_db | 
| input_api.is_committing = is_committing | 
| -    input_api.is_tbr = is_tbr | 
| +    input_api.tbr = tbr | 
|  | 
| -    if is_committing and not is_tbr: | 
| +    if is_committing and not tbr: | 
| change.issue = '1' | 
| messages = list('{"sender": "' + a + '","text": "lgtm"}' for | 
| a in approvers) | 
| rietveld_response = ('{"owner": "john@example.com",' | 
| -                          '"messages": [' + ','.join(messages) + ']}') | 
| +                           '"messages": [' + ','.join(messages) + ']}') | 
| input_api.urllib2.urlopen( | 
| input_api.host_url + '/api/1?messages=true').AndReturn( | 
| StringIO.StringIO(rietveld_response)) | 
| @@ -1904,14 +1908,14 @@ mac|success|blew | 
| def testCannedCheckOwners_WithReviewer(self): | 
| self.OwnersTest(is_committing=False, change_tags={'R': 'ben@example.com'}, | 
| expected_results=[]) | 
| -    self.OwnersTest(is_committing=False, is_tbr=True, | 
| +    self.OwnersTest(is_committing=False, tbr=True, | 
| change_tags={'R': 'ben@example.com'}, expected_results=[]) | 
|  | 
| def testCannedCheckOwners_NoReviewer(self): | 
| self.OwnersTest(is_committing=False, change_tags={}, | 
| suggested_reviewers=['ben@example.com'], | 
| expected_results=['ADD: R=ben@example.com\n']) | 
| -    self.OwnersTest(is_committing=False, is_tbr=True, change_tags={}, | 
| +    self.OwnersTest(is_committing=False, tbr=True, change_tags={}, | 
| suggested_reviewers=['ben@example.com'], | 
| expected_results=['ADD: R=ben@example.com\n']) | 
|  | 
| @@ -1928,7 +1932,7 @@ mac|success|blew | 
| expected_results=[]) | 
|  | 
| def testCannedCheckOwners_TBR(self): | 
| -    self.OwnersTest(is_committing=True, is_tbr=True, | 
| +    self.OwnersTest(is_committing=True, tbr=True, | 
| approvers=set(), | 
| uncovered_files=set(), | 
| expected_results=['--tbr was specified, skipping OWNERS check\n']) | 
|  |