From c21ab7dbdf76e090bc624a47235860050e941309 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Mon, 2 Dec 2013 17:29:51 -0500 Subject: [PATCH 1/2] add new `fdroid server init` command for setting up the dir on the server This is quite simple, but makes the user experience consistent when setting up repos: run init then update locally, then run init then update on the server. This patch also includes PEP8 formatting fixes --- fdroidserver/server.py | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/fdroidserver/server.py b/fdroidserver/server.py index 5a6cc61d..3ed2a59e 100644 --- a/fdroidserver/server.py +++ b/fdroidserver/server.py @@ -26,6 +26,7 @@ import common config = None options = None + def main(): global config, options @@ -42,30 +43,38 @@ def main(): print "Specify a single command" sys.exit(1) - if args[0] != 'update': - print "The only command currently supported is 'update'" + if args[0] != 'init' and args[0] != 'update': + print "The only commands currently supported are 'init' and 'update'" sys.exit(1) + host, fdroiddir = config['serverwebroot'].split(':') + repodirs = ['repo'] if config['archive_older'] != 0: repodirs.append('archive') for repodir in repodirs: - index = os.path.join(repodir, 'index.xml') - indexjar = os.path.join(repodir, 'index.jar') - if subprocess.call(['rsync', '-u', '-v', '-r', '--delete', - '--exclude', index, '--exclude', indexjar, repodir, config['serverwebroot']]) != 0: - sys.exit(1) - if subprocess.call(['rsync', '-u', '-v', '-r', '--delete', - index, config['serverwebroot'] + '/' + repodir]) != 0: - sys.exit(1) - if subprocess.call(['rsync', '-u', '-v', '-r', '--delete', - indexjar, config['serverwebroot'] + '/' + repodir]) != 0: - sys.exit(1) + if args[0] == 'init': + if subprocess.call(['ssh', '-v', host, + 'mkdir -p', fdroiddir + '/' + repodir]) != 0: + sys.exit(1) + elif args[0] == 'update': + index = os.path.join(repodir, 'index.xml') + indexjar = os.path.join(repodir, 'index.jar') + if subprocess.call(['rsync', '-u', '-v', '-r', '--delete', + '--exclude', index, '--exclude', indexjar, + repodir, config['serverwebroot']]) != 0: + sys.exit(1) + if subprocess.call(['rsync', '-u', '-v', '-r', '--delete', + index, + config['serverwebroot'] + '/' + repodir]) != 0: + sys.exit(1) + if subprocess.call(['rsync', '-u', '-v', '-r', '--delete', + indexjar, + config['serverwebroot'] + '/' + repodir]) != 0: + sys.exit(1) sys.exit(0) if __name__ == "__main__": main() - - From 71020a9e6dd600e7b3a07a01c23165b8e58933a2 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Wed, 4 Dec 2013 15:28:41 -0500 Subject: [PATCH 2/2] update sample and add error to reflect the default basedir: .*/fdroid/repo For user-generated repos, the default path/URL is .*/fdroid/repo, with fdroid/ as the root where the 'fdroid' tool operates. This makes for a URL that is quite unique and easily matched automatically using patterns, like in fdroidclient. For those who don't like the standard, they can override the errror from config.py using nonstandardwebroot = True --- config.sample.py | 12 +++++++++--- fdroidserver/init.py | 9 +++++---- fdroidserver/server.py | 14 +++++++++++++- 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/config.sample.py b/config.sample.py index 712167b3..47e66bad 100644 --- a/config.sample.py +++ b/config.sample.py @@ -87,9 +87,15 @@ keyaliases['com.example.app'] = 'example' #the @ prefix. keyaliases['com.example.another.plugin'] = '@com.example.another' -#The ssh path to the server's public web root directory. This is used for -#uploading data, etc. -serverwebroot = 'user@example:/var/www/repo' +# The full path to the root of the repository. It must be specified in +# rsync/ssh format for a remote host/path. This is used for syncing a locally +# generated repo to the server that is it hosted on. It must end in the +# standard public repo name of "/fdroid", but can be in up to three levels of +# sub-directories (i.e. /var/www/packagerepos/fdroid). +serverwebroot = 'user@example:/var/www/fdroid' + +# If you want to force 'fdroid server' to use a non-standard serverwebroot +#nonstandardwebroot = True #Wiki details wiki_protocol = "http" diff --git a/fdroidserver/init.py b/fdroidserver/init.py index 09125551..26bc897d 100644 --- a/fdroidserver/init.py +++ b/fdroidserver/init.py @@ -102,12 +102,12 @@ def main(): prefix = tmp examplesdir = prefix - repodir = os.getcwd() + fdroiddir = os.getcwd() if not os.path.exists('config.py') and not os.path.exists('repo'): # 'metadata' and 'tmp' are created in fdroid os.mkdir('repo') - shutil.copy(os.path.join(examplesdir, 'fdroid-icon.png'), repodir) + shutil.copy(os.path.join(examplesdir, 'fdroid-icon.png'), fdroiddir) shutil.copyfile(os.path.join(examplesdir, 'config.sample.py'), 'config.py') os.chmod('config.py', 0o0600) else: @@ -206,13 +206,14 @@ def main(): write_to_config('keydname', keydname) genkey(keystore, repo_keyalias, password, keydname) - print('Built repo in "' + repodir + '" with this config:') + print('Built repo based in "' + fdroiddir + '"') + print('with this config:') print(' Android SDK:\t\t\t' + sdk_path) print(' Android SDK Build Tools:\t' + os.path.dirname(aapt)) print(' Android NDK (optional):\t' + ndk_path) print(' Keystore for signing key:\t' + keystore) print('\nTo complete the setup, add your APKs to "' + - os.path.join(repodir, 'repo') + '"' + + os.path.join(fdroiddir, 'repo') + '"' + ''' then run "fdroid update -c; fdroid update". You might also want to edit "config.py" to set the URL, repo name, and more. You should also set up diff --git a/fdroidserver/server.py b/fdroidserver/server.py index 3ed2a59e..43ea05fd 100644 --- a/fdroidserver/server.py +++ b/fdroidserver/server.py @@ -47,7 +47,19 @@ def main(): print "The only commands currently supported are 'init' and 'update'" sys.exit(1) - host, fdroiddir = config['serverwebroot'].split(':') + serverwebroot = config['serverwebroot'].rstrip('/').replace('//', '/') + host, fdroiddir = serverwebroot.split(':') + serverrepobase = os.path.basename(fdroiddir) + if 'nonstandardwebroot' in config and config['nonstandardwebroot'] == True: + standardwebroot = False + else: + standardwebroot = True + if serverrepobase != 'fdroid' and standardwebroot: + print('ERROR: serverwebroot does not end with "fdroid", ' + + 'perhaps you meant one of these:\n\t' + + serverwebroot.rstrip('/') + '/fdroid\n\t' + + serverwebroot.rstrip('/').rstrip(serverrepobase) + 'fdroid') + sys.exit(1) repodirs = ['repo'] if config['archive_older'] != 0: