Skip to content

Commit

Permalink
Merge pull request #493 from JrGoodle/subdirectories
Browse files Browse the repository at this point in the history
Allow clowder to be called from subdirectories
  • Loading branch information
JrGoodle committed May 16, 2020
2 parents 7fd362f + df44a9e commit 43db714
Show file tree
Hide file tree
Showing 31 changed files with 474 additions and 296 deletions.
9 changes: 9 additions & 0 deletions clowder_test/clowder_test/cli/cats_controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,15 @@ def status(self) -> None:

self._execute_command('./status.sh', self.path)

@expose(
help='Run cats subdirectory tests'
)
@create_cats_cache
def subdirectory(self) -> None:
"""clowder cats subdirectory tests"""

self._execute_command('./subdirectory.sh', self.path)

@expose(
help='Run cats yaml tests'
)
Expand Down
2 changes: 1 addition & 1 deletion clowder_test/clowder_test/execute.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ def wrapper(*args, **kwargs):


def execute_test_command(command: str, path: str, parallel: bool = False, write: bool = False,
coverage: bool = False, test_env: Optional[dict] = None, debug: bool = False,
coverage: bool = False, test_env: Optional[dict] = None, debug: bool = True,
quiet: bool = False) -> None:
"""Execute test command
Expand Down
35 changes: 33 additions & 2 deletions src/clowder/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,39 @@

import os
import pkg_resources
from typing import Optional


ROOT_DIR = os.getcwd()

CLOWDER_SCHEMA = pkg_resources.resource_string(__name__, "clowder.schema.json")


CURRENT_DIR: str = os.getcwd()
CLOWDER_DIR: Optional[str] = None
CLOWDER_REPO_DIR: Optional[str] = None
CLOWDER_REPO_VERSIONS_DIR: Optional[str] = None
CLOWDER_YAML: Optional[str] = None


temp_dir = CURRENT_DIR
old_dir = None
# Walk up directory tree to find possible clowder repo (.clowder directory) and set global variable
while old_dir != temp_dir:
old_dir = temp_dir
clowder_repo_dir = os.path.join(temp_dir, '.clowder')
if os.path.exists(clowder_repo_dir) and os.path.isdir(clowder_repo_dir):
CLOWDER_DIR = temp_dir
CLOWDER_REPO_DIR = clowder_repo_dir
break
else:
temp_dir = os.path.dirname(temp_dir)

# If clowder repo exists, try to set other global path variables
if CLOWDER_REPO_DIR is not None:
clowder_yaml = os.path.join(CLOWDER_DIR, 'clowder.yaml')
if os.path.islink(clowder_yaml):
CLOWDER_YAML = clowder_yaml

clowder_versions = os.path.join(CLOWDER_REPO_DIR, 'versions')
if os.path.isdir(clowder_versions):
CLOWDER_REPO_VERSIONS_DIR = clowder_versions

6 changes: 4 additions & 2 deletions src/clowder/cli/branch_controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,10 @@
from cement.ext.ext_argparse import ArgparseController, expose

from clowder.clowder_controller import CLOWDER_CONTROLLER
from clowder.clowder_repo import print_clowder_repo_status
from clowder.util.decorators import valid_clowder_yaml_required
from clowder.util.decorators import (
print_clowder_repo_status,
valid_clowder_yaml_required
)
from clowder.util.clowder_utils import (
filter_projects,
options_help_message
Expand Down
6 changes: 4 additions & 2 deletions src/clowder/cli/checkout_controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,10 @@
from cement.ext.ext_argparse import ArgparseController, expose

from clowder.clowder_controller import CLOWDER_CONTROLLER
from clowder.clowder_repo import print_clowder_repo_status
from clowder.util.decorators import valid_clowder_yaml_required
from clowder.util.decorators import (
print_clowder_repo_status,
valid_clowder_yaml_required
)
from clowder.util.clowder_utils import (
filter_projects,
options_help_message
Expand Down
6 changes: 4 additions & 2 deletions src/clowder/cli/clean_controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,10 @@
from cement.ext.ext_argparse import ArgparseController, expose

from clowder.clowder_controller import CLOWDER_CONTROLLER, ClowderController
from clowder.clowder_repo import print_clowder_repo_status
from clowder.util.decorators import valid_clowder_yaml_required
from clowder.util.decorators import (
print_clowder_repo_status,
valid_clowder_yaml_required
)
from clowder.util.clowder_utils import (
filter_projects,
options_help_message
Expand Down
6 changes: 4 additions & 2 deletions src/clowder/cli/diff_controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,10 @@
from cement.ext.ext_argparse import ArgparseController, expose

from clowder.clowder_controller import CLOWDER_CONTROLLER
from clowder.clowder_repo import print_clowder_repo_status
from clowder.util.decorators import valid_clowder_yaml_required
from clowder.util.decorators import (
print_clowder_repo_status,
valid_clowder_yaml_required
)
from clowder.util.clowder_utils import (
filter_projects,
options_help_message
Expand Down
6 changes: 4 additions & 2 deletions src/clowder/cli/forall_controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,14 @@
from cement.ext.ext_argparse import ArgparseController, expose

from clowder.clowder_controller import CLOWDER_CONTROLLER, ClowderController
from clowder.clowder_repo import print_clowder_repo_status
from clowder.util.clowder_utils import (
filter_projects,
options_help_message
)
from clowder.util.decorators import valid_clowder_yaml_required
from clowder.util.decorators import (
print_clowder_repo_status,
valid_clowder_yaml_required
)
from clowder.util.parallel_commands import forall_parallel


Expand Down
6 changes: 4 additions & 2 deletions src/clowder/cli/herd_controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,16 @@
from cement.ext.ext_argparse import ArgparseController, expose

from clowder.clowder_controller import CLOWDER_CONTROLLER, ClowderController
from clowder.clowder_repo import print_clowder_repo_status_fetch
from clowder.util.clowder_utils import (
filter_projects,
options_help_message,
validate_projects
)
from clowder.util.connectivity import network_connection_required
from clowder.util.decorators import valid_clowder_yaml_required
from clowder.util.decorators import (
print_clowder_repo_status_fetch,
valid_clowder_yaml_required
)
from clowder.util.parallel_commands import herd_parallel


Expand Down
11 changes: 7 additions & 4 deletions src/clowder/cli/init_controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,10 @@
from cement.ext.ext_argparse import ArgparseController, expose
from termcolor import colored, cprint

from clowder.clowder_repo import CLOWDER_REPO
import clowder.clowder_repo as clowder_repo
from clowder import CURRENT_DIR
from clowder.error.clowder_exit import ClowderExit
from clowder.git.util import existing_git_repository
from clowder.util.connectivity import network_connection_required


Expand Down Expand Up @@ -45,14 +47,15 @@ def _init(self) -> None:
:raise ClowderExit:
"""

if os.path.isdir(CLOWDER_REPO.clowder_path):
clowder_repo_dir = os.path.join(CURRENT_DIR, '.clowder')
if existing_git_repository(clowder_repo_dir):
cprint('Clowder already initialized in this directory\n', 'red')
raise ClowderExit(1)

url_output = colored(self.app.pargs.url, 'green')
print('Create clowder repo from ' + url_output + '\n')
print(f"Create clowder repo from {url_output}\n")
if self.app.pargs.branch is None:
branch = 'master'
else:
branch = str(self.app.pargs.branch[0])
CLOWDER_REPO.init(self.app.pargs.url, branch)
clowder_repo.init(self.app.pargs.url, branch)
9 changes: 6 additions & 3 deletions src/clowder/cli/link_controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,11 @@

from cement.ext.ext_argparse import ArgparseController, expose

from clowder.clowder_repo import print_clowder_repo_status
from clowder.util.decorators import clowder_required
from clowder import CLOWDER_DIR
from clowder.util.decorators import (
clowder_required,
print_clowder_repo_status
)
from clowder.util.clowder_utils import (
get_saved_version_names,
link_clowder_yaml,
Expand Down Expand Up @@ -49,4 +52,4 @@ def _link(self) -> None:
version = None
else:
version = self.app.pargs.version[0]
link_clowder_yaml(version)
link_clowder_yaml(CLOWDER_DIR, version)
6 changes: 4 additions & 2 deletions src/clowder/cli/prune_controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,13 @@
from termcolor import cprint

from clowder.clowder_controller import CLOWDER_CONTROLLER, ClowderController
from clowder.clowder_repo import print_clowder_repo_status
from clowder.error.clowder_error import ClowderError
from clowder.model.project import Project
from clowder.util.connectivity import network_connection_required
from clowder.util.decorators import valid_clowder_yaml_required
from clowder.util.decorators import (
print_clowder_repo_status,
valid_clowder_yaml_required
)
from clowder.util.clowder_utils import (
existing_branch_projects,
filter_projects,
Expand Down
22 changes: 11 additions & 11 deletions src/clowder/cli/repo_controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@

from cement.ext.ext_argparse import ArgparseController, expose

from clowder.clowder_repo import (
CLOWDER_REPO,
import clowder.clowder_repo as clowder_repo
from clowder.util.decorators import (
clowder_required,
print_clowder_repo_status,
print_clowder_repo_status_fetch
)
from clowder.util.decorators import clowder_required
from clowder.util.connectivity import network_connection_required


Expand Down Expand Up @@ -54,7 +54,7 @@ def add(self) -> None:
def _add(self) -> None:
"""Clowder repo add command private implementation"""

CLOWDER_REPO.add(self.app.pargs.files)
clowder_repo.add(self.app.pargs.files)


class RepoCommitController(ArgparseController):
Expand Down Expand Up @@ -82,7 +82,7 @@ def commit(self) -> None:
def _commit(self) -> None:
"""Clowder repo commit command private implementation"""

CLOWDER_REPO.commit(self.app.pargs.message[0])
clowder_repo.commit(self.app.pargs.message[0])


class RepoPullController(ArgparseController):
Expand Down Expand Up @@ -110,7 +110,7 @@ def pull(self) -> None:
def _pull(self) -> None:
"""Clowder repo pull command private implementation"""

CLOWDER_REPO.pull()
clowder_repo.pull()


class RepoPushController(ArgparseController):
Expand Down Expand Up @@ -138,7 +138,7 @@ def push(self) -> None:
def _push(self) -> None:
"""Clowder repo push command private implementation"""

CLOWDER_REPO.push()
clowder_repo.push()


class RepoRunController(ArgparseController):
Expand Down Expand Up @@ -168,7 +168,7 @@ def run(self) -> None:
def _run(self) -> None:
"""Clowder repo run command private implementation"""

CLOWDER_REPO.run_command(self.app.pargs.command[0])
clowder_repo.run_command(self.app.pargs.command[0])


class RepoCheckoutController(ArgparseController):
Expand Down Expand Up @@ -199,7 +199,7 @@ def repo_checkout(self) -> None:
def _checkout(self) -> None:
"""Clowder repo checkout command private implementation"""

CLOWDER_REPO.checkout(self.app.pargs.ref[0])
clowder_repo.checkout(self.app.pargs.ref[0])


class RepoCleanController(ArgparseController):
Expand Down Expand Up @@ -229,7 +229,7 @@ def repo_clean(self) -> None:
def _clean(self) -> None:
"""Clowder repo clean command private implementation"""

CLOWDER_REPO.clean()
clowder_repo.clean()


class RepoStatusController(ArgparseController):
Expand Down Expand Up @@ -259,4 +259,4 @@ def repo_status(self) -> None:
def _status(self) -> None:
"""Clowder repo status command private implementation"""

CLOWDER_REPO.git_status()
clowder_repo.git_status()
6 changes: 4 additions & 2 deletions src/clowder/cli/reset_controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,16 @@
from cement.ext.ext_argparse import ArgparseController, expose

from clowder.clowder_controller import CLOWDER_CONTROLLER, ClowderController
from clowder.clowder_repo import print_clowder_repo_status_fetch
from clowder.util.clowder_utils import (
filter_projects,
options_help_message,
validate_projects
)
from clowder.util.connectivity import network_connection_required
from clowder.util.decorators import valid_clowder_yaml_required
from clowder.util.decorators import (
print_clowder_repo_status_fetch,
valid_clowder_yaml_required
)
from clowder.util.parallel_commands import reset_parallel


Expand Down
8 changes: 4 additions & 4 deletions src/clowder/cli/save_controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@

from cement.ext.ext_argparse import ArgparseController, expose

import clowder.clowder_repo as clowder_repo
import clowder.util.formatting as fmt
from clowder import ROOT_DIR
from clowder import CLOWDER_REPO_DIR
from clowder.clowder_controller import CLOWDER_CONTROLLER
from clowder.clowder_repo import CLOWDER_REPO
from clowder.error.clowder_exit import ClowderExit
from clowder.util.decorators import valid_clowder_yaml_required
from clowder.util.clowder_utils import validate_projects
Expand Down Expand Up @@ -53,15 +53,15 @@ def _save(self) -> None:
print(fmt.error_save_default(self.app.pargs.version))
raise ClowderExit(1)

CLOWDER_REPO.print_status()
clowder_repo.print_status()
CLOWDER_CONTROLLER.validate_projects_exist()
# TODO: Get all projects
validate_projects(CLOWDER_CONTROLLER.projects)

# Replace path separators with dashes to avoid creating directories
version_name = self.app.pargs.version.replace('/', '-')

versions_dir = os.path.join(ROOT_DIR, '.clowder', 'versions')
versions_dir = os.path.join(CLOWDER_REPO_DIR, 'versions')
_make_dir(versions_dir)

yaml_file = os.path.join(versions_dir, f"{version_name}.clowder.yaml")
Expand Down
6 changes: 4 additions & 2 deletions src/clowder/cli/start_controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,11 @@
from cement.ext.ext_argparse import ArgparseController, expose

from clowder.clowder_controller import CLOWDER_CONTROLLER
from clowder.clowder_repo import print_clowder_repo_status
from clowder.util.connectivity import network_connection_required
from clowder.util.decorators import valid_clowder_yaml_required
from clowder.util.decorators import (
print_clowder_repo_status,
valid_clowder_yaml_required
)
from clowder.util.clowder_utils import (
filter_projects,
options_help_message,
Expand Down
6 changes: 4 additions & 2 deletions src/clowder/cli/stash_controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,10 @@
from cement.ext.ext_argparse import ArgparseController, expose

from clowder.clowder_controller import CLOWDER_CONTROLLER
from clowder.clowder_repo import print_clowder_repo_status
from clowder.util.decorators import valid_clowder_yaml_required
from clowder.util.decorators import (
print_clowder_repo_status,
valid_clowder_yaml_required
)
from clowder.util.clowder_utils import (
filter_projects,
options_help_message
Expand Down

0 comments on commit 43db714

Please sign in to comment.