diff --git a/docs/fdroid.texi b/docs/fdroid.texi index f8ef0390..d898a2f4 100644 --- a/docs/fdroid.texi +++ b/docs/fdroid.texi @@ -638,9 +638,14 @@ The git-svn option connects to an SVN repository, and you specify the URL in exactly the same way, but git is used as a back-end. This is preferable for performance reasons, and also because a local copy of the entire history is available in case the upstream repository disappears. (It happens!). In -order to use RepoManifest or Tags as update check modes for this VCS type -the URL must encode the path to the trunk and tags, like so: -http://svn.code.sf.net/p/project/code;trunk=trunk;tags=tags. +order to use Tags as update check mode for this VCS type, the URL must have +the tags= special argument set. Likewise, if you intend to use the +RepoManifest/branch scheme, you would want to specify branches= as well. +Finally, trunk= can also be added. All these special arguments will be passed +to "git svn" in order, and their values must be relative paths to the svn repo +root dir. +Here's an example of a complex git-svn Repo URL: +http://svn.code.sf.net/p/project/code/svn;trunk=trunk;tags=tags;branches=branches For a Subversion repo that requires authentication, you can precede the repo URL with username:password@ and those parameters will be passed as @option{--username} diff --git a/fdroid b/fdroid index 202735a6..a14ea17b 100755 --- a/fdroid +++ b/fdroid @@ -18,7 +18,6 @@ # along with this program. If not, see . import sys -import fdroidserver commands = [ "build", @@ -45,8 +44,7 @@ def main(): command = sys.argv[1] if not command in commands: - print "Command '" + command + "' not recognised." - print "" + print "Command '" + command + "' not recognised.\n" print_help() sys.exit(1) diff --git a/fdroidserver/checkupdates.py b/fdroidserver/checkupdates.py index 282471b0..65f5b5d8 100644 --- a/fdroidserver/checkupdates.py +++ b/fdroidserver/checkupdates.py @@ -60,11 +60,9 @@ def check_tags(app, sdk_path): vcs.gotorevision(None) - if len(app['builds']) == 0: - return (None, "Can't use Tags with no builds defined") - - if 'subdir' in app['builds'][-1]: - build_dir = os.path.join(build_dir, app['builds'][-1]['subdir']) + if len(app['builds']) > 0: + if 'subdir' in app['builds'][-1]: + build_dir = os.path.join(build_dir, app['builds'][-1]['subdir']) hver = None hcode = "0" @@ -126,7 +124,10 @@ def check_repomanifest(app, sdk_path, branch=None): vcs.gotorevision('origin/master') pass elif vcs.repotype() == 'git-svn': - vcs.gotorevision(None) + if branch: + vcs.gotorevision(branch) + else: + vcs.gotorevision(None) elif vcs.repotype() == 'svn': vcs.gotorevision(None) elif vcs.repotype() == 'hg': @@ -135,11 +136,9 @@ def check_repomanifest(app, sdk_path, branch=None): else: vcs.gotorevision('default') - if len(app['builds']) == 0: - return (None, "Can't use RepoManifest with no builds defined") - - if 'subdir' in app['builds'][-1]: - build_dir = os.path.join(build_dir, app['builds'][-1]['subdir']) + if len(app['builds']) > 0: + if 'subdir' in app['builds'][-1]: + build_dir = os.path.join(build_dir, app['builds'][-1]['subdir']) version, vercode, package = common.parse_androidmanifest(build_dir) if not package: @@ -177,9 +176,6 @@ def check_market(app): except urllib2.HTTPError, e: if e.code == 404: return (None, 'Not in market') - elif e.code == 503: - print "Whoops" - sys.exit(1) else: return (None, 'Failed with HTTP status' + str(req.getcode())) except Exception, e: diff --git a/fdroidserver/common.py b/fdroidserver/common.py index de15d239..d3b73621 100644 --- a/fdroidserver/common.py +++ b/fdroidserver/common.py @@ -208,13 +208,11 @@ class vcs_gitsvn(vcs): if len(remote_split) > 1: for i in remote_split[1:]: if i.startswith('trunk='): - trunk = i[6:] + gitsvn_cmd += ['-T', i[6:]] elif i.startswith('tags='): - tags = i[5:] - if trunk: - gitsvn_cmd += ['-T', trunk] - if tags: - gitsvn_cmd += ['-t', tags] + gitsvn_cmd += ['-t', i[5:]] + elif i.startswith('branches='): + gitsvn_cmd += ['-b', i[9:]] if subprocess.call(gitsvn_cmd + [remote_split[0], self.local]) != 0: raise VCSException("Git clone failed") else: @@ -237,22 +235,24 @@ class vcs_gitsvn(vcs): raise VCSException("Git svn rebase failed") self.refreshed = True if rev: - if rev == 'trunk': - if subprocess.call(['git', 'checkout', 'trunk'], cwd=self.local) != 0: - raise VCSException("Git checkout failed") + # Try finding a svn tag + p = subprocess.Popen(['git', 'checkout', 'tags/' + rev], + cwd=self.local, stderr=subprocess.PIPE) + if p.returncode == 0: + print p.communicate()[0] else: - # Try finding a svn tag - if subprocess.call(['git', 'checkout', 'tags/' + rev], cwd=self.local) != 0: - # No tag found, normal svn rev translation - # Translate svn rev into git format - p = subprocess.Popen(['git', 'svn', 'find-rev', 'r' + rev], - cwd=self.local, stdout=subprocess.PIPE) - rev = p.communicate()[0].rstrip() - if p.returncode != 0 or len(rev) == 0: - raise VCSException("Failed to get git treeish from svn rev") - # Check out the appropriate git revision... + # No tag found, normal svn rev translation + # Translate svn rev into git format + p = subprocess.Popen(['git', 'svn', 'find-rev', 'r' + rev], + cwd=self.local, stdout=subprocess.PIPE) + rev = p.communicate()[0].rstrip() + if p.returncode != 0 or len(rev) == 0: + # Try a plain git checkout as a last resort if subprocess.call(['git', 'checkout', rev], cwd=self.local) != 0: - raise VCSException("Git checkout failed") + raise VCSException("No git treeish found and direct git checkout failed") + # Check out the appropriate git revision... + if subprocess.call(['git', 'checkout', rev], cwd=self.local) != 0: + raise VCSException("Git checkout failed") # Get rid of any uncontrolled files left behind... if subprocess.call(['git', 'clean', '-dffx'], cwd=self.local) != 0: raise VCSException("Git clean failed") diff --git a/fdroidserver/update.py b/fdroidserver/update.py index 41c2aabe..0c27a4e4 100644 --- a/fdroidserver/update.py +++ b/fdroidserver/update.py @@ -103,7 +103,7 @@ def update_wiki(apps, apks, verbose=False): wikidata += "We have the current version of this app." wikidata += " (Check mode: " + app['Update Check Mode'] + ")\n\n" if len(app['No Source Since']) > 0: - wikidata += "This application has been partially or entirely been missing source code since version " + app['No Source Since'] + "\n\n" + wikidata += "This application has partially or entirely been missing source code since version " + app['No Source Since'] + ".\n\n" if len(app['Current Version']) > 0: wikidata += "The current (recommended) version is " + app['Current Version'] wikidata += " (version code " + app['Current Version Code'] + ").\n\n"