Commit graph

211 commits

Author SHA1 Message Date
Hans-Christoph Steiner
4570d9dc8a lint: use only license tags from https://spdx.org/license-list
closes #234
2017-05-26 21:03:38 +02:00
Hans-Christoph Steiner
1178d032f3 lint: support new per-package subdirs for l18n and dev signatures
Graphics and localized text can now be stored in the package folders,
always in a folder that is named for the locale.  The upstream developer
signature is also now stored, so that the upstream APK can be reproduced
even if they remove their APKs.

#291
fdroiddata!2229
fdroiddata!2224
fdroidclient#15
fdroidserver#174
2017-05-26 21:03:38 +02:00
Hans-Christoph Steiner
3dbd74262f lint: add popular URL shorteners to the banned list 2017-05-26 21:03:38 +02:00
Hans-Christoph Steiner
cdef5bcd92 downcase all 'localized' key names to match the rest of index-v1
This is a little omission.  keys that are used in metadata/*.yml all start
with an UpperCase letter, but in fdroidserver, index-v1.json, and
fdroidclient, it is all camelCase with lowercase first letter. The keys
from the 'localized' section are currently never in metadata/*.yml, so
these keys never get downcase.  This change will break fdroidclient
versions that do not also have this change, but since we're in alpha, that
should be fine.

If support for a 'localized' section is added to metadata/*.yml, then the
keys there should probably be UpperCase CamelCase to match the other keys.
2017-04-27 21:12:49 +02:00
Hans-Christoph Steiner
e0f39a7e7b rename Build fields: version -> versionName, vercode -> versionCode
Since the YAML/JSON/etc. field names are now exactly the same as the field
names used in the internal dict in the Build class, this is a global rename

This keeps with the standard names used in Android:
https://developer.android.com/guide/topics/manifest/manifest-element.html
2017-02-24 11:01:01 +01:00
Hans-Christoph Steiner
b7fc7f2228 convert App to subclass of dict to support parsing/dumping libs
Python is heavily based on its core data types, and dict is one of the more
important ones.  Even classes are basically a wrapper around a dict. This
converts metadata.App to be a subclass of dict so it can behave like a dict
when being dumped and loaded.  This makes its drastically easier to use
different data formats for build metadata and for sending data to the
client.  This approach will ultimately mean we no longer have to maintain
custom parsing and dumping code.

This also means then that the YAML/JSON field names will not have spaces in
them, and they will match exactly what it used as the dict keys once the
data is parsed, as well as matching exactly the instance attribute names:

* CurrentVersion: 1.2.6
* app['CurrentVersion'] == '1.2.6'
* app.CurrentVersion == '1.2.6'

Inspired by:
https://goodcode.io/articles/python-dict-object/
2017-02-24 11:01:01 +01:00
Daniel Martí
82b1d7ad14 all: make newer pycodestyle happy
Apparently the "two empty lines" rule is now stricter.
2016-11-15 20:55:06 +00:00
Hans-Christoph Steiner
d522988d8c make metadata exceptions optional based on CLI flag
In many cases, there are times where metadata errors need to be ignored, or
at least not stop the command from running.  For example, there will
inevitably be new metadata fields added, in which case a packaged version
of fdroidserver will throw errors on each one.  This adds a standard -W
flag to customize the response: ignore, default, or error.

* by default, the errors are still errors
* `fdroid readmeta -W` will just print errors
* `fdroid readmeta -Wignore` will not even print errors

https://gitlab.com/fdroid/fdroidserver/issues/150
2016-09-12 12:55:48 +02:00
Daniel Martí
3e88b7444d lint: only check unused exlibs if using all apps 2016-06-17 11:35:44 +01:00
Daniel Martí
3aeea6fc90 lint: Add check for missing and unused extlibs 2016-05-05 13:42:07 +01:00
Daniel Martí
0711ddb376 lint: make the check for format a regular check 2016-05-05 13:23:30 +01:00
Daniel Martí
0c6269bb67 lint: error on unused files
For now, this is just patch files.
2016-05-05 12:40:16 +01:00
Daniel Martí
5117562df4 lint: gradle does have target= support 2016-04-20 11:23:27 +01:00
Daniel Martí
2493e705f2 lint: remove sets usage 2016-03-10 16:43:37 +00:00
Daniel Martí
920ae4692f Port all imports to python3 2016-03-10 16:43:37 +00:00
Daniel Martí
75419c1f04 Replace iteritems() with items() 2016-03-10 16:43:37 +00:00
Daniel Martí
99edd64372 Switch all headers to python3 2016-03-10 16:43:36 +00:00
Daniel Martí
ace4834cf7 lint: Also warn about gitlab links missing /issues 2016-03-07 22:30:52 +00:00
Daniel Martí
920f11d047 lint: error on fdroid import disable line 2016-03-03 14:19:32 +00:00
Daniel Martí
9800ed1a1a output= is now a glob path and can do gradle 2016-02-15 12:02:45 +00:00
Daniel Martí
f586161361 lint: also check for trailing spaces in names
I was wrong - we don't check for trailing whitespaces on lines. That
would have to happen at parse time, not in the linter, so it would slow
things down and would become an error, not a warning. Not really worth
it.
2016-01-31 21:29:31 +00:00
Boris Kraut
5858ba5680 lint: check whitespaces in "Author Name" 2016-01-31 21:37:25 +01:00
Daniel Martí
622195bf16 lint: warn about spaces in summaries too 2015-12-31 11:21:47 +01:00
NeroBurner
af38f151a2 Change print-function to have brackets 2015-12-29 20:06:46 +01:00
Daniel Martí
c2304b3315 lint: optionally check format 2015-12-07 20:12:26 +01:00
Daniel Martí
fa0dcf5449 lint: fix issue found by older version of pyflakes 2015-12-07 13:58:29 +01:00
Daniel Martí
28566f6e57 Rename metafieldtype to fieldtype
For consistency with flagtype. Also less redundant.
2015-12-03 13:53:49 +01:00
Daniel Martí
b1a9180d12 Use constants for field/flag types
Avoids typos, such as one I just found which was 'strsng' isntead of
'string'. The static analyzer can catch those if they are constants.
Comparing ints is also faster than strings, which adds up in readmeta.
2015-12-03 12:55:19 +01:00
Daniel Martí
088929711c Represent multiline fields as str, not list
Only keep lists in metadata files in the json format, since they don't
support multiline strings that are readable.

This makes the internal code easier, and a bit faster.
2015-12-03 11:36:15 +01:00
Daniel Martí
7e28e0ed90 lint: warn about target= in gradle builds 2015-12-02 20:28:08 +01:00
Daniel Martí
bf8518ee8f Rework build into a class
This simplifies usage, goes from

    build['flag']
to
    build.flag

Also makes static analyzers able to detect invalid attributes as the set
is now limited in the class definition.

As a bonus, setting of the default field values is now done in the
constructor, not separately and manually.

While at it, unify "build", "thisbuild", "info", "thisinfo", etc into
just "build".
2015-12-02 20:03:11 +01:00
Daniel Martí
ab614ab442 Rework app into a class
This simplifies usage, goes from

	app['Foo']
to
	app.Foo

Also makes static analyzers able to detect invalid attributes as the set
is now limited in the class definition.

As a bonus, setting of the default field values is now done in the
constructor, not separately and manually.
2015-11-28 17:11:05 +01:00
Daniel Martí
ce2f4a115c lint: more versatile /HEAD warning
Now catches many more github/gitlab/bitbucket links
2015-11-28 11:58:56 +01:00
Daniel Martí
0f06044770 lint: catch links at the beginning too 2015-11-28 11:58:55 +01:00
Daniel Martí
41690b7508 lint: also catch gitlab master links 2015-11-28 09:52:55 +01:00
Daniel Martí
db31eddd7e lint: fix unlinkified links regex
It was incorrectly matching:

	foo [http://bar

and not matching:

	http://foo (start of line)
2015-10-25 00:07:33 +02:00
Daniel Martí
576da1d048 all: deduplicate -v/-q setup 2015-09-11 23:42:50 -07:00
Daniel Martí
b42b45f762 lint: small cleanup 2015-09-11 23:35:32 -07:00
Daniel Martí
ecad89dc05 lint: catch more duplicate links 2015-09-11 23:30:59 -07:00
Daniel Martí
df9b044a3b lint: add dumb support for multiline links 2015-09-11 22:40:16 -07:00
Daniel Martí
b9b4880b49 lint: move regex closer to usage 2015-09-11 22:07:51 -07:00
Daniel Martí
e6b14c8995 lint: remove now obsolete description checks 2015-09-11 21:54:39 -07:00
Daniel Martí
cc48d2828c lint: overhaul, cleaner and saner output 2015-09-10 18:41:10 -07:00
Daniel Martí
acfc48970d lint: move lastbuild into separate function 2015-09-10 17:55:09 -07:00
Daniel Martí
a5c2e503b2 lint: remove "no recommended build" check
In some cases we do want to not recommend any version. The client should more
or less gracefully handle this.
2015-09-10 17:54:41 -07:00
Daniel Martí
e9e2713cde lint: cleanup, remove stale sites 2015-09-10 17:05:13 -07:00
Daniel Martí
9489e80f09 Merge branch 'replace_optparse_with_argparse' into 'master'
replace deprecated optparse with argparse

squashed and rebased merge request fdroid/fdroidserver!74

following guidelines from:
https://docs.python.org/2/library/argparse.html#upgrading-optparse-code
except, still using option = parse.parse_args() instead of args = ...

- using the following script in folder fdroidserver:
	```
	for i in *.py; do
		sed -i -e 's/optparse/argparse/' \
			-e 's/OptionParser/ArgumentParser/' \
			-e 's/OptionError/ArgumentError/' \
			-e 's/add_option/add_argument/' \
			-e 's/(options, args) = parser/options = parser/' \
			-e 's/options, args = parser/options = parser/' \
			-e 's/Usage: %prog/%(prog)s/' $i;
	done
	```
- use ArgumentParser argument to replace (option, args) = parser.parse()
  call
- use parser.error(msg) instead of raise ArgumentException as suggested
  in https://docs.python.org/2/library/argparse.html#exiting-methods
- in fdroid catch ArgumentError instead of OptionError

See merge request !75
2015-09-10 02:08:24 +00:00
Daniel Martí
29dea4aad5 lint: Warn about links left off from old sites 2015-09-08 13:33:43 -07:00
nero-tux
d23ecf1b35 replace deprecated optparse with argparse
following guidelines from:
https://docs.python.org/2/library/argparse.html#upgrading-optparse-code
except, still using option = parse.parse_args() instead of args = ...

- using the following script in folder fdroidserver:
	for i in *.py; do
		sed -i -e 's/optparse/argparse/' \
			-e 's/OptionParser/ArgumentParser/' \
			-e 's/OptionError/ArgumentError/' \
			-e 's/add_option/add_argument/' \
			-e 's/(options, args) = parser/options = parser/' \
			-e 's/options, args = parser/options = parser/' \
			-e 's/Usage: %prog/%(prog)s/' $i;
	done
- use ArgumentParser argument to replace (option, args) = parser.parse()
  call
- use parser.error(msg) instead of raise ArgumentException as suggested
  in https://docs.python.org/2/library/argparse.html#exiting-methods
- in fdroid catch ArgumentError instead of OptionError
2015-09-06 10:34:50 +02:00
Daniel Martí
3bc0d43786 lint: fixed list false positives, no need for utf 2015-08-31 15:39:07 -07:00