chiark / gitweb /
Switch all headers to python3
[fdroidserver.git] / fdroidserver / lint.py
index 977efb89aba499599fbc4524517857b36447cfd7..f02bb7ed98403c4438a995b912ed301bcafaf644 100644 (file)
@@ -1,5 +1,4 @@
-#!/usr/bin/env python2
-# -*- coding: utf-8 -*-
+#!/usr/bin/env python3
 #
 # lint.py - part of the FDroid server tool
 # Copyright (C) 2013-2014 Daniel Martí <mvdan@mvdan.cc>
 
 from argparse import ArgumentParser
 import re
-import common
-import metadata
 import sys
 from sets import Set
 
+import common
+import metadata
+import rewritemeta
+
 config = None
 options = None
 
@@ -64,7 +65,9 @@ regex_checks = {
     'Source Code': http_checks,
     'Repo': https_enforcings,
     'Issue Tracker': http_checks + [
-        (re.compile(r'.*github\.com/[^/]+/[^/]+[/]*$'),
+        (re.compile(r'.*github\.com/[^/]+/[^/]+/*$'),
+         "/issues is missing"),
+        (re.compile(r'.*gitlab\.com/[^/]+/[^/]+/*$'),
          "/issues is missing"),
     ],
     'Donate': http_checks + [
@@ -72,6 +75,12 @@ regex_checks = {
          "Flattr donation methods belong in the FlattrID flag"),
     ],
     'Changelog': http_checks,
+    'Author Name': [
+        (re.compile(r'^\s'),
+         "Unnecessary leading space"),
+        (re.compile(r'.*\s$'),
+         "Unnecessary trailing space"),
+    ],
     'License': [
         (re.compile(r'^(|None|Unknown)$'),
          "No license specified"),
@@ -85,6 +94,10 @@ regex_checks = {
          "No need to specify that the app is for Android"),
         (re.compile(r'.*[a-z0-9][.!?]( |$)'),
          "Punctuation should be avoided"),
+        (re.compile(r'^\s'),
+         "Unnecessary leading space"),
+        (re.compile(r'.*\s$'),
+         "Unnecessary trailing space"),
     ],
     'Description': [
         (re.compile(r'^No description available$'),
@@ -148,14 +161,13 @@ def check_ucm_tags(app):
 def check_char_limits(app):
     limits = config['char_limits']
 
-    summ_chars = len(app.Summary)
-    if summ_chars > limits['Summary']:
+    if len(app.Summary) > limits['Summary']:
         yield "Summary of length %s is over the %i char limit" % (
-            summ_chars, limits['Summary'])
+            len(app.Summary), limits['Summary'])
 
     if len(app.Description) > limits['Description']:
         yield "Description of length %s is over the %i char limit" % (
-            desc_charcount, limits['Description'])
+            len(app.Description), limits['Description'])
 
 
 def check_old_links(app):
@@ -286,6 +298,8 @@ def check_bulleted_lists(app):
 def check_builds(app):
     for build in app.builds:
         if build.disable:
+            if build.disable.startswith('Generated by import.py'):
+                yield "Build generated by `fdroid import` - remove disable line once ready"
             continue
         for s in ['master', 'origin', 'HEAD', 'default', 'trunk']:
             if build.commit and build.commit.startswith(s):
@@ -294,7 +308,7 @@ def check_builds(app):
                 ref = srclib.split('@')[1].split('/')[0]
                 if ref.startswith(s):
                     yield "Branch '%s' used as commit in srclib '%s'" % (s, srclib)
-        if build.target and build.method() == 'gradle':
+        if build.target and build.build_method() == 'gradle':
             yield "target= has no gradle support"
 
 
@@ -307,6 +321,8 @@ def main():
     # Parse command line...
     parser = ArgumentParser(usage="%(prog)s [options] [APPID [APPID ...]]")
     common.setup_global_opts(parser)
+    parser.add_argument("-f", "--format", action="store_true", default=False,
+                        help="Also warn about formatting issues, like rewritemeta -l")
     parser.add_argument("appid", nargs='*', help="app-id in the form APPID")
     options = parser.parse_args()
 
@@ -338,10 +354,14 @@ def main():
                 ]:
             warns += check_func(app)
 
+        if options.format:
+            if not rewritemeta.proper_format(app):
+                warns.append("Run rewritemeta to fix formatting")
+
         if warns:
             anywarns = True
             for warn in warns:
-                print "%s: %s" % (appid, warn)
+                print("%s: %s" % (appid, warn))
 
     if anywarns:
         sys.exit(1)