diff --git a/config.sample.py b/config.sample.py index 85c17d50..0231625b 100644 --- a/config.sample.py +++ b/config.sample.py @@ -85,9 +85,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 5a6cc61d..43ea05fd 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,8 +43,22 @@ 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) + + 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'] @@ -51,21 +66,27 @@ def main(): 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() - -