From 20791cd95a6209983b9be1da69c8ecfd52b836d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5vard=20Berland?= Date: Thu, 23 Feb 2023 12:11:15 +0100 Subject: [PATCH] Change command line option name from cache to work The command line option cache hints to komodo supporting some kind of caching, which it does not. The directory named used as a cache is a working directory used while building, and cannot be prepopulated. --- .github/workflows/test.yml | 1 - docs/basic-usage.md | 2 +- komodo/cli.py | 32 +++++++++++++++++---------- komodo/fetch.py | 13 +++++++---- tests/data/cli/nominal_repository.yml | 2 +- 5 files changed, 31 insertions(+), 19 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 0c779e5c..bd5e6684 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -47,7 +47,6 @@ jobs: ci/${RELEASE} \ ci/repository.yml \ --workspace ${{ runner.temp }}/kmd-ws \ - --cache ${{ runner.temp }}/kmd-cache \ --prefix ${{ runner.temp }}/pfx \ --release ci \ --locations-config $(realpath ci/locations.yml) \ diff --git a/docs/basic-usage.md b/docs/basic-usage.md index e2e780d9..e415251a 100644 --- a/docs/basic-usage.md +++ b/docs/basic-usage.md @@ -52,7 +52,7 @@ A full software distribution can then be built and deployed to a specified path, e.g. `./builds/stable-0.0.1`, with the following command: ```bash -kmd stable.yml repository.yml --prefix builds --release stable-0.0.1 --locations-config locations.yml --cache pip-cache +kmd stable.yml repository.yml --prefix builds --release stable-0.0.1 --locations-config locations.yml ``` To use this environment, type `source builds/stable-0.0.1/enable`. diff --git a/komodo/cli.py b/komodo/cli.py index c7af03eb..c29a235d 100755 --- a/komodo/cli.py +++ b/komodo/cli.py @@ -54,7 +54,7 @@ def _main(args): data = Data(extra_data_dirs=args.extra_data_dirs) if args.download or (not args.build and not args.install): - git_hashes = fetch(args.pkgs, args.repo, outdir=args.cache, pip=args.pip) + git_hashes = fetch(args.pkgs, args.repo, outdir=args.downloads, pip=args.pip) if args.download and not args.build: sys.exit(0) @@ -70,7 +70,7 @@ def _main(args): args.repo, data, prefix=str(tmp_prefix), - dlprefix=args.cache, + dlprefix=args.downloads, builddir=args.tmp, jobs=args.jobs, cmk=args.cmake, @@ -137,8 +137,9 @@ def _main(args): shell(f"rm -rf {args.prefix}/{args.release}.delete", sudo=args.sudo) if args.tmp: - # Allows e.g. pip to use this folder as tmpfolder, instead of in some - # cases falling back to /tmp, which is undesired when building on nfs. + # Allows e.g. pip to use this folder as a destination for "pip + # download", instead of in some cases falling back to /tmp, which is + # undesired when building on nfs. os.environ["TMPDIR"] = args.tmp release_path = Path(args.prefix) / Path(args.release) @@ -159,8 +160,9 @@ def _main(args): "--no-index", "--no-deps", "--ignore-installed", - f"--cache-dir {args.cache}", - f"--find-links {args.cache}", + # assuming fetch.py has done "pip download" to this directory: + f"--cache-dir {args.downloads}", + f"--find-links {args.downloads}", ] shell_input.append(current.get("makeopts")) @@ -265,11 +267,15 @@ def parse_args(args: List[str]) -> argparse.Namespace: "current working directory.", ) optional_args.add_argument( - "--cache", - "-c", + "--downloads", + "--cache", # deprecated + "-c", # deprecated type=str, - default="pip-cache", - help="The temporary directory used for downloads, e.g. by pip.", + default="downloads", + help="A destination directory relative to the workspace, used for downloads, " + "used by pip download, cp, rsync and git clone. This directory " + "must be empty if it already exists, otherwise it will be created, " + "unless you are running with the --build option.", ) optional_args.add_argument( "--jobs", @@ -282,13 +288,15 @@ def parse_args(args: List[str]) -> argparse.Namespace: "--download", "-d", action="store_true", - help="Flag to choose whether to download the packages.", + help="If set, packages will be downloaded but nothing will be built, unless " + "--build is also included.", ) optional_args.add_argument( "--build", "-b", action="store_true", - help="Flag to choose whether to build the packages.", + help="Flag to only build. If set and --download is not, " + "the downloads directory must already be populated.", ) optional_args.add_argument( "--install", diff --git a/komodo/fetch.py b/komodo/fetch.py index 3c8453ab..530e3cfd 100644 --- a/komodo/fetch.py +++ b/komodo/fetch.py @@ -70,8 +70,12 @@ def fetch(pkgs, repo, outdir, pip="pip") -> dict: if not outdir: raise ValueError( - "The value of `outdir`, the cache location for pip and other " - "tools, cannot be None or the empty string." + "The value of `outdir`, the download destination location " + "cannot be None or the empty string." + ) + if os.path.exists(outdir) and os.listdir(outdir): + raise RuntimeError( + f"Downloading to non-empty directory {outdir} is not supported." ) if not os.path.exists(outdir): os.mkdir(outdir) @@ -171,13 +175,14 @@ def fetch(pkgs, repo, outdir, pip="pip") -> dict: "-o", type=str, required=True, - help="The cache location for pip and other tools; will be created.", + help="The download destination for pip, cp, rsync and git. " + "Must be non-existing or empty.", ) parser.add_argument( "--pip", type=str, default="pip", - help="The command to use for downloading.", + help="The command to use for downloading pip packages.", ) args = parser.parse_args() fetch(args.pkgfile, args.repofile, outdir=args.output, pip=args.pip) diff --git a/tests/data/cli/nominal_repository.yml b/tests/data/cli/nominal_repository.yml index 749f107d..26e16970 100644 --- a/tests/data/cli/nominal_repository.yml +++ b/tests/data/cli/nominal_repository.yml @@ -17,7 +17,7 @@ setuptools: hackres: 0.0.5289: - source: ../hackres # we assume here hackres is copied into cache/.. + source: ../hackres # we assume here hackres is copied into _work/.. fetch: fs-cp make: sh makefile: test_build_script.sh