from distutils.version import LooseVersion
import logging
import copy
+import urllib.parse
from . import _
from . import common
raise FDroidException('Missing Update Check Data')
urlcode, codeex, urlver, verex = app.UpdateCheckData.split('|')
+ parsed = urllib.parse.urlparse(urlcode)
+ if not parsed.netloc or not parsed.scheme or parsed.scheme != 'https':
+ raise FDroidException(_('UpdateCheckData has invalid URL: {url}').format(url=urlcode))
+ if urlver != '.':
+ parsed = urllib.parse.urlparse(urlver)
+ if not parsed.netloc or not parsed.scheme or parsed.scheme != 'https':
+ raise FDroidException(_('UpdateCheckData has invalid URL: {url}').format(url=urlcode))
vercode = "99999999"
if len(urlcode) > 0:
msg = 'Invalid update check method'
if version and vercode and app.VercodeOperation:
+ if not common.VERCODE_OPERATION_RE.match(app.VercodeOperation):
+ raise MetaDataException(_('Invalid VercodeOperation: {field}')
+ .format(field=app.VercodeOperation))
oldvercode = str(int(vercode))
op = app.VercodeOperation.replace("%c", oldvercode)
vercode = str(eval(op))
help=_("Only process apps with auto-updates"))
parser.add_argument("--commit", action="store_true", default=False,
help=_("Commit changes"))
+ parser.add_argument("--allow-dirty", action="store_true", default=False,
+ help=_("Run on git repo that has uncommitted changes"))
parser.add_argument("--gplay", action="store_true", default=False,
help=_("Only print differences with the Play Store"))
metadata.add_metadata_arguments(parser)
config = common.read_config(options)
+ if not options.allow_dirty:
+ status = subprocess.check_output(['git', 'status', '--porcelain'])
+ if status:
+ logging.error(_('Build metadata git repo has uncommited changes!'))
+ sys.exit(1)
+
# Get all apps...
allapps = metadata.read_metadata()