From 524aa22ab1b44c4cac6d7c803263e67c1dd84e31 Mon Sep 17 00:00:00 2001 From: Ciaran Gultnieks Date: Sat, 31 Dec 2011 12:01:16 +0000 Subject: [PATCH 01/19] Hacky alternative market version checker --- checkmarket2.py | 90 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100755 checkmarket2.py diff --git a/checkmarket2.py b/checkmarket2.py new file mode 100755 index 00000000..760c5b59 --- /dev/null +++ b/checkmarket2.py @@ -0,0 +1,90 @@ +#!/usr/bin/env python2 +# -*- coding: utf-8 -*- +# +# checkmarket2.py - part of the FDroid server tools +# Copyright (C) 2010-11, Ciaran Gultnieks, ciaran@ciarang.com +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +import sys +import os +import shutil +import re +import urllib +import time +from optparse import OptionParser + +import common + +#Read configuration... +execfile('config.py') + + +# Parse command line... +parser = OptionParser() +parser.add_option("-v", "--verbose", action="store_true", default=False, + help="Spew out even more information than normal") +(options, args) = parser.parse_args() + +# Get all apps... +apps = common.read_metadata(options.verbose) + +for app in apps: + + if app['disabled']: + print "Skipping %s: disabled" % app['id'] + else: + + print "Processing " + app['id'] + url = 'http://market.android.com/details?id=' + app['id'] + page = urllib.urlopen(url).read() + + version = None + vercode = None + + m = re.search('
([^>]+)
', page) + if m: + version = m.group(1) + + m = re.search('data-paramValue="(\d+)">
Latest Version<', page) + if m: + vercode = m.group(1) + + if vercode is None: + print "...couldn't find version code" + elif version is None: + print "...couldn't find version" + elif vercode == app['marketvercode'] and version == app['marketversion']: + print "...up to date" + else: + print '...updating to version:' + version + ' vercode:' + vercode + newdata = '' + metafile = os.path.join('metadata', app['id'] + '.txt') + mf = open(metafile, 'r') + for line in mf: + if line.startswith('Market Version:'): + newdata += 'Market Version:' + version + '\n' + elif line.startswith('Market Version Code:'): + newdata += 'Market Version Code:' + vercode + '\n' + else: + newdata += line + mf.close() + mf = open(metafile, 'w') + mf.write(newdata) + mf.close() + + time.sleep(5) + +print "Finished." + From bed72d335b4f704ca6e5fc5761e089737af56877 Mon Sep 17 00:00:00 2001 From: Ciaran Gultnieks Date: Sat, 31 Dec 2011 13:19:50 +0000 Subject: [PATCH 02/19] Metadata: version updates --- metadata/com.andrewshu.android.reddit.txt | 5 +++-- metadata/com.android.keepass.txt | 5 +++-- metadata/com.boardgamegeek.txt | 5 +++-- metadata/com.commonsware.android.arXiv.txt | 5 +++-- metadata/com.eleybourn.bookcatalogue.txt | 5 +++-- metadata/com.fsck.k9.txt | 4 ++-- metadata/com.ghostsq.commander.txt | 4 ++-- metadata/com.google.android.maps.mytracks.txt | 5 +++-- metadata/com.zegoggles.gist.txt | 4 ++-- metadata/net.rocrail.androc.txt | 5 +++-- metadata/net.sourceforge.servestream.txt | 4 ++-- metadata/net.tedstein.AndroSS.txt | 4 ++-- metadata/org.coolreader.txt | 5 +++-- metadata/org.eehouse.android.xw4.txt | 4 ++-- metadata/org.helllabs.android.xmp.txt | 4 ++-- metadata/org.jtb.alogcat.txt | 5 +++-- metadata/org.pocketworkstation.pckeyboard.txt | 4 ++-- metadata/org.scoutant.blokish.txt | 5 +++-- metadata/org.sipdroid.sipua.txt | 2 +- metadata/org.wahtod.wififixer.txt | 4 ++-- metadata/org.wordpress.android.txt | 4 ++-- 21 files changed, 51 insertions(+), 41 deletions(-) diff --git a/metadata/com.andrewshu.android.reddit.txt b/metadata/com.andrewshu.android.reddit.txt index 3308cacb..a729fdd3 100644 --- a/metadata/com.andrewshu.android.reddit.txt +++ b/metadata/com.andrewshu.android.reddit.txt @@ -21,6 +21,7 @@ Build Version:1.2.0a,71,e37439e12d11ff17a841,prebuild=rsync -r lib/ libs Build Version:1.2.1,73,e35fd128c954d41e24abf91b71f301740f6ca483,prebuild=rsync -r lib/ libs Build Version:1.2.1.2,75,28c98a7,prebuild=rsync -r lib/ libs,target=android-9 Build Version:1.2.1.3,76,143892b558,prebuild=rsync -r lib/ libs,target=android-9 +Build Version:1.2.1.5,78,!more dependency shuffling required and watch out for the proguard config -Market Version:1.2.1.3 -Market Version Code:76 +Market Version:1.2.1.5 +Market Version Code:78 diff --git a/metadata/com.android.keepass.txt b/metadata/com.android.keepass.txt index 191a0fd5..207b8232 100644 --- a/metadata/com.android.keepass.txt +++ b/metadata/com.android.keepass.txt @@ -19,7 +19,8 @@ Build Version:1.9.1,77,v1.9.1-2 Build Version:1.9.2,78,v1.9.2 Build Version:1.9.3.1,80,v1.9.3.1 Build Version:1.9.5,82,v1.9.5 +Build Version:1.9.6,83,v1.9.6 -Market Version:1.9.5 -Market Version Code:82 +Market Version:1.9.6 +Market Version Code:83 diff --git a/metadata/com.boardgamegeek.txt b/metadata/com.boardgamegeek.txt index 83bda4de..8f0b2484 100644 --- a/metadata/com.boardgamegeek.txt +++ b/metadata/com.boardgamegeek.txt @@ -14,6 +14,7 @@ Repo Type:svn Repo:http://boardgamegeek.googlecode.com/svn/trunk/ Build Version:3.3,20,r416,subdir=BoardGameGeek,target=android-8 +Build Version:3.4,21,r525,subdir=BoardGameGeek,target=android-8 -Market Version:3.3 -Market Version Code:20 +Market Version:3.4 +Market Version Code:21 diff --git a/metadata/com.commonsware.android.arXiv.txt b/metadata/com.commonsware.android.arXiv.txt index ae30a18c..48b1dc6f 100644 --- a/metadata/com.commonsware.android.arXiv.txt +++ b/metadata/com.commonsware.android.arXiv.txt @@ -19,6 +19,7 @@ Build Version:2.0.14,100,!No source in repo,target=android-11 Build Version:2.0.16,102,!No source in repo,target=android-11 #No source added to repo for a long time. Question here.... #https://answers.launchpad.net/arxivdroid/+question/173825 +Build Version:2.0.20,106,!No source in repo -Market Version:2.0.16 -Market Version Code:102 +Market Version:2.0.20 +Market Version Code:106 diff --git a/metadata/com.eleybourn.bookcatalogue.txt b/metadata/com.eleybourn.bookcatalogue.txt index c5aa69fe..1405ce75 100644 --- a/metadata/com.eleybourn.bookcatalogue.txt +++ b/metadata/com.eleybourn.bookcatalogue.txt @@ -25,7 +25,8 @@ Build Version:3.6.1,61,75e2f8328ff9a2602fe1,target=android-9 Build Version:3.6.2,62,da37baecb2c90aa2b306,target=android-9 Build Version:3.7,68,514799b45d18cf6dbc42065adf08abbdc9e2f16f,target=android-9 Build Version:3.8,69,bb85065cb6045df773cd681ac8bad55a6818d48a,target=android-9 +Build Version:3.8.1,70,890b6affe8a64,target=android-9 -Market Version:3.8 -Market Version Code:69 +Market Version:3.8.1 +Market Version Code:70 diff --git a/metadata/com.fsck.k9.txt b/metadata/com.fsck.k9.txt index a56a4e7a..a2e2b5e6 100644 --- a/metadata/com.fsck.k9.txt +++ b/metadata/com.fsck.k9.txt @@ -15,5 +15,5 @@ Repo:https://github.com/k9mail/k-9.git #Note - k9 is currently developer's binary only #Build Version:3.906,14006,3.906,oldsdkloc=yes,patch=target9to10.patch,target=android-10 -Market Version:3.802 -Market Version Code:13022 +Market Version:4.001 +Market Version Code:14019 diff --git a/metadata/com.ghostsq.commander.txt b/metadata/com.ghostsq.commander.txt index fcd57584..b4becd21 100644 --- a/metadata/com.ghostsq.commander.txt +++ b/metadata/com.ghostsq.commander.txt @@ -27,5 +27,5 @@ prebuild=sed -ri 's/(debuggable)="true"/\1="false"/' AndroidManifest.xml Build Version:1.36.4,110,161,\ prebuild=sed -ri 's/(debuggable)="true"/\1="false"/' AndroidManifest.xml -Market Version:1.38.1 -Market Version Code:142 +Market Version:1.39.2 +Market Version Code:152 diff --git a/metadata/com.google.android.maps.mytracks.txt b/metadata/com.google.android.maps.mytracks.txt index ba688e81..5a6f181a 100644 --- a/metadata/com.google.android.maps.mytracks.txt +++ b/metadata/com.google.android.maps.mytracks.txt @@ -1,3 +1,4 @@ +Disabled:Needs google maps API key, and some build problems resolving Use Built:Yes License:Apache2 AntiFeatures:NonFreeDep @@ -21,5 +22,5 @@ Build Version:1.1.3,26,!Doesn't build - needs dependencies building now I think #Still doesn't build... #Build Version:1.1.9,22,v1.1.9,subdir=MyTracks,encoding=utf-8,target=android-13 -Market Version:1.1.11 -Market Version Code:34 +Market Version:1.1.13 +Market Version Code:36 diff --git a/metadata/com.zegoggles.gist.txt b/metadata/com.zegoggles.gist.txt index 53e515d1..a0419ab5 100644 --- a/metadata/com.zegoggles.gist.txt +++ b/metadata/com.zegoggles.gist.txt @@ -12,5 +12,5 @@ this Android app. Repo Type:git Repo:https://github.com/jberkel/gist-it.git -Market Version:0.1.2 -Market Version Code:3 +Market Version:0.1.4 +Market Version Code:5 diff --git a/metadata/net.rocrail.androc.txt b/metadata/net.rocrail.androc.txt index cd0bc4b6..fb63fe3b 100644 --- a/metadata/net.rocrail.androc.txt +++ b/metadata/net.rocrail.androc.txt @@ -27,6 +27,7 @@ Build Version:1.4.289,289,289 Build Version:1.5.315,315,315 Build Version:1.5.317,317,!wrong version code Build Version:1.5.324,324,324 +Build Version:1.5.324,324,324 -Market Version:338 -Market Version Code:338 +Market Version:339 +Market Version Code:339 diff --git a/metadata/net.sourceforge.servestream.txt b/metadata/net.sourceforge.servestream.txt index 944108d3..a58594b1 100644 --- a/metadata/net.sourceforge.servestream.txt +++ b/metadata/net.sourceforge.servestream.txt @@ -22,5 +22,5 @@ Build Version:0.2.11,46,614,prebuild=mv lib/ libs/ #Still guessing, see previous comment Build Version:0.3.1,48,659,prebuild=mv lib/ libs/ -Market Version:0.3.2 -Market Version Code:49 +Market Version:0.4.1 +Market Version Code:51 diff --git a/metadata/net.tedstein.AndroSS.txt b/metadata/net.tedstein.AndroSS.txt index 5f084fcb..c9f77597 100644 --- a/metadata/net.tedstein.AndroSS.txt +++ b/metadata/net.tedstein.AndroSS.txt @@ -20,5 +20,5 @@ Build Version:0.2.2,8,v0.2.2,buildjni=yes,target=android-8 Build Version:0.3.-1,10,v0.3.-1,buildjni=yes,target=android-8 Build Version:0.3.2,13,v0.3.2,buildjni=yes,target=android-8 -Market Version:0.3.2 -Market Version Code:13 +Market Version:0.4.1 +Market Version Code:15 diff --git a/metadata/org.coolreader.txt b/metadata/org.coolreader.txt index e6e338ca..f515884e 100644 --- a/metadata/org.coolreader.txt +++ b/metadata/org.coolreader.txt @@ -47,6 +47,7 @@ Build Version:3.0.53-18,263,c555ecd66d18b218fb255733c8b33a0825992f76,subdir=andr Build Version:3.0.53-19,264,cr3.0.53-19,subdir=android,rm=android/build.properties,buildjni=yes Build Version:3.0.54-5,275,cr3.0.54-5,subdir=android,rm=android/build.properties,buildjni=yes Build Version:3.0.54-9,279,cr3.0.54-9,subdir=android,rm=android/build.properties,buildjni=yes +Build Version:3.0.54-33,303,cr3.0.54-33,subdir=android,rm=android/build.properties,buildjni=yes -Market Version:3.0.54-9 -Market Version Code:279 +Market Version:3.0.54-33 +Market Version Code:303 diff --git a/metadata/org.eehouse.android.xw4.txt b/metadata/org.eehouse.android.xw4.txt index e18983b2..c1fd7c06 100644 --- a/metadata/org.eehouse.android.xw4.txt +++ b/metadata/org.eehouse.android.xw4.txt @@ -20,5 +20,5 @@ Build Version:4.4 beta 38,30,android_beta_38,subdir=xwords4/android/XWords4 Build Version:4.4 beta 39,31,android_beta_39,subdir=xwords4/android/XWords4,target=android-8,prebuild=cd .. && ./scripts/genvers.sh >ant_out.txt -Market Version:4.4 beta 39 -Market Version Code:31 +Market Version:4.4 +Market Version Code:33 diff --git a/metadata/org.helllabs.android.xmp.txt b/metadata/org.helllabs.android.xmp.txt index e9fc3295..464757a6 100644 --- a/metadata/org.helllabs.android.xmp.txt +++ b/metadata/org.helllabs.android.xmp.txt @@ -20,5 +20,5 @@ Build Version:2.1.0,15,639549fda2111cb800fabe468b4a64bf4ae27003,\ buildjni=yes,subdir=src/android/project,target=android-8,\ insertversion=2.1.0[^"]* -Market Version:2.3.0 -Market Version Code:19 +Market Version:2.4.0 +Market Version Code:20 diff --git a/metadata/org.jtb.alogcat.txt b/metadata/org.jtb.alogcat.txt index 44193029..da8dfccc 100644 --- a/metadata/org.jtb.alogcat.txt +++ b/metadata/org.jtb.alogcat.txt @@ -9,8 +9,6 @@ Description: Log viewer - an app equivalent of logcat from the Android shell, or adb logcat from the SDK tools. . -Market Version:2.3.2 -Market Version Code:38 Repo Type:svn Repo:http://alogcat.googlecode.com/svn/trunk @@ -19,3 +17,6 @@ Build Version:2.1.6,34,28 Build Version:2.3,36,30 Build Version:2.3.2,38,31,prebuild=find . -type f -name \*.java -print0 | xargs -0 sed -i "s/^import org\.jtb\.alogcat\.donate\.R;$/import org.jtb.alogcat.R;/g" && sed -i "s/org.jtb.alogcat.donate/org.jtb.alogcat/" AndroidManifest.xml +Market Version:2.4 +Market Version Code:39 + diff --git a/metadata/org.pocketworkstation.pckeyboard.txt b/metadata/org.pocketworkstation.pckeyboard.txt index 2caf1e55..4d1f84ef 100644 --- a/metadata/org.pocketworkstation.pckeyboard.txt +++ b/metadata/org.pocketworkstation.pckeyboard.txt @@ -19,5 +19,5 @@ Build Version:v1.18,1018,8298cd8728c2,subdir=java,target=android-11,buildjni=yes Build Version:v1.20,1020,e703fa82a4c3,subdir=java,target=android-11,buildjni=yes Build Version:v1.22,1022,154e21230e81,subdir=java,target=android-11,buildjni=yes -Market Version:v1.22 -Market Version Code:1022 +Market Version:v1.27 +Market Version Code:1027 diff --git a/metadata/org.scoutant.blokish.txt b/metadata/org.scoutant.blokish.txt index 9347b6bd..b8b88b1d 100644 --- a/metadata/org.scoutant.blokish.txt +++ b/metadata/org.scoutant.blokish.txt @@ -15,6 +15,7 @@ Repo:git://github.com/scoutant/blokish.git Build Version:0.5,1,ca2e9096c6d5140c14e7,target=android-9 Build Version:1.4,7,82ca58cdd26797f9ba9519e79c54031282d066af,target=android-9 Build Version:1.5,8,e6ab83e8832f03d78bf3f8deae33acb22a7ba520,target=android-9 +Build Version:1.6,9,ebd1b966b70e,target=android-9 -Market Version:1.5 -Market Version Code:8 +Market Version:1.6 +Market Version Code:9 diff --git a/metadata/org.sipdroid.sipua.txt b/metadata/org.sipdroid.sipua.txt index f8f65a9c..735464d2 100644 --- a/metadata/org.sipdroid.sipua.txt +++ b/metadata/org.sipdroid.sipua.txt @@ -7,5 +7,5 @@ Summary:A SIP (VOIP) client Description: A SIP (VOIP) client with video calling capabilities. . -Market Version:2.4 beta +Market Version:2.4 Market Version Code:87 diff --git a/metadata/org.wahtod.wififixer.txt b/metadata/org.wahtod.wififixer.txt index dc698d83..e5addcb9 100644 --- a/metadata/org.wahtod.wififixer.txt +++ b/metadata/org.wahtod.wififixer.txt @@ -20,5 +20,5 @@ Build Version:0.8.0.3.1,770,59b8e66a0409a5d4c6a6,subdir=wififixer,target=android Build Version:0.8.0.5,822,846b5c057e886f8436eb,subdir=wififixer,target=android-8 Build Version:0.8.0.6,838,81e9557f73d8529755cd,subdir=wififixer,target=android-8 -Market Version:0.8.0.6 -Market Version Code:838 +Market Version:0.9.0 +Market Version Code:911 diff --git a/metadata/org.wordpress.android.txt b/metadata/org.wordpress.android.txt index 860eb349..0c9540fd 100644 --- a/metadata/org.wordpress.android.txt +++ b/metadata/org.wordpress.android.txt @@ -21,5 +21,5 @@ Repo:http://android.svn.wordpress.org/trunk/ Build Version:1.3.9,31,202,prebuild=mkdir libs && mv *.jar libs && sed -i "s@checkStats(accounts.size());@// MY PRIVACY > YOUR STATS@" src/org/wordpress/android/wpAndroid.java,encoding=utf-8 Build Version:1.4.1,33,228,prebuild=mkdir libs && mv *.jar libs && sed -i "s@checkStats(accounts.size());@// MY PRIVACY > YOUR STATS@" src/org/wordpress/android/wpAndroid.java,encoding=utf-8 -Market Version:1.5.1 -Market Version Code:36 +Market Version:2.0.1 +Market Version Code:39 From 1f0f1a65ee90b95b633e82a95381f09f6cf8abe2 Mon Sep 17 00:00:00 2001 From: Ciaran Gultnieks Date: Mon, 2 Jan 2012 16:50:49 +0000 Subject: [PATCH 03/19] Unescape scraped version names --- checkmarket2.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/checkmarket2.py b/checkmarket2.py index 760c5b59..d1568291 100755 --- a/checkmarket2.py +++ b/checkmarket2.py @@ -24,7 +24,7 @@ import re import urllib import time from optparse import OptionParser - +import HTMLParser import common #Read configuration... @@ -40,6 +40,8 @@ parser.add_option("-v", "--verbose", action="store_true", default=False, # Get all apps... apps = common.read_metadata(options.verbose) +html_parser = HTMLParser.HTMLParser() + for app in apps: if app['disabled']: @@ -55,15 +57,15 @@ for app in apps: m = re.search('
([^>]+)
', page) if m: - version = m.group(1) + version = html_parser.unescape(m.group(1)) m = re.search('data-paramValue="(\d+)">
Latest Version<', page) if m: vercode = m.group(1) - if vercode is None: + if not vercode: print "...couldn't find version code" - elif version is None: + elif not version: print "...couldn't find version" elif vercode == app['marketvercode'] and version == app['marketversion']: print "...up to date" From 4f66ac784ad153f1b2a165184d851be7ca1040c2 Mon Sep 17 00:00:00 2001 From: Kevin Everets Date: Fri, 23 Dec 2011 10:22:46 -0500 Subject: [PATCH 04/19] Metadata: added SparkleShare --- metadata/org.sparkleshare.android.txt | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 metadata/org.sparkleshare.android.txt diff --git a/metadata/org.sparkleshare.android.txt b/metadata/org.sparkleshare.android.txt new file mode 100644 index 00000000..735fa5fe --- /dev/null +++ b/metadata/org.sparkleshare.android.txt @@ -0,0 +1,18 @@ +License:GPLv3 +Category:System +Web Site:http://www.sparkleshare.org +Source Code:https://github.com/NewProggie/SparkleShare-Android +Issue Tracker:https://github.com/NewProggie/SparkleShare-Android/issues +Summary:distributed collaboration and sharing tool +Description: +SparkleShare is a collaboration and sharing tool that is designed to keep +things simple and to stay out of your way. + +Setup your own cloud with SparkleShare (http://sparkleshare.org/) and +browse your files right from your Android device. +. + +Repo Type:git +Repo:https://github.com/NewProggie/SparkleShare-Android.git + +Build Version:1.0,1,a9e23f0f9ae6161a786bf48cb48ab3dec20110c9,prebuild=rm -rf gen/ && rm -rf bin/,target=android-7 From 4ba770386af5e6cd2c74a876ba8d5ecef8bbdf32 Mon Sep 17 00:00:00 2001 From: okhin Date: Fri, 23 Dec 2011 20:00:18 +0100 Subject: [PATCH 05/19] Adding TextSecure to Fdroid --- metadata/org.textsecure.txt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 metadata/org.textsecure.txt diff --git a/metadata/org.textsecure.txt b/metadata/org.textsecure.txt new file mode 100644 index 00000000..fe02fe71 --- /dev/null +++ b/metadata/org.textsecure.txt @@ -0,0 +1,15 @@ +License:GPLv3 +Category:Cryptography +Web Site:http://www.whispersys.com/ +Source Code:https://github.com/WhisperSystems/TextSecure +Issue Tracker: +Donate: +Summary:Encrypt your text message +Description:TextSecure is a drop-in replacement for the standard text messaging application, allowing you to send and receive text messages as normal. All text messages sent or received with TextSecure are stored in an encrypted database on your phone, and text messages are encrypted during transmission when communicating with someone else also using TextSecure. +. + +Repo Type:git +Repo:git:https://github.com/WhisperSystems/TextSecure + +Build Version:0.5.7,1,6a30867fd481474e8634b508d524863bc8a6b565 + From 66ef0f8b67fb9010c7b9132ae603a9a52b0c4fc9 Mon Sep 17 00:00:00 2001 From: Ciaran Gultnieks Date: Mon, 2 Jan 2012 22:00:38 +0000 Subject: [PATCH 06/19] TextSecure corrections --- metadata/org.textsecure.txt | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/metadata/org.textsecure.txt b/metadata/org.textsecure.txt index fe02fe71..00ca9444 100644 --- a/metadata/org.textsecure.txt +++ b/metadata/org.textsecure.txt @@ -4,12 +4,17 @@ Web Site:http://www.whispersys.com/ Source Code:https://github.com/WhisperSystems/TextSecure Issue Tracker: Donate: -Summary:Encrypt your text message -Description:TextSecure is a drop-in replacement for the standard text messaging application, allowing you to send and receive text messages as normal. All text messages sent or received with TextSecure are stored in an encrypted database on your phone, and text messages are encrypted during transmission when communicating with someone else also using TextSecure. +Summary:SMS Encryption +Description: +TextSecure is a drop-in replacement for the standard text messaging application, +allowing you to send and receive text messages as normal. All text messages +sent or received with TextSecure are stored in an encrypted database on your +phone, and text messages are encrypted during transmission when communicating +with someone else also using TextSecure. . Repo Type:git -Repo:git:https://github.com/WhisperSystems/TextSecure +Repo:https://github.com/WhisperSystems/TextSecure.git -Build Version:0.5.7,1,6a30867fd481474e8634b508d524863bc8a6b565 +Build Version:0.5.7,21,6a30867fd481474e8634b508d524863bc8a6b565,target=android-9 From 39d6b50b8da3b05614f437df2617dcdd297f5550 Mon Sep 17 00:00:00 2001 From: Ciaran Gultnieks Date: Mon, 2 Jan 2012 23:08:31 +0000 Subject: [PATCH 07/19] Further textsecure correction --- metadata/{org.textsecure.txt => org.thoughtcrime.securesms.txt} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename metadata/{org.textsecure.txt => org.thoughtcrime.securesms.txt} (100%) diff --git a/metadata/org.textsecure.txt b/metadata/org.thoughtcrime.securesms.txt similarity index 100% rename from metadata/org.textsecure.txt rename to metadata/org.thoughtcrime.securesms.txt From b04eeaf5a21006a4fa422c65c3955edf40512622 Mon Sep 17 00:00:00 2001 From: Ciaran Gultnieks Date: Mon, 2 Jan 2012 23:28:06 +0000 Subject: [PATCH 08/19] Metadata - version updates --- metadata/com.zegoggles.smssync.txt | 4 ++-- metadata/org.ttrssreader.txt | 4 ++-- metadata/org.wahtod.wififixer.txt | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/metadata/com.zegoggles.smssync.txt b/metadata/com.zegoggles.smssync.txt index 8a3a2bbd..60741408 100644 --- a/metadata/com.zegoggles.smssync.txt +++ b/metadata/com.zegoggles.smssync.txt @@ -16,5 +16,5 @@ Repo:https://github.com/jberkel/sms-backup-plus.git Build Version:1.4.3,1404,1.4.3 Build Version:1.4.4,1405,1.4.4,target=android-9,prebuild=mv lib libs -Market Version:1.4.4 -Market Version Code:1405 +Market Version:1.4.5 +Market Version Code:1406 diff --git a/metadata/org.ttrssreader.txt b/metadata/org.ttrssreader.txt index 8cdd79eb..08423338 100644 --- a/metadata/org.ttrssreader.txt +++ b/metadata/org.ttrssreader.txt @@ -39,5 +39,5 @@ Build Version:1.07,1075,1.07 (4),subdir=ttrss-reader,target=android-8 Build Version:1.21,1210,1.21,subdir=ttrss-reader,target=android-8 -Market Version:1.21 -Market Version Code:1210 +Market Version:1.22 +Market Version Code:1220 diff --git a/metadata/org.wahtod.wififixer.txt b/metadata/org.wahtod.wififixer.txt index e5addcb9..0f8ca5ee 100644 --- a/metadata/org.wahtod.wififixer.txt +++ b/metadata/org.wahtod.wififixer.txt @@ -20,5 +20,5 @@ Build Version:0.8.0.3.1,770,59b8e66a0409a5d4c6a6,subdir=wififixer,target=android Build Version:0.8.0.5,822,846b5c057e886f8436eb,subdir=wififixer,target=android-8 Build Version:0.8.0.6,838,81e9557f73d8529755cd,subdir=wififixer,target=android-8 -Market Version:0.9.0 -Market Version Code:911 +Market Version:0.9.0.1 +Market Version Code:915 From e035d79383fc46982a37a042c3e8a4a514edabc5 Mon Sep 17 00:00:00 2001 From: Ciaran Gultnieks Date: Mon, 2 Jan 2012 23:41:29 +0000 Subject: [PATCH 09/19] SMSBackupPlus now includes proprietary blob, not updating --- metadata/com.zegoggles.smssync.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/metadata/com.zegoggles.smssync.txt b/metadata/com.zegoggles.smssync.txt index 60741408..9936253a 100644 --- a/metadata/com.zegoggles.smssync.txt +++ b/metadata/com.zegoggles.smssync.txt @@ -8,6 +8,10 @@ Summary:Backup SMS and call logs to IMAP Description: Backups up SMS and call log data from the device to an IMAP server, or Gmail. + +There are newer versions of this application avaiable elsewhere, but +these include non-free software components and are not available via +F-Droid. . Repo Type:git @@ -15,6 +19,7 @@ Repo:https://github.com/jberkel/sms-backup-plus.git Build Version:1.4.3,1404,1.4.3 Build Version:1.4.4,1405,1.4.4,target=android-9,prebuild=mv lib libs +Build Versioni:1.4.5,1406,!Non-free blob now included Market Version:1.4.5 Market Version Code:1406 From 14bab57b2a9e971c69aca915c62abd140504bda9 Mon Sep 17 00:00:00 2001 From: Ciaran Gultnieks Date: Mon, 2 Jan 2012 23:45:27 +0000 Subject: [PATCH 10/19] Metadata: version updates --- metadata/com.zegoggles.smssync.txt | 2 +- metadata/org.ttrssreader.txt | 2 ++ metadata/org.wahtod.wififixer.txt | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/metadata/com.zegoggles.smssync.txt b/metadata/com.zegoggles.smssync.txt index 9936253a..3d0b5c65 100644 --- a/metadata/com.zegoggles.smssync.txt +++ b/metadata/com.zegoggles.smssync.txt @@ -19,7 +19,7 @@ Repo:https://github.com/jberkel/sms-backup-plus.git Build Version:1.4.3,1404,1.4.3 Build Version:1.4.4,1405,1.4.4,target=android-9,prebuild=mv lib libs -Build Versioni:1.4.5,1406,!Non-free blob now included +Build Version:1.4.5,1406,!Non-free blob now included Market Version:1.4.5 Market Version Code:1406 diff --git a/metadata/org.ttrssreader.txt b/metadata/org.ttrssreader.txt index 08423338..859aaa57 100644 --- a/metadata/org.ttrssreader.txt +++ b/metadata/org.ttrssreader.txt @@ -4,6 +4,7 @@ Category:Internet Web Site:http://code.google.com/p/ttrss-reader-fork/ Source Code:http://code.google.com/p/ttrss-reader-fork/source/checkout Issue Tracker:http://code.google.com/p/ttrss-reader-fork/issues/list +Donate:http://code.google.com/p/ttrss-reader-fork/wiki/Donations Summary:An RSS reader for Tiny Tiny RSS Description: An offline reader that works with the Tiny Tiny RSS web-based feed reader/aggregator.. @@ -38,6 +39,7 @@ Build Version:1.07,1075,1.07 (4),subdir=ttrss-reader,target=android-8 #Build Version:1.08,1080,1.08,subdir=ttrss-reader,target=android-8 Build Version:1.21,1210,1.21,subdir=ttrss-reader,target=android-8 +Build Version:1.22,1220,1.22,subdir=ttrss-reader,target=android-8 Market Version:1.22 Market Version Code:1220 diff --git a/metadata/org.wahtod.wififixer.txt b/metadata/org.wahtod.wififixer.txt index 0f8ca5ee..dcafbb58 100644 --- a/metadata/org.wahtod.wififixer.txt +++ b/metadata/org.wahtod.wififixer.txt @@ -19,6 +19,7 @@ Build Version:0.8.0.2,760,ff612a31874fc89cb124,subdir=wififixer,target=android-8 Build Version:0.8.0.3.1,770,59b8e66a0409a5d4c6a6,subdir=wififixer,target=android-8 Build Version:0.8.0.5,822,846b5c057e886f8436eb,subdir=wififixer,target=android-8 Build Version:0.8.0.6,838,81e9557f73d8529755cd,subdir=wififixer,target=android-8 +Build Version:0.9.0.1,915,!commit 7155ca938dc1 but can't compile for some reason Market Version:0.9.0.1 Market Version Code:915 From e01ba7039dea31d724aafc71cc31c25d02ae2afd Mon Sep 17 00:00:00 2001 From: Ciaran Gultnieks Date: Tue, 3 Jan 2012 15:35:29 +0000 Subject: [PATCH 11/19] Keep checking disabled apps --- checkmarket2.py | 80 ++++++++++++++++------------------ metadata/com.morphoss.acal.txt | 5 ++- 2 files changed, 41 insertions(+), 44 deletions(-) diff --git a/checkmarket2.py b/checkmarket2.py index d1568291..6fd61c2c 100755 --- a/checkmarket2.py +++ b/checkmarket2.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- # # checkmarket2.py - part of the FDroid server tools -# Copyright (C) 2010-11, Ciaran Gultnieks, ciaran@ciarang.com +# Copyright (C) 2010-12, Ciaran Gultnieks, ciaran@ciarang.com # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by @@ -44,49 +44,45 @@ html_parser = HTMLParser.HTMLParser() for app in apps: - if app['disabled']: - print "Skipping %s: disabled" % app['id'] + print "Processing " + app['id'] + url = 'http://market.android.com/details?id=' + app['id'] + page = urllib.urlopen(url).read() + + version = None + vercode = None + + m = re.search('
([^>]+)
', page) + if m: + version = html_parser.unescape(m.group(1)) + + m = re.search('data-paramValue="(\d+)">
Latest Version<', page) + if m: + vercode = m.group(1) + + if not vercode: + print "...couldn't find version code" + elif not version: + print "...couldn't find version" + elif vercode == app['marketvercode'] and version == app['marketversion']: + print "...up to date" else: + print '...updating to version:' + version + ' vercode:' + vercode + newdata = '' + metafile = os.path.join('metadata', app['id'] + '.txt') + mf = open(metafile, 'r') + for line in mf: + if line.startswith('Market Version:'): + newdata += 'Market Version:' + version + '\n' + elif line.startswith('Market Version Code:'): + newdata += 'Market Version Code:' + vercode + '\n' + else: + newdata += line + mf.close() + mf = open(metafile, 'w') + mf.write(newdata) + mf.close() - print "Processing " + app['id'] - url = 'http://market.android.com/details?id=' + app['id'] - page = urllib.urlopen(url).read() - - version = None - vercode = None - - m = re.search('
([^>]+)
', page) - if m: - version = html_parser.unescape(m.group(1)) - - m = re.search('data-paramValue="(\d+)">
Latest Version<', page) - if m: - vercode = m.group(1) - - if not vercode: - print "...couldn't find version code" - elif not version: - print "...couldn't find version" - elif vercode == app['marketvercode'] and version == app['marketversion']: - print "...up to date" - else: - print '...updating to version:' + version + ' vercode:' + vercode - newdata = '' - metafile = os.path.join('metadata', app['id'] + '.txt') - mf = open(metafile, 'r') - for line in mf: - if line.startswith('Market Version:'): - newdata += 'Market Version:' + version + '\n' - elif line.startswith('Market Version Code:'): - newdata += 'Market Version Code:' + vercode + '\n' - else: - newdata += line - mf.close() - mf = open(metafile, 'w') - mf.write(newdata) - mf.close() - - time.sleep(5) + time.sleep(5) print "Finished." diff --git a/metadata/com.morphoss.acal.txt b/metadata/com.morphoss.acal.txt index b86eebd6..3527acfd 100644 --- a/metadata/com.morphoss.acal.txt +++ b/metadata/com.morphoss.acal.txt @@ -24,6 +24,7 @@ Build Version:1.23,30,fae3e5f0f54fe5a2f46480481b39f9566ee9c67b Build Version:1.3),32,r1.3,target=android-8 Build Version:1.31,33,r1.31,target=android-8 Build Version:1.32,34,r1.32,target=android-8 +Build Version:1.33,35,r1.33,target=android-8 -Market Version:1.32 -Market Version Code:34 +Market Version:1.33 +Market Version Code:35 From f477c2d5fc8bef5dc10e1feb61c00f9c0ee4f784 Mon Sep 17 00:00:00 2001 From: Ciaran Gultnieks Date: Tue, 3 Jan 2012 15:36:07 +0000 Subject: [PATCH 12/19] Alarm Clock repo has been rearranged --- metadata/com.angrydoughnuts.android.alarmclock.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metadata/com.angrydoughnuts.android.alarmclock.txt b/metadata/com.angrydoughnuts.android.alarmclock.txt index 4865ce87..730af83b 100644 --- a/metadata/com.angrydoughnuts.android.alarmclock.txt +++ b/metadata/com.angrydoughnuts.android.alarmclock.txt @@ -12,7 +12,7 @@ An alarm clock. Repo Type:svn Repo:http://kraigsandroid.googlecode.com/svn/tags/ -Build Version:1.7,8,378,subdir=alarmclock-1.7/android/alarmclock +Build Version:1.7,8,378 Market Version:1.7 Market Version Code:8 From 639996c48ef693b656f92c0ba60d6a42bd4aa3a8 Mon Sep 17 00:00:00 2001 From: Ciaran Gultnieks Date: Tue, 3 Jan 2012 15:36:53 +0000 Subject: [PATCH 13/19] Metadata: version updates --- metadata/com.drodin.tuxrider.txt | 2 +- metadata/com.fsck.k9.txt | 4 ++-- metadata/de.joergjahnke.c64.android.txt | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/metadata/com.drodin.tuxrider.txt b/metadata/com.drodin.tuxrider.txt index f3ba2435..55cd36e6 100644 --- a/metadata/com.drodin.tuxrider.txt +++ b/metadata/com.drodin.tuxrider.txt @@ -15,5 +15,5 @@ Repo:git://github.com/drodin/TuxRider.git #Build Version:1.0.4 beta,6,67bce39cda321c225bc5 -Market Version:1.0.9 beta +Market Version:1.0.9 Market Version Code:11 diff --git a/metadata/com.fsck.k9.txt b/metadata/com.fsck.k9.txt index a2e2b5e6..c0cb61f4 100644 --- a/metadata/com.fsck.k9.txt +++ b/metadata/com.fsck.k9.txt @@ -15,5 +15,5 @@ Repo:https://github.com/k9mail/k-9.git #Note - k9 is currently developer's binary only #Build Version:3.906,14006,3.906,oldsdkloc=yes,patch=target9to10.patch,target=android-10 -Market Version:4.001 -Market Version Code:14019 +Market Version:4.002 +Market Version Code:14020 diff --git a/metadata/de.joergjahnke.c64.android.txt b/metadata/de.joergjahnke.c64.android.txt index fc37db24..43b79643 100644 --- a/metadata/de.joergjahnke.c64.android.txt +++ b/metadata/de.joergjahnke.c64.android.txt @@ -9,5 +9,5 @@ Summary:Commodore 64 Emulator Description: A Commodore 64 (C64) emulator. . -Market Version:1.5.7 -Market Version Code:10507 +Market Version:1.5.13 +Market Version Code:10513 From 4ce764c676e8114625fa07cf7e3b2008301f3543 Mon Sep 17 00:00:00 2001 From: Ciaran Gultnieks Date: Tue, 3 Jan 2012 15:37:29 +0000 Subject: [PATCH 14/19] Basic source code scanner, doesn't do much yet --- scanner.py | 142 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100755 scanner.py diff --git a/scanner.py b/scanner.py new file mode 100755 index 00000000..843c287f --- /dev/null +++ b/scanner.py @@ -0,0 +1,142 @@ +#!/usr/bin/env python2 +# -*- coding: utf-8 -*- +# +# scanner.py - part of the FDroid server tools +# Copyright (C) 2010-12, Ciaran Gultnieks, ciaran@ciarang.com +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +import sys +import os +import shutil +import re +import urllib +import time +import subprocess +from optparse import OptionParser +import HTMLParser +import common + +#Read configuration... +execfile('config.py') + + +# Parse command line... +parser = OptionParser() +parser.add_option("-v", "--verbose", action="store_true", default=False, + help="Spew out even more information than normal") +(options, args) = parser.parse_args() + +# Get all apps... +apps = common.read_metadata(options.verbose) + +html_parser = HTMLParser.HTMLParser() + +problems = [] + +for app in apps: + + if app['disabled']: + print "Skipping %s: disabled" % app['id'] + elif not app['builds']: + print "Skipping %s: no builds specified" % app['id'] + + if (app['disabled'] is None and app['repo'] != '' + and app['repotype'] != '' and len(app['builds']) > 0): + + print "Processing " + app['id'] + + build_dir = 'build/' + app['id'] + + # Set up vcs interface and make sure we have the latest code... + vcs = common.getvcs(app['repotype'], app['repo'], build_dir) + + refreshed_source = False + + + for thisbuild in app['builds']: + + if thisbuild['commit'].startswith('!'): + print ("..skipping version " + thisbuild['version'] + " - " + + thisbuild['commit'][1:]) + else: + print "..scanning version " + thisbuild['version'] + + if not refreshed_source: + vcs.refreshlocal() + refreshed_source = True + + # Optionally, the actual app source can be in a subdirectory... + if thisbuild.has_key('subdir'): + root_dir = os.path.join(build_dir, thisbuild['subdir']) + else: + root_dir = build_dir + + # Get a working copy of the right revision... + if options.verbose: + print "Resetting repository to " + thisbuild['commit'] + vcs.reset(thisbuild['commit']) + + # Initialise submodules if requred... + if thisbuild.get('submodules', 'no') == 'yes': + vcs.initsubmodules() + + # Generate (or update) the ant build file, build.xml... + if (thisbuild.get('update', 'yes') == 'yes' and + not thisbuild.has_key('maven')): + parms = [os.path.join(sdk_path, 'tools', 'android'), + 'update', 'project', '-p', '.'] + parms.append('--subprojects') + if thisbuild.has_key('target'): + parms.append('-t') + parms.append(thisbuild['target']) + if subprocess.call(parms, cwd=root_dir) != 0: + print "Failed to update project" + sys.exit(1) + + # Delete unwanted file... + if thisbuild.has_key('rm'): + os.remove(os.path.join(build_dir, thisbuild['rm'])) + + # Run a pre-build command if one is required... + if thisbuild.has_key('prebuild'): + if subprocess.call(thisbuild['prebuild'], + cwd=root_dir, shell=True) != 0: + print "Error running pre-build command" + sys.exit(1) + + # Apply patches if any + if 'patch' in thisbuild: + for patch in thisbuild['patch'].split(';'): + print "Applying " + patch + patch_path = os.path.join('metadata', app['id'], patch) + if subprocess.call(['patch', '-p1', + '-i', os.path.abspath(patch_path)], cwd=build_dir) != 0: + print "Failed to apply patch %s" % patch_path + sys.exit(1) + + # Scan for common known non-free blobs: + usual_suspects = ['flurryagent.jar', 'paypal_mpl.jar'] + for r,d,f in os.walk(build_dir): + for curfile in f: + if curfile.lower() in usual_suspects: + msg = 'Found probable non-free blob ' + os.path.join(r,file) + msg += ' in ' + app['id'] + ' ' + thisbuild['version'] + problems.append(msg) + +print "Finished:" +for problem in problems: + print problem +print str(len(problems)) + ' problems.' + From dee53ffb726bab0617ee730d56db8d979e6eaa7e Mon Sep 17 00:00:00 2001 From: prcrst Date: Mon, 2 Jan 2012 15:09:20 +0100 Subject: [PATCH 15/19] Don't abort on build exceptions. --- build.py | 728 +++++++++++++++++++++++++++---------------------------- 1 file changed, 358 insertions(+), 370 deletions(-) diff --git a/build.py b/build.py index f42b1191..aca9308a 100755 --- a/build.py +++ b/build.py @@ -30,6 +30,8 @@ from xml.dom.minidom import Document from optparse import OptionParser import common +from common import BuildException +from common import VCSException #Read configuration... execfile('config.py') @@ -76,415 +78,401 @@ for app in apps: for thisbuild in app['builds']: + try: + dest = os.path.join(output_dir, app['id'] + '_' + + thisbuild['vercode'] + '.apk') + dest_unsigned = os.path.join(tmp_dir, app['id'] + '_' + + thisbuild['vercode'] + '_unsigned.apk') - dest = os.path.join(output_dir, app['id'] + '_' + - thisbuild['vercode'] + '.apk') - dest_unsigned = os.path.join(tmp_dir, app['id'] + '_' + - thisbuild['vercode'] + '_unsigned.apk') - - if os.path.exists(dest): - print "..version " + thisbuild['version'] + " already exists" - elif thisbuild['commit'].startswith('!'): - print ("..skipping version " + thisbuild['version'] + " - " + - thisbuild['commit'][1:]) - else: - print "..building version " + thisbuild['version'] - - if not refreshed_source: - vcs.refreshlocal() - refreshed_source = True - - # Optionally, the actual app source can be in a subdirectory... - if thisbuild.has_key('subdir'): - root_dir = os.path.join(build_dir, thisbuild['subdir']) + if os.path.exists(dest): + print "..version " + thisbuild['version'] + " already exists" + elif thisbuild['commit'].startswith('!'): + print ("..skipping version " + thisbuild['version'] + " - " + + thisbuild['commit'][1:]) else: - root_dir = build_dir + print "..building version " + thisbuild['version'] - # Get a working copy of the right revision... - if options.verbose: - print "Resetting repository to " + thisbuild['commit'] - vcs.reset(thisbuild['commit']) + if not refreshed_source: + vcs.refreshlocal() + refreshed_source = True - # Initialise submodules if requred... - if thisbuild.get('submodules', 'no') == 'yes': - vcs.initsubmodules() + # Optionally, the actual app source can be in a subdirectory... + if thisbuild.has_key('subdir'): + root_dir = os.path.join(build_dir, thisbuild['subdir']) + else: + root_dir = build_dir - # Generate (or update) the ant build file, build.xml... - if (thisbuild.get('update', 'yes') == 'yes' and - not thisbuild.has_key('maven')): - parms = [os.path.join(sdk_path, 'tools', 'android'), - 'update', 'project', '-p', '.'] - parms.append('--subprojects') - if thisbuild.has_key('target'): - parms.append('-t') - parms.append(thisbuild['target']) - if subprocess.call(parms, cwd=root_dir) != 0: - print "Failed to update project" - sys.exit(1) + # Get a working copy of the right revision... + if options.verbose: + print "Resetting repository to " + thisbuild['commit'] + vcs.reset(thisbuild['commit']) - # If the app has ant set up to sign the release, we need to switch - # that off, because we want the unsigned apk... - for propfile in ('build.properties', 'default.properties'): - if os.path.exists(os.path.join(root_dir, propfile)): - if subprocess.call(['sed','-i','s/^key.store/#/', - propfile], cwd=root_dir) !=0: - print "Failed to amend %s" % propfile - sys.exit(1) + # Initialise submodules if requred... + if thisbuild.get('submodules', 'no') == 'yes': + vcs.initsubmodules() - # Update the local.properties file... - locprops = os.path.join(root_dir, 'local.properties') - if os.path.exists(locprops): - f = open(locprops, 'r') - props = f.read() - f.close() - # Fix old-fashioned 'sdk-location' by copying - # from sdk.dir, if necessary... - if thisbuild.get('oldsdkloc', 'no') == "yes": - sdkloc = re.match(r".*^sdk.dir=(\S+)$.*", props, - re.S|re.M).group(1) - props += "\nsdk-location=" + sdkloc + "\n" - # Add ndk location... - props+= "\nndk.dir=" + ndk_path + "\n" - # Add java.encoding if necessary... - if thisbuild.has_key('encoding'): - props += "\njava.encoding=" + thisbuild['encoding'] + "\n" - f = open(locprops, 'w') - f.write(props) - f.close() + # Generate (or update) the ant build file, build.xml... + if (thisbuild.get('update', 'yes') == 'yes' and + not thisbuild.has_key('maven')): + parms = [os.path.join(sdk_path, 'tools', 'android'), + 'update', 'project', '-p', '.'] + parms.append('--subprojects') + if thisbuild.has_key('target'): + parms.append('-t') + parms.append(thisbuild['target']) + if subprocess.call(parms, cwd=root_dir) != 0: + raise BuildException("Failed to update project") - # Insert version code and number into the manifest if necessary... - if thisbuild.has_key('insertversion'): - if subprocess.call(['sed','-i','s/' + thisbuild['insertversion'] + - '/' + thisbuild['version'] +'/g', - 'AndroidManifest.xml'], cwd=root_dir) !=0: - print "Failed to amend manifest" - sys.exit(1) - if thisbuild.has_key('insertvercode'): - if subprocess.call(['sed','-i','s/' + thisbuild['insertvercode'] + - '/' + thisbuild['vercode'] +'/g', - 'AndroidManifest.xml'], cwd=root_dir) !=0: - print "Failed to amend manifest" - sys.exit(1) + # If the app has ant set up to sign the release, we need to switch + # that off, because we want the unsigned apk... + for propfile in ('build.properties', 'default.properties'): + if os.path.exists(os.path.join(root_dir, propfile)): + if subprocess.call(['sed','-i','s/^key.store/#/', + propfile], cwd=root_dir) !=0: + raise BuildException("Failed to amend %s" % propfile) - # Delete unwanted file... - if thisbuild.has_key('rm'): - os.remove(os.path.join(build_dir, thisbuild['rm'])) + # Update the local.properties file... + locprops = os.path.join(root_dir, 'local.properties') + if os.path.exists(locprops): + f = open(locprops, 'r') + props = f.read() + f.close() + # Fix old-fashioned 'sdk-location' by copying + # from sdk.dir, if necessary... + if thisbuild.get('oldsdkloc', 'no') == "yes": + sdkloc = re.match(r".*^sdk.dir=(\S+)$.*", props, + re.S|re.M).group(1) + props += "\nsdk-location=" + sdkloc + "\n" + # Add ndk location... + props+= "\nndk.dir=" + ndk_path + "\n" + # Add java.encoding if necessary... + if thisbuild.has_key('encoding'): + props += "\njava.encoding=" + thisbuild['encoding'] + "\n" + f = open(locprops, 'w') + f.write(props) + f.close() - # Fix apostrophes translation files if necessary... - if thisbuild.get('fixapos', 'no') == 'yes': - for root, dirs, files in os.walk(os.path.join(root_dir,'res')): - for filename in files: - if filename.endswith('.xml'): - if subprocess.call(['sed','-i','s@' + - r"\([^\\]\)'@\1\\'" + - '@g', - os.path.join(root, filename)]) != 0: - print "Failed to amend " + filename - sys.exit(1) + # Insert version code and number into the manifest if necessary... + if thisbuild.has_key('insertversion'): + if subprocess.call(['sed','-i','s/' + thisbuild['insertversion'] + + '/' + thisbuild['version'] +'/g', + 'AndroidManifest.xml'], cwd=root_dir) !=0: + raise BuildException("Failed to amend manifest") + if thisbuild.has_key('insertvercode'): + if subprocess.call(['sed','-i','s/' + thisbuild['insertvercode'] + + '/' + thisbuild['vercode'] +'/g', + 'AndroidManifest.xml'], cwd=root_dir) !=0: + raise BuildException("Failed to amend manifest") - # Fix translation files if necessary... - if thisbuild.get('fixtrans', 'no') == 'yes': - for root, dirs, files in os.walk(os.path.join(root_dir,'res')): - for filename in files: - if filename.endswith('.xml'): - f = open(os.path.join(root, filename)) - changed = False - outlines = [] - for line in f: - num = 1 - index = 0 - oldline = line - while True: - index = line.find("%", index) - if index == -1: - break - next = line[index+1:index+2] - if next == "s" or next == "d": - line = (line[:index+1] + - str(num) + "$" + - line[index+1:]) - num += 1 - index += 3 - else: - index += 1 - # We only want to insert the positional arguments - # when there is more than one argument... - if oldline != line: - if num > 2: - changed = True - else: - line = oldline - outlines.append(line) - f.close() - if changed: - f = open(os.path.join(root, filename), 'w') - f.writelines(outlines) + # Delete unwanted file... + if thisbuild.has_key('rm'): + os.remove(os.path.join(build_dir, thisbuild['rm'])) + + # Fix apostrophes translation files if necessary... + if thisbuild.get('fixapos', 'no') == 'yes': + for root, dirs, files in os.walk(os.path.join(root_dir,'res')): + for filename in files: + if filename.endswith('.xml'): + if subprocess.call(['sed','-i','s@' + + r"\([^\\]\)'@\1\\'" + + '@g', + os.path.join(root, filename)]) != 0: + raise BuildException("Failed to amend " + filename) + + # Fix translation files if necessary... + if thisbuild.get('fixtrans', 'no') == 'yes': + for root, dirs, files in os.walk(os.path.join(root_dir,'res')): + for filename in files: + if filename.endswith('.xml'): + f = open(os.path.join(root, filename)) + changed = False + outlines = [] + for line in f: + num = 1 + index = 0 + oldline = line + while True: + index = line.find("%", index) + if index == -1: + break + next = line[index+1:index+2] + if next == "s" or next == "d": + line = (line[:index+1] + + str(num) + "$" + + line[index+1:]) + num += 1 + index += 3 + else: + index += 1 + # We only want to insert the positional arguments + # when there is more than one argument... + if oldline != line: + if num > 2: + changed = True + else: + line = oldline + outlines.append(line) f.close() + if changed: + f = open(os.path.join(root, filename), 'w') + f.writelines(outlines) + f.close() - # Run a pre-build command if one is required... - if thisbuild.has_key('prebuild'): - if subprocess.call(thisbuild['prebuild'], - cwd=root_dir, shell=True) != 0: - print "Error running pre-build command" - sys.exit(1) + # Run a pre-build command if one is required... + if thisbuild.has_key('prebuild'): + if subprocess.call(thisbuild['prebuild'], + cwd=root_dir, shell=True) != 0: + raise BuildException("Error running pre-build command") - # Apply patches if any - if 'patch' in thisbuild: - for patch in thisbuild['patch'].split(';'): - print "Applying " + patch - patch_path = os.path.join('metadata', app['id'], patch) - if subprocess.call(['patch', '-p1', - '-i', os.path.abspath(patch_path)], cwd=build_dir) != 0: - print "Failed to apply patch %s" % patch_path - sys.exit(1) + # Apply patches if any + if 'patch' in thisbuild: + for patch in thisbuild['patch'].split(';'): + print "Applying " + patch + patch_path = os.path.join('metadata', app['id'], patch) + if subprocess.call(['patch', '-p1', + '-i', os.path.abspath(patch_path)], cwd=build_dir) != 0: + raise BuildException("Failed to apply patch %s" % patch_path) - # Special case init functions for funambol... - if thisbuild.get('initfun', 'no') == "yes": + # Special case init functions for funambol... + if thisbuild.get('initfun', 'no') == "yes": - if subprocess.call(['sed','-i','s@' + - '' + - '@' + - '' + - '' + - '' + - '' + - '' + - '@g', - 'build.xml'], cwd=root_dir) !=0: - print "Failed to amend build.xml" - sys.exit(1) + if subprocess.call(['sed','-i','s@' + + '' + + '@' + + '' + + '' + + '' + + '' + + '' + + '@g', + 'build.xml'], cwd=root_dir) !=0: + raise BuildException("Failed to amend build.xml") - if subprocess.call(['sed','-i','s@' + - '\${user.home}/funambol/build/android/build.properties' + - '@' + - 'build.properties' + - '@g', - 'build.xml'], cwd=root_dir) !=0: - print "Failed to amend build.xml" - sys.exit(1) + if subprocess.call(['sed','-i','s@' + + '\${user.home}/funambol/build/android/build.properties' + + '@' + + 'build.properties' + + '@g', + 'build.xml'], cwd=root_dir) !=0: + raise BuildException("Failed to amend build.xml") - buildxml = os.path.join(root_dir, 'build.xml') - f = open(buildxml, 'r') - xml = f.read() - f.close() - xmlout = "" - mode = 0 - for line in xml.splitlines(): - if mode == 0: - if line.find("jarsigner") != -1: - mode = 1 + buildxml = os.path.join(root_dir, 'build.xml') + f = open(buildxml, 'r') + xml = f.read() + f.close() + xmlout = "" + mode = 0 + for line in xml.splitlines(): + if mode == 0: + if line.find("jarsigner") != -1: + mode = 1 + else: + xmlout += line + "\n" else: - xmlout += line + "\n" + if line.find("/exec") != -1: + mode += 1 + if mode == 3: + mode =0 + f = open(buildxml, 'w') + f.write(xmlout) + f.close() + + if subprocess.call(['sed','-i','s@' + + 'platforms/android-2.0' + + '@' + + 'platforms/android-8' + + '@g', + 'build.xml'], cwd=root_dir) !=0: + raise BuildException("Failed to amend build.xml") + + shutil.copyfile( + os.path.join(root_dir, "build.properties.example"), + os.path.join(root_dir, "build.properties")) + + if subprocess.call(['sed','-i','s@' + + 'javacchome=.*'+ + '@' + + 'javacchome=' + javacc_path + + '@g', + 'build.properties'], cwd=root_dir) !=0: + raise BuildException("Failed to amend build.properties") + + if subprocess.call(['sed','-i','s@' + + 'sdk-folder=.*'+ + '@' + + 'sdk-folder=' + sdk_path + + '@g', + 'build.properties'], cwd=root_dir) !=0: + raise BuildException("Failed to amend build.properties") + + if subprocess.call(['sed','-i','s@' + + 'android.sdk.version.*'+ + '@' + + 'android.sdk.version=2.0' + + '@g', + 'build.properties'], cwd=root_dir) !=0: + raise BuildException("Failed to amend build.properties") + + + # Build the source tarball right before we build the release... + tarname = app['id'] + '_' + thisbuild['vercode'] + '_src' + tarball = tarfile.open(os.path.join(output_dir, + tarname + '.tar.gz'), "w:gz") + tarball.add(build_dir, tarname) + tarball.close() + + # Build native stuff if required... + if thisbuild.get('buildjni', 'no') == 'yes': + ndkbuild = os.path.join(ndk_path, "ndk-build") + p = subprocess.Popen([ndkbuild], cwd=root_dir, + stdout=subprocess.PIPE) + output = p.communicate()[0] + if p.returncode != 0: + print output + raise BuildException("NDK build failed for %s:%s" % (app['id'], thisbuild['version'])) + elif options.verbose: + print output + + # Build the release... + if thisbuild.has_key('maven'): + p = subprocess.Popen(['mvn', 'clean', 'install', + '-Dandroid.sdk.path=' + sdk_path], + cwd=root_dir, stdout=subprocess.PIPE) + else: + if thisbuild.has_key('antcommand'): + antcommand = thisbuild['antcommand'] else: - if line.find("/exec") != -1: - mode += 1 - if mode == 3: - mode =0 - f = open(buildxml, 'w') - f.write(xmlout) - f.close() - - if subprocess.call(['sed','-i','s@' + - 'platforms/android-2.0' + - '@' + - 'platforms/android-8' + - '@g', - 'build.xml'], cwd=root_dir) !=0: - print "Failed to amend build.xml" - sys.exit(1) - - shutil.copyfile( - os.path.join(root_dir, "build.properties.example"), - os.path.join(root_dir, "build.properties")) - - if subprocess.call(['sed','-i','s@' + - 'javacchome=.*'+ - '@' + - 'javacchome=' + javacc_path + - '@g', - 'build.properties'], cwd=root_dir) !=0: - print "Failed to amend build.properties" - sys.exit(1) - - if subprocess.call(['sed','-i','s@' + - 'sdk-folder=.*'+ - '@' + - 'sdk-folder=' + sdk_path + - '@g', - 'build.properties'], cwd=root_dir) !=0: - print "Failed to amend build.properties" - sys.exit(1) - - if subprocess.call(['sed','-i','s@' + - 'android.sdk.version.*'+ - '@' + - 'android.sdk.version=2.0' + - '@g', - 'build.properties'], cwd=root_dir) !=0: - print "Failed to amend build.properties" - sys.exit(1) - - - # Build the source tarball right before we build the release... - tarname = app['id'] + '_' + thisbuild['vercode'] + '_src' - tarball = tarfile.open(os.path.join(output_dir, - tarname + '.tar.gz'), "w:gz") - tarball.add(build_dir, tarname) - tarball.close() - - # Build native stuff if required... - if thisbuild.get('buildjni', 'no') == 'yes': - ndkbuild = os.path.join(ndk_path, "ndk-build") - p = subprocess.Popen([ndkbuild], cwd=root_dir, - stdout=subprocess.PIPE) + antcommand = 'release' + p = subprocess.Popen(['ant', antcommand], cwd=root_dir, + stdout=subprocess.PIPE) output = p.communicate()[0] if p.returncode != 0: print output - print "NDK build failed for %s:%s" % (app['id'], thisbuild['version']) - sys.exit(1) + raise BuildException("Build failed for %s:%s" % (app['id'], thisbuild['version'])) elif options.verbose: print output + print "Build successful" - # Build the release... - if thisbuild.has_key('maven'): - p = subprocess.Popen(['mvn', 'clean', 'install', - '-Dandroid.sdk.path=' + sdk_path], - cwd=root_dir, stdout=subprocess.PIPE) - else: - if thisbuild.has_key('antcommand'): - antcommand = thisbuild['antcommand'] + # Find the apk name in the output... + if thisbuild.has_key('bindir'): + bindir = os.path.join(build_dir, thisbuild['bindir']) else: - antcommand = 'release' - p = subprocess.Popen(['ant', antcommand], cwd=root_dir, - stdout=subprocess.PIPE) - output = p.communicate()[0] - if p.returncode != 0: - print output - print "Build failed for %s:%s" % (app['id'], thisbuild['version']) - sys.exit(1) - elif options.verbose: - print output - print "Build successful" - - # Find the apk name in the output... - if thisbuild.has_key('bindir'): - bindir = os.path.join(build_dir, thisbuild['bindir']) - else: - bindir = os.path.join(root_dir, 'bin') - if thisbuild.get('initfun', 'no') == "yes": - # Special case (again!) for funambol... - src = ("funambol-android-sync-client-" + - thisbuild['version'] + "-unsigned.apk") - src = os.path.join(bindir, src) - elif thisbuild.has_key('maven'): - src = re.match(r".*^\[INFO\] Installing /.*/([^/]*)\.apk", - output, re.S|re.M).group(1) - src = os.path.join(bindir, src) + '.apk' + bindir = os.path.join(root_dir, 'bin') + if thisbuild.get('initfun', 'no') == "yes": + # Special case (again!) for funambol... + src = ("funambol-android-sync-client-" + + thisbuild['version'] + "-unsigned.apk") + src = os.path.join(bindir, src) + elif thisbuild.has_key('maven'): + src = re.match(r".*^\[INFO\] Installing /.*/([^/]*)\.apk", + output, re.S|re.M).group(1) + src = os.path.join(bindir, src) + '.apk' #[INFO] Installing /home/ciaran/fdroidserver/tmp/mainline/application/target/callerid-1.0-SNAPSHOT.apk - else: - src = re.match(r".*^.*Creating (\S+) for release.*$.*", output, - re.S|re.M).group(1) - src = os.path.join(bindir, src) + else: + src = re.match(r".*^.*Creating (\S+) for release.*$.*", output, + re.S|re.M).group(1) + src = os.path.join(bindir, src) - # By way of a sanity check, make sure the version and version - # code in our new apk match what we expect... - print "Checking " + src - p = subprocess.Popen([os.path.join(sdk_path, 'platform-tools', - 'aapt'), - 'dump', 'badging', src], - stdout=subprocess.PIPE) - output = p.communicate()[0] - if thisbuild.get('novcheck', 'no') == "yes": - vercode = thisbuild['vercode'] - version = thisbuild['version'] - else: - vercode = None - version = None - for line in output.splitlines(): - if line.startswith("package:"): - pat = re.compile(".*versionCode='([0-9]*)'.*") - vercode = re.match(pat, line).group(1) - pat = re.compile(".*versionName='([^']*)'.*") - version = re.match(pat, line).group(1) - if version == None or vercode == None: - print "Could not find version information in build in output" - sys.exit(1) + # By way of a sanity check, make sure the version and version + # code in our new apk match what we expect... + print "Checking " + src + p = subprocess.Popen([os.path.join(sdk_path, 'platform-tools', + 'aapt'), + 'dump', 'badging', src], + stdout=subprocess.PIPE) + output = p.communicate()[0] + if thisbuild.get('novcheck', 'no') == "yes": + vercode = thisbuild['vercode'] + version = thisbuild['version'] + else: + vercode = None + version = None + for line in output.splitlines(): + if line.startswith("package:"): + pat = re.compile(".*versionCode='([0-9]*)'.*") + vercode = re.match(pat, line).group(1) + pat = re.compile(".*versionName='([^']*)'.*") + version = re.match(pat, line).group(1) + if version == None or vercode == None: + raise BuildException("Could not find version information in build in output") - # Some apps (e.g. Timeriffic) have had the bonkers idea of - # including the entire changelog in the version number. Remove - # it so we can compare. (TODO: might be better to remove it - # before we compile, in fact) - index = version.find(" //") - if index != -1: - version = version[:index] + # Some apps (e.g. Timeriffic) have had the bonkers idea of + # including the entire changelog in the version number. Remove + # it so we can compare. (TODO: might be better to remove it + # before we compile, in fact) + index = version.find(" //") + if index != -1: + version = version[:index] - if (version != thisbuild['version'] or - vercode != thisbuild['vercode']): - print "Unexpected version/version code in output" - print "APK:" + version + " / " + str(vercode) - print ("Expected: " + thisbuild['version'] + " / " + - str(thisbuild['vercode'])) - sys.exit(1) + if (version != thisbuild['version'] or + vercode != thisbuild['vercode']): + raise BuildException(("Unexpected version/version code in output" + "APK: %s / %s" + "Expected: %s / %s") + ) % (version, str(vercode), thisbuild['version'], str(thisbuild['vercode'])) - # Copy the unsigned apk to our temp directory for further - # processing... - shutil.copyfile(src, dest_unsigned) + # Copy the unsigned apk to our temp directory for further + # processing... + shutil.copyfile(src, dest_unsigned) - # Figure out the key alias name we'll use. Only the first 8 - # characters are significant, so we'll use the first 8 from - # the MD5 of the app's ID and hope there are no collisions. - # If a collision does occur later, we're going to have to - # come up with a new alogrithm, AND rename all existing keys - # in the keystore! - if keyaliases.has_key(app['id']): - # For this particular app, the key alias is overridden... - keyalias = keyaliases[app['id']] - else: - m = md5.new() - m.update(app['id']) - keyalias = m.hexdigest()[:8] - print "Key alias: " + keyalias + # Figure out the key alias name we'll use. Only the first 8 + # characters are significant, so we'll use the first 8 from + # the MD5 of the app's ID and hope there are no collisions. + # If a collision does occur later, we're going to have to + # come up with a new alogrithm, AND rename all existing keys + # in the keystore! + if keyaliases.has_key(app['id']): + # For this particular app, the key alias is overridden... + keyalias = keyaliases[app['id']] + else: + m = md5.new() + m.update(app['id']) + keyalias = m.hexdigest()[:8] + print "Key alias: " + keyalias - # See if we already have a key for this application, and - # if not generate one... - p = subprocess.Popen(['keytool', '-list', - '-alias', keyalias, '-keystore', keystore, - '-storepass', keystorepass], stdout=subprocess.PIPE) - output = p.communicate()[0] - if p.returncode !=0: - print "Key does not exist - generating..." - p = subprocess.Popen(['keytool', '-genkey', - '-keystore', keystore, '-alias', keyalias, - '-keyalg', 'RSA', '-keysize', '2048', - '-validity', '10000', + # See if we already have a key for this application, and + # if not generate one... + p = subprocess.Popen(['keytool', '-list', + '-alias', keyalias, '-keystore', keystore, + '-storepass', keystorepass], stdout=subprocess.PIPE) + output = p.communicate()[0] + if p.returncode !=0: + print "Key does not exist - generating..." + p = subprocess.Popen(['keytool', '-genkey', + '-keystore', keystore, '-alias', keyalias, + '-keyalg', 'RSA', '-keysize', '2048', + '-validity', '10000', + '-storepass', keystorepass, '-keypass', keypass, + '-dname', keydname], stdout=subprocess.PIPE) + output = p.communicate()[0] + print output + if p.returncode != 0: + raise BuildException("Failed to generate key") + + # Sign the application... + p = subprocess.Popen(['jarsigner', '-keystore', keystore, '-storepass', keystorepass, '-keypass', keypass, - '-dname', keydname], stdout=subprocess.PIPE) + dest_unsigned, keyalias], stdout=subprocess.PIPE) output = p.communicate()[0] print output if p.returncode != 0: - print "Failed to generate key" - sys.exit(1) + raise BuildException("Failed to sign application") - # Sign the application... - p = subprocess.Popen(['jarsigner', '-keystore', keystore, - '-storepass', keystorepass, '-keypass', keypass, - dest_unsigned, keyalias], stdout=subprocess.PIPE) - output = p.communicate()[0] - print output - if p.returncode != 0: - print "Failed to sign application" - sys.exit(1) - - # Zipalign it... - p = subprocess.Popen([os.path.join(sdk_path,'tools','zipalign'), - '-v', '4', dest_unsigned, dest], - stdout=subprocess.PIPE) - output = p.communicate()[0] - print output - if p.returncode != 0: - print "Failed to align application" - sys.exit(1) - os.remove(dest_unsigned) + # Zipalign it... + p = subprocess.Popen([os.path.join(sdk_path,'tools','zipalign'), + '-v', '4', dest_unsigned, dest], + stdout=subprocess.PIPE) + output = p.communicate()[0] + print output + if p.returncode != 0: + raise BuildException("Failed to align application") + os.remove(dest_unsigned) + except BuildException as be: + print "Could not build app %s due to BuildException: %s" % (app['id'], be) + except VCSException as vcse: + print "VCS error while building app %s: %s" % (app['id'], vcse) + except Exception as e: + print "Could not build app %s due to unknown error: %s" % (app['id'], e) print "Finished." From e4e2d468471182a0e52ed0292ace1e96e179ccba Mon Sep 17 00:00:00 2001 From: prcrst Date: Mon, 2 Jan 2012 12:51:14 +0100 Subject: [PATCH 16/19] Throw exceptions instead of exiting --- common.py | 104 ++++++++++++++++++++++++++---------------------------- 1 file changed, 50 insertions(+), 54 deletions(-) diff --git a/common.py b/common.py index 43630e1b..a7d4d613 100644 --- a/common.py +++ b/common.py @@ -29,8 +29,7 @@ def getvcs(vcstype, remote, local): return vcs_hg(remote,local) elif vcstype == 'bzr': return vcs_bzr(remote,local) - print "Invalid vcs type " + vcstype - sys.exit(1) + raise VCSException("Invalid vcs type " + vcstype) class vcs: def __init__(self, remote, local): @@ -44,8 +43,7 @@ class vcs: remote = remote[index+1:] index = self.username.find(':') if index == -1: - print "Password required with username" - sys.exit(1) + raise VCSException("Password required with username") self.password = self.username[index+1:] self.username = self.username[:index] else: @@ -86,41 +84,34 @@ class vcs_git(vcs): def clone(self): if subprocess.call(['git', 'clone', self.remote, self.local]) != 0: - print "Git clone failed" - sys.exit(1) + raise VCSException("Git clone failed") def reset(self, rev=None): if rev is None: rev = 'origin' if subprocess.call(['git', 'reset', '--hard', rev], cwd=self.local) != 0: - print "Git reset failed" - sys.exit(1) + raise VCSException("Git reset failed") if subprocess.call(['git', 'clean', '-dfx'], cwd=self.local) != 0: - print "Git clean failed" - sys.exit(1) + raise VCSException("Git clean failed") def pull(self): if subprocess.call(['git', 'pull', 'origin'], cwd=self.local) != 0: - print "Git pull failed" - sys.exit(1) + raise VCSException("Git pull failed") # Might need tags that aren't on a branch. if subprocess.call(['git', 'fetch', '--tags', 'origin'], cwd=self.local) != 0: - print "Git fetch failed" - sys.exit(1) + raise VCSException("Git fetch failed") def initsubmodules(self): if subprocess.call(['git', 'submodule', 'init'], cwd=self.local) != 0: - print "Git submodule init failed" - sys.exit(1) + raise VCSException("Git submodule init failed") if subprocess.call(['git', 'submodule', 'update'], cwd=self.local) != 0: - print "Git submodule update failed" - sys.exit(1) + raise VCSException("Git submodule update failed") @@ -128,7 +119,7 @@ class vcs_svn(vcs): def userargs(self): if self.username is None: - return [] + return ['--non-interactive'] return ['--username', self.username, '--password', self.password, '--non-interactive'] @@ -136,8 +127,7 @@ class vcs_svn(vcs): def clone(self): if subprocess.call(['svn', 'checkout', self.remote, self.local] + self.userargs()) != 0: - print "Svn checkout failed" - sys.exit(1) + raise VCSException("Svn checkout failed") def reset(self, rev=None): if rev is None: @@ -149,25 +139,21 @@ class vcs_svn(vcs): r"svn status | awk '/\?/ {print $2}' | xargs rm -rf"): if subprocess.call(svncommand, cwd=self.local, shell=True) != 0: - print "Svn reset failed" - sys.exit(1) + raise VCSException("Svn reset failed") if subprocess.call(['svn', 'update', '--force'] + revargs + self.userargs(), cwd=self.local) != 0: - print "Svn update failed" - sys.exit(1) + raise VCSException("Svn update failed") def pull(self): if subprocess.call(['svn', 'update'] + self.userargs(), cwd=self.local) != 0: - print "Svn update failed" - sys.exit(1) + raise VCSException("Svn update failed") class vcs_hg(vcs): def clone(self): if subprocess.call(['hg', 'clone', self.remote, self.local]) !=0: - print "Hg clone failed" - sys.exit(1) + raise VCSException("Hg clone failed") def reset(self, rev=None): if rev is None: @@ -176,25 +162,21 @@ class vcs_hg(vcs): revargs = [rev] if subprocess.call('hg status -u | xargs rm -rf', cwd=self.local, shell=True) != 0: - print "Hg clean failed" - sys.exit(1) + raise VCSException("Hg clean failed") if subprocess.call(['hg', 'checkout', '-C'] + revargs, cwd=self.local) != 0: - print "Hg checkout failed" - sys.exit(1) + raise VCSException("Hg checkout failed") def pull(self): if subprocess.call(['hg', 'pull'], cwd=self.local) != 0: - print "Hg pull failed" - sys.exit(1) + raise VCSException("Hg pull failed") class vcs_bzr(vcs): def clone(self): if subprocess.call(['bzr', 'branch', self.remote, self.local]) != 0: - print "Bzr branch failed" - sys.exit(1) + raise VCSException("Bzr branch failed") def reset(self, rev=None): if rev is None: @@ -203,18 +185,15 @@ class vcs_bzr(vcs): revargs = ['-r', rev] if subprocess.call(['bzr', 'clean-tree', '--force', '--unknown', '--ignored'], cwd=self.local) != 0: - print "Bzr revert failed" - sys.exit(1) + raise VCSException("Bzr revert failed") if subprocess.call(['bzr', 'revert'] + revargs, cwd=self.local) != 0: - print "Bzr revert failed" - sys.exit(1) + raise VCSException("Bzr revert failed") def pull(self): if subprocess.call(['bzr', 'pull'], cwd=self.local) != 0: - print "Bzr update failed" - sys.exit(1) + raise VCSException("Bzr update failed") @@ -224,8 +203,7 @@ def parse_metadata(metafile, **kw): parts = [p.replace("\\,", ",") for p in re.split(r"(? Date: Mon, 2 Jan 2012 12:49:20 +0100 Subject: [PATCH 17/19] - Fix python path - create required directories in build.py --- build.py | 21 ++++++++++++++------- checkmarket.py | 2 +- checkmarket2.py | 2 +- update.py | 2 +- 4 files changed, 17 insertions(+), 10 deletions(-) diff --git a/build.py b/build.py index aca9308a..824fdd0d 100755 --- a/build.py +++ b/build.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python2 +#!/usr/bin/env python # -*- coding: utf-8 -*- # # build.py - part of the FDroid server tools @@ -48,13 +48,20 @@ parser.add_option("-p", "--package", default=None, # Get all apps... apps = common.read_metadata(options.verbose) -output_dir = "repo" -tmp_dir = "tmp" -if not os.path.isdir('tmp'): - os.makedirs('tmp') +output_dir = 'repo' +if not os.path.isdir(output_dir): + print "Creating output directory" + os.makedirs(output_dir) -if not os.path.isdir('build'): - os.makedirs('build') +tmp_dir = 'tmp' +if not os.path.isdir(tmp_dir): + print "Creating temporary directory" + os.makedirs(tmp_dir) + +build_dir = 'build' +if not os.path.isdir(build_dir): + print "Creating build directory" + os.makedirs(build_dir) for app in apps: diff --git a/checkmarket.py b/checkmarket.py index 47a212bf..f8e5c80c 100755 --- a/checkmarket.py +++ b/checkmarket.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python2 +#!/usr/bin/env python # -*- coding: utf-8 -*- # # checkmarket.py - part of the FDroid server tools diff --git a/checkmarket2.py b/checkmarket2.py index 6fd61c2c..193a63fa 100755 --- a/checkmarket2.py +++ b/checkmarket2.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python2 +#!/usr/bin/env python # -*- coding: utf-8 -*- # # checkmarket2.py - part of the FDroid server tools diff --git a/update.py b/update.py index dc228a2e..e6758d12 100755 --- a/update.py +++ b/update.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python2 +#!/usr/bin/env python # -*- coding: utf-8 -*- # # update.py - part of the FDroid server tools From adb98b059e554cb5a5ad2f294bcf129b94e410e4 Mon Sep 17 00:00:00 2001 From: prcrst Date: Tue, 3 Jan 2012 08:43:14 +0100 Subject: [PATCH 18/19] Record successful/failed builds and print a summary afterwards --- build.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/build.py b/build.py index 824fdd0d..cd86cd7c 100755 --- a/build.py +++ b/build.py @@ -48,6 +48,9 @@ parser.add_option("-p", "--package", default=None, # Get all apps... apps = common.read_metadata(options.verbose) +failed_apps = {} +build_succeeded = [] + output_dir = 'repo' if not os.path.isdir(output_dir): print "Creating output directory" @@ -476,10 +479,20 @@ for app in apps: os.remove(dest_unsigned) except BuildException as be: print "Could not build app %s due to BuildException: %s" % (app['id'], be) + failed_apps[app['id']] = be except VCSException as vcse: print "VCS error while building app %s: %s" % (app['id'], vcse) + failed_apps[app['id']] = vcse except Exception as e: print "Could not build app %s due to unknown error: %s" % (app['id'], e) + failed_apps[app['id']] = e + build_succeeded.append(app) + +for fa in failed_apps: + print "Build for app %s failed: %s" % (fa, failed_apps[fa]) + +for app in build_succeeded: + print "success: %s" % (app['id']) print "Finished." From bf3a9393cd21ba8f37d1a8f11782eb979f1da9b2 Mon Sep 17 00:00:00 2001 From: Ciaran Gultnieks Date: Tue, 3 Jan 2012 16:02:28 +0000 Subject: [PATCH 19/19] Need to see failures, not hide them above several hundred successes --- build.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/build.py b/build.py index cd86cd7c..a7b09139 100755 --- a/build.py +++ b/build.py @@ -488,11 +488,13 @@ for app in apps: failed_apps[app['id']] = e build_succeeded.append(app) -for fa in failed_apps: - print "Build for app %s failed: %s" % (fa, failed_apps[fa]) - for app in build_succeeded: print "success: %s" % (app['id']) -print "Finished." +for fa in failed_apps: + print "Build for app %s failed: %s" % (fa, failed_apps[fa]) + +print "Finished." +if len(failed_apps) > 0: + print str(len(failed_apps)) + 'builds failed'