chiark / gitweb /
server: support git mirrors with the offline signing setup
authorHans-Christoph Steiner <hans@eds.org>
Tue, 11 Apr 2017 21:46:14 +0000 (23:46 +0200)
committerHans-Christoph Steiner <hans@eds.org>
Wed, 12 Apr 2017 13:04:04 +0000 (15:04 +0200)
fdroidserver/server.py
tests/run-tests

index df8d5c80ddc0408f229fa57e82ffdeabb6454900..0f2b5f7e01caf92d4cd65ba0a60aa475631ea0af 100644 (file)
@@ -223,8 +223,23 @@ def update_localcopy(repo_section, local_copy_dir):
 
 
 def update_servergitmirrors(servergitmirrors, repo_section):
-    # depend on GitPython only if users set a git mirror
+    '''update repo mirrors stored in git repos
+
+    This is a hack to use public git repos as F-Droid repos.  It
+    recreates the git repo from scratch each time, so that there is no
+    history.  That keeps the size of the git repo small.  Services
+    like GitHub or GitLab have a size limit of something like 1 gig.
+    This git repo is only a git repo for the purpose of being hosted.
+    For history, there is the archive section, and there is the binary
+    transparency log.
+
+    '''
     import git
+    if config.get('local_copy_dir') \
+       and not config.get('sync_from_local_copy_dir'):
+        logging.debug('Offline machine, skipping git mirror generation until `fdroid server update`')
+        return
+
     # right now we support only 'repo' git-mirroring
     if repo_section == 'repo':
         git_mirror_path = 'git-mirror'
index 43641c4e12003a0bd6eaa3381d003315112ef60f..ac3665a79f2644d4a6d518e87ae8f53972bd4088 100755 (executable)
@@ -591,17 +591,15 @@ set -e
 echo_header "copy tests/repo, update with binary transparency log"
 
 REPOROOT=`create_test_dir`
+GIT_REMOTE=`create_test_dir`
 GNUPGHOME=$REPOROOT/gnupghome
 KEYSTORE=$WORKSPACE/tests/keystore.jks
-mkdir $REPOROOT/git_remote
-cd $REPOROOT/git_remote
-git init --bare
 cd $REPOROOT
 $fdroid init --keystore $KEYSTORE --repo-keyalias=sova
 cp -a $WORKSPACE/tests/metadata $WORKSPACE/tests/repo $WORKSPACE/tests/stats $REPOROOT/
 echo 'keystorepass = "r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI="' >> config.py
 echo 'keypass = "r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI="' >> config.py
-echo "binary_transparency_remote = '$REPOROOT/git_remote'" >> config.py
+echo "binary_transparency_remote = '$GIT_REMOTE'" >> config.py
 echo "accepted_formats = ['json', 'txt', 'yml']" >> config.py
 $fdroid update --verbose
 $fdroid server update --verbose
@@ -611,7 +609,7 @@ test -e repo/index-v1.jar
 grep -F '<application id=' repo/index.xml > /dev/null
 cd binary_transparency
 [ `git rev-list --count HEAD` == "2" ]
-cd $REPOROOT/git_remote
+cd $GIT_REMOTE
 [ `git rev-list --count HEAD` == "2" ]
 
 
@@ -662,6 +660,61 @@ $fdroid update --create-key
 test -e $KEYSTORE
 
 
+#------------------------------------------------------------------------------#
+echo_header "sign binary repo in offline box, then publishing from online box"
+
+OFFLINE_ROOT=`create_test_dir`
+KEYSTORE=$WORKSPACE/tests/keystore.jks
+LOCAL_COPY_DIR=`create_test_dir`/fdroid
+mkdir $LOCAL_COPY_DIR
+ONLINE_ROOT=`create_test_dir`
+SERVERWEBROOT=`create_test_dir`
+
+# create offline binary transparency log
+cd $OFFLINE_ROOT
+mkdir binary_transparency
+cd binary_transparency
+git init
+
+# fake git remote server for binary transparency log
+BINARY_TRANSPARENCY_REMOTE=`create_test_dir`
+
+# fake git remote server for repo mirror
+SERVER_GIT_MIRROR=`create_test_dir`
+cd $SERVER_GIT_MIRROR
+git init
+git config receive.denyCurrentBranch updateInstead
+
+cd $OFFLINE_ROOT
+$fdroid init --keystore $KEYSTORE --repo-keyalias=sova
+cp -a $WORKSPACE/tests/metadata $WORKSPACE/tests/repo $WORKSPACE/tests/stats $OFFLINE_ROOT/
+
+echo 'keystorepass = "r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI="' >> config.py
+echo 'keypass = "r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI="' >> config.py
+echo "servergitmirrors = '$SERVER_GIT_MIRROR'" >> config.py
+echo "local_copy_dir = '$LOCAL_COPY_DIR'" >> config.py
+echo "accepted_formats = ['json', 'txt', 'yml']" >> config.py
+$fdroid update --verbose
+grep -F '<application id=' repo/index.xml > /dev/null
+cd binary_transparency
+[ `git rev-list --count HEAD` == "1" ]
+cd ..
+$fdroid server update --verbose
+grep -F '<application id=' $LOCAL_COPY_DIR/repo/index.xml > /dev/null
+cd $ONLINE_ROOT
+echo "local_copy_dir = '$LOCAL_COPY_DIR'" >> config.py
+echo "sync_from_local_copy_dir = True" >> config.py
+echo "serverwebroots = '$SERVERWEBROOT'" >> config.py
+echo "servergitmirrors = '$SERVER_GIT_MIRROR'" >> config.py
+echo "local_copy_dir = '$LOCAL_COPY_DIR'" >> config.py
+echo "binary_transparency_remote = '$BINARY_TRANSPARENCY_REMOTE'" >> config.py
+$fdroid server update --verbose
+cd $BINARY_TRANSPARENCY_REMOTE
+[ `git rev-list --count HEAD` == "1" ]
+cd $SERVER_GIT_MIRROR
+[ `git rev-list --count HEAD` == "1" ]
+
+
 #------------------------------------------------------------------------------#
 
 # remove this to prevent git conflicts and complaining