Skip to content

Commit eb41c5c

Browse files
committed
add --export option for --resolve
1 parent 402f821 commit eb41c5c

2 files changed

Lines changed: 32 additions & 16 deletions

File tree

lib/envstack/cli.py

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,15 @@ def main():
289289
for key, value in data.items():
290290
print(f"{key}={value}")
291291

292-
elif args.set is not None:
292+
elif args.clear:
293+
from envstack.env import clear
294+
295+
print(clear(args.namespace, shell=config.SHELL))
296+
297+
elif args.export and args.resolve is None and args.set is None:
298+
print(export(args.namespace, shell=config.SHELL, encrypt=args.encrypt))
299+
300+
elif args.set is not None and args.resolve is None:
293301
force_stdin = args.set == [] or args.set == ["-"]
294302
using_pipe = args.set == [] and not sys.stdin.isatty()
295303

@@ -360,18 +368,32 @@ def main():
360368
resolved = resolve_environ(
361369
load_environ(args.namespace, platform=args.platform)
362370
)
371+
if args.set:
372+
resolved.update(_parse_keyvals(args.set))
363373
if args.encrypt:
364374
resolved = encrypt_environ(resolved)
365375
if args.out:
366376
if len(args.resolve) == 0:
367377
resolved.write(args.out, depth=0)
368378
else:
369-
env = Env(
370-
{key: resolved[key] for key in args.resolve if key in resolved}
371-
)
379+
keys = args.resolve or resolved.keys()
380+
if args.set:
381+
keys = set(keys).union(_parse_keyvals(args.set).keys())
382+
env = Env({key: resolved[key] for key in keys})
372383
env.write(args.out, depth=0)
384+
elif args.export:
385+
if len(args.resolve) == 0:
386+
print(export_env_to_shell(resolved, shell=config.SHELL))
387+
else:
388+
keys = args.resolve or resolved.keys()
389+
if args.set:
390+
keys = set(keys).union(_parse_keyvals(args.set).keys())
391+
env = Env({key: resolved[key] for key in keys})
392+
print(export_env_to_shell(env, shell=config.SHELL))
373393
else:
374394
keys = args.resolve or resolved.keys()
395+
if args.set:
396+
keys = set(keys).union(_parse_keyvals(args.set).keys())
375397
for key in sorted(str(k) for k in keys):
376398
val = resolved.get(key)
377399
if key in resolved:
@@ -404,14 +426,6 @@ def main():
404426
for source in env.sources:
405427
print(source.path)
406428

407-
elif args.clear:
408-
from envstack.env import clear
409-
410-
print(clear(args.namespace, config.SHELL))
411-
412-
elif args.export:
413-
print(export(args.namespace, config.SHELL))
414-
415429
else:
416430
env = load_environ(
417431
args.namespace, platform=args.platform, encrypt=args.encrypt

lib/envstack/env.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -659,19 +659,21 @@ def export(
659659
name: str = config.DEFAULT_NAMESPACE,
660660
shell: str = config.SHELL,
661661
scope: str = None,
662+
encrypt: bool = False,
662663
):
663664
"""Returns shell commands that can be sourced to set environment stack
664665
environment variables.
665666
666667
Supported shells: bash, sh, tcsh, cmd, pwsh (see config.detect_shell()).
667668
668669
:param name: stack namespace.
669-
:param shell: name of shell (default: current shell).
670-
:param scope: environment scope (default: cwd).
670+
:param shell: name of shell (optional).
671+
:param scope: environment scope (optional).
672+
:param encrypt: encrypt the values (optional).
671673
:returns: shell commands as string.
672674
"""
673-
resolved_env = resolve_environ(load_environ(name, scope=scope))
674-
return export_env_to_shell(resolved_env, shell)
675+
env = load_environ(name, scope=scope, encrypt=encrypt)
676+
return export_env_to_shell(env, shell)
675677

676678

677679
def save():

0 commit comments

Comments
 (0)