1
0
mirror of https://gitlab.com/fdroid/fdroidserver.git synced 2024-08-17 20:00:10 +02:00

Merge branch 'support-xml-json-yaml-for-metadata' into 'master'

Support XML, JSON, and YAML for metadata

Add support for app metadata files in JSON, XML, and YAML data formats.  All of the formats use the exact same metadata tags, so there is no translation layer needed.  They all just parse the data into the same internal data format: Python dicts.  Supporting these standard formats will make it much easier for people to write recipes since they can choose a data format that they are familiar with.  It also makes it much easier to generate metadata programmatically, since there are good libraries for working with all three formats in basically every language (unlike FDroid's .txt format).

Here are the same tags in .txt, JSON, XML, and YAML:

    Source Code:https://github.com/SMSSecure/SMSSecure
    "Source Code": "https://github.com/SMSSecure/SMSSecure",
    <string name="Source Code">https://github.com/SMSSecure/SMSSecure</string>
    Source Code: https://github.com/SMSSecure/SMSSecure

Looking for comments, suggestions, flames, etc. from @CiaranG, @mvdan, and everyone else.

See merge request !57
This commit is contained in:
Daniel Martí 2015-09-01 17:29:11 +00:00
commit ca8ab7675d
25 changed files with 11145 additions and 93 deletions

View File

@ -445,22 +445,31 @@ the APK files in the repo directory, and
the metadata files in the metadata directory.
@end enumerate
The metadata files are simple, easy to edit text files, always named as the
application's package ID with '.txt' appended.
The original metadata files are simple, easy to edit text files,
always named as the application's package ID with '.txt' appended.
Additionally, you can use JSON, XML, or YAML for app metadata, using
the same fields as the original '.txt' format.
Note that although the metadata files are designed to be easily read and
writable by humans, they are also processed and written by various scripts.
They are capable of rewriting the entire file when necessary. Even so,
the structure and comments will be preserved correctly, although the order
of fields will be standardised. (In the event that the original file was
in a different order, comments are considered as being attached to the field
following them). In fact, you can standardise all the metadata in a single
command, without changing the functional content, by running:
Note that although the metadata files are designed to be easily read
and writable by humans, they are also processed and written by various
scripts. The original '.txt' format can be automatically cleaned up
when necessary. The structure and comments will be preserved
correctly, although the order of fields will be standardised. (In the
event that the original file was in a different order, comments are
considered as being attached to the field following them). In fact,
you can standardise all the '.txt' metadata in a single command,
without changing the functional content, by running:
@example
fdroid rewritemeta
@end example
Or just run it on a specific app:
@example
fdroid rewritemeta org.adaway
@end example
The following sections describe the fields recognised within the file.
@menu

View File

@ -213,6 +213,11 @@ carbon_port = 2003
# --server option on dedicated secure build server hosts.
build_server_always = False
# By default, fdroid will use YAML and the custom .txt metadata formats. It
# is also possible to have metadata in JSON and XML. You can enable your
# preferred formats by setting them in a list:
# accepted_formats = ['json', 'txt', 'xml', 'yaml']
# Limit in number of characters that fields can take up
# Only the fields listed here are supported, defaults shown
char_limits = {

View File

@ -493,14 +493,14 @@ def checkupdates_app(app, first=True):
logging.warn('Invalid auto update mode "' + mode + '" on ' + app['id'])
if commitmsg:
metafile = os.path.join('metadata', app['id'] + '.txt')
metadata.write_metadata(metafile, app)
metadatapath = os.path.join('metadata', app['id'] + '.txt')
metadata.write_metadata(metadatapath, app)
if options.commit:
logging.info("Commiting update for " + metafile)
logging.info("Commiting update for " + metadatapath)
gitcmd = ["git", "commit", "-m", commitmsg]
if 'auto_author' in config:
gitcmd.extend(['--author', config['auto_author']])
gitcmd.extend(["--", metafile])
gitcmd.extend(["--", metadatapath])
if subprocess.call(gitcmd) != 0:
logging.error("Git commit failed")
sys.exit(1)

View File

@ -59,6 +59,7 @@ default_config = {
'ant': "ant",
'mvn3': "mvn",
'gradle': 'gradle',
'accepted_formats': ['txt', 'yaml'],
'sync_from_local_copy_dir': False,
'per_app_repos': False,
'make_current_version_link': True,

View File

@ -198,7 +198,7 @@ def main():
sys.exit(1)
# Construct the metadata...
app = metadata.parse_metadata(None)[1]
app = metadata.parse_txt_metadata(None)[1]
app['Web Site'] = website
app['Source Code'] = sourcecode
if issuetracker:
@ -234,9 +234,9 @@ def main():
with open('build/.fdroidvcs-' + package, 'w') as f:
f.write(repotype + ' ' + repo)
metafile = os.path.join('metadata', package + '.txt')
metadata.write_metadata(metafile, app)
logging.info("Wrote " + metafile)
metadatapath = os.path.join('metadata', package + '.txt')
metadata.write_metadata(metadatapath, app)
logging.info("Wrote " + metadatapath)
if __name__ == "__main__":

View File

@ -17,12 +17,26 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import json
import os
import re
import sys
import glob
import cgi
import logging
import yaml
# use libyaml if it is available
try:
from yaml import CLoader
YamlLoader = CLoader
except ImportError:
from yaml import Loader
YamlLoader = Loader
# use the C implementation when available
import xml.etree.cElementTree as ElementTree
from collections import OrderedDict
import common
@ -41,7 +55,7 @@ class MetaDataException(Exception):
# In the order in which they are laid out on files
app_defaults = OrderedDict([
('Disabled', None),
('AntiFeatures', None),
('AntiFeatures', []),
('Provides', None),
('Categories', ['None']),
('License', 'Unknown'),
@ -78,6 +92,8 @@ app_defaults = OrderedDict([
# In the order in which they are laid out on files
# Sorted by their action and their place in the build timeline
# These variables can have varying datatypes. For example, anything with
# flagtype(v) == 'list' is inited as False, then set as a list of strings.
flag_defaults = OrderedDict([
('disable', False),
('commit', None),
@ -188,14 +204,9 @@ valuetypes = {
["Dogecoin"],
[]),
FieldValidator("Boolean",
['Yes', 'No'], None,
["Requires Root"],
[]),
FieldValidator("bool",
['yes', 'no'], None,
[],
r'([Yy]es|[Nn]o|[Tt]rue|[Ff]alse)', None,
["Requires Root"],
['submodules', 'oldsdkloc', 'forceversion', 'forcevercode',
'novcheck']),
@ -407,11 +418,9 @@ def description_html(lines, linkres):
return ps.text_html
def parse_srclib(metafile):
def parse_srclib(metadatapath):
thisinfo = {}
if metafile and not isinstance(metafile, file):
metafile = open(metafile, "r")
# Defaults for fields that come from metadata
thisinfo['Repo Type'] = ''
@ -419,9 +428,11 @@ def parse_srclib(metafile):
thisinfo['Subdir'] = None
thisinfo['Prepare'] = None
if metafile is None:
if not os.path.exists(metadatapath):
return thisinfo
metafile = open(metadatapath, "r")
n = 0
for line in metafile:
n += 1
@ -464,13 +475,13 @@ def read_srclibs():
if not os.path.exists(srcdir):
os.makedirs(srcdir)
for metafile in sorted(glob.glob(os.path.join(srcdir, '*.txt'))):
srclibname = os.path.basename(metafile[:-4])
srclibs[srclibname] = parse_srclib(metafile)
for metadatapath in sorted(glob.glob(os.path.join(srcdir, '*.txt'))):
srclibname = os.path.basename(metadatapath[:-4])
srclibs[srclibname] = parse_srclib(metadatapath)
# Read all metadata. Returns a list of 'app' objects (which are dictionaries as
# returned by the parse_metadata function.
# returned by the parse_txt_metadata function.
def read_metadata(xref=True):
# Always read the srclibs before the apps, since they can use a srlib as
@ -483,8 +494,16 @@ def read_metadata(xref=True):
if not os.path.exists(basedir):
os.makedirs(basedir)
for metafile in sorted(glob.glob(os.path.join('metadata', '*.txt'))):
appid, appinfo = parse_metadata(metafile)
# If there are multiple metadata files for a single appid, then the first
# file that is parsed wins over all the others, and the rest throw an
# exception. So the original .txt format is parsed first, at least until
# newer formats stabilize.
for metadatapath in sorted(glob.glob(os.path.join('metadata', '*.txt'))
+ glob.glob(os.path.join('metadata', '*.json'))
+ glob.glob(os.path.join('metadata', '*.xml'))
+ glob.glob(os.path.join('metadata', '*.yaml'))):
appid, appinfo = parse_metadata(apps, metadatapath)
check_metadata(appinfo)
apps[appid] = appinfo
@ -510,7 +529,7 @@ def read_metadata(xref=True):
def metafieldtype(name):
if name in ['Description', 'Maintainer Notes']:
return 'multiline'
if name in ['Categories']:
if name in ['Categories', 'AntiFeatures']:
return 'list'
if name == 'Build Version':
return 'build'
@ -560,9 +579,93 @@ def split_list_values(s):
return [v for v in l if v]
def get_default_app_info_list(apps, metadatapath):
appid = os.path.splitext(os.path.basename(metadatapath))[0]
if appid in apps:
logging.critical("'%s' is a duplicate! '%s' is already provided by '%s'"
% (metadatapath, appid, apps[appid]['metadatapath']))
sys.exit(1)
thisinfo = {}
thisinfo.update(app_defaults)
thisinfo['metadatapath'] = metadatapath
if appid is not None:
thisinfo['id'] = appid
# General defaults...
thisinfo['builds'] = []
thisinfo['comments'] = []
return appid, thisinfo
def post_metadata_parse(thisinfo):
supported_metadata = app_defaults.keys() + ['comments', 'builds', 'id', 'metadatapath']
for k, v in thisinfo.iteritems():
if k not in supported_metadata:
raise MetaDataException("Unrecognised metadata: {0}: {1}"
.format(k, v))
if type(v) in (float, int):
thisinfo[k] = str(v)
# convert to the odd internal format
for k in ('Description', 'Maintainer Notes'):
if isinstance(thisinfo[k], basestring):
text = thisinfo[k].rstrip().lstrip()
thisinfo[k] = text.split('\n')
supported_flags = (flag_defaults.keys()
+ ['vercode', 'version', 'versionCode', 'versionName'])
esc_newlines = re.compile('\\\\( |\\n)')
for build in thisinfo['builds']:
for k, v in build.items():
if k not in supported_flags:
raise MetaDataException("Unrecognised build flag: {0}={1}"
.format(k, v))
if k == 'versionCode':
build['vercode'] = str(v)
del build['versionCode']
elif k == 'versionName':
build['version'] = str(v)
del build['versionName']
elif type(v) in (float, int):
build[k] = str(v)
else:
keyflagtype = flagtype(k)
if keyflagtype == 'list':
# these can be bools, strings or lists, but ultimately are lists
if isinstance(v, basestring):
build[k] = [v]
elif isinstance(v, bool):
if v:
build[k] = ['yes']
else:
build[k] = ['no']
elif keyflagtype == 'script':
build[k] = re.sub(esc_newlines, '', v).lstrip().rstrip()
elif keyflagtype == 'bool':
# TODO handle this using <xsd:element type="xsd:boolean> in a schema
if isinstance(v, basestring):
if v == 'true':
build[k] = True
else:
build[k] = False
if not thisinfo['Description']:
thisinfo['Description'].append('No description available')
for build in thisinfo['builds']:
fill_build_defaults(build)
thisinfo['builds'] = sorted(thisinfo['builds'], key=lambda build: int(build['vercode']))
# Parse metadata for a single application.
#
# 'metafile' - the filename to read. The package id for the application comes
# 'metadatapath' - the filename to read. The package id for the application comes
# from this filename. Pass None to get a blank entry.
#
# Returns a dictionary containing all the details of the application. There are
@ -576,7 +679,7 @@ def split_list_values(s):
# 'builds' - a list of dictionaries containing build information
# for each defined build
# 'comments' - a list of comments from the metadata file. Each is
# a tuple of the form (field, comment) where field is
# a list of the form [field, comment] where field is
# the name of the field it preceded in the metadata
# file. Where field is None, the comment goes at the
# end of the file. Alternatively, 'build:version' is
@ -584,9 +687,141 @@ def split_list_values(s):
# 'descriptionlines' - original lines of description as formatted in the
# metadata file.
#
def parse_metadata(metafile):
appid = None
def _decode_list(data):
'''convert items in a list from unicode to basestring'''
rv = []
for item in data:
if isinstance(item, unicode):
item = item.encode('utf-8')
elif isinstance(item, list):
item = _decode_list(item)
elif isinstance(item, dict):
item = _decode_dict(item)
rv.append(item)
return rv
def _decode_dict(data):
'''convert items in a dict from unicode to basestring'''
rv = {}
for key, value in data.iteritems():
if isinstance(key, unicode):
key = key.encode('utf-8')
if isinstance(value, unicode):
value = value.encode('utf-8')
elif isinstance(value, list):
value = _decode_list(value)
elif isinstance(value, dict):
value = _decode_dict(value)
rv[key] = value
return rv
def parse_metadata(apps, metadatapath):
root, ext = os.path.splitext(metadatapath)
metadataformat = ext[1:]
accepted = common.config['accepted_formats']
if metadataformat not in accepted:
logging.critical('"' + metadatapath
+ '" is not in an accepted format, '
+ 'convert to: ' + ', '.join(accepted))
sys.exit(1)
if metadataformat == 'txt':
return parse_txt_metadata(apps, metadatapath)
elif metadataformat == 'json':
return parse_json_metadata(apps, metadatapath)
elif metadataformat == 'xml':
return parse_xml_metadata(apps, metadatapath)
elif metadataformat == 'yaml':
return parse_yaml_metadata(apps, metadatapath)
else:
logging.critical('Unknown metadata format: ' + metadatapath)
sys.exit(1)
def parse_json_metadata(apps, metadatapath):
appid, thisinfo = get_default_app_info_list(apps, metadatapath)
# fdroid metadata is only strings and booleans, no floats or ints. And
# json returns unicode, and fdroidserver still uses plain python strings
# TODO create schema using https://pypi.python.org/pypi/jsonschema
jsoninfo = json.load(open(metadatapath, 'r'),
object_hook=_decode_dict,
parse_int=lambda s: s,
parse_float=lambda s: s)
thisinfo.update(jsoninfo)
post_metadata_parse(thisinfo)
return (appid, thisinfo)
def parse_xml_metadata(apps, metadatapath):
appid, thisinfo = get_default_app_info_list(apps, metadatapath)
tree = ElementTree.ElementTree(file=metadatapath)
root = tree.getroot()
if root.tag != 'resources':
logging.critical(metadatapath + ' does not have root as <resources></resources>!')
sys.exit(1)
supported_metadata = app_defaults.keys()
for child in root:
if child.tag != 'builds':
# builds does not have name="" attrib
name = child.attrib['name']
if name not in supported_metadata:
raise MetaDataException("Unrecognised metadata: <"
+ child.tag + ' name="' + name + '">'
+ child.text
+ "</" + child.tag + '>')
if child.tag == 'string':
thisinfo[name] = child.text
elif child.tag == 'string-array':
items = []
for item in child:
items.append(item.text)
thisinfo[name] = items
elif child.tag == 'builds':
builds = []
for build in child:
builddict = dict()
for key in build:
builddict[key.tag] = key.text
builds.append(builddict)
thisinfo['builds'] = builds
# TODO handle this using <xsd:element type="xsd:boolean> in a schema
if not isinstance(thisinfo['Requires Root'], bool):
if thisinfo['Requires Root'] == 'true':
thisinfo['Requires Root'] = True
else:
thisinfo['Requires Root'] = False
post_metadata_parse(thisinfo)
return (appid, thisinfo)
def parse_yaml_metadata(apps, metadatapath):
appid, thisinfo = get_default_app_info_list(apps, metadatapath)
yamlinfo = yaml.load(open(metadatapath, 'r'), Loader=YamlLoader)
thisinfo.update(yamlinfo)
post_metadata_parse(thisinfo)
return (appid, thisinfo)
def parse_txt_metadata(apps, metadatapath):
linedesc = None
def add_buildflag(p, thisbuild):
@ -658,24 +893,11 @@ def parse_metadata(metafile):
if not curcomments:
return
for comment in curcomments:
thisinfo['comments'].append((key, comment))
thisinfo['comments'].append([key, comment])
del curcomments[:]
thisinfo = {}
if metafile:
if not isinstance(metafile, file):
metafile = open(metafile, "r")
appid = metafile.name[9:-4]
thisinfo.update(app_defaults)
thisinfo['id'] = appid
# General defaults...
thisinfo['builds'] = []
thisinfo['comments'] = []
if metafile is None:
return appid, thisinfo
appid, thisinfo = get_default_app_info_list(apps, metadatapath)
metafile = open(metadatapath, "r")
mode = 0
buildlines = []
@ -788,13 +1010,7 @@ def parse_metadata(metafile):
elif mode == 3:
raise MetaDataException("Unterminated build in " + metafile.name)
if not thisinfo['Description']:
thisinfo['Description'].append('No description available')
for build in thisinfo['builds']:
fill_build_defaults(build)
thisinfo['builds'] = sorted(thisinfo['builds'], key=lambda build: int(build['vercode']))
post_metadata_parse(thisinfo)
return (appid, thisinfo)
@ -831,7 +1047,7 @@ def write_metadata(dest, app):
mf = open(dest, 'w')
writefield_nonempty('Disabled')
writefield_nonempty('AntiFeatures')
writefield('AntiFeatures')
writefield_nonempty('Provides')
writefield('Categories')
writefield('License')
@ -854,7 +1070,7 @@ def write_metadata(dest, app):
mf.write('.\n')
mf.write('\n')
if app['Requires Root']:
writefield('Requires Root', 'Yes')
writefield('Requires Root', 'yes')
mf.write('\n')
if app['Repo Type']:
writefield('Repo Type')

View File

@ -2,6 +2,7 @@
# -*- coding: utf-8 -*-
#
# rewritemeta.py - part of the FDroid server tools
# This cleans up the original .txt metadata file format.
# Copyright (C) 2010-12, Ciaran Gultnieks, ciaran@ciarang.com
#
# This program is free software: you can redistribute it and/or modify
@ -46,8 +47,14 @@ def main():
apps = common.read_app_args(args, allapps, False)
for appid, app in apps.iteritems():
logging.info("Writing " + appid)
metadata.write_metadata(os.path.join('metadata', appid) + '.txt', app)
metadatapath = app['metadatapath']
ext = os.path.splitext(metadatapath)[1][1:]
if ext == 'txt':
logging.info("Rewriting " + metadatapath)
metadata.write_metadata(metadatapath, app)
else:
logging.info("Ignoring %s file at '%s'"
% (ext.upper(), metadatapath))
logging.info("Finished.")

View File

@ -256,8 +256,7 @@ def main():
for app in metaapps:
if app['AntiFeatures'] is None:
continue
antifeatures = [a.strip() for a in app['AntiFeatures'].split(',')]
for antifeature in antifeatures:
for antifeature in app['AntiFeatures']:
afs[antifeature] += 1
with open('stats/antifeatures.txt', 'w') as f:
for antifeature, count in afs.most_common():

View File

@ -92,9 +92,13 @@ def update_wiki(apps, sortedids, apks):
wikidata = ''
if app['Disabled']:
wikidata += '{{Disabled|' + app['Disabled'] + '}}\n'
if app['AntiFeatures']:
for af in app['AntiFeatures'].split(','):
if 'AntiFeatures' in app:
for af in app['AntiFeatures']:
wikidata += '{{AntiFeature|' + af + '}}\n'
if app['Requires Root']:
requiresroot = 'Yes'
else:
requiresroot = 'No'
wikidata += '{{App|id=%s|name=%s|added=%s|lastupdated=%s|source=%s|tracker=%s|web=%s|changelog=%s|donate=%s|flattr=%s|bitcoin=%s|litecoin=%s|dogecoin=%s|license=%s|root=%s}}\n' % (
appid,
app['Name'],
@ -110,7 +114,7 @@ def update_wiki(apps, sortedids, apks):
app['Litecoin'],
app['Dogecoin'],
app['License'],
app.get('Requires Root', 'No'))
requiresroot)
if app['Provides']:
wikidata += "This app provides: %s" % ', '.join(app['Summary'].split(','))
@ -847,7 +851,7 @@ def make_index(apps, sortedids, apks, repodir, archive, categories):
addElement('marketvercode', app['Current Version Code'], doc, apel)
if app['AntiFeatures']:
af = app['AntiFeatures'].split(',')
af = app['AntiFeatures']
if af:
addElementNonEmpty('antifeatures', ','.join(af), doc, apel)
if app['Provides']:

View File

@ -6,7 +6,7 @@
# Redirect output to stderr.
exec 1>&2
PY_FILES="fdroid makebuildserver setup.py examples/*.py buildserver/*.py fdroidserver/*.py"
PY_FILES="fdroid makebuildserver setup.py examples/*.py buildserver/*.py fdroidserver/*.py tests/*.TestCase"
SH_FILES="hooks/pre-commit"
BASH_FILES="fd-commit jenkins-build docs/update.sh completion/bash-completion"
RB_FILES="buildserver/cookbooks/*/recipes/*.rb"

View File

@ -33,6 +33,7 @@ setup(name='fdroidserver',
'apache-libcloud >= 0.14.1',
'pyasn1',
'pyasn1-modules',
'PyYAML',
'requests',
],
classifiers=[

View File

@ -12,16 +12,16 @@ import sys
import tempfile
import unittest
localmodule = os.path.realpath(os.path.join(
os.path.dirname(inspect.getfile(inspect.currentframe())),
'..'))
localmodule = os.path.realpath(
os.path.join(os.path.dirname(inspect.getfile(inspect.currentframe())), '..'))
print('localmodule: ' + localmodule)
if localmodule not in sys.path:
sys.path.insert(0,localmodule)
sys.path.insert(0, localmodule)
import fdroidserver.common
import fdroidserver.metadata
class CommonTest(unittest.TestCase):
'''fdroidserver/common.py'''
@ -50,7 +50,7 @@ class CommonTest(unittest.TestCase):
def test_find_sdk_tools_cmd(self):
fdroidserver.common.config = dict()
# TODO add this once everything works without sdk_path set in config
#self._find_all()
# self._find_all()
sdk_path = os.getenv('ANDROID_HOME')
if os.path.exists(sdk_path):
fdroidserver.common.config['sdk_path'] = sdk_path
@ -67,7 +67,7 @@ class CommonTest(unittest.TestCase):
config = dict()
config['sdk_path'] = os.getenv('ANDROID_HOME')
fdroidserver.common.config = config
self._set_build_tools();
self._set_build_tools()
config['aapt'] = fdroidserver.common.find_sdk_tools_cmd('aapt')
# these are set debuggable
testfiles = []
@ -91,13 +91,13 @@ class CommonTest(unittest.TestCase):
for name in ["org.fdroid.fdroid",
"org.f_droid.fdr0ID"]:
self.assertTrue(fdroidserver.common.is_valid_package_name(name),
"{0} should be a valid package name".format(name))
"{0} should be a valid package name".format(name))
for name in ["0rg.fdroid.fdroid",
".f_droid.fdr0ID",
"org.fdroid/fdroid",
"/org.fdroid.fdroid"]:
self.assertFalse(fdroidserver.common.is_valid_package_name(name),
"{0} should not be a valid package name".format(name))
"{0} should not be a valid package name".format(name))
def test_prepare_sources(self):
testint = 99999999

View File

@ -9,16 +9,16 @@ import os
import sys
import unittest
localmodule = os.path.realpath(os.path.join(
os.path.dirname(inspect.getfile(inspect.currentframe())),
'..'))
localmodule = os.path.realpath(
os.path.join(os.path.dirname(inspect.getfile(inspect.currentframe())), '..'))
print('localmodule: ' + localmodule)
if localmodule not in sys.path:
sys.path.insert(0,localmodule)
sys.path.insert(0, localmodule)
import fdroidserver.common
import fdroidserver.install
class InstallTest(unittest.TestCase):
'''fdroidserver/install.py'''

55
tests/metadata.TestCase Executable file
View File

@ -0,0 +1,55 @@
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
# http://www.drdobbs.com/testing/unit-testing-with-python/240165163
import inspect
import optparse
import os
import pickle
import sys
import unittest
localmodule = os.path.realpath(
os.path.join(os.path.dirname(inspect.getfile(inspect.currentframe())), '..'))
print('localmodule: ' + localmodule)
if localmodule not in sys.path:
sys.path.insert(0, localmodule)
import fdroidserver.common
import fdroidserver.metadata
class MetadataTest(unittest.TestCase):
'''fdroidserver/metadata.py'''
def test_read_metadata(self):
testsdir = os.path.dirname(__file__)
os.chdir(testsdir)
self.maxDiff = None
# these need to be set to prevent code running on None, only
# 'accepted_formats' is actually used in metadata.py
config = dict()
config['sdk_path'] = '/opt/android-sdk'
config['ndk_paths'] = dict()
config['accepted_formats'] = ['json', 'txt', 'xml', 'yaml']
fdroidserver.common.config = config
apps = fdroidserver.metadata.read_metadata(xref=True)
for appid in ('org.smssecure.smssecure', 'org.adaway', 'net.osmand.plus', 'org.videolan.vlc'):
frompickle = pickle.load(open(os.path.join('metadata', appid + '.pickle')))
self.assertTrue(appid in apps.keys())
self.assertEquals(apps[appid], frompickle)
if __name__ == "__main__":
parser = optparse.OptionParser()
parser.add_option("-v", "--verbose", action="store_true", default=False,
help="Spew out even more information than normal")
(fdroidserver.common.options, args) = parser.parse_args(['--verbose'])
newSuite = unittest.TestSuite()
newSuite.addTest(unittest.makeSuite(MetadataTest))
unittest.main()

View File

@ -0,0 +1,504 @@
(dp0
S'Update Check Data'
p1
NsS'Bitcoin'
p2
NsS'AntiFeatures'
p3
(lp4
S'Tracking'
p5
aS'NonFreeNet'
p6
asS'Web Site'
p7
S'http://osmand.net'
p8
sS'Auto Update Mode'
p9
S'None'
p10
sS'Provides'
p11
NsS'Issue Tracker'
p12
S'https://github.com/osmandapp/Osmand/issues'
p13
sS'Donate'
p14
S'https://code.google.com/p/osmand/#Please_support_the_project'
p15
sS'id'
p16
S'net.osmand.plus'
p17
sS'Description'
p18
(lp19
S"Osmand~'s features can be extended by enabling the plugins via the settings,"
p20
aS'which include online maps from many sources, tracking, OpenStreetMap (OSM) editing and'
p21
aS'accessibility enhancements.'
p22
aS''
p23
aS'Map data of both vector and raster types can be stored on the phone memory'
p24
aS'card for offline usage, and navigation by default uses offline methods. Map'
p25
aS'data packages for many territories can be downloaded from within the app and'
p26
aS'there is a desktop program available on the website as well for creating your'
p27
aS'own.'
p28
ag23
aS'Anti-Features: Tracking - It will send your device and application specs to an'
p29
aS'Analytics server upon downloading the list of maps you can download.'
p30
ag23
aS'[https://osmandapp.github.io/changes.html Changelog]'
p31
asS'Requires Root'
p32
I00
sS'comments'
p33
(lp34
sS'Repo Type'
p35
S'git'
p36
sS'Repo'
p37
S'https://github.com/mvdan/OsmAnd-submodules'
p38
sS'No Source Since'
p39
g23
sS'Auto Name'
p40
g23
sS'Categories'
p41
(lp42
S'Navigation'
p43
asS'Source Code'
p44
S'https://github.com/osmandapp/Osmand'
p45
sS'Litecoin'
p46
NsS'Update Check Ignore'
p47
NsS'Name'
p48
S'OsmAnd~'
p49
sS'License'
p50
S'GPLv3'
p51
sS'Changelog'
p52
g23
sS'Update Check Mode'
p53
S'None'
p54
sS'Summary'
p55
S'Offline/online maps and navigation'
p56
sS'Dogecoin'
p57
NsS'Maintainer Notes'
p58
(lp59
S'No UCMs apply because git never contains actual releases, only pre-releses.'
p60
ag23
aS'The build instructions have been moved to a script in the root of the repo,'
p61
aS"'build'. This way it can be updated along with the submodules."
p62
asS'Current Version Code'
p63
S'197'
p64
sS'Binaries'
p65
NsS'Archive Policy'
p66
NsS'builds'
p67
(lp68
(dp69
S'submodules'
p70
I01
sS'vercode'
p71
S'182'
p72
sS'forceversion'
p73
I00
sS'oldsdkloc'
p74
I00
sS'gradleprops'
p75
(lp76
sS'scanignore'
p77
(lp78
sS'patch'
p79
(lp80
sS'srclibs'
p81
(lp82
sS'output'
p83
S'bin/OsmAnd-release-unsigned.apk'
p84
sS'encoding'
p85
NsS'extlibs'
p86
(lp87
sS'init'
p88
g23
sS'version'
p89
S'1.8.2'
p90
sS'build'
p91
S'./old-ndk-build.sh && ant -Dsdk.dir="$ANDROID_SDK" -Dndk.dir="$ANDROID_NDK" -DBLACKBERRY_BUILD=false -DBUILD_SUFFIX= -DAPK_NUMBER_VERSION=182 "-DFEATURES=+play_market +gps_status -parking_plugin -blackberry -amazon -route_nav" -DCLEAN_CPP=false -DPACKAGE_TO_BUILT=net.osmand.plus -DAPK_VERSION=1.8.2 -Dnet.osmand.plus= -Dbuild.version=1.8.2 -Dbuild.version.code=182 -Dnativeoff=false "-DversionFeatures=+play_market +gps_status -parking_plugin -blackberry -amazon -route_nav" clean release'
p92
sS'ndk_path'
p93
g23
sS'kivy'
p94
I00
sS'subdir'
p95
S'android/OsmAnd'
p96
sS'forcevercode'
p97
I00
sS'preassemble'
p98
(lp99
sS'update'
p100
(lp101
S'auto'
p102
asS'maven'
p103
I00
sS'disable'
p104
I00
sS'rm'
p105
(lp106
sS'scandelete'
p107
(lp108
sS'buildjni'
p109
(lp110
S'no'
p111
asS'ndk'
p112
S'r10e'
p113
sS'target'
p114
NsS'type'
p115
S'raw'
p116
sS'antcommands'
p117
NsS'gradle'
p118
I00
sS'prebuild'
p119
S'sed -i \'s/"OsmAnd+"/"OsmAnd~"/g\' build.xml'
p120
sS'novcheck'
p121
I00
sS'commit'
p122
S'76ada6c8a08afe69acb755503373ac36328ef665'
p123
sa(dp124
S'submodules'
p125
I01
sg71
S'183'
p126
sg73
I00
sg74
I00
sg75
(lp127
sg77
g78
sg79
g80
sg81
g82
sS'output'
p128
S'bin/OsmAnd-release-unsigned.apk'
p129
sg85
Nsg86
g87
sg88
g23
sg89
S'1.8.3'
p130
sS'subdir'
p131
S'android/OsmAnd'
p132
sg93
g23
sg94
I00
sS'build'
p133
S'../../build'
p134
sg97
I00
sg98
g99
sg100
g101
sg103
I00
sg104
I00
sg105
g106
sg107
g108
sS'buildjni'
p135
(lp136
S'no'
p137
asg112
g113
sg114
Nsg115
g116
sg117
Nsg118
I00
sS'prebuild'
p138
g23
sg121
I00
sS'commit'
p139
S'1.8.3'
p140
sa(dp141
S'submodules'
p142
I01
sg71
S'196'
p143
sg73
I00
sg74
I00
sg75
(lp144
sg77
g78
sg79
g80
sg81
g82
sS'output'
p145
S'bin/OsmAnd-release-unsigned.apk'
p146
sg85
Nsg86
g87
sg88
g23
sg89
S'1.9.4'
p147
sS'subdir'
p148
S'android/OsmAnd'
p149
sg93
g23
sg94
I00
sS'build'
p150
S'../../build'
p151
sg97
I00
sg98
g99
sg100
g101
sg103
I00
sg104
I00
sg105
g106
sg107
g108
sS'buildjni'
p152
(lp153
S'no'
p154
asS'ndk'
p155
S'r10d'
p156
sg114
Nsg115
g116
sg117
Nsg118
I00
sg138
g23
sg121
I00
sS'commit'
p157
S'1.9.4'
p158
sa(dp159
S'submodules'
p160
I01
sg71
S'197'
p161
sg73
I00
sg74
I00
sg75
(lp162
sg77
g78
sg79
g80
sg81
g82
sS'output'
p163
S'bin/OsmAnd-release-unsigned.apk'
p164
sg85
Nsg86
g87
sg88
g23
sg89
S'1.9.5'
p165
sS'subdir'
p166
S'android/OsmAnd'
p167
sg93
g23
sg94
I00
sS'build'
p168
S'../../build'
p169
sg97
I00
sg98
g99
sg100
g101
sg103
I00
sg104
I00
sg105
g106
sg107
g108
sS'buildjni'
p170
(lp171
S'no'
p172
asS'ndk'
p173
S'r10d'
p174
sg114
Nsg115
g116
sg117
Nsg118
I00
sg138
g23
sg121
I00
sS'commit'
p175
S'1.9.5'
p176
sasS'FlattrID'
p177
NsS'metadatapath'
p178
S'metadata/net.osmand.plus.xml'
p179
sS'Disabled'
p180
NsS'Update Check Name'
p181
NsS'Vercode Operation'
p182
NsS'Current Version'
p183
S'1.9.5'
p184
s.

View File

@ -0,0 +1,180 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="AntiFeatures">
<item>Tracking</item>
<item>NonFreeNet</item>
</string-array>
<string-array name="Categories">
<item>Navigation</item>
</string-array>
<string name="License">GPLv3</string>
<string name="Web Site">http://osmand.net</string>
<string name="Source Code">https://github.com/osmandapp/Osmand</string>
<string name="Issue Tracker">https://github.com/osmandapp/Osmand/issues</string>
<string name="Donate">https://code.google.com/p/osmand/#Please_support_the_project</string>
<string name="Name">OsmAnd~</string>
<string name="Summary">Offline/online maps and navigation</string>
<string name="Description">Osmand~'s features can be extended by enabling the plugins via the settings,
which include online maps from many sources, tracking, OpenStreetMap (OSM) editing and
accessibility enhancements.
Map data of both vector and raster types can be stored on the phone memory
card for offline usage, and navigation by default uses offline methods. Map
data packages for many territories can be downloaded from within the app and
there is a desktop program available on the website as well for creating your
own.
Anti-Features: Tracking - It will send your device and application specs to an
Analytics server upon downloading the list of maps you can download.
[https://osmandapp.github.io/changes.html Changelog]
</string>
<string name="Repo Type">git</string>
<string name="Repo">https://github.com/mvdan/OsmAnd-submodules</string>
<!-- <string name="Repo">https://github.com/osmandapp/Osmand</string/ -->
<!--
# Old builds with the old repo
#Build:0.6.5,34
# commit=v0.6.5
# subdir=OsmAnd
# encoding=utf-8
# prebuild=mkdir assets && \
# mkdir raw
#
#Build:0.6.6,36
# commit=v0.6.6_2
# subdir=OsmAnd
# encoding=utf-8
# prebuild=mkdir raw
#
#Build:0.6.7,37
# commit=v0.6.7
# subdir=OsmAnd
# encoding=utf-8
# patch=code37.patch
# prebuild=mkdir raw
#
#Build:0.6.8,39
# commit=v0.6.8
# subdir=OsmAnd
# encoding=utf-8
# prebuild=mkdir raw
#
#Build:0.6.8',41
# disable=No corresponding source for whatever this is
# commit=unknown - see disabled
#
#Build:0.6.9,42
# commit=v0.6.9
# subdir=OsmAnd
# encoding=utf-8
# prebuild=mkdir raw
#
#Build:0.6.9',43
# disable=No corresponding source for whatever this is
# commit=unknown - see disabled
#
#Build:0.8.1,65
# commit=d62472532d8
# subdir=OsmAnd
# target=android-8
# init=rm -f build.xml
# encoding=utf-8
# forceversion=yes
# prebuild=cd ../DataExtractionOSM && \
# ant compile build && \
# cd ../OsmAnd/ && \
# cp ../DataExtractionOSM/build/OsmAndMapCreator.jar libs/ && \
# zip -d libs/OsmAndMapCreator.jar net/osmand/LogUtil.class && \
# cp -r ../DataExtractionOSM/build/lib/ libs/
# buildjni=no
#
#Build:0.8.2,71
# commit=50a4733475cd
# subdir=OsmAnd
# submodules=yes
# target=android-8
# init=rm -f build.xml
# encoding=utf-8
# forceversion=yes
# forcevercode=yes
# prebuild=cd ../DataExtractionOSM && \
# ant compile build && \
# cd ../OsmAnd/ && \
# sed -i 's/app_version">[^<]*/app_version">0.8.2-fdroid/' res/values/no_translate.xml && \
# cp ../DataExtractionOSM/build/OsmAndMapCreator.jar libs/ && \
# zip -d libs/OsmAndMapCreator.jar net/osmand/LogUtil.class && \
# cp -r ../DataExtractionOSM/build/lib/ libs/
# buildjni=yes
-->
<builds>
<build>
<versionCode>182</versionCode>
<versionName>1.8.2</versionName>
<commit>76ada6c8a08afe69acb755503373ac36328ef665</commit>
<subdir>android/OsmAnd</subdir>
<submodules>true</submodules>
<output>bin/OsmAnd-release-unsigned.apk</output>
<prebuild>sed -i 's/"OsmAnd+"/"OsmAnd~"/g' build.xml</prebuild>
<build>./old-ndk-build.sh &amp;&amp; ant -Dsdk.dir="$ANDROID_SDK" -Dndk.dir="$ANDROID_NDK" -DBLACKBERRY_BUILD=false -DBUILD_SUFFIX= -DAPK_NUMBER_VERSION=182 "-DFEATURES=+play_market +gps_status -parking_plugin -blackberry -amazon -route_nav" -DCLEAN_CPP=false -DPACKAGE_TO_BUILT=net.osmand.plus -DAPK_VERSION=1.8.2 -Dnet.osmand.plus= -Dbuild.version=1.8.2 -Dbuild.version.code=182 -Dnativeoff=false "-DversionFeatures=+play_market +gps_status -parking_plugin -blackberry -amazon -route_nav" clean release</build>
<buildjni>no</buildjni>
</build>
<build>
<versionName>1.8.3</versionName>
<versionCode>183</versionCode>
<commit>1.8.3</commit>
<subdir>android/OsmAnd</subdir>
<submodules>true</submodules>
<output>bin/OsmAnd-release-unsigned.apk</output>
<build>../../build</build>
<buildjni>no</buildjni>
</build>
<build>
<versionName>1.9.4</versionName>
<versionCode>196</versionCode>
<commit>1.9.4</commit>
<subdir>android/OsmAnd</subdir>
<submodules>true</submodules>
<output>bin/OsmAnd-release-unsigned.apk</output>
<build>../../build</build>
<buildjni>no</buildjni>
<ndk>r10d</ndk>
</build>
<build>
<versionName>1.9.5</versionName>
<versionCode>197</versionCode>
<commit>1.9.5</commit>
<subdir>android/OsmAnd</subdir>
<submodules>true</submodules>
<output>bin/OsmAnd-release-unsigned.apk</output>
<build>../../build</build>
<buildjni>no</buildjni>
<ndk>r10d</ndk>
</build>
</builds>
<string name="Maintainer Notes">
No UCMs apply because git never contains actual releases, only pre-releses.
The build instructions have been moved to a script in the root of the repo,
'build'. This way it can be updated along with the submodules.
</string>
<string name="Auto Update Mode">None</string>
<string name="Update Check Mode">None</string>
<string name="Current Version">1.9.5</string>
<string name="Current Version Code">197</string>
</resources>

View File

@ -0,0 +1,284 @@
{
"Auto Name": "AdAway",
"Auto Update Mode": "Version v%v",
"Categories": ["System", "Security"],
"Current Version": "3.0",
"Current Version Code": 52,
"Description": [
"An ad blocker that uses the hosts file. The hosts file",
"contains a list of mappings between hostnames and IP addresses. When",
"an app requests an ad, that request is directed to 127.0.0.1 which does",
"nothing. There are options to run a web server",
"to respond to blocked hostnames and to direct requests to the IP",
"address of your choosing. You can download hosts files from the",
"app but it is possible to use your own and to add certain sites",
"to the white- and black-lists.",
"",
"[https://github.com/dschuermann/ad-away/raw/HEAD/CHANGELOG Changelog]",
"",
"Requires root: Yes. The hosts files is located in /system which is normally",
"read-only."
],
"Donate": "http://sufficientlysecure.org/index.php/adaway",
"FlattrID": "369138",
"Issue Tracker": "https://github.com/dschuermann/ad-away/issues",
"License": "GPLv3",
"Provides": "org.sufficientlysecure.adaway",
"Repo": "https://github.com/dschuermann/ad-away.git",
"Repo Type": "git",
"Requires Root": true,
"Source Code": "https://github.com/dschuermann/ad-away",
"Summary": "Block advertisements",
"Update Check Mode": "Tags",
"Web Site": "http://sufficientlysecure.org/index.php/adaway",
"builds": [
{
"buildjni": true,
"commit": "ea5378a94ee0dc1d99d2cec95fae7e6d81afb2b9",
"subdir": "org_adaway/",
"versionCode": 13,
"versionName": "1.12"
},
{
"buildjni": true,
"commit": "4128e59da2eac5c2904c7c7568d298ca51e79540",
"patch": ["defprop.patch"],
"subdir": "org_adaway/",
"versionCode": 16,
"versionName": "1.15"
},
{
"buildjni": true,
"commit": "0b9985398b9eef7baf6aadd0dbb12002bc199d2e",
"patch": ["defprop.patch"],
"subdir": "org_adaway/",
"versionCode": 19,
"versionName": "1.18"
},
{
"buildjni": true,
"commit": "ab27f4dab5f3ea5e228cfb4a6b0e1fbf53695f22",
"patch": ["defprop.patch"],
"subdir": "org_adaway/",
"versionCode": 20,
"versionName": "1.19"
},
{
"buildjni": true,
"commit": "695e3801e4081026c8f7213a2345fc451d5eb89c",
"patch": ["defprop.patch"],
"subdir": "org_adaway/",
"versionCode": 21,
"versionName": "1.20"
},
{
"buildjni": true,
"commit": "65138c11cc8b6affd28b68e125fbc1dff0886a4e",
"patch": ["defprop.patch"],
"subdir": "org_adaway/",
"versionCode": 22,
"versionName": "1.21"
},
{
"commit": "unknown - see disabled",
"disable": "no source in repo",
"versionCode": 24,
"versionName": "1.23"
},
{
"buildjni": true,
"commit": "f811e53e1e1d2ee047b18715fd7d2072b90ae76b",
"prebuild": "android update project -p ../com_actionbarsherlock",
"subdir": "org_adaway/",
"versionCode": 25,
"versionName": "1.24"
},
{
"buildjni": true,
"commit": "ff97932761cdee68638dc2550751a64b2cbe18e7",
"prebuild": "android update project -p ../com_actionbarsherlock",
"subdir": "org_adaway/",
"versionCode": 26,
"versionName": "1.25"
},
{
"buildjni": true,
"commit": "33d4d80998f30bafc88c04c80cbae00b03916f99",
"prebuild": "android update project -p ../com_actionbarsherlock",
"subdir": "org_adaway/",
"versionCode": 27,
"versionName": "1.26"
},
{
"buildjni": true,
"commit": "743d25a7e287505461f33f4b8e57e4cf988fffea",
"prebuild": "android update project -p ../com_actionbarsherlock",
"subdir": "org_adaway/",
"versionCode": 28,
"versionName": "1.27"
},
{
"buildjni": true,
"commit": "eaa07f4",
"prebuild": "android update project -p ../com_actionbarsherlock && rm -rf libs/armeabi/*",
"subdir": "org_adaway/",
"versionCode": 30,
"versionName": "1.29"
},
{
"buildjni": false,
"commit": "71ced3f",
"prebuild": "android update project -p ../com_actionbarsherlock && rm -rf libs/armeabi/* && rm libs/android-support-v4.jar",
"subdir": "org_adaway/",
"versionCode": 33,
"versionName": "1.32"
},
{
"buildjni": false,
"commit": "9d63c18",
"prebuild": "android update project -p ../com_actionbarsherlock && rm -rf libs/armeabi/*",
"subdir": "org_adaway/",
"versionCode": 34,
"versionName": "1.33"
},
{
"buildjni": false,
"commit": "f2568b1",
"prebuild": "android update project -p ../com_actionbarsherlock && rm -rf libs/armeabi/* && android update project -p ../org_donations",
"subdir": "org_adaway/",
"versionCode": 35,
"versionName": "1.34"
},
{
"buildjni": false,
"commit": "7442d5d",
"prebuild": "android update project -p ../com_actionbarsherlock && rm -rf libs/armeabi/* && android update project -p ../org_donations",
"subdir": "org_adaway/",
"versionCode": 36,
"versionName": "1.35"
},
{
"buildjni": false,
"commit": "83fc713",
"prebuild": "android update project -p ../com_actionbarsherlock && rm -rf libs/armeabi/* && android update project -p ../org_donations",
"subdir": "org_adaway/",
"versionCode": 37,
"versionName": "1.36"
},
{
"buildjni": false,
"commit": "70da32b567122b701cdcb1609b780eb85732028f",
"prebuild": "android update project -p ../com_actionbarsherlock && rm -rf libs/armeabi/* && android update project -p ../org_donations",
"subdir": "org_adaway/",
"versionCode": 38,
"versionName": "1.37"
},
{
"buildjni": true,
"commit": "v2.1",
"extlibs": ["htmlcleaner/htmlcleaner-2.2.jar"],
"init": "rm android-libs/Donations/custom_rules.xml && git clone https://github.com/dschuermann/HtmlSpanner android-libs/HtmlSpanner",
"prebuild": "rm -rf ../update_zip libs/root-commands-1.2.jar libs/htmlspanner-0.2-fork.jar && cp -f libs/htmlcleaner-2.2.jar android-libs/HtmlSpanner/htmlspanner/libs/ && echo \"android.library.reference.3=$$RootCommands$$\" >> project.properties && echo \"android.library.reference.4=android-libs/HtmlSpanner/htmlspanner\" >> project.properties && find . -type f -print0 | xargs -0 sed -i 's/org.rootcommands/org.sufficientlysecure.rootcommands/g' && cp android-libs/Donations/ant-templates/other/DonationsConfig.java android-libs/Donations/src/org/donations/",
"srclibs": ["RootCommands@c940b0e503"],
"subdir": "AdAway",
"update": [".",
"android-libs/Donations",
"android-libs/ActionBarSherlock",
"android-libs/HtmlSpanner/htmlspanner"],
"versionCode": 40,
"versionName": "2.1"
},
{
"buildjni": true,
"commit": "v2.3",
"extlibs": ["htmlcleaner/htmlcleaner-2.2.jar"],
"init": "rm android-libs/Donations/custom_rules.xml && git clone https://github.com/dschuermann/HtmlSpanner android-libs/HtmlSpanner",
"prebuild": "rm -rf ../update_zip libs/root-commands-1.2.jar libs/htmlspanner-0.2-fork.jar && cp -f libs/htmlcleaner-2.2.jar android-libs/HtmlSpanner/htmlspanner/libs/ && echo \"android.library.reference.3=$$RootCommands$$\" >> project.properties && echo \"android.library.reference.4=android-libs/HtmlSpanner/htmlspanner\" >> project.properties && find . -type f -print0 | xargs -0 sed -i 's/org.rootcommands/org.sufficientlysecure.rootcommands/g' && cp android-libs/Donations/ant-templates/other/DonationsConfig.java android-libs/Donations/src/org/donations/",
"srclibs": ["RootCommands@c940b0e503"],
"subdir": "AdAway",
"update": [".",
"android-libs/Donations",
"android-libs/ActionBarSherlock",
"android-libs/HtmlSpanner/htmlspanner"],
"versionCode": 42,
"versionName": "2.3"
},
{
"buildjni": true,
"commit": "v2.6",
"gradle": true,
"preassemble": ["renameExecutables"],
"subdir": "AdAway",
"versionCode": 45,
"versionName": "2.6"
},
{
"buildjni": true,
"commit": "v2.7",
"gradle": true,
"preassemble": ["renameExecutables"],
"subdir": "AdAway",
"versionCode": 46,
"versionName": "2.7"
},
{
"buildjni": true,
"commit": "v2.8",
"gradle": true,
"preassemble": ["renameExecutables"],
"subdir": "AdAway",
"versionCode": 47,
"versionName": "2.8"
},
{
"buildjni": true,
"commit": "v2.8.1",
"gradle": true,
"preassemble": ["renameExecutables"],
"subdir": "AdAway",
"versionCode": 48,
"versionName": "2.8.1"
},
{
"buildjni": true,
"commit": "v2.9",
"gradle": true,
"preassemble": ["renameExecutables"],
"subdir": "AdAway",
"versionCode": 49,
"versionName": "2.9"
},
{
"buildjni": true,
"commit": "v2.9.1",
"gradle": true,
"preassemble": ["renameExecutables"],
"subdir": "AdAway",
"versionCode": 50,
"versionName": "2.9.1"
},
{
"buildjni": true,
"commit": "v2.9.2",
"gradle": true,
"preassemble": ["renameExecutables"],
"subdir": "AdAway",
"versionCode": 51,
"versionName": "2.9.2"
},
{
"buildjni": true,
"commit": "v3.0",
"gradle": true,
"preassemble": ["renameExecutables"],
"subdir": "AdAway",
"versionCode": 52,
"versionName": "3.0"
}
],
"comments": [
["build:40", "#RootCommands srclib needs changing on fdroidserver"],
["build:42", "#RootCommands srclib needs changing on fdroidserver"]
]
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,777 @@
(dp0
S'Update Check Data'
p1
NsS'Bitcoin'
p2
NsS'AntiFeatures'
p3
(lp4
sS'Web Site'
p5
S'http://www.smssecure.org'
p6
sS'Auto Update Mode'
p7
S'Version v%v'
p8
sS'Provides'
p9
NsS'Issue Tracker'
p10
S'https://github.com/SMSSecure/SMSSecure/issues'
p11
sS'Donate'
p12
NsS'Repo Type'
p13
S'git'
p14
sS'Description'
p15
(lp16
S'SMSSecure is an SMS/MMS application that allows you to protect your privacy while communicating with friends.'
p17
aS'Using SMSSecure, you can send SMS messages and share media or attachments with complete privacy.'
p18
aS''
p19
aS"* Easy. SMSSecure works like any other SMS application. There's nothing to sign up for and no new service your friends need to join."
p20
aS'* Reliable. SMSSecure communicates using encrypted SMS messages. No servers or internet connection required.'
p21
aS'* Private. SMSSecure uses the TextSecure encryption protocol to provide privacy for every message, every time.'
p22
aS'* Safe. All messages are encrypted locally, so if your phone is lost or stolen, your messages are protected.'
p23
aS'* Open Source. SMSSecure is Free and Open Source, enabling anyone to verify its security by auditing the code.'
p24
asS'Requires Root'
p25
I00
sS'comments'
p26
(lp27
sS'id'
p28
S'org.smssecure.smssecure'
p29
sS'Repo'
p30
S'https://github.com/SMSSecure/SMSSecure'
p31
sS'No Source Since'
p32
g19
sS'Auto Name'
p33
S'SMSSecure'
p34
sS'Categories'
p35
(lp36
S'Phone & SMS'
p37
asS'Source Code'
p38
S'https://github.com/SMSSecure/SMSSecure'
p39
sS'Litecoin'
p40
NsS'Update Check Ignore'
p41
NsS'Name'
p42
NsS'License'
p43
S'GPLv3'
p44
sS'Changelog'
p45
g19
sS'Update Check Mode'
p46
S'Tags'
p47
sS'Summary'
p48
S'Send encrypted text messages (SMS)'
p49
sS'Dogecoin'
p50
NsS'Maintainer Notes'
p51
(lp52
sS'Current Version Code'
p53
S'102'
p54
sS'Binaries'
p55
NsS'Archive Policy'
p56
NsS'builds'
p57
(lp58
(dp59
S'submodules'
p60
I00
sS'vercode'
p61
S'5'
p62
sS'forceversion'
p63
I00
sS'oldsdkloc'
p64
I00
sS'antcommands'
p65
NsS'scanignore'
p66
(lp67
sS'patch'
p68
(lp69
sS'srclibs'
p70
(lp71
S'GradleWitness@10f1269c0aafdc1d478efc005ed48f3a47d44278'
p72
aS'PreferenceFragment@717a45433b927d2f0dfc5328f79e77c9682c37bc'
p73
aS'ShortcutBadger@3815ce2ec0c66acd7d7c0b4f2479df8fa70fed87'
p74
aS'AospMms@android-5.1.0_r3'
p75
asS'encoding'
p76
NsS'extlibs'
p77
(lp78
sS'init'
p79
g19
sS'version'
p80
S'0.3.3'
p81
sS'build'
p82
g19
sS'ndk_path'
p83
g19
sS'kivy'
p84
I00
sS'subdir'
p85
NsS'forcevercode'
p86
I01
sS'preassemble'
p87
(lp88
sS'update'
p89
(lp90
S'auto'
p91
asS'maven'
p92
I00
sS'disable'
p93
S'builds, merge changes into upstream'
p94
sS'rm'
p95
(lp96
S'libs/*'
p97
asS'scandelete'
p98
(lp99
sS'buildjni'
p100
(lp101
sS'ndk'
p102
S'r10e'
p103
sS'target'
p104
NsS'type'
p105
S'gradle'
p106
sS'commit'
p107
S'66367479a4f57f347b5cbe8f6f8f632adaae7727'
p108
sS'gradleprops'
p109
(lp110
sS'gradle'
p111
(lp112
S'yes'
p113
asS'prebuild'
p114
S"touch signing.properties && pushd $$GradleWitness$$ && gradle jar && popd && cp $$GradleWitness$$/build/libs/GradleWitness.jar libs/gradle-witness.jar && sed -i -e '20,22d' build.gradle && pushd $$PreferenceFragment$$ && gradle uploadArchives && popd && sed -i -e '/5470f5872514a6226fa1fc6f4e000991f38805691c534cf0bd2778911fc773ad/d' build.gradle && mkdir smil && pushd smil && wget -c http://www.w3.org/TR/smil-boston-dom/java-binding.zip && unzip java-binding.zip && popd && cp -fR smil/java/org src/ && rm -fR smil && sed -i -e '/org.w3c.smil/d' build.gradle && cp -fR $$AospMms$$/src/org src/"
p115
sS'novcheck'
p116
I00
sS'output'
p117
Nsa(dp118
S'submodules'
p119
I01
sg61
S'6'
p120
sg63
I00
sg64
I00
sg65
Nsg66
g67
sg68
g69
sS'srclibs'
p121
(lp122
S'GradleWitness@10f1269c0aafdc1d478efc005ed48f3a47d44278'
p123
asg76
Nsg77
g78
sg79
g19
sg80
S'0.3.3'
p124
sg82
g19
sg83
g19
sg84
I00
sg85
NsS'forcevercode'
p125
I00
sg87
g88
sg89
g90
sg92
I00
sS'disable'
p126
S'builds, wait for upstream'
p127
sS'rm'
p128
(lp129
S'libs/*.jar'
p130
asg98
g99
sg100
g101
sg102
g103
sg104
Nsg105
g106
sS'commit'
p131
S'9675ce5eecb929dcaddb43b3d9486fdb88b9ae1a'
p132
sg109
(lp133
sS'gradle'
p134
(lp135
g113
asS'prebuild'
p136
S'touch signing.properties && pushd $$GradleWitness$$ && gradle jar && popd && cp $$GradleWitness$$/build/libs/GradleWitness.jar libs/gradle-witness.jar'
p137
sg116
I00
sg117
Nsa(dp138
S'submodules'
p139
I01
sg61
S'9'
p140
sg63
I00
sg64
I00
sg65
Nsg66
g67
sg68
g69
sS'srclibs'
p141
(lp142
sg76
Nsg77
g78
sg79
g19
sg80
S'0.4.2'
p143
sg82
g19
sg83
g19
sg84
I00
sg85
Nsg125
I00
sg87
g88
sg89
g90
sg92
I00
sS'disable'
p144
S'builds locally, but not on BS'
p145
sS'rm'
p146
(lp147
S'libs/*.jar'
p148
asg98
g99
sg100
g101
sg102
g103
sg104
Nsg105
g106
sS'commit'
p149
S'v0.4.2'
p150
sg109
(lp151
sS'gradle'
p152
(lp153
g113
asS'prebuild'
p154
S'touch signing.properties && ./build-witness.sh && rm -rf libs/gradle-witness/build && echo "org.gradle.jvmargs=-Xms512m -Xmx512m -XX:MaxPermSize=512m" >> gradle.properties'
p155
sg116
I00
sg117
Nsa(dp156
S'submodules'
p157
I01
sg61
S'11'
p158
sg63
I00
sg64
I00
sg65
Nsg66
g67
sg68
g69
sg141
g142
sg76
Nsg77
g78
sg79
g19
sg80
S'0.5.1'
p159
sg82
g19
sg83
g19
sg84
I00
sg85
Nsg125
I00
sg87
g88
sg89
g90
sg92
I00
sS'disable'
p160
I00
sS'rm'
p161
(lp162
S'libs/*.jar'
p163
asg98
g99
sg100
g101
sg102
g103
sg104
Nsg105
g106
sS'commit'
p164
S'v0.5.1'
p165
sg109
(lp166
sS'gradle'
p167
(lp168
g113
asS'prebuild'
p169
S'touch signing.properties && ./build-witness.sh && rm -rf libs/gradle-witness/build && echo "org.gradle.jvmargs=-Xms512m -Xmx512m -XX:MaxPermSize=512m" >> gradle.properties'
p170
sg116
I00
sg117
Nsa(dp171
S'submodules'
p172
I01
sg61
S'12'
p173
sg63
I00
sg64
I00
sg65
Nsg66
g67
sg68
g69
sg141
g142
sg76
Nsg77
g78
sg79
g19
sg80
S'0.5.2'
p174
sg82
g19
sg83
g19
sg84
I00
sg85
Nsg125
I00
sg87
g88
sg89
g90
sg92
I00
sS'disable'
p175
S'broken in upstream'
p176
sS'rm'
p177
(lp178
S'libs/*.jar'
p179
asg98
g99
sg100
g101
sg102
g103
sg104
Nsg105
g106
sS'commit'
p180
S'v0.5.2'
p181
sg109
(lp182
sS'gradle'
p183
(lp184
g113
asS'prebuild'
p185
S'touch signing.properties && ./scripts/build-witness.sh && rm -rf libs/gradle-witness/build'
p186
sg116
I00
sg117
Nsa(dp187
S'submodules'
p188
I01
sg61
S'100'
p189
sg63
I00
sg64
I00
sg65
Nsg66
g67
sg68
g69
sg141
g142
sg76
Nsg77
g78
sg79
g19
sg80
S'0.5.3'
p190
sg82
g19
sg83
g19
sg84
I00
sg85
Nsg125
I00
sg87
g88
sg89
g90
sg92
I00
sg160
I00
sS'rm'
p191
(lp192
S'libs/*.jar'
p193
asg98
g99
sg100
g101
sg102
g103
sg104
Nsg105
g106
sS'commit'
p194
S'v0.5.3'
p195
sg109
(lp196
sS'gradle'
p197
(lp198
g113
asS'prebuild'
p199
S'touch signing.properties && ./scripts/build-witness.sh && rm -rf libs/gradle-witness/build'
p200
sg116
I00
sg117
Nsa(dp201
S'submodules'
p202
I01
sg61
S'101'
p203
sg63
I00
sg64
I00
sg65
Nsg66
g67
sg68
g69
sg141
g142
sg76
Nsg77
g78
sg79
g19
sg80
S'0.5.4'
p204
sg82
g19
sg83
g19
sg84
I00
sg85
Nsg125
I00
sg87
g88
sg89
g90
sg92
I00
sg160
I00
sS'rm'
p205
(lp206
S'libs/*.jar'
p207
asg98
g99
sg100
g101
sg102
g103
sg104
Nsg105
g106
sS'commit'
p208
S'v0.5.4'
p209
sg109
(lp210
sS'gradle'
p211
(lp212
g113
asS'prebuild'
p213
S'touch signing.properties && ./scripts/build-witness.sh && rm -rf libs/gradle-witness/build'
p214
sg116
I00
sg117
Nsa(dp215
S'submodules'
p216
I01
sg61
S'102'
p217
sg63
I00
sg64
I00
sg65
Nsg66
g67
sg68
g69
sg141
g142
sg76
Nsg77
g78
sg79
g19
sg80
S'0.6.0'
p218
sg82
g19
sg83
g19
sg84
I00
sg85
Nsg125
I00
sg87
g88
sg89
g90
sg92
I00
sg160
I00
sS'rm'
p219
(lp220
S'libs/*.jar'
p221
asg98
g99
sg100
g101
sg102
g103
sg104
Nsg105
g106
sS'commit'
p222
S'v0.6.0'
p223
sg109
(lp224
sS'gradle'
p225
(lp226
g113
asS'prebuild'
p227
S'touch signing.properties && ./scripts/build-witness.sh && rm -rf libs/gradle-witness/build'
p228
sg116
I00
sg117
NsasS'FlattrID'
p229
NsS'metadatapath'
p230
S'metadata/org.smssecure.smssecure.txt'
p231
sS'Disabled'
p232
NsS'Update Check Name'
p233
NsS'Vercode Operation'
p234
NsS'Current Version'
p235
S'0.6.0'
p236
s.

View File

@ -0,0 +1,125 @@
Categories:Phone & SMS
License:GPLv3
Web Site:http://www.smssecure.org
Source Code:https://github.com/SMSSecure/SMSSecure
Issue Tracker:https://github.com/SMSSecure/SMSSecure/issues
Auto Name:SMSSecure
Summary:Send encrypted text messages (SMS)
Description:
SMSSecure is an SMS/MMS application that allows you to protect your privacy while communicating with friends.
Using SMSSecure, you can send SMS messages and share media or attachments with complete privacy.
* Easy. SMSSecure works like any other SMS application. There's nothing to sign up for and no new service your friends need to join.
* Reliable. SMSSecure communicates using encrypted SMS messages. No servers or internet connection required.
* Private. SMSSecure uses the TextSecure encryption protocol to provide privacy for every message, every time.
* Safe. All messages are encrypted locally, so if your phone is lost or stolen, your messages are protected.
* Open Source. SMSSecure is Free and Open Source, enabling anyone to verify its security by auditing the code.
.
Repo Type:git
Repo:https://github.com/SMSSecure/SMSSecure
Build:0.3.3,5
disable=builds, merge changes into upstream
commit=66367479a4f57f347b5cbe8f6f8f632adaae7727
gradle=yes
srclibs=GradleWitness@10f1269c0aafdc1d478efc005ed48f3a47d44278,PreferenceFragment@717a45433b927d2f0dfc5328f79e77c9682c37bc,ShortcutBadger@3815ce2ec0c66acd7d7c0b4f2479df8fa70fed87,AospMms@android-5.1.0_r3
forcevercode=yes
rm=libs/*
prebuild=touch signing.properties && \
pushd $$GradleWitness$$ && \
gradle jar && \
popd && \
cp $$GradleWitness$$/build/libs/GradleWitness.jar libs/gradle-witness.jar && \
sed -i -e '20,22d' build.gradle && \
pushd $$PreferenceFragment$$ && \
gradle uploadArchives && \
popd && \
sed -i -e '/5470f5872514a6226fa1fc6f4e000991f38805691c534cf0bd2778911fc773ad/d' build.gradle && \
mkdir smil && \
pushd smil && \
wget -c http://www.w3.org/TR/smil-boston-dom/java-binding.zip && \
unzip java-binding.zip && \
popd && \
cp -fR smil/java/org src/ && \
rm -fR smil && \
sed -i -e '/org.w3c.smil/d' build.gradle && \
cp -fR $$AospMms$$/src/org src/
Build:0.3.3,6
disable=builds, wait for upstream
commit=9675ce5eecb929dcaddb43b3d9486fdb88b9ae1a
submodules=yes
gradle=yes
srclibs=GradleWitness@10f1269c0aafdc1d478efc005ed48f3a47d44278
rm=libs/*.jar
prebuild=touch signing.properties && \
pushd $$GradleWitness$$ && \
gradle jar && \
popd && \
cp $$GradleWitness$$/build/libs/GradleWitness.jar libs/gradle-witness.jar
Build:0.4.2,9
disable=builds locally, but not on BS
commit=v0.4.2
submodules=yes
gradle=yes
rm=libs/*.jar
prebuild=touch signing.properties && \
./build-witness.sh && \
rm -rf libs/gradle-witness/build && \
echo "org.gradle.jvmargs=-Xms512m -Xmx512m -XX:MaxPermSize=512m" >> gradle.properties
Build:0.5.1,11
commit=v0.5.1
submodules=yes
gradle=yes
rm=libs/*.jar
prebuild=touch signing.properties && \
./build-witness.sh && \
rm -rf libs/gradle-witness/build && \
echo "org.gradle.jvmargs=-Xms512m -Xmx512m -XX:MaxPermSize=512m" >> gradle.properties
Build:0.5.2,12
disable=broken in upstream
commit=v0.5.2
submodules=yes
gradle=yes
rm=libs/*.jar
prebuild=touch signing.properties && \
./scripts/build-witness.sh && \
rm -rf libs/gradle-witness/build
Build:0.5.3,100
commit=v0.5.3
submodules=yes
gradle=yes
rm=libs/*.jar
prebuild=touch signing.properties && \
./scripts/build-witness.sh && \
rm -rf libs/gradle-witness/build
Build:0.5.4,101
commit=v0.5.4
submodules=yes
gradle=yes
rm=libs/*.jar
prebuild=touch signing.properties && \
./scripts/build-witness.sh && \
rm -rf libs/gradle-witness/build
Build:0.6.0,102
commit=v0.6.0
submodules=yes
gradle=yes
rm=libs/*.jar
prebuild=touch signing.properties && \
./scripts/build-witness.sh && \
rm -rf libs/gradle-witness/build
Auto Update Mode:Version v%v
Update Check Mode:Tags
Current Version:0.6.0
Current Version Code:102

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,911 @@
Categories:
- Multimedia
License: GPLv3
Web Site: http://www.videolan.org/vlc/download-android.html
Source Code: http://git.videolan.org/?p=vlc-ports/android.git;a=summary
Issue Tracker: "http://www.videolan.org/support/index.html#bugs"
Donate: "http://www.videolan.org/contribute.html#money"
Auto Name: VLC
Summary: Media player
Description: |
Video and audio player that supports a wide range of formats,
for both local and remote playback.
[http://git.videolan.org/?p=vlc-ports/android.git;a=blob_plain;f=NEWS NEWS]
Repo Type: git
Repo: git://git.videolan.org/vlc-ports/android.git
builds:
- versionName: 0.0.11-ARMv7
versionCode: 110
commit: 0.0.11
subdir: vlc-android
forceversion: yes
forcevercode: yes
prebuild: sed -i '48d' ../Makefile
update:
- .
- ../java-libs/SlidingMenu
- ../java-libs/ActionBarSherlock
build: cd ../ && \
ANDROID_ABI=armeabi-v7a ./compile.sh release
buildjni: no
- versionName: 0.0.11-ARM
versionCode: 111
commit: 0.0.11
subdir: vlc-android
forceversion: yes
forcevercode: yes
prebuild: sed -i '48d' ../Makefile
update:
- .
- ../java-libs/SlidingMenu
- ../java-libs/ActionBarSherlock
build: |
cd ../ && \
ANDROID_ABI=armeabi ./compile.sh release
buildjni: no
- versionName: 0.0.11-x86
versionCode: 112
disable: ffmpeg error 0.0.11
commit: unknown - see disabled
subdir: vlc-android
forceversion: yes
forcevercode: yes
prebuild: sed -i '48d' ../Makefile
update:
- .
- ../java-libs/SlidingMenu
- ../java-libs/ActionBarSherlock
build: |
cd ../ && \
ANDROID_ABI=x86 ./compile.sh release
buildjni: no
- versionName: 0.0.11-mips
versionCode: 113
commit: 0.0.11
subdir: vlc-android
forceversion: yes
forcevercode: yes
prebuild: sed -i '48d' ../Makefile
update:
- .
- ../java-libs/SlidingMenu
- ../java-libs/ActionBarSherlock
build: >
cd ../ && \
ANDROID_ABI=mips ./compile.sh release
buildjni: no
- versionName: 0.1.3-MIPS
versionCode: 1301
disable: build failing (at 0.1.3)
commit: 0.1.3
subdir: vlc-android
patch: ndkr9.patch
srclibs: VLC@7c52aacbe
forceversion: yes
forcevercode: yes
prebuild: sed -i '/ant/d' ../Makefile && \
ln -s vlc-android/$$VLC$$ ../vlc
build: |
cd ../ && \
ANDROID_ABI=mips ./compile.sh release
buildjni: no
- versionName: 0.1.3-x86
versionCode: 1302
commit: 0.1.3
subdir: vlc-android
patch: ndkr9.patch
srclibs: VLC@7c52aacbe
forceversion: yes
forcevercode: yes
prebuild: sed -i '/ant/d' ../Makefile && \
ln -s vlc-android/$$VLC$$ ../vlc
build: cd ../ && \
ANDROID_ABI=x86 ./compile.sh release
buildjni: no
- versionName: 0.1.3-ARM
versionCode: 1303
commit: 0.1.3
subdir: vlc-android
patch: ndkr9.patch
srclibs: VLC@7c52aacbe
forceversion: yes
forcevercode: yes
prebuild: sed -i '/ant/d' ../Makefile && \
ln -s vlc-android/$$VLC$$ ../vlc
build: cd ../ && \
ANDROID_ABI=armeabi ./compile.sh release
buildjni: no
- versionName: 0.1.3-ARMv7
versionCode: 1304
commit: 0.1.3
subdir: vlc-android
patch: ndkr9.patch
srclibs: VLC@7c52aacbe
forceversion: yes
forcevercode: yes
prebuild: sed -i '/ant/d' ../Makefile && \
ln -s vlc-android/$$VLC$$ ../vlc
build: cd ../ && \
ANDROID_ABI=armeabi-v7a ./compile.sh release
buildjni: no
- versionName: 0.9.0
versionCode: 9002
commit: 0.9.0
subdir: vlc-android
srclibs: VLC@31ffb20309264994
forcevercode: yes
prebuild: sed -i '/ant/d' ../Makefile && \
ln -s vlc-android/$$VLC$$ ../vlc
build: cd ../ && \
ANDROID_ABI=x86 ./compile.sh release
buildjni: no
- versionName: 0.9.0
versionCode: 9004
commit: 0.9.0
subdir: vlc-android
srclibs: VLC@31ffb20309264994
forcevercode: yes
prebuild: sed -i '/ant/d' ../Makefile && \
ln -s vlc-android/$$VLC$$ ../vlc
build: cd ../ && \
ANDROID_ABI=armeabi-v7a ./compile.sh release
buildjni: no
- versionName: 0.9.1
versionCode: 9102
commit: 0.9.1
subdir: vlc-android
srclibs: VLC@37e886d113b8b567c15208579fb2f
forcevercode: yes
prebuild: sed -i '/ant/d' ../Makefile && \
ln -s vlc-android/$$VLC$$ ../vlc
build: cd ../ && \
ANDROID_ABI=x86 ./compile.sh release
buildjni: no
- versionName: 0.9.1
versionCode: 9104
commit: 0.9.1
subdir: vlc-android
srclibs: VLC@37e886d113b8b567c15208579fb2f
forcevercode: yes
prebuild: sed -i '/ant/d' ../Makefile && \
ln -s vlc-android/$$VLC$$ ../vlc
build: cd ../ && \
ANDROID_ABI=armeabi-v7a ./compile.sh release
buildjni: no
- versionName: 0.9.5
versionCode: 9502
disable: can't download gmp
commit: 0.9.5
subdir: vlc-android
srclibs: VLC@052600173f376ff58ff04d53746961a2
forcevercode: yes
prebuild: sed -i '/ant/d' ../Makefile && \
ln -s vlc-android/$$VLC$$ ../vlc
build: cd ../ && \
ANDROID_ABI=x86 ./compile.sh release
buildjni: no
- versionName: 0.9.5
versionCode: 9504
disable: can't download gmp
commit: 0.9.5
subdir: vlc-android
srclibs: VLC@052600173f376ff58ff04d53746961a2
forcevercode: yes
prebuild: sed -i '/ant/d' ../Makefile && \
ln -s vlc-android/$$VLC$$ ../vlc
build: cd ../ && \
ANDROID_ABI=armeabi-v7a ./compile.sh release
buildjni: no
- versionName: 0.9.6
versionCode: 9602
commit: 0.9.6
subdir: vlc-android
srclibs: VLC-2.2@27f4799
forcevercode: yes
prebuild: sed -i '/ant/d' ../Makefile && \
ln -s vlc-android/$$VLC-2.2$$ ../vlc
build: cd ../ && \
ANDROID_ABI=x86 ./compile.sh release
buildjni: no
- versionName: 0.9.6
versionCode: 9604
commit: 0.9.6
subdir: vlc-android
srclibs: VLC-2.2@27f4799
forcevercode: yes
prebuild: sed -i '/ant/d' ../Makefile && \
ln -s vlc-android/$$VLC-2.2$$ ../vlc
build: cd ../ && \
ANDROID_ABI=armeabi-v7a ./compile.sh release
buildjni: no
- versionName: 0.9.7
versionCode: 9702
commit: 0.9.7
subdir: vlc-android
srclibs: VLC-2.2@9e1c6ff
forcevercode: yes
prebuild: sed -i '/ant/d' ../Makefile && \
ln -s vlc-android/$$VLC-2.2$$ ../vlc
build: cd ../ && \
ANDROID_ABI=x86 ./compile.sh release
buildjni: no
- versionName: 0.9.7
versionCode: 9704
commit: 0.9.7
subdir: vlc-android
srclibs: VLC-2.2@9e1c6ff
forcevercode: yes
prebuild: sed -i '/ant/d' ../Makefile && \
ln -s vlc-android/$$VLC-2.2$$ ../vlc
build: cd ../ && \
ANDROID_ABI=armeabi-v7a ./compile.sh release
buildjni: no
- versionName: 0.9.7.1
versionCode: 9711
disable: build fails
commit: 0.9.7.1
subdir: vlc-android
srclibs: VLC-2.2@57cd36b
forcevercode: yes
prebuild: sed -i '/ant/d' ../Makefile && \
ln -s vlc-android/$$VLC-2.2$$ ../vlc
build: cd ../ && \
ANDROID_ABI=mips ./compile.sh release
buildjni: no
- versionName: 0.9.7.1
versionCode: 9712
commit: 0.9.7.1
subdir: vlc-android
srclibs: VLC-2.2@57cd36b
forcevercode: yes
prebuild: sed -i '/ant/d' ../Makefile && \
ln -s vlc-android/$$VLC-2.2$$ ../vlc
build: cd ../ && \
ANDROID_ABI=x86 ./compile.sh release
buildjni: no
- versionName: 0.9.7.1
versionCode: 9714
commit: 0.9.7.1
subdir: vlc-android
srclibs: VLC-2.2@57cd36b
forcevercode: yes
prebuild: sed -i '/ant/d' ../Makefile && \
ln -s vlc-android/$$VLC-2.2$$ ../vlc
build: cd ../ && \
ANDROID_ABI=armeabi-v7a ./compile.sh release
buildjni: no
- versionName: 0.9.8
versionCode: 9802
commit: 0.9.8
subdir: vlc-android
srclibs: VLC-2.2@f2db364
forcevercode: yes
prebuild: sed -i '/ant/d' ../Makefile && \
ln -s vlc-android/$$VLC-2.2$$ ../vlc
build: cd ../ && \
ANDROID_ABI=x86 ./compile.sh release
buildjni: no
- versionName: 0.9.8
versionCode: 9803
commit: 0.9.8
subdir: vlc-android
srclibs: VLC-2.2@f2db364
forcevercode: yes
prebuild: sed -i '/ant/d' ../Makefile && \
ln -s vlc-android/$$VLC-2.2$$ ../vlc
build: cd ../ && \
ANDROID_ABI=armeabi ./compile.sh release
buildjni: no
- versionName: 0.9.8
versionCode: 9804
commit: 0.9.8
subdir: vlc-android
srclibs: VLC-2.2@f2db364
forcevercode: yes
prebuild: sed -i '/ant/d' ../Makefile && \
ln -s vlc-android/$$VLC-2.2$$ ../vlc
build: cd ../ && \
ANDROID_ABI=armeabi-v7a ./compile.sh release
buildjni: no
- versionName: 0.9.9
versionCode: 9902
commit: 0.9.9
subdir: vlc-android
srclibs: VLC-2.2@e731dc23a4f8ef6782c7cc2236bbbf41c034dad1
forcevercode: yes
prebuild: sed -i '/ant/d' ../Makefile && \
ln -s vlc-android/$$VLC-2.2$$ ../vlc
build: cd ../ && \
ANDROID_ABI=x86 ./compile.sh release
buildjni: no
- versionName: 0.9.9
versionCode: 9903
commit: 0.9.9
subdir: vlc-android
srclibs: VLC-2.2@e731dc23a4f8ef6782c7cc2236bbbf41c034dad1
forcevercode: yes
prebuild: sed -i '/ant/d' ../Makefile && \
ln -s vlc-android/$$VLC-2.2$$ ../vlc
build: cd ../ && \
ANDROID_ABI=armeabi ./compile.sh release
buildjni: no
- versionName: 0.9.9
versionCode: 9904
commit: 0.9.9
subdir: vlc-android
srclibs: VLC-2.2@e731dc23a4f8ef6782c7cc2236bbbf41c034dad1
forcevercode: yes
prebuild: sed -i '/ant/d' ../Makefile && \
ln -s vlc-android/$$VLC-2.2$$ ../vlc
build: cd ../ && \
ANDROID_ABI=armeabi-v7a ./compile.sh release
buildjni: no
- versionName: 0.9.10
versionCode: 10002
commit: 0.9.10
subdir: vlc-android
srclibs: VLC-2.2@e33e5de
forcevercode: yes
prebuild: sed -i '/ant/d' ../Makefile && \
ln -s vlc-android/$$VLC-2.2$$ ../vlc
build: cd ../ && \
ANDROID_ABI=x86 ./compile.sh release
buildjni: no
- versionName: 0.9.10
versionCode: 10003
commit: 0.9.10
subdir: vlc-android
srclibs: VLC-2.2@e33e5de
forcevercode: yes
prebuild: sed -i '/ant/d' ../Makefile && \
ln -s vlc-android/$$VLC-2.2$$ ../vlc
build: cd ../ && \
ANDROID_ABI=armeabi ./compile.sh release
buildjni: no
- versionName: 0.9.10
versionCode: 10004
commit: 0.9.10
subdir: vlc-android
srclibs: VLC-2.2@e33e5de
forcevercode: yes
prebuild: sed -i '/ant/d' ../Makefile && \
ln -s vlc-android/$$VLC-2.2$$ ../vlc
build: cd ../ && \
ANDROID_ABI=armeabi-v7a ./compile.sh release
buildjni: no
#0.9.10 vercodes were off
- versionName: 1.0.0
versionCode: 10006
disable: doesn't build
commit: 1.0.0
subdir: vlc-android
srclibs: VLC-2.2@036010e
forcevercode: yes
prebuild: sed -i '/ant/d' ../Makefile && \
ln -s vlc-android/$$VLC-2.2$$ ../vlc
build: cd ../ && \
ANDROID_ABI=x86 ./compile.sh release
buildjni: no
#0.9.10 vercodes were off
- versionName: 1.0.0
versionCode: 10007
disable: doesn't build
commit: 1.0.0
subdir: vlc-android
srclibs: VLC-2.2@036010e
forcevercode: yes
prebuild: sed -i '/ant/d' ../Makefile && \
ln -s vlc-android/$$VLC-2.2$$ ../vlc
build: cd ../ && \
ANDROID_ABI=armeabi ./compile.sh release
buildjni: no
#0.9.10 vercodes were off
- versionName: 1.0.0
versionCode: 10008
disable: doesn't build
commit: 1.0.0
subdir: vlc-android
srclibs: VLC-2.2@036010e
forcevercode: yes
prebuild: sed -i '/ant/d' ../Makefile && \
ln -s vlc-android/$$VLC-2.2$$ ../vlc
build: cd ../ && \
ANDROID_ABI=armeabi-v7a ./compile.sh release
buildjni: no
- versionName: 1.0.1
versionCode: 10102
commit: 1.0.1
subdir: vlc-android
srclibs: VLC-2.2@59409d5
forcevercode: yes
prebuild: sed -i '/ant/d' ../Makefile && \
ln -s vlc-android/$$VLC-2.2$$ ../vlc
build: cd ../ && \
ANDROID_ABI=x86 ./compile.sh release
buildjni: no
- versionName: 1.0.1
versionCode: 10103
commit: 1.0.1
subdir: vlc-android
srclibs: VLC-2.2@59409d5
forcevercode: yes
prebuild: sed -i '/ant/d' ../Makefile && \
ln -s vlc-android/$$VLC-2.2$$ ../vlc
build: cd ../ && \
ANDROID_ABI=armeabi ./compile.sh release
buildjni: no
- versionName: 1.0.1
versionCode: 10104
commit: 1.0.1
subdir: vlc-android
srclibs: VLC-2.2@59409d5
forcevercode: yes
prebuild: sed -i '/ant/d' ../Makefile && \
ln -s vlc-android/$$VLC-2.2$$ ../vlc
build: cd ../ && \
ANDROID_ABI=armeabi-v7a ./compile.sh release
buildjni: no
- versionName: 1.1.3
versionCode: 1010303
commit: 1.1.3
subdir: vlc-android
gradle: VanillaARMv6fpu
srclibs: VLC@a9b19e4
prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && \
ln -s vlc-android/$$VLC$$ ../vlc
build: cd ../ && \
./compile.sh -a "armeabi" --release
buildjni: no
ndk: r10d
- versionName: 1.1.3
versionCode: 1010304
commit: 1.1.3
subdir: vlc-android
gradle: VanillaARMv7
srclibs: VLC@a9b19e4
prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && \
ln -s vlc-android/$$VLC$$ ../vlc
build: cd ../ && \
./compile.sh -a "armeabi-v7a" --release
buildjni: no
ndk: r10d
- versionName: 1.1.3
versionCode: 1010305
commit: 1.1.3
subdir: vlc-android
gradle: VanillaX86
srclibs: VLC@a9b19e4
prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && \
ln -s vlc-android/$$VLC$$ ../vlc
build: cd ../ && \
./compile.sh -a "x86" --release
buildjni: no
ndk: r10d
- versionName: 1.1.5
versionCode: 1010503
commit: 1.1.5
subdir: vlc-android
gradle: VanillaARMv6fpu
srclibs: VLC@e6b4585
prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && \
ln -s vlc-android/$$VLC$$ ../vlc
build: cd ../ && \
./compile.sh -a "armeabi" --release
buildjni: no
ndk: r10d
- versionName: 1.1.5
versionCode: 1010504
commit: 1.1.5
subdir: vlc-android
gradle: VanillaARMv7
srclibs: VLC@e6b4585
prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && \
ln -s vlc-android/$$VLC$$ ../vlc
build: cd ../ && \
./compile.sh -a "armeabi-v7a" --release
buildjni: no
ndk: r10d
- versionName: 1.1.5
versionCode: 1010505
commit: 1.1.5
subdir: vlc-android
gradle: VanillaX86
srclibs: VLC@e6b4585
prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && \
ln -s vlc-android/$$VLC$$ ../vlc
build: cd ../ && \
./compile.sh -a "x86" --release
buildjni: no
ndk: r10d
- versionName: 1.1.6
versionCode: 1010603
commit: 1.1.6
subdir: vlc-android
gradle: VanillaARMv6fpu
srclibs: VLC@551b670
prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && \
ln -s vlc-android/$$VLC$$ ../vlc
build: cd ../ && \
./compile.sh -a "armeabi" --release
buildjni: no
ndk: r10d
- versionName: 1.1.6
versionCode: 1010604
commit: 1.1.6
subdir: vlc-android
gradle: VanillaARMv7
srclibs: VLC@551b670
prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && \
ln -s vlc-android/$$VLC$$ ../vlc
build: cd ../ && \
./compile.sh -a "armeabi-v7a" --release
buildjni: no
ndk: r10d
- versionName: 1.1.6
versionCode: 1010605
commit: 1.1.6
subdir: vlc-android
gradle: VanillaX86
srclibs: VLC@551b670
prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && \
ln -s vlc-android/$$VLC$$ ../vlc
build: cd ../ && \
./compile.sh -a "x86" --release
buildjni: no
ndk: r10d
- versionName: 1.2.0
versionCode: 1020003
commit: 1.2.0
subdir: vlc-android
gradle: VanillaARMv6fpu
srclibs: VLC@23c8d86
prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && \
ln -s vlc-android/$$VLC$$ ../vlc
build: cd ../ && \
./compile.sh -a "armeabi" --release
buildjni: no
ndk: r10d
- versionName: 1.2.0
versionCode: 1020004
commit: 1.2.0
subdir: vlc-android
gradle: VanillaARMv7
srclibs: VLC@23c8d86
prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && \
ln -s vlc-android/$$VLC$$ ../vlc
build: cd ../ && \
./compile.sh -a "armeabi-v7a" --release
buildjni: no
ndk: r10d
- versionName: 1.2.0
versionCode: 1020005
commit: 1.2.0
subdir: vlc-android
gradle: VanillaX86
srclibs: VLC@23c8d86
prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && \
ln -s vlc-android/$$VLC$$ ../vlc
build: cd ../ && \
./compile.sh -a "x86" --release
buildjni: no
ndk: r10d
- versionName: 1.2.1
versionCode: 1020103
commit: 1.2.1
subdir: vlc-android
gradle: VanillaARMv6fpu
srclibs: VLC@23c8d86
prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && \
ln -s vlc-android/$$VLC$$ ../vlc
build: cd ../ && \
./compile.sh -a "armeabi" --release
buildjni: no
ndk: r10d
- versionName: 1.2.1
versionCode: 1020104
commit: 1.2.1
subdir: vlc-android
gradle: VanillaARMv7
srclibs: VLC@23c8d86
prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && \
ln -s vlc-android/$$VLC$$ ../vlc
build: cd ../ && \
./compile.sh -a "armeabi-v7a" --release
buildjni: no
ndk: r10d
- versionName: 1.2.1
versionCode: 1020105
commit: 1.2.1
subdir: vlc-android
gradle: VanillaX86
srclibs: VLC@23c8d86
prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && \
ln -s vlc-android/$$VLC$$ ../vlc
build: cd ../ && \
./compile.sh -a "x86" --release
buildjni: no
ndk: r10d
- versionName: 1.2.2
versionCode: 1020203
commit: 1.2.2
subdir: vlc-android
gradle: VanillaARMv6fpu
srclibs: VLC@7491a5f
prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && \
ln -s vlc-android/$$VLC$$ ../vlc
build: cd ../ && \
./compile.sh -a "armeabi" --release
buildjni: no
ndk: r10d
- versionName: 1.2.2
versionCode: 1020204
commit: 1.2.2
subdir: vlc-android
gradle: VanillaARMv7
srclibs: VLC@7491a5f
prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && \
ln -s vlc-android/$$VLC$$ ../vlc
build: cd ../ && \
./compile.sh -a "armeabi-v7a" --release
buildjni: no
ndk: r10d
- versionName: 1.2.2
versionCode: 1020205
commit: 1.2.2
subdir: vlc-android
gradle: VanillaX86
srclibs: VLC@7491a5f
prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && \
ln -s vlc-android/$$VLC$$ ../vlc
build: cd ../ && \
./compile.sh -a "x86" --release
buildjni: no
ndk: r10d
- versionName: 1.2.3
versionCode: 1020303
commit: 1.2.3
subdir: vlc-android
gradle: VanillaARMv6fpu
srclibs: VLC@7491a5f
prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && \
ln -s vlc-android/$$VLC$$ ../vlc
build: cd ../ && \
./compile.sh -a "armeabi" --release
buildjni: no
ndk: r10d
- versionName: 1.2.3
versionCode: 1020304
commit: 1.2.3
subdir: vlc-android
gradle: VanillaARMv7
srclibs: VLC@7491a5f
prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && \
ln -s vlc-android/$$VLC$$ ../vlc
build: cd ../ && \
./compile.sh -a "armeabi-v7a" --release
buildjni: no
ndk: r10d
- versionName: 1.2.3
versionCode: 1020305
commit: 1.2.3
subdir: vlc-android
gradle: VanillaX86
srclibs: VLC@7491a5f
prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && \
ln -s vlc-android/$$VLC$$ ../vlc
build: cd ../ && \
./compile.sh -a "x86" --release
buildjni: no
ndk: r10d
- versionName: 1.2.4
versionCode: 1020403
commit: 1.2.4
subdir: vlc-android
gradle: VanillaARMv6fpu
srclibs: VLC@7491a5f
prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && \
ln -s vlc-android/$$VLC$$ ../vlc
build: cd ../ && \
./compile.sh -a "armeabi" --release
buildjni: no
ndk: r10d
- versionName: 1.2.4
versionCode: 1020404
commit: 1.2.4
subdir: vlc-android
gradle: VanillaARMv7
srclibs: VLC@7491a5f
prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && \
ln -s vlc-android/$$VLC$$ ../vlc
build: cd ../ && \
./compile.sh -a "armeabi-v7a" --release
buildjni: no
ndk: r10d
- versionName: 1.2.4
versionCode: 1020405
commit: 1.2.4
subdir: vlc-android
gradle: VanillaX86
srclibs: VLC@7491a5f
prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && \
ln -s vlc-android/$$VLC$$ ../vlc
build: cd ../ && \
./compile.sh -a "x86" --release
buildjni: no
ndk: r10d
- versionName: 1.2.5
versionCode: 1020503
commit: 1.2.5
subdir: vlc-android
gradle: VanillaARMv6fpu
srclibs: VLC@50accb8
prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && \
ln -s vlc-android/$$VLC$$ ../vlc
build: cd ../ && \
./compile.sh -a "armeabi" --release
buildjni: no
ndk: r10d
- versionName: 1.2.5
versionCode: 1020504
commit: 1.2.5
subdir: vlc-android
gradle: VanillaARMv7
srclibs: VLC@50accb8
prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && \
ln -s vlc-android/$$VLC$$ ../vlc
build: cd ../ && \
./compile.sh -a "armeabi-v7a" --release
buildjni: no
ndk: r10d
- versionName: 1.2.5
versionCode: 1020505
commit: 1.2.5
subdir: vlc-android
gradle: VanillaX86
srclibs: VLC@50accb8
prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && \
ln -s vlc-android/$$VLC$$ ../vlc
build: cd ../ && \
./compile.sh -a "x86" --release
buildjni: no
ndk: r10d
- versionName: 1.2.6
versionCode: 1030003
commit: 1.2.6
subdir: vlc-android
gradle: VanillaARMv6fpu
srclibs: VLC@d59b81a
prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && \
ln -s vlc-android/$$VLC$$ ../vlc
build: cd ../ && \
./compile.sh -a "armeabi" --release
buildjni: no
ndk: r10d
- versionName: 1.2.6
versionCode: 1030004
commit: 1.2.6
subdir: vlc-android
gradle: VanillaARMv7
srclibs: VLC@d59b81a
prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && \
ln -s vlc-android/$$VLC$$ ../vlc
build: cd ../ && \
./compile.sh -a "armeabi-v7a" --release
buildjni: no
ndk: r10d
- versionName: 1.2.6
versionCode: 1030005
commit: 1.2.6
subdir: vlc-android
gradle: VanillaX86
srclibs: VLC@d59b81a
prebuild: sed -i -e '/^TARGET/aexit 0' -e 's@\-d \"gradle\/wrapper\"@1@g' ../compile.sh && \
ln -s vlc-android/$$VLC$$ ../vlc
build: cd ../ && \
./compile.sh -a "x86" --release
buildjni: no
ndk: r10d
Maintainer Notes: |
Instructions and dependencies here: http://wiki.videolan.org/AndroidCompile
see http://buildbot.videolan.org/builders/ for version code scheme
The VLC srclib commit can be found out from TESTED_HASH value in compile.sh
On new releases remove the updatecheck and force the CV to the last working
build. This will make sure users don't get notified about the update until
the final build from the BS has been reviewed and tested. Once done, undo
those changes.
# NEW BUILDS
# +0: vanilla
# +1: armv5
# +2: armv6nofpu
# +3: armv6fpu
# +4: armv7
# +5: x86
# +6: mips
# +7: armv8
# +8: x86_64
# +9: mips64
# OLD BUILD SYSTEM
# +0: - (upstream)
# +1: mips
# +2: x86
# +3: arm
# +4: armv7 (CV)
Archive Policy: 9 versions
Auto Update Mode: None
Update Check Mode: Tags
# Only use higher vercode ops, if we do build those arches
Vercode Operation: "%c + 5"
Current Version: 1.2.6
Current Version Code: 1030005

15
tests/metadata/update-pickle.py Executable file
View File

@ -0,0 +1,15 @@
#!/usr/bin/env python2
#
# This script is for updating the .pickle test files when there are changes to
# the default metadata, e.g. adding a new key/tag.
import glob
import pickle
for picklefile in glob.glob('*.pickle'):
p = pickle.load(open(picklefile))
for build in p['builds']:
build['gradleprops'] = []
pickle.dump(p, open(picklefile, 'w'))

View File

@ -109,6 +109,44 @@ cd $WORKSPACE/docs
./gendocs.sh -o html --email admin@f-droid.org fdroid "F-Droid Server Manual"
#------------------------------------------------------------------------------#
echo_header "test metadata checks"
REPOROOT=`create_test_dir`
cd $REPOROOT
touch config.py
mkdir repo
cp $WORKSPACE/tests/urzip.apk $REPOROOT/repo/
set +e
$fdroid build
if [ $? -eq 0 ]; then
echo "This should have failed because there is no metadata!"
exit 1
else
echo "testing metadata checks passed"
fi
set -e
mkdir $REPOROOT/metadata/
cp $WORKSPACE/tests/metadata/org.smssecure.smssecure.txt $REPOROOT/metadata/
$fdroid readmeta
# now make a fake duplicate
touch $REPOROOT/metadata/org.smssecure.smssecure.yaml
set +e
$fdroid readmeta
if [ $? -eq 0 ]; then
echo "This should have failed because there is a duplicate metadata file!"
exit 1
else
echo "testing duplicate metadata checks passed"
fi
set -e
#------------------------------------------------------------------------------#
echo_header "create a source tarball and use that to build a repo"

View File

@ -4,22 +4,23 @@
# http://www.drdobbs.com/testing/unit-testing-with-python/240165163
import inspect
import logging
import optparse
import os
import sys
import unittest
localmodule = os.path.realpath(os.path.join(
os.path.dirname(inspect.getfile(inspect.currentframe())),
'..'))
localmodule = os.path.realpath(
os.path.join(os.path.dirname(inspect.getfile(inspect.currentframe())), '..'))
print('localmodule: ' + localmodule)
if localmodule not in sys.path:
sys.path.insert(0,localmodule)
sys.path.insert(0, localmodule)
import fdroidserver.common
import fdroidserver.update
from fdroidserver.common import FDroidPopen
class UpdateTest(unittest.TestCase):
'''fdroid update'''
@ -39,13 +40,13 @@ class UpdateTest(unittest.TestCase):
return sig
else:
return None
def testGoodGetsig(self):
apkfile = os.path.join(os.path.dirname(__file__), 'urzip.apk')
sig = self.javagetsig(apkfile)
self.assertIsNotNone(sig, "sig is None")
pysig = fdroidserver.update.getsig(apkfile)
self.assertIsNotNone(pysig, "pysig is None")
self.assertIsNotNone(pysig, "pysig is None")
self.assertEquals(sig, fdroidserver.update.getsig(apkfile),
"python sig not equal to java sig!")
self.assertEquals(len(sig), len(pysig),