Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve tidy's license validation logic #12781

Merged
merged 3 commits into from Aug 14, 2016
Merged
Changes from 1 commit
Commits
File filter...
Filter file types
Jump to…
Jump to file
Failed to load files.

Always

Just for now

Check for blank line after shebang and grab actual comment block inst…

…ead of hard-coded one
  • Loading branch information
UK992 committed Aug 12, 2016
commit 9a3b61abe1ad633ab723ca6cbb7180a4992ead5a
@@ -7,11 +7,6 @@
# option. This file may not be copied, modified, or distributed
# except according to those terms.

# when wrapped to 80 chars, the longest license is 10 lines.
# TODO actually grab whatever commented block is before the second blank line
# of the file instead of hard-coding this.
MAX_LICENSE_LINESPAN = 12

MPL = """\
This Source Code Form is subject to the terms of the Mozilla Public \
License, v. 2.0. If a copy of the MPL was not distributed with this \
@@ -163,13 +163,23 @@ def licensed_apache(header):
def check_license(file_name, lines):
if any(file_name.endswith(ext) for ext in (".toml", ".lock", ".json")):
raise StopIteration
block = min(len(lines), licenseck.MAX_LICENSE_LINESPAN)

if lines[0].startswith("#!") and lines[1].strip():
yield (1, "missing blank line after shebang")

blank_lines = 0
max_blank_lines = 2 if lines[0].startswith("#!") else 1
license_block = []
for l in lines[:block]:

for l in lines:

This comment has been minimized.

@wafflespeanut

wafflespeanut Aug 11, 2016

Member

Nit: Please have a newline before this loop.

l = l.rstrip('\n')
if not l.strip():
blank_lines += 1
if blank_lines >= max_blank_lines:
break
line = uncomment(l)
if line is not None:
license_block += [line]
license_block.append(line)
contents = " ".join(license_block)
valid_license = licensed_mpl(contents) or licensed_apache(contents)
acknowledged_bad_license = "xfail-license" in contents
@@ -0,0 +1,4 @@
#!/usr/bin/env python
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
@@ -48,6 +48,11 @@ def test_licence(self):
self.assertEqual('incorrect license', errors.next()[2])
self.assertNoMoreErrors(errors)

def test_shebang_license(self):
errors = tidy.collect_errors_for_files(iterFile('shebang_license.py'), [], [tidy.check_license], print_text=False)
self.assertEqual('missing blank line after shebang', errors.next()[2])
self.assertNoMoreErrors(errors)

def test_shell(self):
errors = tidy.collect_errors_for_files(iterFile('shell_tidy.sh'), [], [tidy.check_shell], print_text=False)
self.assertEqual('script does not have shebang "#!/usr/bin/env bash"', errors.next()[2])
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.