Commit 46e832a0 authored by maruel@chromium.org's avatar maruel@chromium.org

Add svn:mime-type canned checks.

TEST=new unit tests
BUG=none

Review URL: http://codereview.chromium.org/131056

git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@18739 0039d316-1c4b-4281-b951-d872f2087c98
parent e29111d0
...@@ -189,17 +189,44 @@ def CheckLongLines(input_api, output_api, maxlen=80, source_file_filter=None): ...@@ -189,17 +189,44 @@ def CheckLongLines(input_api, output_api, maxlen=80, source_file_filter=None):
def CheckChangeSvnEolStyle(input_api, output_api, source_file_filter=None): def CheckChangeSvnEolStyle(input_api, output_api, source_file_filter=None):
"""Checks that the source files have svn:eol-style=LF.""" """Checks that the source files have svn:eol-style=LF."""
bad = filter(lambda f: f.scm == 'svn' and f.Property('svn:eol-style') != 'LF', return CheckSvnProperty(input_api, output_api,
input_api.AffectedSourceFiles(source_file_filter)) 'svn:eol-style', 'LF',
input_api.AffectedSourceFiles(source_file_filter))
def CheckSvnForCommonMimeTypes(input_api, output_api):
"""Checks that common binary file types have the correct svn:mime-type."""
output = []
files = input_api.AffectedFiles(include_deletes=False)
def FilterFiles(extension):
return filter(lambda x: x.endswith(extension), files)
def JpegFiles():
return filter(lambda x: (x.endswith('.jpg') or x.endswith('.jpeg') or
x.endswith('.jpe')),
files)
def RunCheck(mime_type, files):
output.extend(CheckSvnProperty(input_api, output_api, 'svn:mime-type',
mime_type, files))
RunCheck('application/pdf', FilterFiles('.pdf'))
RunCheck('image/bmp', FilterFiles('.bmp'))
RunCheck('image/gif', FilterFiles('.gif'))
RunCheck('image/png', FilterFiles('.png'))
RunCheck('image/jpeg', JpegFiles())
RunCheck('image/vnd.microsoft.icon', FilterFiles('.ico'))
return output
def CheckSvnProperty(input_api, output_api, prop, expected, affected_files):
"""Checks that affected_files files have prop=expected."""
bad = filter(lambda f: f.scm == 'svn' and f.Property(prop) != expected,
affected_files)
if bad: if bad:
if input_api.is_committing: if input_api.is_committing:
return [output_api.PresubmitError( type = output_api.PresubmitError
"Run `svn pset svn:eol-style LF <item>` on these files:",
items=bad)]
else: else:
return [output_api.PresubmitNotifyResult( type = output_api.PresubmitNotifyResult
"Run `svn pset svn:eol-style LF <item>` on these files:", message = "Run `svn pset %s %s <item>` on these files:" % (prop, expected)
items=bad)] return [type(message, items=bad)]
return [] return []
......
...@@ -998,6 +998,7 @@ class CannedChecksUnittest(PresubmitTestsBase): ...@@ -998,6 +998,7 @@ class CannedChecksUnittest(PresubmitTestsBase):
'CheckChangeHasNoCrAndHasOnlyOneEol', 'CheckChangeHasNoTabs', 'CheckChangeHasNoCrAndHasOnlyOneEol', 'CheckChangeHasNoTabs',
'CheckChangeHasQaField', 'CheckChangeHasTestedField', 'CheckChangeHasQaField', 'CheckChangeHasTestedField',
'CheckChangeHasTestField', 'CheckChangeSvnEolStyle', 'CheckChangeHasTestField', 'CheckChangeSvnEolStyle',
'CheckSvnForCommonMimeTypes', 'CheckSvnProperty',
'CheckDoNotSubmit', 'CheckDoNotSubmit',
'CheckDoNotSubmitInDescription', 'CheckDoNotSubmitInFiles', 'CheckDoNotSubmitInDescription', 'CheckDoNotSubmitInFiles',
'CheckLongLines', 'CheckTreeIsOpen', 'RunPythonUnitTests', 'CheckLongLines', 'CheckTreeIsOpen', 'RunPythonUnitTests',
...@@ -1074,13 +1075,16 @@ class CannedChecksUnittest(PresubmitTestsBase): ...@@ -1074,13 +1075,16 @@ class CannedChecksUnittest(PresubmitTestsBase):
self.assertEquals(results2[0].__class__, error_type) self.assertEquals(results2[0].__class__, error_type)
def SvnPropertyTest(self, check, property, value1, value2, committing, def SvnPropertyTest(self, check, property, value1, value2, committing,
error_type): error_type, use_source_file):
input_api1 = self.MockInputApi(None, committing) input_api1 = self.MockInputApi(None, committing)
files1 = [ files1 = [
presubmit.SvnAffectedFile('foo/bar.cc', 'A'), presubmit.SvnAffectedFile('foo/bar.cc', 'A'),
presubmit.SvnAffectedFile('foo.cc', 'M'), presubmit.SvnAffectedFile('foo.cc', 'M'),
] ]
input_api1.AffectedSourceFiles(None).AndReturn(files1) if use_source_file:
input_api1.AffectedSourceFiles(None).AndReturn(files1)
else:
input_api1.AffectedFiles(include_deleted=False).AndReturn(files1)
presubmit.gcl.GetSVNFileProperty(presubmit.normpath('foo/bar.cc'), presubmit.gcl.GetSVNFileProperty(presubmit.normpath('foo/bar.cc'),
property).AndReturn(value1) property).AndReturn(value1)
presubmit.gcl.GetSVNFileProperty(presubmit.normpath('foo.cc'), presubmit.gcl.GetSVNFileProperty(presubmit.normpath('foo.cc'),
...@@ -1090,7 +1094,11 @@ class CannedChecksUnittest(PresubmitTestsBase): ...@@ -1090,7 +1094,11 @@ class CannedChecksUnittest(PresubmitTestsBase):
presubmit.SvnAffectedFile('foo/bar.cc', 'A'), presubmit.SvnAffectedFile('foo/bar.cc', 'A'),
presubmit.SvnAffectedFile('foo.cc', 'M'), presubmit.SvnAffectedFile('foo.cc', 'M'),
] ]
input_api2.AffectedSourceFiles(None).AndReturn(files2) if use_source_file:
input_api2.AffectedSourceFiles(None).AndReturn(files2)
else:
input_api2.AffectedFiles(include_deleted=False).AndReturn(files2)
presubmit.gcl.GetSVNFileProperty(presubmit.normpath('foo/bar.cc'), presubmit.gcl.GetSVNFileProperty(presubmit.normpath('foo/bar.cc'),
property).AndReturn(value2) property).AndReturn(value2)
presubmit.gcl.GetSVNFileProperty(presubmit.normpath('foo.cc'), presubmit.gcl.GetSVNFileProperty(presubmit.normpath('foo.cc'),
...@@ -1190,14 +1198,45 @@ class CannedChecksUnittest(PresubmitTestsBase): ...@@ -1190,14 +1198,45 @@ class CannedChecksUnittest(PresubmitTestsBase):
presubmit.OutputApi.PresubmitPromptWarning) presubmit.OutputApi.PresubmitPromptWarning)
def testCheckChangeSvnEolStyleCommit(self): def testCheckChangeSvnEolStyleCommit(self):
# Test CheckSvnProperty at the same time.
self.SvnPropertyTest(presubmit_canned_checks.CheckChangeSvnEolStyle, self.SvnPropertyTest(presubmit_canned_checks.CheckChangeSvnEolStyle,
'svn:eol-style', 'LF', '', True, 'svn:eol-style', 'LF', '', True,
presubmit.OutputApi.PresubmitError) presubmit.OutputApi.PresubmitError, True)
def testCheckChangeSvnEolStyleUpload(self): def testCheckChangeSvnEolStyleUpload(self):
self.SvnPropertyTest(presubmit_canned_checks.CheckChangeSvnEolStyle, self.SvnPropertyTest(presubmit_canned_checks.CheckChangeSvnEolStyle,
'svn:eol-style', 'LF', '', False, 'svn:eol-style', 'LF', '', False,
presubmit.OutputApi.PresubmitNotifyResult) presubmit.OutputApi.PresubmitNotifyResult, True)
def testCheckSvnForCommonMimeTypes(self):
self.mox.StubOutWithMock(presubmit_canned_checks, 'CheckSvnProperty')
input_api = self.MockInputApi(None, False)
output_api = presubmit.OutputApi()
input_api.AffectedFiles(include_deletes=False).AndReturn([
'a.pdf', 'b.bmp', 'c.gif', 'd.png', 'e.jpg', 'f.ico'])
presubmit_canned_checks.CheckSvnProperty(
input_api, output_api, 'svn:mime-type', 'application/pdf', ['a.pdf']
).AndReturn([1])
presubmit_canned_checks.CheckSvnProperty(
input_api, output_api, 'svn:mime-type', 'image/bmp', ['b.bmp']
).AndReturn([2])
presubmit_canned_checks.CheckSvnProperty(
input_api, output_api, 'svn:mime-type', 'image/gif', ['c.gif']
).AndReturn([3])
presubmit_canned_checks.CheckSvnProperty(
input_api, output_api, 'svn:mime-type', 'image/png', ['d.png']
).AndReturn([4])
presubmit_canned_checks.CheckSvnProperty(
input_api, output_api, 'svn:mime-type', 'image/jpeg', ['e.jpg']
).AndReturn([5])
presubmit_canned_checks.CheckSvnProperty(
input_api, output_api, 'svn:mime-type', 'image/vnd.microsoft.icon',
['f.ico']).AndReturn([6])
self.mox.ReplayAll()
results = presubmit_canned_checks.CheckSvnForCommonMimeTypes(
input_api, output_api)
self.assertEquals(results, [1, 2, 3, 4, 5, 6])
def testCannedCheckTreeIsOpenOpen(self): def testCannedCheckTreeIsOpenOpen(self):
input_api = self.MockInputApi(None, True) input_api = self.MockInputApi(None, True)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment