Skip to content

Commit

Permalink
feat: add update command
Browse files Browse the repository at this point in the history
  • Loading branch information
un-def committed Apr 15, 2024
1 parent 9a05157 commit 742947d
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 19 deletions.
9 changes: 3 additions & 6 deletions src/luamb/_entrypoint.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import os
import sys


Expand All @@ -16,21 +15,19 @@ def error(msg, exit_status=1):
print(msg, file=sys.stderr)
sys.exit(exit_status)

import os

from ._datadirs import ENVS_DIR
from ._exceptions import LuambException
from ._hererocks import import_hererocks
from ._luamb import Luamb

hererocks = import_hererocks()
if not hererocks:
error("'hererocks' is not installed")

luamb = Luamb(
envs_dir=ENVS_DIR,
active_env=os.environ.get('LUAMB_ACTIVE_ENV'),
lua_default=os.environ.get('LUAMB_LUA_DEFAULT'),
luarocks_default=os.environ.get('LUAMB_LUAROCKS_DEFAULT'),
hererocks=hererocks,
hererocks=import_hererocks(),
)

try:
Expand Down
57 changes: 44 additions & 13 deletions src/luamb/_luamb.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,17 @@
import shutil
import sys
from collections import OrderedDict
from importlib import import_module
from io import StringIO
from typing import TYPE_CHECKING

from . import __version__
from ._exceptions import LuambException
from ._hererocks import update_hererocks


if TYPE_CHECKING:
from pathlib import Path
from types import ModuleType


class CMD(object):
Expand Down Expand Up @@ -47,10 +48,10 @@ def render_help(self):
continue
cmd_str = cmd
if cmd_info['aliases']:
cmd_str = '{0: <6}(aliases: {1})'.format(
cmd_str = '{0: <8}(aliases: {1})'.format(
cmd_str, ', '.join(cmd_info['aliases']))
if cmd_info['desc']:
cmd_str = '{0: <38}{1}'.format(cmd_str, cmd_info['desc'])
cmd_str = '{0: <40}{1}'.format(cmd_str, cmd_info['desc'])
help_list.append(cmd_str)
return '\n'.join(help_list)

Expand Down Expand Up @@ -135,21 +136,21 @@ class Luamb(object):

cmd = CMD()

# {product_key: {version_alias: version}}
supported_versions: dict[str, dict[str, str]]

def __init__(
self, envs_dir: Path, active_env: str | None = None,
lua_default: str | None = None,
luarocks_default: str | None = None,
hererocks=None,
self, *,
envs_dir: Path, active_env: str | None = None,
lua_default: str | None = None, luarocks_default: str | None = None,
hererocks: ModuleType | None,
):
self.envs_dir = envs_dir
self.active_env = active_env
self.lua_default = lua_default
self.luarocks_default = luarocks_default
self.hererocks = hererocks or import_module('hererocks')
self.supported_versions = {
product_key: self._fetch_supported_versions(cls_name)
for product_key, cls_name in self.product_hererocks_classes.items()
}
self.hererocks = hererocks
self.supported_versions = {}

def run(self, argv=None):
if not argv:
Expand Down Expand Up @@ -198,6 +199,8 @@ def cmd_off(self, argv):
@cmd.add('mk', 'new', 'create')
def cmd_mk(self, argv):
"""create new environment"""
if not self._check_hererocks_is_installed():
return
parser = argparse.ArgumentParser(
prog='luamb mk',
add_help=False,
Expand Down Expand Up @@ -375,6 +378,8 @@ def cmd_rm(self, argv):
@cmd.add('info', 'show')
def cmd_info(self, argv):
"""show environment info"""
if not self._check_hererocks_is_installed():
return
if '-h' in argv or '--help' in argv:
print("usage: luamb info [ENV_NAME]")
return
Expand All @@ -387,6 +392,8 @@ def cmd_info(self, argv):
@cmd.add('ls', 'list')
def cmd_ls(self, argv):
"""list available environments"""
if not self._check_hererocks_is_installed():
return
parser = argparse.ArgumentParser(prog='luamb ls')
parser.add_argument(
'-s', '--short',
Expand All @@ -404,6 +411,19 @@ def cmd_ls(self, argv):
if detail:
print('\n')

@cmd.add('update', 'upgrade')
def cmd_update(self, argv):
"""update hererocks"""
if '-h' in argv or '--help' in argv:
print("usage: luamb update")
return
print('updating hererocks')
updated = update_hererocks()
if updated:
print('updated')
else:
print('hererocks is already up-to-date')

@contextlib.contextmanager
def _maybe_capture_output(self, capture_output):
string_buffer = StringIO()
Expand Down Expand Up @@ -470,7 +490,12 @@ def _fetch_supported_versions(self, hererocks_cls_name):
return versions

def _get_supported_versions(self, product_key, raise_exc=True):
versions = self.supported_versions[product_key]
supported_versions = self.supported_versions
if not supported_versions:
for prod_key, cls_name in self.product_hererocks_classes.items():
supported_versions[prod_key] = self._fetch_supported_versions(
cls_name)
versions = supported_versions[product_key]
if versions or not raise_exc:
return versions
raise LuambException(
Expand Down Expand Up @@ -524,3 +549,9 @@ def _is_local_path_or_git_uri(self, version_string, skip_path_check=False):
"'{}' is not a directory ".format(version_string)
)
return True

def _check_hererocks_is_installed(self) -> bool:
if self.hererocks is None:
print("'hererocks' is not installed, run 'luamb update'")
return False
return True

0 comments on commit 742947d

Please sign in to comment.