History log of /haikuporter/HaikuPorter/DependencyAnalyzer.py
Revision Date Author Comments
# f197120d 18-Sep-2023 jurgenwigg <53076001+jurgenwigg@users.noreply.github.com>

Import statements sorted with isort and fixed MockBuilder.py (#266)

* Fixed missing closing bracket in the MockBuilder.py

* Import statements sorted with isort


# 48afa21f 21-Sep-2021 Alexander von Gluck IV <kallisti5@unixzen.com>

DependencyAnalyzer: Catch a non-existant system_packages_directory

* When run on non-haiku platforms, trying to analyze dependencies
fails with a python missing /boot/system/packages error.
* Catches that problem and ignores it with a warning.
* This lets the dump dependency code run on Linux
with an obvious long list of missing "haiku, haiku_devel"
dependencies


# 61901115 31-Jan-2020 Alexander von Gluck IV <kallisti5@unixzen.com>

python3: Fix missed itervalues -> values


# 8d5c14b6 31-Jan-2020 Michael Lotz <mmlr@mlotz.ch>

python3: Finish python3 change. python2 breaking

* Based on mmlr's 2017 work to use Python3 with
changes and adjustments for the current codebase


# e2012a3d 31-Jan-2020 Alexander von Gluck IV <kallisti5@unixzen.com>

python3: begin python3 fixes. print -> print()


# 269954fb 10-Dec-2017 Michael Lotz <mmlr@mlotz.ch>

Cleanup: Make some constructs more idiomatic.

* Change 'not x in y' to 'x not in y'.
* Use 'is' to compare None singleton.
* Use 'instanceof(x, y)' instead of 'type(x) == y'.
* Replace map builtin with list comprehension.
* Rename self argument to cls for static method.


# 14652091 10-Dec-2017 Michael Lotz <mmlr@mlotz.ch>

Cleanup: Remove trailing semicolons and a unneeded pass.


# 9836ce60 10-Dec-2017 Michael Lotz <mmlr@mlotz.ch>

Cleanup: Whitespace and line length cleanup.


# 25319489 02-Dec-2017 Michael Lotz <mmlr@mlotz.ch>

Port: Rework configuration of repository dir.

Use a class variable and a setter to make the repository dir known to
Port and add a context manager for temporarily adjusting the repository
dir of specific ports.

This removes the need to hand in the repository dir to various methods,
which makes things more consistent. Some methods were previously using
the repository dir given to the constructor while others needed it as
argument.

The Repository now makes itself known to Port and can change the current
repository dir for the purpose of populating a new repository at a
different path.

With this, the ugly manual adjustment of the recipe cache of the Port by
the Repository can be removed. It was directly changing internals of
Port but used slightly different logic than within Port which lead to
two different filenames being used for the recipe cache file. This
caused recipes to be parsed once unnecessarily.


# 71a83f90 18-Dec-2016 Jessica Hamilton <jessica.l.hamilton@gmail.com>

Use Unicode strings for warn() & sysExit().


# 86a26b09 07-Dec-2015 Michael Lotz <mmlr@mlotz.ch>

DependencyAnalyzer: Cleanup, remove unneeded variable.


# 08ecede8 07-Dec-2015 Michael Lotz <mmlr@mlotz.ch>

DependencyAnalyzer: Also resolve requires of system packages.

This allows to find a set of bootstrap packages that need to be provided
in order build the other (cyclic) ports.


# 238c3429 07-Dec-2015 Michael Lotz <mmlr@mlotz.ch>

DependencyAnalyzer: Include more info in unresolved message.

When a require can't be resolved, also print which package and port
the requires originated from. This makes finding and fixing typos in
recipes easier.


# 8a5ac8db 07-Dec-2015 Michael Lotz <mmlr@mlotz.ch>

DependencyAnalyzer: Sort printed dependency lists.


# 7a4db4b3 07-Dec-2015 Michael Lotz <mmlr@mlotz.ch>

DependencyAnalyzer: Enumerate only active ports.


# 1349d36a 07-Dec-2015 Michael Lotz <mmlr@mlotz.ch>

DependencyAnalyzer: Respect noSystemPackages option.


# 56499b3c 22-Nov-2015 Michael Lotz <mmlr@mlotz.ch>

ShellScriptlets: Internalize parsing of scriptlet prerequires.

Reduces duplication and knowledge of the original format.


# ddb17dbe 20-Nov-2014 Oliver Tappe <zooey@hirschkaefer.de>

Adjust DependencyAnalyzer to new dependency resolution.


# 476dbcbe 20-Nov-2014 Oliver Tappe <zooey@hirschkaefer.de>

Refactoring: use properties where it seems fit.

* Trying to be somewhat more Pythonic.


# fc1d58c6 29-Oct-2014 Charlie Clark <charlie.clark@clark-consulting.eu>

Revert to tab spacing for Pe's sake.


# a5f922e3 27-Oct-2014 Charlie Clark <charlie.clark@clark-consulting.eu>

Try again with whitespace.


# 558fbdb0 27-Oct-2014 Charlie Clark <charlie.clark@clark-consulting.eu>

Second attempt to fix whitespace. Options are different on OS X.


# 429ec015 27-Oct-2014 Charlie Clark <charlie.clark@clark-consulting.eu>

Convert tabs to spaces.


# 8e6dffc5 31-May-2014 Oliver Tappe <zooey@hirschkaefer.de>

Cleanup: drop now superfluous method call.


# e0963638 31-May-2014 Oliver Tappe <zooey@hirschkaefer.de>

Simplify conversion from package-name/ID to port-name/ID.

* adjust getPortIdForPackageId() and getPortNameForPackageName()
to check if the given parameter is already valid, simplifying
the loop, too
* drop explicit checks before invocation of getPortIdForPackageId()


# 7d983745 11-Mar-2014 Oliver Tappe <zooey@hirschkaefer.de>

Print resolving information during --do-bootstrap

* this should make it easier to debug any problems that may occur
when trying to untangle the circular dependencies


# c4c8633b 03-Oct-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

/boot/common has been removed

Mostly the changes are straight-forward (don't look in /boot/common,
adjust paths). A notable change concerns the resolution of port
dependencies: We no longer simply include all /boot/system packages in
the chroot, but only those that have to be pulled in according to the
dependency resolution. This may break some recipes that don't declare
all the things they actually require for building, but have worked
previously due to those dependencies living in /boot/system.


# 5f6b4014 07-Aug-2013 Oliver Tappe <zooey@hirschkaefer.de>

Adjust DependencyAnalyzer.getBuildOrderForBootstrap():

* don't pollute each port's work folder with package info files,
but use a temporary folder instead
* sort the list of immediately buildable ports by name, to get a
reproducable order (not a more or less random one)


# a0381c6e 07-Aug-2013 Oliver Tappe <zooey@hirschkaefer.de>

Add DependencyAnalyzer.getBuildOrderForBootstrap():

* loop over ports with cyclic dependencies and try to find at least
one that is immediately buildable
* if a immediately buildable port has been found, pretend it has
been built and remove it from the set of cyclic dependencies
* complain if no port in the set is immediatly buildable (this means
that something is wrong in the declaration of requires or a
prerequired package is missing)
* continue until all ports have been handled


# 029ccfaf 06-Aug-2013 Oliver Tappe <zooey@hirschkaefer.de>

Restructure DependencyAnalyzer a bit.

* let __init__ only compute the different groups of nodes and print
them in printDependencies()
* keep full set of ports with cyclic dependencies (i.e. do not leave
out ports required by HaikuPorter directly)


# 99a61dae 19-Jul-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

Unifiy the Options and GlobalConfig somewhat

* Module GlobalConfig is replaced with new module Configuration. The
global variable globalConfiguration is gone. Instead Configuration
provides getter methods.
* For several of the (newer) command line options there are now optional
configuration file entries. If given the command line values override
the configuration file values. Configuration also provides getter
methods for these options, which should be used instead of
getOption().


# 9ee2ba93 13-Jul-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

Add option '--command-package' to specify the package command


# 95fd6a8b 17-Jun-2013 Oliver Tappe <zooey@hirschkaefer.de>

Add license header (MIT)

* additionally: uppercase copyright notices and separate them from the
top by a single line


# 7f54bf6b 04-Jun-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

DependencyAnalyzer: Make repository directories subdirectories

... of the repository directory to keep things tidier.


# 11a55105 04-Jun-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

DependencyAnalyzer: Consider haikuporter dependencies

Also:
* Remove special handling of self-depending ports. As done it wasn't
correct.
* Compute out-degrees and remove the acyclic part of the graph that
doesn't depend on anything else. ATM it is empty, though.

Thinking a while about it, for a correct analysis we need separated
build pre-/requires declarations for build host and target. Otherwise
it isn't clear what we actually need to cross-build a port.


# 58ebd6f7 31-May-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

DependencyAnalyzer: Discriminate between ports and packages

Now we correctly take the requires declarations into account.


# 5cdc00bb 01-Jun-2013 Oliver Tappe <zooey@hirschkaefer.de>

Minor cleanup of imports


# b247776d 30-May-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

Add option -D for analyzing port dependencies

Currently it only prints the required system packages, the
self-depending ports, and the ports with cyclic dependencies.


# ddb17dbe300d98cf6d8c34ac34feb586a503e66e 20-Nov-2014 Oliver Tappe <zooey@hirschkaefer.de>

Adjust DependencyAnalyzer to new dependency resolution.


# 476dbcbe3fe6d63d35a2ac5db1b789f2434e04a4 20-Nov-2014 Oliver Tappe <zooey@hirschkaefer.de>

Refactoring: use properties where it seems fit.

* Trying to be somewhat more Pythonic.


# fc1d58c6abe57c99c11ec02b27be40844fb53572 29-Oct-2014 Charlie Clark <charlie.clark@clark-consulting.eu>

Revert to tab spacing for Pe's sake.


# a5f922e3fded4460be5a3c717862e7e588772487 27-Oct-2014 Charlie Clark <charlie.clark@clark-consulting.eu>

Try again with whitespace.


# 558fbdb04ff6cb063a4afba7f15b6f1bd0343af2 27-Oct-2014 Charlie Clark <charlie.clark@clark-consulting.eu>

Second attempt to fix whitespace. Options are different on OS X.


# 429ec015d0c47da50e302537ed33bc3f80d035a8 27-Oct-2014 Charlie Clark <charlie.clark@clark-consulting.eu>

Convert tabs to spaces.


# 8e6dffc534a37ff585417bc693b81da619f0bb76 31-May-2014 Oliver Tappe <zooey@hirschkaefer.de>

Cleanup: drop now superfluous method call.


# e096363865bb3704eff0d30ff701ffd3271d7ed2 31-May-2014 Oliver Tappe <zooey@hirschkaefer.de>

Simplify conversion from package-name/ID to port-name/ID.

* adjust getPortIdForPackageId() and getPortNameForPackageName()
to check if the given parameter is already valid, simplifying
the loop, too
* drop explicit checks before invocation of getPortIdForPackageId()


# 7d9837454d136703f5682ccd42fa3cd234d5f7da 11-Mar-2014 Oliver Tappe <zooey@hirschkaefer.de>

Print resolving information during --do-bootstrap

* this should make it easier to debug any problems that may occur
when trying to untangle the circular dependencies


# c4c8633bbdf41a3e81391183a4325444f08ed02d 03-Oct-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

/boot/common has been removed

Mostly the changes are straight-forward (don't look in /boot/common,
adjust paths). A notable change concerns the resolution of port
dependencies: We no longer simply include all /boot/system packages in
the chroot, but only those that have to be pulled in according to the
dependency resolution. This may break some recipes that don't declare
all the things they actually require for building, but have worked
previously due to those dependencies living in /boot/system.


# 5f6b4014d147442db01e01ddd3a483dc3ba51e31 07-Aug-2013 Oliver Tappe <zooey@hirschkaefer.de>

Adjust DependencyAnalyzer.getBuildOrderForBootstrap():

* don't pollute each port's work folder with package info files,
but use a temporary folder instead
* sort the list of immediately buildable ports by name, to get a
reproducable order (not a more or less random one)


# a0381c6ef238c12bbb145875886bd45bf512a55e 07-Aug-2013 Oliver Tappe <zooey@hirschkaefer.de>

Add DependencyAnalyzer.getBuildOrderForBootstrap():

* loop over ports with cyclic dependencies and try to find at least
one that is immediately buildable
* if a immediately buildable port has been found, pretend it has
been built and remove it from the set of cyclic dependencies
* complain if no port in the set is immediatly buildable (this means
that something is wrong in the declaration of requires or a
prerequired package is missing)
* continue until all ports have been handled


# 029ccfafc8afe02b844c7243d8962966ace9ae49 06-Aug-2013 Oliver Tappe <zooey@hirschkaefer.de>

Restructure DependencyAnalyzer a bit.

* let __init__ only compute the different groups of nodes and print
them in printDependencies()
* keep full set of ports with cyclic dependencies (i.e. do not leave
out ports required by HaikuPorter directly)


# 99a61dae85929042affb1fe60e038aa4149261d5 19-Jul-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

Unifiy the Options and GlobalConfig somewhat

* Module GlobalConfig is replaced with new module Configuration. The
global variable globalConfiguration is gone. Instead Configuration
provides getter methods.
* For several of the (newer) command line options there are now optional
configuration file entries. If given the command line values override
the configuration file values. Configuration also provides getter
methods for these options, which should be used instead of
getOption().


# 9ee2ba93f86249973bfd1003a17da3bb4f7232cc 13-Jul-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

Add option '--command-package' to specify the package command


# 95fd6a8bd4d47186696c722b6717b2b073e799a1 17-Jun-2013 Oliver Tappe <zooey@hirschkaefer.de>

Add license header (MIT)

* additionally: uppercase copyright notices and separate them from the
top by a single line


# 7f54bf6b2745f3f3974448a04c8f16cb4ab4b9c5 04-Jun-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

DependencyAnalyzer: Make repository directories subdirectories

... of the repository directory to keep things tidier.


# 11a5510507cf6e99d568c6386e2c7a83b42e47bb 04-Jun-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

DependencyAnalyzer: Consider haikuporter dependencies

Also:
* Remove special handling of self-depending ports. As done it wasn't
correct.
* Compute out-degrees and remove the acyclic part of the graph that
doesn't depend on anything else. ATM it is empty, though.

Thinking a while about it, for a correct analysis we need separated
build pre-/requires declarations for build host and target. Otherwise
it isn't clear what we actually need to cross-build a port.


# 58ebd6f7328dcc4135d1425112fee74c9f56983b 31-May-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

DependencyAnalyzer: Discriminate between ports and packages

Now we correctly take the requires declarations into account.


# 5cdc00bb20b316dea2b854eaa1babb95fe9df0a8 01-Jun-2013 Oliver Tappe <zooey@hirschkaefer.de>

Minor cleanup of imports


# b247776d23f290443e0b0e4f49608d974c7dda7f 30-May-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

Add option -D for analyzing port dependencies

Currently it only prints the required system packages, the
self-depending ports, and the ports with cyclic dependencies.