move cleanup_checkout / local repo, dry_run/push/run relationships to app

so app behaves more consistently when run without cli
pull/1211/head
Min RK 2022-11-08 16:27:45 +01:00
rodzic 2a9dab13f8
commit d5f291bec1
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 809C6E46EAA899F4
2 zmienionych plików z 17 dodań i 6 usunięć

Wyświetl plik

@ -447,10 +447,6 @@ def make_r2d(argv=None):
# extend any environment config from a config file
r2d.environment.extend(args.environment)
# if the source exists locally we don't want to delete it at the end
# FIXME: Find a better way to figure out if repo is 'local'. Push this into ContentProvider?
if os.path.exists(args.repo):
r2d.cleanup_checkout = False
elif args.clean is not None:
r2d.cleanup_checkout = args.clean

Wyświetl plik

@ -20,7 +20,7 @@ from urllib.parse import urlparse
import entrypoints
import escapism
from pythonjsonlogger import jsonlogger
from traitlets import Any, Bool, Dict, Int, List, Unicode, default
from traitlets import Any, Bool, Dict, Int, List, Unicode, default, observe
from traitlets.config import Application
from . import __version__, contentproviders
@ -304,7 +304,7 @@ class Repo2Docker(Application):
)
cleanup_checkout = Bool(
False,
True,
help="""
Delete source repository after building is done.
@ -313,6 +313,12 @@ class Repo2Docker(Application):
config=True,
)
@default("cleanup_checkout")
def _defaut_cleanup_checkout(self):
# if the source exists locally we don't want to delete it at the end
# FIXME: Find a better way to figure out if repo is 'local'. Push this into ContentProvider?
return not os.path.exists(self.repo)
output_image_spec = Unicode(
"",
help="""
@ -349,6 +355,12 @@ class Repo2Docker(Application):
config=True,
)
@observe("dry_run")
def _dry_run_changed(self, change):
if change.new:
# dry_run forces run and push to be False
self.push = self.run = False
# FIXME: Refactor classes to separate build & run steps
run_cmd = List(
[],
@ -727,6 +739,8 @@ class Repo2Docker(Application):
# making a copy of it as it might contain large files that would be
# expensive to copy.
if os.path.isdir(self.repo):
# never cleanup when we are working in a local repo
self.cleanup_checkout = False
checkout_path = self.repo
else:
if self.git_workdir is None:
@ -828,6 +842,7 @@ class Repo2Docker(Application):
finally:
# Cleanup checkout if necessary
# never cleanup when checking out a local repo
if self.cleanup_checkout:
shutil.rmtree(checkout_path, ignore_errors=True)