summaryrefslogtreecommitdiff
path: root/lorrycontroller
diff options
context:
space:
mode:
authorBen Hutchings <ben.hutchings@codethink.co.uk>2020-05-13 19:24:18 +0100
committerBen Hutchings <ben.hutchings@codethink.co.uk>2020-06-01 15:31:19 +0100
commit035617a3334f279b029edf892e41b7d0cb87f0b7 (patch)
tree111fc47736fe72a075799e9032b66a1b42326eba /lorrycontroller
parent2f6987a7cbc485f28b875013bd3793a08be0083c (diff)
downloadlorry-controller-035617a3334f279b029edf892e41b7d0cb87f0b7.tar.gz
local: Create the repository in prepare_repo
We won't be able to set metadata on a repository before we've created it. So do that in prepare_repo instead of deferring it to Lorry. This requires adding an application setting for the base directory. Also update the method doc-string so the old lazy behaviour is not allowed.
Diffstat (limited to 'lorrycontroller')
-rw-r--r--lorrycontroller/hosts.py8
-rw-r--r--lorrycontroller/local.py28
2 files changed, 29 insertions, 7 deletions
diff --git a/lorrycontroller/hosts.py b/lorrycontroller/hosts.py
index b86cbad..39cae57 100644
--- a/lorrycontroller/hosts.py
+++ b/lorrycontroller/hosts.py
@@ -40,10 +40,10 @@ class DownstreamHost(abc.ABC):
@abc.abstractmethod
def prepare_repo(self, repo_path, metadata):
- '''Prepare a repository on the Host. If the repository does not exist
- and Lorry won't automatically create it, this method must create the
- repository. It should also set any given metadata on the repository,
- whether or not it already exists.
+ '''Prepare a repository on the Host. If the repository does not
+ exist, this method must create it. It should also set any
+ given metadata on the repository, whether or not it already
+ exists.
repo_path is the path that the repository should appear at
within the Host.
diff --git a/lorrycontroller/local.py b/lorrycontroller/local.py
index 101bc98..15a4048 100644
--- a/lorrycontroller/local.py
+++ b/lorrycontroller/local.py
@@ -13,14 +13,36 @@
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+import logging
+import os
+
+import cliapp
+
from . import hosts
class LocalDownstream(hosts.DownstreamHost):
+ @staticmethod
+ def add_app_settings(app_settings):
+ app_settings.string(
+ ['local-base-directory'],
+ 'Base directory for local Downstream Host')
+
+ @staticmethod
+ def check_app_settings(app_settings):
+ if not app_settings['local-base-directory']:
+ logging.error('A base directory must be provided to create '
+ 'repositories on a local filesystem.')
+ app_settings.require('local-base-directory')
+
def __init__(self, app_settings):
- pass
+ self._base_dir = app_settings['local-base-directory']
def prepare_repo(self, repo_path, metadata):
- # Lorry can create the repository directly
+ repo_path = '%s/%s.git' % (self._base_dir, repo_path)
+
+ # These are idempotent, so we don't need to explicitly check
+ # whether the repository already exists
+ os.makedirs(repo_path, exist_ok=True)
+ cliapp.runcmd(['git', 'init', '--bare', repo_path])
# TODO: set metadata
- pass