This allows us to run checks and fix types only on those that were
really modified. On our fdroiddata repo, with 2k apps with many unset
fields and flags, this reduces readmeta runtime from ~1.3s to ~1.1s.
self.comments = {}
self.added = None
self.lastupdated = None
self.comments = {}
self.added = None
self.lastupdated = None
# Translates human-readable field names to attribute names, e.g.
# 'Auto Name' to 'AutoName'
# Translates human-readable field names to attribute names, e.g.
# 'Auto Name' to 'AutoName'
raise MetaDataException('Unrecognised app field: ' + f)
k = App.field_to_attr(f)
self.__dict__[k] = v
raise MetaDataException('Unrecognised app field: ' + f)
k = App.field_to_attr(f)
self.__dict__[k] = v
# Appends to the value associated to a field name, e.g. 'Auto Name'
def append_field(self, f, v):
# Appends to the value associated to a field name, e.g. 'Auto Name'
def append_field(self, f, v):
self.antcommands = None
self.novcheck = False
self.antcommands = None
self.novcheck = False
+ self._modified = set()
+
def get_flag(self, f):
if f not in build_flags:
raise MetaDataException('Unrecognised build flag: ' + f)
def get_flag(self, f):
if f not in build_flags:
raise MetaDataException('Unrecognised build flag: ' + f)
if f not in build_flags:
raise MetaDataException('Unrecognised build flag: ' + f)
self.__dict__[f] = v
if f not in build_flags:
raise MetaDataException('Unrecognised build flag: ' + f)
self.__dict__[f] = v
def append_flag(self, f, v):
if f not in build_flags:
def append_flag(self, f, v):
if f not in build_flags:
def post_metadata_parse(app):
for k, v in app.__dict__.iteritems():
def post_metadata_parse(app):
for k, v in app.__dict__.iteritems():
+ if k not in app._modified:
+ continue
if type(v) in (float, int):
app.__dict__[k] = str(v)
for build in app.builds:
for k, v in build.__dict__.iteritems():
if type(v) in (float, int):
app.__dict__[k] = str(v)
for build in app.builds:
for k, v in build.__dict__.iteritems():
+ if k not in build._modified:
+ continue
if type(v) in (float, int):
build.__dict__[k] = str(v)
continue
if type(v) in (float, int):
build.__dict__[k] = str(v)
continue