Commit Graph

41077 Commits

Author SHA1 Message Date
Ingo Weinhold
b2d96da589 BPackageInfoSet::Iterator: Fix NULL pointer dereference
Since the BPackageInfoSet's map is created lazily, it can be NULL when
an Iterator is constructed.
2013-04-14 17:06:25 +02:00
Ingo Weinhold
8a4ebe2c46 Make BPackageInfo archivable 2013-04-14 17:06:25 +02:00
Ingo Weinhold
bbb2dc237a Add BReferenceable to libbe_build
Unbreaks the build on non-Haiku build platforms
2013-04-13 14:39:35 +02:00
Ingo Weinhold
711a2a6eea BPackageInfoSet: Add copy constructor, assignment operator
* Implement copy-on-write support.
* Add copy constructor and assignment operator.
* Remove Init(). Initialize lazily instead. Since AddInfo() can fail
  and we check initialization anyway, there's no point in having an
  explicit Init(). Given that there was only one invocation of Init()
  in the package kit and its users, it was very likely missing in some
  places.
* Fix a few places where we ignored that the PackageMap actually
  contains lists of PackageInfo objects.
2013-04-13 02:08:43 +02:00
Ingo Weinhold
82ce8682f2 Add missing build header Referenceable.h 2013-04-13 02:04:00 +02:00
Ingo Weinhold
0d50fa87ec pkgman: Add beginnings of the "install" command
So far it only solves the dependencies and prints the result. No
problem handling, no actual installation.
2013-04-12 15:29:50 +02:00
Ingo Weinhold
0d8ed3f2a8 BSolver::Install(): Add optional unmatched specifier return param 2013-04-12 14:21:54 +02:00
Ingo Weinhold
71293f8b03 BSolverPackageSpecifier: Fix string constructor 2013-04-12 14:21:08 +02:00
Ingo Weinhold
334a5a566c BSolverRepository: Change priority from uint8 to int32
This allows us to specifies priorities below and above the user
definable range.
2013-04-12 13:42:27 +02:00
Ingo Weinhold
115eae7371 LibsolvSolver::Install(): Fix broken B_PACKAGE case 2013-04-12 12:27:32 +02:00
Ingo Weinhold
38e528bbc1 pkgman: C++-ify the command handling
There's now a Command class that must be derived and registered with
a CommandManager, all simplified by a REGISTER_COMMAND macro. That gets
rid of the print_command_usage_and_exit() function copy for every
command, moves the short usage texts to the command implementations,
and avoids any repetition of the command name. When implementing a new
command only a new source file needs to be created, nothing else needs
to be touched.
2013-04-12 01:48:53 +02:00
Ingo Weinhold
01758ed332 Rework SolverPackageSpecifier
* It no longer consists of a BPackageResolvableExpression and a
  repository. Instead it can now either refer to a package directly or
  consist of a search string.
* SolverPackageSpecifierList: Add AppendSpecifier() convenience
  versions.
* Adjust LibsolvSolver and pkgman accordingly.
2013-04-12 00:21:49 +02:00
Ingo Weinhold
663e351cb4 BSolver/pkgman: Support for searching in provides
* BSolver/LibsolvSolver:
  * Add B_FIND_IN_NAME and make searching in the names explicit.
  * Add B_FIND_IN_PROVIDES to search the packages' provides list.
* pkgman: Also search in provides.
2013-04-11 23:36:12 +02:00
Ingo Weinhold
eb13a353e3 Rename "packages" subdir "config" to "administrative"
... to avoid the impression that it contains something the user can
play with.
2013-04-11 17:44:58 +02:00
Ingo Weinhold
dd46d98163 pkgman: Add "search" command 2013-04-11 17:33:23 +02:00
Ingo Weinhold
789867563a pkgman RepositoryBuilder: Add BRepositoryConfig constructor 2013-04-11 17:32:17 +02:00
Ingo Weinhold
fc57db481f BSolver/LibsolvSolver: Add FindPackages()
Given a search string it finds all matching packages.
2013-04-11 17:30:08 +02:00
Ingo Weinhold
a78a2540a8 LibsolvSolver: Fix the lazy re-/initialization
* _Init() was a bit too enthusiastic, throwing really everything away.
  So, after calling it at the beginning of _AddRepositories() there
  wouldn't be any repositories anymore.
* Rename _Init() to _InitPool() to make its purpose clearer.
* Pull a _CleanupPool() out of _Cleanup() that only deletes the pool
  and anything depending on it.
* RepositoryInfo::HasChanged(): Always consider changed when there's no
  libsolv repo yet.
2013-04-11 17:21:27 +02:00
Ingo Weinhold
62f7022a82 package kit: get active packages list from daemon
* daemon: Implement private message protocol to retrieve the active
  packages.
* BPackageRoster::GetActivePackages(): Get the active packages list
  from the daemon.
2013-04-11 02:03:25 +02:00
Ingo Weinhold
b254217a09 package daemon: Properly qualify private package headers
... instead of adding the private package header directory to the
include paths.
2013-04-11 00:59:48 +02:00
Ingo Weinhold
6c6460e1f6 BPackageInfo: Add GetConfigString() and ToString() 2013-04-11 00:37:25 +02:00
Ingo Weinhold
1a34656b57 BPackageVersion: Make version string constructor explicit 2013-04-11 00:36:10 +02:00
Ingo Weinhold
5776551d3d pkgman: Move some classes into own file for reuse
Namely RepositoryBuilder and PackageInfoErrorListener.
2013-04-10 14:41:30 +02:00
Ingo Weinhold
483d49968d LibsolvSolver: Make repeated use of object possible
* _Solve(): Clean up the old solver before creating a new one.
* _AddRepositories(): Don't do anything, if the repositories haven't
  changed.
2013-04-10 13:20:38 +02:00
Ingo Weinhold
50888ebdc0 BSolverRepository: Add a change count
... so we can easily check whether the repository has changed since the
last time we used it.
2013-04-10 12:58:12 +02:00
Ingo Weinhold
40cbf171ef packagefs: don't dup() the packages directory FD
Volume::_AddInitialPackagesFromDirectory(): Use openat() instead of
dup() to get a FD for the packages directory. Currently our fdopendir()
implementation doesn't use it directly anyway, but in theory it could
and would then change the state of the original FD.
2013-04-09 23:35:57 +02:00
Ingo Weinhold
19dc1d084f packagefs: Use the package activation file
If the file exists load only the packages specified in it. If it doesn't
exist or any kind of error occurs, fall back to loading all packages in
the packages directory.
2013-04-09 23:26:56 +02:00
Ingo Weinhold
a96531fc51 package daemon: On changes write a file with the active packages 2013-04-09 22:37:18 +02:00
Ingo Weinhold
19a268a459 Update libiconv and sqlite packages
The new package files haven't been rebuilt, just repackaged. Only small
details in the package-info changed.
2013-04-09 20:07:46 +02:00
Ingo Weinhold
92b6d58598 package daemon: Check volume package dependencies initially
Dumps the result (i.e. found problems and solutions) to the syslog.
Eventually the user should be asked what to do when inconsistencies are
encountered.
2013-04-09 19:51:10 +02:00
Ingo Weinhold
4b3ca457b6 BSolverProblemSolution: Fix ToString() template strings 2013-04-09 18:55:07 +02:00
Ingo Weinhold
5e01af3199 package kit: Add data structures for problem solutions
... and add the problem solutions in LibsolvSolver.
2013-04-09 17:24:27 +02:00
Ingo Weinhold
1047e84f39 package daemon: Volume::InitPackages(): Fix error case
Don't assign fListener, when starting node monitoring fails.
2013-04-08 23:36:56 +02:00
Ingo Weinhold
a6c7f5e33c package daemon: De/-activate all changed packages together
* We first process the node monitoring events, collecting the required
  package activation changes, then apply all changes together.
* Change the PackageFSActivationChangeItem/-Request structs. The former
  is no longer variable in size, which makes it easier to work with.
2013-04-08 19:06:18 +02:00
Ingo Weinhold
ebbefc0151 package daemon: Root: Use a common job for volume work
Add VolumeJob which, besides the Volume, takes a Root method to be
invoked. That allows to replace the specific job classes by simple
methods.
2013-04-08 17:49:14 +02:00
Ingo Weinhold
2508cd615f packagefs: Volume::_ChangeActivation(): Check 0 request size 2013-04-08 17:45:24 +02:00
Ingo Weinhold
bb88feaa3a PackageFSActivationChangeRequest: Make items array 0 sized
That's more convenient to use and the actual size of an item is variable
anyway.
2013-04-08 17:45:00 +02:00
Ingo Weinhold
def92c01ee packagefs/daemon: Ignore packages/ entries without .hpkg suffix 2013-04-08 15:54:39 +02:00
Ingo Weinhold
379131d97d BString: Add StartsWith() and EndsWith() methods 2013-04-08 15:44:31 +02:00
Ingo Weinhold
91a9b5f276 package daemon: Volume: Make sure move entry events don't get split 2013-04-08 15:21:26 +02:00
Ingo Weinhold
9e4096146f package daemon: Add a Listener interface for Volume
* This way, Volume doesn't have to know Root.
* Suppress listener notifications for node monitoring events when there
  are were already events pending.
2013-04-08 15:19:11 +02:00
Ingo Weinhold
8fb3930a42 package daemon: Make all work with the packages asynchronous
There's now a worker thread per Root that does all the work that can
take time. Node monitoring notifications received in the main thread are
just pushed into the worker's job queue, so the application looper
remains responsive.
2013-04-08 00:05:51 +02:00
Ingo Weinhold
7136419383 Add shared PthreadMutexLocker, an AutoLocker for pthread_mutex_t 2013-04-07 23:59:43 +02:00
Ingo Weinhold
6978941aac packagefs: Remove support for multiple package domains per volume
That also get rid of the job stuff and the package loader thread.
2013-04-07 13:52:41 +02:00
Ingo Weinhold
af5c10ab19 packagefs: Remove the packages directory node monitoring 2013-04-07 12:21:54 +02:00
Ingo Weinhold
3d53bd473b package daemon: Add package monitoring and de-/activation
* packagefs: Disable (comment out) node monitoring of the packages
  directory.
* package daemon:
  - When a packagefs volume is added load the respective packages
    directory and get from the volume which of the packages are
    activated.
  - Add node monitoring for the packages directory and
    activate/deactivate packages as packages are added/removed.
2013-04-07 12:02:18 +02:00
Ingo Weinhold
17bb54dc38 packagefs: ioctls for getting and changing package activation
* Add PACKAGE_FS_OPERATION_GET_PACKAGE_INFOS which returns the node refs
  of all packages activated.
* Add PACKAGE_FS_OPERATION_CHANGE_ACTIVATION to activate/deactivate
  multiple packages.
2013-04-07 11:53:50 +02:00
Ingo Weinhold
e85e9dadda packagefs: Move the package loading code to Package
* Volume::_LoadPackage() -> Package::Load()
* Volume::_DomainEntryCreated(): Pull a bit of code into a new
  _LoadPackage() method for reuse.
2013-04-07 11:45:47 +02:00
Ingo Weinhold
27197fd74b packagefs Package: Add getters for device and node ID 2013-04-07 11:38:03 +02:00
Ingo Weinhold
2d8ec1d502 Add the obvious node_ref constructor 2013-04-06 23:30:18 +02:00