- 20 May, 2024 30 commits
-
-
Julien Muchembled authored
-
Julien Muchembled authored
-
Yusei Tahara authored
_install_and_load is slow, using cache saves time when there are many sections.
-
Kazuhiko Shiozaki authored
Introduce a workaround for the shebang line length limitation in zc.buildout.easy_install.
-
Vincent Pelletier authored
Useful when recipes generate non-string values to be reused by other recipes.
-
Kazuhiko Shiozaki authored
-
Kazuhiko Shiozaki authored
-
Kazuhiko Shiozaki authored
Add referred parts' hash strings in __buildout_signature__, that invokes rebuild of a part when one of its (recursive) dependencies are modified. Also remove duplicates and sort entries in __buildout_signature__.
-
Julien Muchembled authored
-
Kazuhiko Shiozaki authored
-
Julien Muchembled authored
Also, updating a part does not put it anymore at the end of the list of installed parts, that was making .installed.cfg too big.
-
-
Kazuhiko Shiozaki authored
-
Kazuhiko Shiozaki authored
Even though such configuration is wrong...
-
Julien Muchembled authored
Before this, += and -= worked well when applied to keys defined in the current section or in a section of the same name inherited from a file extended by the current file, but not to keys inherited from another section using macro extension <=, because <= substitution happens later and all the += and -= are already resolved. e.g.: ``` [macro] a = 1 [part] <= macro a += 2 ``` was equivalent to ``` [part] a = 1 a = 2 ``` instead of ``` [part] a = 1 a += 2 ``` Now a partial and brittle support for this is enabled by postponing += and -= resolution until <= substitution happens when the current section contains a <= extension. But this is not guaranteed: if the current section is overloaded in another file extending the current one, then += and -= resolution will happend then, before <=. A consistent solution would be to unify the implementation of extends= and <= and update sections by taking both into account, instead of updating based only on extends and computing <= later, leading to inconsistencies. This could be achieved e.g. by computing section updates on demand during substitution. Co-authored-by: Xavier Thompson <xavier.thompson@nexedi.com>
-
Julien Muchembled authored
Before this, += and -= worked correctly when applied to a key defined in a file extended by the current file, but not when the key was in the same file. e.g.: ``` [part] a = this case is ``` ``` [buildout] extends = a.cfg [part] a += ok b = this case is b += not-ok ``` Co-authored-by: Xavier Thompson <xavier.thompson@nexedi.com>
-
Xavier Thompson authored
This test asserts buildout's behavior with regards to download options, and this was changed by the new algorithm for extends. Tests for the new behavior have not been written yet.
-
Xavier Thompson authored
The new algorithm avoids fetching the same extended file more than once and correctly handles overriding values and += and -=: The new algorithm starts as if there was a buildout file containing ``` [buildout] extends = user/defaults.cfg # if it exists buildout.cfg # if it exists command_line_extends.cfg # if passed on the command line ``` The files are then fetched in depth-first-search postorder and fetching child nodes in the order given by the extends directive, ignoring files that have already been fetched. The buildout dicts are then collected in order, and this linearisation is then merged at the end, overriding the first configs collected with the later ones. The first dict in the linearisation is not from a file, but the dict of buildout's (hardcoded) defaults. This is equivalent to acting as though every file that does not extend anything extends these defaults. The first time a file must be downloaded from a url, the linearisation is merged with the configs already collected, and the resulting options are then used to determine the download options for this download, and every subsequent download. This is a break with buildout's current logic for download options. By analogy with classes in Python, we are computing a linearisation of the class hierarchy to determine the method resolution order (MRO). This algorithm is not the same as Python's MRO since Python 2.3 (C3). It could be good to switch to a C3 linearisation like Python.
-
Xavier Thompson authored
This avoids unecessary copies. This is a preparatory step to reimplementing the extends algorithm. It may be that this breaks the extends algorithm as it is currently implemented.
-
Xavier Thompson authored
This avoids unecessary deepcopies. This is a preparatory step to reimplementing the extends algorithm. It may be that this breaks the extends algorithm as it is currently implemented.
-
Xavier Thompson authored
-
Xavier Thompson authored
Depending on the test environment, pip, setuptools and wheel dists may be installed as .egg or .egg-link and may be files or folders.
-
Xavier Thompson authored
Depending on the test environment, pip, setuptools and wheel dists may be installed as .egg or .egg-link and may be files or folders.
-
Xavier Thompson authored
The general case is that buildout will pick versions for setuptools, pip and wheel when they are not pinned: it's only when these are installed as .egg-link - either as actual develop eggs or as a side-effect of being found in .dist-info format in the environment e.g. in site-packages - that buildout does not consider it picked a version for these eggs. This affects tests that set `allow-picked-versions = false` or `show-picked-versions = true` or `update-versions-file = ...`.
-
Xavier Thompson authored
-
Xavier Thompson authored
This creates a environment for tests that is isolated from the current environment (as long as there are no .egg-link to e.g. site-packages).
-
Kazuhiko Shiozaki authored
In SlapOS, bootstrap is called each time software release is invoked and we do not want to delete develop-eggs directory. This reverts commit 55d76b34.
-
Xavier Thompson authored
With recent setuptools, the way the test package index is laid out causes a warning log to be emitted, which needs to be filtered out to keep matching the expected test output.
-
Xavier Thompson authored
Now that we use `pip wheel` + `Wheel.install_as_egg` to produce genuine eggs, we don't need to workaround the fact that we have not-actually-egg `.egg` bundles anymore. If we still do need to allow for non-eggs being installed in `~/.eggs`, via extensions or others, we should revert this. See https://github.com/buildout/buildout/pull/352
-
Xavier Thompson authored
Needed for pip wheel + setuptools.wheel.Wheel.install_as_egg.
-
- 17 May, 2024 10 commits
-
-
Xavier Thompson authored
`pip install <package>` produces a `<package-name>` package folder and a `<package-name>.dist-info` metadata folder, which is another format than eggs. Then buildout bundles both folders into a parent folder `<package.egg>` and tries to act as though it were an egg. Instead, use `pip wheel` to produce a wheel - which `pip install` does internally anyway - and `setuptools.Wheel.install_as_egg` to produce a genuine egg. This is much cleaner: it consistently produces genuine eggs instead of sometimes true eggs, sometimes `.dist-info` bundles depending on whether `pip install` is called or the package was installed from a `.whl` or `.egg` archive directly. The only downside it this requires setuptools >= 38.2.3.
-
Xavier Thompson authored
Since zc.buildout uses `pip` to install dists, most .egg in ./eggs and ./develop-eggs (in case of dists installed with zc.recipe.egg:custom) are not actually eggs, but installed wheels with .dist-info format which have been bundled into a .egg containing .dist-info metadata folder as well as the actual package folder directly alongside. Unlike actual eggs, such */*.dist-info bundles are not stepped into by package_resources when the containing directory is add to the environment, so each .egg bundle needs to be added individually. Buildout already does this for bundles in the target directory of egg installation, usually ./eggs, but e.g. in offline mode there is no target directory and then already installed .egg bundles are not detected. So now every dist path is added to the environment individual, including for paths where buildout looks for already installed eggs but will not install eggs to, such as ./develop-eggs, and also ./eggs in offline mode or when using zc.recipe.egg:custom and the target is ./develop-eggs and ./eggs is such a scan-from but don't-install-to path.
-
Xavier Thompson authored
-
Xavier Thompson authored
-
Julien Muchembled authored
This is useful when using OS Python & eggs. Useless for SlapOS.
-
Xavier Thompson authored
-
Xavier Thompson authored
Also show `pip install <url-for-tar.gz-of-master-branch-on-gitlab>`.
-
Xavier Thompson authored
The package index considers may yield develop dists found on its local search_path - sys.path by default - in addition to its index_url. This commit discards such dists when they do not contain a setup.py nor a pyproject.toml, as a good heuristic of whether they will be installable or not.
-
Xavier Thompson authored
Index constructed package indexes by all their parameters.
-
Xavier Thompson authored
This option determines what paths zc.buildout will scan for already installed distributions. It can be set to an empty value to enable isolation. The special values 'sys.path', 'legacy' and 'zc.buildout' expand to particular paths. The default is 'zc.buildout'. The 'sys.path' mode simply expands to the currrent sys.path. The 'legacy' mode reproduces the previous behavior of specifically scanning the paths of the current zc.buildout distribution and its dependencies using a weird ordering logic that bears no relation to the order they appear in sys.path - which can produce unexpected results as other distributions for zc.buildout, pip, wheel and setuptools may take precedence over the ones currently running. The 'zc.buildout' mode is similar to 'legacy' as it uses only the paths of the currently running zc.buildout and dependencies, but unlike 'legacy' mode it respects the order in which these appear in sys.path, avoiding unexpected results. This mode is set to the default because it is closest to 'legacy' mode and because it has a nice property: running in succession `buildout buildout:extra-paths= bootstrap` (1) `bin/buildout` (2) will result in (1) installing zc.buildout and its dependencies in ./eggs in isolation from the environment, and (2) using only the paths of these in ./eggs, i.e. continuing to operate in isolation, even without setting extra-paths explictly.
-