diff options
author | Ben Hutchings <ben.hutchings@codethink.co.uk> | 2020-05-13 19:24:18 +0100 |
---|---|---|
committer | Ben Hutchings <ben.hutchings@codethink.co.uk> | 2020-06-01 15:31:19 +0100 |
commit | 035617a3334f279b029edf892e41b7d0cb87f0b7 (patch) | |
tree | 111fc47736fe72a075799e9032b66a1b42326eba /lorrycontroller | |
parent | 2f6987a7cbc485f28b875013bd3793a08be0083c (diff) | |
download | lorry-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.py | 8 | ||||
-rw-r--r-- | lorrycontroller/local.py | 28 |
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 |