diff --git a/docs/fdroid.texi b/docs/fdroid.texi index fc9a7869..86d16c7a 100644 --- a/docs/fdroid.texi +++ b/docs/fdroid.texi @@ -455,7 +455,7 @@ fdroid rewritemetadata The following sections describe the fields recognised within the file. @menu -* Category:: +* Categories:: * License:: * Name:: * Auto Name:: @@ -484,19 +484,19 @@ The following sections describe the fields recognised within the file. * No Source Since:: @end menu -@node Category -@section Category +@node Categories +@section Categories -A single category for the application to be placed in. There is no fixed list -of categories - both the client and the web site will automatically show any -categories that exist in any applications. However, if your metadata is -intended for the main F-Droid repository, you should use one of the existing -categories (look at the site/client), or discuss the proposal to add +Any number of categories for the application to be placed in. There is no +fixed list of categories - both the client and the web site will automatically +show any categories that exist in any applications. However, if your metadata +is intended for the main F-Droid repository, you should use one of the +existing categories (look at the site/client), or discuss the proposal to add a new one. -Additional categories can be specified, by using ';' as a separator. In this -case the first is the primary category, and the only one that will be seen by -clients that only understand one. +Categories must be separated by a single comma character, ','. For backwards +compatibility, F-Droid will use the first category given as element +for older clients to at least see one category. @node License @section License diff --git a/fdroidserver/checkupdates.py b/fdroidserver/checkupdates.py index fff84b80..3f752380 100644 --- a/fdroidserver/checkupdates.py +++ b/fdroidserver/checkupdates.py @@ -119,7 +119,8 @@ def check_tags(app, sdk_path): paths = common.manifest_paths(build_dir, flavour) version, vercode, package = common.parse_androidmanifests(paths) if package and package == app['id'] and version and vercode: - print "Manifest exists. Found version %s" % version + print "Manifest exists. Found version %s (%s)" % ( + version, vercode) if int(vercode) > int(hcode): htag = tag hcode = str(int(vercode)) @@ -336,6 +337,7 @@ def main(): tag = None msg = None + vercode = None mode = app['Update Check Mode'] if mode == 'Tags': (version, vercode, tag) = check_tags(app, config['sdk_path']) diff --git a/fdroidserver/common.py b/fdroidserver/common.py index 07f0fbeb..967577aa 100644 --- a/fdroidserver/common.py +++ b/fdroidserver/common.py @@ -399,7 +399,7 @@ class vcs_hg(vcs): if subprocess.call(['hg', 'clone', self.remote, self.local]) !=0: raise VCSException("Hg clone failed") else: - if subprocess.call('hg status -u | xargs rm -rf', + if subprocess.call('hg status -uS | xargs rm -rf', cwd=self.local, shell=True) != 0: raise VCSException("Hg clean failed") if not self.refreshed: @@ -409,11 +409,11 @@ class vcs_hg(vcs): self.refreshed = True rev = str(rev if rev else 'default') - if rev: - revargs = [rev] - if subprocess.call(['hg', 'checkout', '-C'] + revargs, - cwd=self.local) != 0: - raise VCSException("Hg checkout failed") + if not rev: + return + if subprocess.call(['hg', 'update', '-C', rev], + cwd=self.local) != 0: + raise VCSException("Hg checkout failed") def gettags(self): p = subprocess.Popen(['hg', 'tags', '-q'], @@ -565,7 +565,7 @@ def parse_metadata(metafile): # Defaults for fields that come from metadata... thisinfo['Name'] = None thisinfo['Auto Name'] = '' - thisinfo['Category'] = 'None' + thisinfo['Categories'] = 'None' thisinfo['Description'] = [] thisinfo['Summary'] = '' thisinfo['License'] = 'Unknown' @@ -655,6 +655,8 @@ def parse_metadata(metafile): if len(value) > 0: raise MetaDataException("Unexpected text on same line as " + field + " in " + metafile.name) elif fieldtype == 'string': + if field == 'Category' and thisinfo['Categories'] == 'None': + thisinfo['Categories'] = value.replace(';',',') thisinfo[field] = value elif fieldtype == 'flag': if value == 'Yes': @@ -775,7 +777,7 @@ def write_metadata(dest, app): writefield('Disabled') if app['AntiFeatures']: writefield('AntiFeatures') - writefield('Category') + writefield('Categories') writefield('License') writefield('Web Site') writefield('Source Code') @@ -1125,7 +1127,7 @@ def parse_androidmanifests(paths): vnsearch = re.compile(r'.*android:versionName="([^"]+?)".*').search psearch = re.compile(r'.*package="([^"]+)".*').search - vcsearch_g = re.compile(r'.*versionCode[ =]*([0-9]+?).*').search + vcsearch_g = re.compile(r'.*versionCode[ =]*([0-9]+?)[^\d].*').search vnsearch_g = re.compile(r'.*versionName[ =]*"([^"]+?)".*').search psearch_g = re.compile(r'.*packageName[ =]*"([^"]+)".*').search diff --git a/fdroidserver/stats.py b/fdroidserver/stats.py index 661da4e1..b072aa61 100644 --- a/fdroidserver/stats.py +++ b/fdroidserver/stats.py @@ -183,9 +183,9 @@ def main(): ctgs = {} for app in metaapps: - if app['Category'] is None: + if app['Categories'] is None: continue - categories = [c.strip() for c in app['Category'].split(';')] + categories = [c.strip() for c in app['Categories'].split(',')] for category in categories: if category in ctgs: ctgs[category] += 1; diff --git a/fdroidserver/update.py b/fdroidserver/update.py index ac7565a4..3fc36708 100644 --- a/fdroidserver/update.py +++ b/fdroidserver/update.py @@ -526,14 +526,13 @@ def make_index(apps, apks, repodir, archive, categories): addElement('desc', common.description_html(app['Description'], linkres), doc, apel) addElement('license', app['License'], doc, apel) - if 'Category' in app: + if 'Categories' in app: + appcategories = [c.strip() for c in app['Categories'].split(',')] + addElement('categories', ','.join(appcategories), doc, apel) # We put the first (primary) category in LAST, which will have # the desired effect of making clients that only understand one # category see that one. - cats = app['Category'].split(';') - cats.reverse() - for cat in cats: - addElement('category', cat, doc, apel) + addElement('category', appcategories[0], doc, apel) addElement('web', app['Web Site'], doc, apel) addElement('source', app['Source Code'], doc, apel) addElement('tracker', app['Issue Tracker'], doc, apel) @@ -731,7 +730,7 @@ def main(): # Generate a list of categories... categories = [] for app in apps: - cats = app['Category'].split(';') + cats = app['Categories'].split(',') for cat in cats: if cat not in categories: categories.append(cat)