History log of /haiku/src/add-ons/kernel/file_systems/packagefs/Jamfile
Revision Date Author Comments
# 0cf34918 26-Oct-2021 Augustin Cavalier <waddlesplash@gmail.com>

Remove ZSTD_ENABLED checks from the Package Kit.

BZstdCompressionAlgorithm already has these #ifdefs and will
return error codes appropriately if built without libzstd,
so we do not need to check again inside the Package Kit.

This should not break the no-zstd build (well, it is broken
somewhat right now anyway, but this will not break it further),
and it simplifies logic somewhat.


# b934184a 04-Apr-2019 Augustin Cavalier <waddlesplash@gmail.com>

packagefs: Remove some more HPKGv1-related classes.

These were now unreferenced following the removal of GlobalFactory
and the other v1-related code, so this commit should not be any
functional change.


# d1a0bc4f 01-Apr-2019 Augustin Cavalier <waddlesplash@gmail.com>

packagefs: Remove support for HPKGv1.

The current version is "v2", and it has been since the final PM branch
was merged back in 2013, so it's unclear if anyone actually uses this
file format. The "package" command can still of course read these
files, it's just that packagefs will now not be able to.

It's very unlikely anyone is impacted by this change.


# c7919fc7 21-Aug-2018 Augustin Cavalier <waddlesplash@gmail.com>

packagefs: Move DebugSupport up into the file_systems shared folder.

ramfs will find it useful also.


# 81375d4f 11-Jul-2018 Jérôme Duval <jerome.duval@gmail.com>

Package Kit: add Zstd compression.

Change-Id: Idbdb7cf1bde659046a88ea69a76e3b5fc4cd7013
Reviewed-on: https://review.haiku-os.org/323
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>


# 3ec77017 29-May-2017 Adrien Destugues <pulkomandy@pulkomandy.tk>

NaturalCompare: implement using locale kit

The non-locale aware version is kept in src/build/libshared for use on
the host system and in packagefs (kernel add-on). In both cases, ICU is
not available.

Fixes #8192


# 220d0402 31-Jul-2014 Oliver Tappe <zooey@hirschkaefer.de>

Use libstdc++, libsupc++ and libgcc from gcc_syslibs.

* Instead of faking libstdc++.so from libstdc++.a, use libstdc++.so
from the gcc_syslibs build feature for everything except x86_gcc2.
* Use libgcc_s.so from the gcc_syslibs build feature for everything but
x86_gcc2 (which still carries libgcc as part of libroot.so).
* Drop filtering of libgcc objects for libroot, as that is no longer
necessary since we're only using libgcc-as-single-object for libroot
with x86_gcc2, where the filtered object file doesn't exist. Should
the objects that used to be filtered cause any problems as part of
libgcc_s.so, we can always filter them as part of the gcc build.
* Use libsupc++.so from the gcc_syslibs build feature for everything but
x86_gcc2.
* Adjust all Jamfiles accordingly.
* Deactivate building of faked libstdc++.so for non-x86-gcc2. For
x86_gcc2, we still build libstdc++.so from the sources in the Haiku
source tree as part of the Haiku build .
* Put gcc_syslibs package onto the image, when needed.


# e527b796 12-Jul-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

Switch package file accessor classes to use BPositionIO

* PackageFileHeap{Reader,Writer} as well as Package{Reader,Writer} and
their implementation and super classes do now internally use a
BPositionIO instead of a FD to access the package file. This provides
more flexibility needed for features to come.
* BPackageReader has already grown a new Init() version with a
BPositionIO* parameter.


# b3263ad3 30-Jun-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

Switch package kit to BZlibCompressionAlgorithm

... and remove the Zlib{Compressor,Decompressor} API.


# 6a89a36a 24-Jun-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

Move package kit Zlib* classes to support kit

Also move to B* namespace and no longer expose the zlib dependency in
the headers.


# 32832cbe 23-Jun-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

Remove BPackageKit::BDataOutput

Use BDataIO instead.


# d2d1af83 18-Jun-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

Revert "Move ZlibDecompressor to libshared"

This reverts commit 9af2105d36856be60528c361edf14a263f242338.

Conflicts:
src/kits/package/Jamfile


# f648efd3 18-Jun-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

Revert "Fix zlib-dependencies of (boot & standard) packagefs."

This reverts commit 06ed40580339e21f65c24b3d210c880dcf2ec739.


# 06ed4058 24-May-2014 Oliver Tappe <zooey@hirschkaefer.de>

Fix zlib-dependencies of (boot & standard) packagefs.

* Some files that depend on zlib.h weren't declared as such, which
could cause multijob builds to fail.


# aeb6fc9e 10-Feb-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

packagefs: Move Volume::PackagesDirectory to top level

Also make it a BReferenceable and fix Volume::fPackagesDirectory leak.


# 9af2105d 10-Feb-2014 Adrien Destugues <pulkomandy@pulkomandy.tk>

Move ZlibDecompressor to libshared

* This will be used to implement compressed http streams
* Remove the custom BDataOutput class, and use BDataIO instead, for
easier integration with existing code.


# 4c61288e 20-Nov-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

packagefs: Refactor UnpackingAttributeDirectoryCookie

Pull out a reusable base class AutoPackageAttributeDirectoryCookie.


# 3a7e0b00 19-Nov-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

packagefs: Support blacklisting entries in packages

In each installation location, it is now possible to create a settings
file "packages" that allows to blacklist entries contained in packages.
The format is:

Package <package name> {
EntryBlacklist {
<entry path>
...
}
}
...

<package name> is the base name (no version) of the respective package
(e.g. "haiku"), <entry path> is an installation location relative path
(e.g. "add-ons/Translators/FooTranslator").

Blacklisted entries will be ignored by packagefs, i.e. they won't appear
in the file system. This addresses the issue that it may be necessary to
remove a problematic file (e.g. driver, add-on, or library), which would
otherwise require editing the containing package file.

The settings file is not not "live". Changes take effect only after
reboot (respectively when remounting the concerned packagefs volume).


# 0cb3f709 01-Sep-2013 Oliver Tappe <zooey@hirschkaefer.de>

Revert "Fix build problems of btrfs and packagefs for x86_64."

This reverts commit f272e63f393449d3a816970ca632764895a78cd6.


# c5c787ea 29-Aug-2013 Oliver Tappe <zooey@hirschkaefer.de>

Fix build problems of btrfs and packagefs for x86_64.

* Both filesystems used to link to a static kernel-zlib, which
was being built with -fno-pic. This doesn't work on x86_64 as the
filesystem add-ons are meant to be relocatable, which requires their
code to be compiled as position independent.
Solve that by moving zlib into the kernel, so any add-on can just use
it from there (packagefs is mandatory, so we can't really do without
zlib anyway).


# b0944c78 01-Aug-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

More work towards hybrid support

* All packaging architecture dependent variables do now have a
respective suffix and are set up for each configured packaging
architecture, save for the kernel and boot loader variables, which
are still only set up for the primary architecture.
For convenience TARGET_PACKAGING_ARCH, TARGET_ARCH, TARGET_LIBSUPC++,
and TARGET_LIBSTDC++ are set to the respective values for the primary
packaging architecture by default.
* Introduce a set of MultiArch* rules to help with building targets for
multiple packaging architectures. Generally the respective targets are
(additionally) gristed with the packaging architecture. For libraries
the additional grist is usually omitted for the primary architecture
(e.g. libroot.so and <x86>libroot.so for x86_gcc2/x86 hybrid), so that
Jamfiles for targets built only for the primary architecture don't
need to be changed.
* Add multi-arch build support for all targets needed for the stage 1
cross devel package as well as for libbe (untested).


# 46122852 21-May-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

packagefs: Add caching for the package file heap reader

* ReaderImplBase:
- Add virtual CreateCachedHeapReader() which can create a cached
reader based on the given heap reader.
- Rename HeapReader() to RawHeapReader() and add HeapReader() for the
cached heap reader.
- Add DetachHeapReader() to allow a clients to remove the heap
reader(s) after deleting the ReaderImplBase object.
* packagefs:
- Add CachedDataReader class, which wraps a given
BAbstractBufferedDataReader and provides caching for it using a
VMCache. The implementation is based on the IOCache implementation.
- Use CachedDataReader to wrap the heap reader. For file data that
means they are cached twice -- in the heap reader cache and in the
file cache -- but due to the heap reader using a VMCache as well,
the pages will be recycled automatically anyway. For attribute data
the cache should be very helpful, since they weren't cached at all
before.


# 1f633814 17-May-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

hpkg format: compress the whole heap

Instead of handling compression for individual file/attribute data we
do now compress the whole heap where they are stored. This
significantly improves compression ratios. We still divide the
uncompressed data into 64 KiB chunks and use a chunk offset array for
the compressed chunks to allow for quick random access without too much
overhead. The tradeoff is a limited possible compression ratio -- i.e.
we won't be as good as tar.gz (though surprisingly with my test
archives we did better than zip).

The other package file sections (package attributes and TOC) are no
longer compressed individually. Their uncompressed data are simply
pushed onto the heap where the usual compression strategy applies. To
simplify things the repository format has been changed in the same
manner although it doesn't otherwise use the heap, since it only stores
meta data.

Due to the data compression having been exposed in public and private
API, this change touches a lot of package kit using code, including
packagefs and the boot loader packagefs support. The latter two haven't
been tested yet. Moreover packagefs needs a new kind of cache so we
avoid re-reading the same heap chunk for two different data items it
contains.


# 0ee16518 14-May-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

Rename BBlockBufferCache and friends to *Pool*

Also move BBlockBufferPoolNoLock into BHPKG namespace with the other
classes. Not sure why it wasn't there before.


# 11cecf98 12-May-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

packagefs: Add support for hpkg format V1

* Add union-like class PackageData which wraps the V1 and V2
BPackageData classes.
* GlobalFactory: Create a data reader depending on the data format
version.
* Package: Add a loader for V1 format and try that, if the other one
fails.


# 171fd58c 12-May-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package kit: some fixes for multi-version support

* Use enums/constants/functions instead of preprocessor macros.
* Missing include in PackageInfoAttributeValue.h.
* PackageReaderImpl::Init(): Check version before header size and
return B_MISMATCHED_VALUES instead of B_BAD_DATA, if the version
doesn't match. This allows callers to determine the condition and
try a reader for a different version. A more flexible interface for
that case would be nice, but since we want to support the old package
version only temporarily, the current solution should be good enough.


# d07c930c 11-May-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

packagefs: Share string instances globally

Introduce a class String which refers to shared private data that is
registered in a global hash table (in class StringPool) and use the
class consequently. This eliminates duplicate allocations for the same
string and also speeds up tests for equality. There's quite a bit
overhead for the management structures (apparently even more than for
the string data itself), but due to almost all strings being used
multiple times this still almost halves the memory usage for string
data.


# 1e7416d9 11-May-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

packagefs: Organize sources into subdirectories


# 85bf48fe 11-May-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

packagefs: Remove no longer working userland build support


# 9abd3e6f 06-May-2013 Oliver Tappe <zooey@hirschkaefer.de>

Fix race condition during build of some file systems.

* make sure the zlib package is available before trying to use zlib.h


# 7c6bff17 05-May-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

Complete outsourcing of zlib

* Add optional packages Zlib and Zlib-devel.
* Simplify the build feature section for zlib and also extract the
source package.
* Replace all remaining references to the zlib instance in the tree and
remove it.


# 6978941a 06-Apr-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

packagefs: Remove support for multiple package domains per volume

That also get rid of the job stuff and the package loader thread.


# 0c6927b5 05-Apr-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

packagefs: Add ioctl to get basic volume information

Also rename the MountType enum and members, since they are no longer
packagefs private.


# c864ba1a 16-Aug-2012 Alex Smith <alex@alex-smith.me.uk>

Build a separate libsupc++ for the kernel with correct flags.

Kernel mode code on x86_64 needs to be built with -mno-red-zone as
interrupts would corrupt the red zone if it were in use. However, the
kernel is linked with libsupc++, which was not compiled with
-mno-red-zone. If an interrupt occurred in libsupc++ code the red zone
would get corrupted. This was causing random panics, particularly under
heavy system load. Therefore, on x86_64 a separate build of libsupc++
with -mno-red-zone is now done for the kernel to use. Note: this commit
will require a rerun of configure and rebuild of cross tools.


# 03aed3a3 08-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Attribute index support for non-special attributes

* Add AttributeIndex class.
* Each attribute does now have an attribute index cookie. The new
attribute index service methods Node::IndexAttribute() and
IndexCookieForAttribute() create+set/retrieve the cookie. The cookie
is actually the attribute index's tree node.
* Add OldNodeAttribute::IndexCookieForAttribute() so the cookie is
available when the node changes.


# 6cc3dcdb 07-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Move helper function out of QueryParser.h

They live in the new QueryParserUtils.{h,cpp} now.


# ed81de86 07-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Add last modified index support

* Add class LastModifiedIndex.
* Create and add an instance of it in Volume::Mount().


# 3793289c 07-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Add size index support

* Add class SizeIndex.
* Create and add an instance of it in Volume mount.


# 182e58f7 07-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

NodeListener::NodeChanged(): Provide old value

* Add interface OldNodeAttributes an instance of which is passed to
NodeListener::NodeChanged() to provide the old attribute values
(currently only modification time and file size).
* Also extend PackageLinksListener::PackageLinkNodeChanged() with a
OldNodeAttributes parameter.
* Add OldNodeAttributes implementations for PackageLinkSymlink (inner
class OldAttributes) and UnpackingNode (OldUnpackageNodeAttributes).


# 617ac41c 05-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Add Query class and query management in Volume


# 331b89b3 05-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Add NameIndex class and create instance in Volume


# 4791f5eb 05-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Add Index base class and index table in Volume


# ec59ac75 05-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Add a global node listener mechanism


# c4c9e06c 25-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Support for auto-generated package node attributes

* Add utility class AutoPackageAttributes and AttributeCookie subclass
AutoPackageAttributeCookie.
* UnpackingAttributeCookie::Open() does now try to create a
AutoPackageAttributeCookie, when it doesn't find the attribute in the
PackageNode.
* Adjust UnpackingAttributeDirectoryCookie to also list auto-generated
attributes.

Currently the only supported attribute is "SYS:PACKAGE", which is the
file name of the package containing the node.


# c6dd2207 25-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Move PackageLinkDirectory::Link to own file

And rename it to PackageLinkSymlink.


# 7d2fa6f0 25-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

WIP towards dependency package links

* Add ResolvableFamily and DependencyFamily classes for grouping equally
named resolvables/dependencies.
* Add hash tables to PackageFSRoot to track resolvables and
dependencies. That is done in {Add,Remove}Package.
* Resolvable does now have a list of Dependency objects, the ones it
satisfies.


# fe49869e 23-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Add package link directories to system volume

* Add PackageLinksListener interface. It is used by
PackageLink[s]Directory to notify a listener about changes.
* Volume does now implement PackageLinksListener and recursively adds/
removes package link directories.

This makes the package link directories appear at least. They are still
empty.


# b5baaa84 23-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

WIP: Create empty package links directories

* Rename PackageFamily to PackageLinkDirectory and derive from
Directory.
* PackageLinksDirectory: Add the PackageLinkDirectory objects as
children and remove the no longer needed hash table (we use the
Directory's child hash table).


# d1756818 23-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Move EmptyAttributeDirectoryCookie to own files


# 63875d17 23-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Add yet empty package-links directory

* Add PackageLinksDirectory Directory subclass. Currently not doing
anything.
* PackageFSRoot: Create a PackageLinksDirectory.
* Volume: Add/remove the package links directory for the system volume.


# e16ce53b 23-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Pull derived UnpackingDirectory out of Directory

Move all package specifics from now abstract Directory to new derived
class UnpackingDirectory and adjust the Volume implementation
accordingly. This concludes the Node/Directory refactoring. Neither
class is aware of packages anymore.


# 097e795f 23-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Rename LeafNode to UnpackingLeafNode


# 20142717 23-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Remove package related dependencies from Node

* Move package related methods from Node to new interface UnpackingNode.
* LeafNode and Directory derive from UnpackingNode now.
* Adjust Volume implementation accordingly.


# 5167a807 23-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Attribute dir access kernel interface abstraction

* Introduce interface AttributeDirectoryCookie and currently only
implementation UnpackingAttributeDirectoryCookie. This is an interface
for reading/rewinding an attribute directory.
* Add abstract virtual Node::OpenAttributeDirectory() method that
returns an AttributeDirectoryCookie and implement it for derived
classes.
* In the kernel interface attribute directory hooks use
AttributeDirectoryCookie now.


# 882b03ab 23-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Kernel interface abstraction for attribute access

* Introduce interface AttributeCookie and currently only implementation
UnpackingAttributeCookie. This is an interface for reading/stat()ing
an attribute.
* Add abstract virtual Node::OpenAttribute() method that returns an
AttributeCookie and implemented it for derived classes.
* In the kernel interface attribute hooks use AttributeCookie now. The
attribute directory hooks are unchanged.


# 991ba9fd 23-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

WIP towards packagefs package links support

* Introduce Version class representing a version.
* Introduce Dependency and Resolvable class and add lists of either to
Package.
* Parse package attributes and add dependencies and resolvables to
Package.
* Add a mount type to Volume and add a respective mount parameter
"mount-type" (values "system", "common", "home", "custom"). Also
implies the shine-through type, if that's not given.
* Introduce class PackageFamily which groups equally named and versioned
packages.
* Add class PackageFSRoot. Each instance represents a possible file
system root (separate roots for different chroot environments). Tracks
Volumes belonging to the same root and their packages.


# fab5eddc 19-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Split package kit DataReader.cpp

Pull AttributeDataReader and FDDataReader implementations out of
DataReader.cpp into own source files. Thus we can avoid dependencies
(e.g. to fs_attr code) we don't need/want.


# 55b969b1 08-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Attribute index support for non-special attributes

* Add AttributeIndex class.
* Each attribute does now have an attribute index cookie. The new
attribute index service methods Node::IndexAttribute() and
IndexCookieForAttribute() create+set/retrieve the cookie. The cookie
is actually the attribute index's tree node.
* Add OldNodeAttribute::IndexCookieForAttribute() so the cookie is
available when the node changes.


# 01f7f92a 07-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Move helper function out of QueryParser.h

They live in the new QueryParserUtils.{h,cpp} now.


# 0c63c773 07-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Add last modified index support

* Add class LastModifiedIndex.
* Create and add an instance of it in Volume::Mount().


# d35565be 07-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Add size index support

* Add class SizeIndex.
* Create and add an instance of it in Volume mount.


# 77300529 07-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

NodeListener::NodeChanged(): Provide old value

* Add interface OldNodeAttributes an instance of which is passed to
NodeListener::NodeChanged() to provide the old attribute values
(currently only modification time and file size).
* Also extend PackageLinksListener::PackageLinkNodeChanged() with a
OldNodeAttributes parameter.
* Add OldNodeAttributes implementations for PackageLinkSymlink (inner
class OldAttributes) and UnpackingNode (OldUnpackageNodeAttributes).


# a3f97676 05-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Add Query class and query management in Volume


# 3897e729 05-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Add NameIndex class and create instance in Volume


# 804a92da 05-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Add Index base class and index table in Volume


# 67f11c47 05-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Add a global node listener mechanism


# 59e76dbe 25-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Support for auto-generated package node attributes

* Add utility class AutoPackageAttributes and AttributeCookie subclass
AutoPackageAttributeCookie.
* UnpackingAttributeCookie::Open() does now try to create a
AutoPackageAttributeCookie, when it doesn't find the attribute in the
PackageNode.
* Adjust UnpackingAttributeDirectoryCookie to also list auto-generated
attributes.

Currently the only supported attribute is "SYS:PACKAGE", which is the
file name of the package containing the node.


# a39e95cd 25-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Move PackageLinkDirectory::Link to own file

And rename it to PackageLinkSymlink.


# 9320567e 25-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

WIP towards dependency package links

* Add ResolvableFamily and DependencyFamily classes for grouping equally
named resolvables/dependencies.
* Add hash tables to PackageFSRoot to track resolvables and
dependencies. That is done in {Add,Remove}Package.
* Resolvable does now have a list of Dependency objects, the ones it
satisfies.


# 3e7333b7 23-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Add package link directories to system volume

* Add PackageLinksListener interface. It is used by
PackageLink[s]Directory to notify a listener about changes.
* Volume does now implement PackageLinksListener and recursively adds/
removes package link directories.

This makes the package link directories appear at least. They are still
empty.


# 4031a32a 23-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

WIP: Create empty package links directories

* Rename PackageFamily to PackageLinkDirectory and derive from
Directory.
* PackageLinksDirectory: Add the PackageLinkDirectory objects as
children and remove the no longer needed hash table (we use the
Directory's child hash table).


# a2fc40be 23-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Move EmptyAttributeDirectoryCookie to own files


# b8a96de9 23-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Add yet empty package-links directory

* Add PackageLinksDirectory Directory subclass. Currently not doing
anything.
* PackageFSRoot: Create a PackageLinksDirectory.
* Volume: Add/remove the package links directory for the system volume.


# 511b4fe8 23-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Pull derived UnpackingDirectory out of Directory

Move all package specifics from now abstract Directory to new derived
class UnpackingDirectory and adjust the Volume implementation
accordingly. This concludes the Node/Directory refactoring. Neither
class is aware of packages anymore.


# 876a16a2 23-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Rename LeafNode to UnpackingLeafNode


# e85e0ae8 23-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Remove package related dependencies from Node

* Move package related methods from Node to new interface UnpackingNode.
* LeafNode and Directory derive from UnpackingNode now.
* Adjust Volume implementation accordingly.


# e807d808 23-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Attribute dir access kernel interface abstraction

* Introduce interface AttributeDirectoryCookie and currently only
implementation UnpackingAttributeDirectoryCookie. This is an interface
for reading/rewinding an attribute directory.
* Add abstract virtual Node::OpenAttributeDirectory() method that
returns an AttributeDirectoryCookie and implement it for derived
classes.
* In the kernel interface attribute directory hooks use
AttributeDirectoryCookie now.


# 8ae81ef9 23-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Kernel interface abstraction for attribute access

* Introduce interface AttributeCookie and currently only implementation
UnpackingAttributeCookie. This is an interface for reading/stat()ing
an attribute.
* Add abstract virtual Node::OpenAttribute() method that returns an
AttributeCookie and implemented it for derived classes.
* In the kernel interface attribute hooks use AttributeCookie now. The
attribute directory hooks are unchanged.


# 01102ee5 23-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

WIP towards packagefs package links support

* Introduce Version class representing a version.
* Introduce Dependency and Resolvable class and add lists of either to
Package.
* Parse package attributes and add dependencies and resolvables to
Package.
* Add a mount type to Volume and add a respective mount parameter
"mount-type" (values "system", "common", "home", "custom"). Also
implies the shine-through type, if that's not given.
* Introduce class PackageFamily which groups equally named and versioned
packages.
* Add class PackageFSRoot. Each instance represents a possible file
system root (separate roots for different chroot environments). Tracks
Volumes belonging to the same root and their packages.


# 9a8c1339 19-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Split package kit DataReader.cpp

Pull AttributeDataReader and FDDataReader implementations out of
DataReader.cpp into own source files. Thus we can avoid dependencies
(e.g. to fs_attr code) we don't need/want.


# ad6a8dbe 14-Feb-2011 Oliver Tappe <zooey@hirschkaefer.de>

Pulled reusable stuff from PackageReaderImpl into new class ReaderImplBase.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40485 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 5fb1c6ff 30-Jan-2011 Oliver Tappe <zooey@hirschkaefer.de>

Refactored hpkg implementation to provide some separation between
public and private API (still far from ideal, but a start):
* moved several HPKG-classes into the public namespace BPackageKit::HPKG
* added fImpl-wrappers around PackageReader and PackageWriter to hide
most of the gory details
* adjusted 'package'-binary and packagefs accordingly


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40320 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 0d6b3b20 27-Jan-2011 Oliver Tappe <zooey@hirschkaefer.de>

More work on package kit:
* added class BPackageInfo, which contains packaging attributes of
a package (the values relevant for package management)
* implemented parser (mostly) for reading a BPackageInfo from a config
file (.PackageInfo) in order to pass them on to the PackageWriter
when creating a package
* pulled hpkg-related stuff from bin/package into the package kit
* adjusted packagefs-Volume to skip .PackageInfo files when populating
the mountpoint, as those files shouldn't appear as part of an
activated package


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40301 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 46776004 18-Nov-2009 Ingo Weinhold <ingo_weinhold@gmx.de>

* Extract the attributes from the package files and attach them as
PackageNodeAttribute to the PackageNodes.
* Implemented the attribute FS interface hooks.
* Made Package and PackageNode BReferenceable.
* Fixed the reference management for Node.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34119 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 4e2cd771 18-Nov-2009 Ingo Weinhold <ingo_weinhold@gmx.de>

* Added new interface BufferCache -- basically a memory allocator with the
option to cache a freed buffer -- and implementations
BlockBufferCache{NoLock,Kernel}.
* ZlibPackageDataReader does now dynamically get its read and uncompress
buffers from a provided BufferCache when needed.
* Allocating the buffers once and keeping them over the whole life time was a
bit too memory heavy, since we create a reader for every file for which a
vnode is created. A FS module global factory provides a buffer cache.
* Added a mutex to PackageFile::DataAccessor which guards the access to the
data reader which isn't thread safe.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34115 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 694cb0b2 17-Nov-2009 Ingo Weinhold <ingo_weinhold@gmx.de>

* Implemented intermediate base class PackageLeafNode for PackageFile and
PackageSymlink with a "fat" interface.
* Replaced File and Symlink by fat class LeafNode.
* Added Package* object management to Directory and LeafNode.
* Implemented packagefs_read_symlink(), so symlinks work now.
* Added some missing locking the kernel interface.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34096 a95241bf-73f2-0310-859d-f6bbb57e9c96


# cc32c484 17-Nov-2009 Ingo Weinhold <ingo_weinhold@gmx.de>

Work in progress:
* The FS parses package files from "/boot/common/packages" and builds an
node tree representation of the contained entries. Merging directories should
work. Lots of other stuff is missing yet, though.
* Implemented the hooks for directory entry lookup and iteration. So it's
possible to see the contents of the FS at least.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34088 a95241bf-73f2-0310-859d-f6bbb57e9c96


# b932032a 15-Nov-2009 Ingo Weinhold <ingo_weinhold@gmx.de>

Implemented the most basic functionality required to cleanly mount and unmount
(at least in userlandfs).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34069 a95241bf-73f2-0310-859d-f6bbb57e9c96


# eaf37e54 15-Nov-2009 Ingo Weinhold <ingo_weinhold@gmx.de>

Added Jamfile for building for the userlandfs.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34065 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 3791c3fc 15-Nov-2009 Ingo Weinhold <ingo_weinhold@gmx.de>

The very beginning of a package FS: Empty stubs for a minimal read-only file
system.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34064 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 220d04022750f40f8bac8f01fa551211e28d04f2 31-Jul-2014 Oliver Tappe <zooey@hirschkaefer.de>

Use libstdc++, libsupc++ and libgcc from gcc_syslibs.

* Instead of faking libstdc++.so from libstdc++.a, use libstdc++.so
from the gcc_syslibs build feature for everything except x86_gcc2.
* Use libgcc_s.so from the gcc_syslibs build feature for everything but
x86_gcc2 (which still carries libgcc as part of libroot.so).
* Drop filtering of libgcc objects for libroot, as that is no longer
necessary since we're only using libgcc-as-single-object for libroot
with x86_gcc2, where the filtered object file doesn't exist. Should
the objects that used to be filtered cause any problems as part of
libgcc_s.so, we can always filter them as part of the gcc build.
* Use libsupc++.so from the gcc_syslibs build feature for everything but
x86_gcc2.
* Adjust all Jamfiles accordingly.
* Deactivate building of faked libstdc++.so for non-x86-gcc2. For
x86_gcc2, we still build libstdc++.so from the sources in the Haiku
source tree as part of the Haiku build .
* Put gcc_syslibs package onto the image, when needed.


# e527b796319f21ca025f68e1964df140daa6de35 12-Jul-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

Switch package file accessor classes to use BPositionIO

* PackageFileHeap{Reader,Writer} as well as Package{Reader,Writer} and
their implementation and super classes do now internally use a
BPositionIO instead of a FD to access the package file. This provides
more flexibility needed for features to come.
* BPackageReader has already grown a new Init() version with a
BPositionIO* parameter.


# b3263ad3e1662cc419849a2d2cf539f9636613dc 30-Jun-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

Switch package kit to BZlibCompressionAlgorithm

... and remove the Zlib{Compressor,Decompressor} API.


# 6a89a36aa0ce6a53f9758ba767863ac6b4c6156c 24-Jun-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

Move package kit Zlib* classes to support kit

Also move to B* namespace and no longer expose the zlib dependency in
the headers.


# 32832cbe47f991cc6d2b29824903181d8baaaa63 23-Jun-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

Remove BPackageKit::BDataOutput

Use BDataIO instead.


# d2d1af830b3f144937ea5e4c3f0e5b74c4c3d737 18-Jun-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

Revert "Move ZlibDecompressor to libshared"

This reverts commit 9af2105d36856be60528c361edf14a263f242338.

Conflicts:
src/kits/package/Jamfile


# f648efd3d411e5d5590b586091e5cb75da896cfd 18-Jun-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

Revert "Fix zlib-dependencies of (boot & standard) packagefs."

This reverts commit 06ed40580339e21f65c24b3d210c880dcf2ec739.


# 06ed40580339e21f65c24b3d210c880dcf2ec739 24-May-2014 Oliver Tappe <zooey@hirschkaefer.de>

Fix zlib-dependencies of (boot & standard) packagefs.

* Some files that depend on zlib.h weren't declared as such, which
could cause multijob builds to fail.


# aeb6fc9eca1b3684f835b648e44ca877e29296ab 10-Feb-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

packagefs: Move Volume::PackagesDirectory to top level

Also make it a BReferenceable and fix Volume::fPackagesDirectory leak.


# 9af2105d36856be60528c361edf14a263f242338 10-Feb-2014 Adrien Destugues <pulkomandy@pulkomandy.tk>

Move ZlibDecompressor to libshared

* This will be used to implement compressed http streams
* Remove the custom BDataOutput class, and use BDataIO instead, for
easier integration with existing code.


# 4c61288e73ab85766ae2709a38809384cd7ed489 20-Nov-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

packagefs: Refactor UnpackingAttributeDirectoryCookie

Pull out a reusable base class AutoPackageAttributeDirectoryCookie.


# 3a7e0b00147f7a33bc52cb75a56bde8d9652d92a 19-Nov-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

packagefs: Support blacklisting entries in packages

In each installation location, it is now possible to create a settings
file "packages" that allows to blacklist entries contained in packages.
The format is:

Package <package name> {
EntryBlacklist {
<entry path>
...
}
}
...

<package name> is the base name (no version) of the respective package
(e.g. "haiku"), <entry path> is an installation location relative path
(e.g. "add-ons/Translators/FooTranslator").

Blacklisted entries will be ignored by packagefs, i.e. they won't appear
in the file system. This addresses the issue that it may be necessary to
remove a problematic file (e.g. driver, add-on, or library), which would
otherwise require editing the containing package file.

The settings file is not not "live". Changes take effect only after
reboot (respectively when remounting the concerned packagefs volume).


# 0cb3f7092620ff73abc6daadd866a4e07117bd37 01-Sep-2013 Oliver Tappe <zooey@hirschkaefer.de>

Revert "Fix build problems of btrfs and packagefs for x86_64."

This reverts commit f272e63f393449d3a816970ca632764895a78cd6.


# c5c787ea417c1a1c9f0fdb7ef3a5b807521f0093 29-Aug-2013 Oliver Tappe <zooey@hirschkaefer.de>

Fix build problems of btrfs and packagefs for x86_64.

* Both filesystems used to link to a static kernel-zlib, which
was being built with -fno-pic. This doesn't work on x86_64 as the
filesystem add-ons are meant to be relocatable, which requires their
code to be compiled as position independent.
Solve that by moving zlib into the kernel, so any add-on can just use
it from there (packagefs is mandatory, so we can't really do without
zlib anyway).


# b0944c78b074a8110bd98e060415d0e8f38a7f65 01-Aug-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

More work towards hybrid support

* All packaging architecture dependent variables do now have a
respective suffix and are set up for each configured packaging
architecture, save for the kernel and boot loader variables, which
are still only set up for the primary architecture.
For convenience TARGET_PACKAGING_ARCH, TARGET_ARCH, TARGET_LIBSUPC++,
and TARGET_LIBSTDC++ are set to the respective values for the primary
packaging architecture by default.
* Introduce a set of MultiArch* rules to help with building targets for
multiple packaging architectures. Generally the respective targets are
(additionally) gristed with the packaging architecture. For libraries
the additional grist is usually omitted for the primary architecture
(e.g. libroot.so and <x86>libroot.so for x86_gcc2/x86 hybrid), so that
Jamfiles for targets built only for the primary architecture don't
need to be changed.
* Add multi-arch build support for all targets needed for the stage 1
cross devel package as well as for libbe (untested).


# 46122852f1dfbbf4bac6f5a634452ff90c5635ce 21-May-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

packagefs: Add caching for the package file heap reader

* ReaderImplBase:
- Add virtual CreateCachedHeapReader() which can create a cached
reader based on the given heap reader.
- Rename HeapReader() to RawHeapReader() and add HeapReader() for the
cached heap reader.
- Add DetachHeapReader() to allow a clients to remove the heap
reader(s) after deleting the ReaderImplBase object.
* packagefs:
- Add CachedDataReader class, which wraps a given
BAbstractBufferedDataReader and provides caching for it using a
VMCache. The implementation is based on the IOCache implementation.
- Use CachedDataReader to wrap the heap reader. For file data that
means they are cached twice -- in the heap reader cache and in the
file cache -- but due to the heap reader using a VMCache as well,
the pages will be recycled automatically anyway. For attribute data
the cache should be very helpful, since they weren't cached at all
before.


# 1f633814fa347b0bd822f683af731615df600347 17-May-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

hpkg format: compress the whole heap

Instead of handling compression for individual file/attribute data we
do now compress the whole heap where they are stored. This
significantly improves compression ratios. We still divide the
uncompressed data into 64 KiB chunks and use a chunk offset array for
the compressed chunks to allow for quick random access without too much
overhead. The tradeoff is a limited possible compression ratio -- i.e.
we won't be as good as tar.gz (though surprisingly with my test
archives we did better than zip).

The other package file sections (package attributes and TOC) are no
longer compressed individually. Their uncompressed data are simply
pushed onto the heap where the usual compression strategy applies. To
simplify things the repository format has been changed in the same
manner although it doesn't otherwise use the heap, since it only stores
meta data.

Due to the data compression having been exposed in public and private
API, this change touches a lot of package kit using code, including
packagefs and the boot loader packagefs support. The latter two haven't
been tested yet. Moreover packagefs needs a new kind of cache so we
avoid re-reading the same heap chunk for two different data items it
contains.


# 0ee1651856a4364bfa7ffd10f796baf35fb524d3 14-May-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

Rename BBlockBufferCache and friends to *Pool*

Also move BBlockBufferPoolNoLock into BHPKG namespace with the other
classes. Not sure why it wasn't there before.


# 11cecf980b5ee6a21563a7e78d4f2238a8b4d90f 12-May-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

packagefs: Add support for hpkg format V1

* Add union-like class PackageData which wraps the V1 and V2
BPackageData classes.
* GlobalFactory: Create a data reader depending on the data format
version.
* Package: Add a loader for V1 format and try that, if the other one
fails.


# 171fd58c4b47c2da9cf13b7e501d3661d4a98e42 12-May-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package kit: some fixes for multi-version support

* Use enums/constants/functions instead of preprocessor macros.
* Missing include in PackageInfoAttributeValue.h.
* PackageReaderImpl::Init(): Check version before header size and
return B_MISMATCHED_VALUES instead of B_BAD_DATA, if the version
doesn't match. This allows callers to determine the condition and
try a reader for a different version. A more flexible interface for
that case would be nice, but since we want to support the old package
version only temporarily, the current solution should be good enough.


# d07c930c1eb710289922edd3abf5244c259a86c6 11-May-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

packagefs: Share string instances globally

Introduce a class String which refers to shared private data that is
registered in a global hash table (in class StringPool) and use the
class consequently. This eliminates duplicate allocations for the same
string and also speeds up tests for equality. There's quite a bit
overhead for the management structures (apparently even more than for
the string data itself), but due to almost all strings being used
multiple times this still almost halves the memory usage for string
data.


# 1e7416d9b3846396e2f7d6552e37d72664cd6853 11-May-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

packagefs: Organize sources into subdirectories


# 85bf48fea593e303019d6bb1265b230a4bd0542b 11-May-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

packagefs: Remove no longer working userland build support


# 9abd3e6f53602c5fc3ad5676992bc27d40640e1b 06-May-2013 Oliver Tappe <zooey@hirschkaefer.de>

Fix race condition during build of some file systems.

* make sure the zlib package is available before trying to use zlib.h


# 7c6bff17340e2f6697a22f1ce56c18fa009d4d2e 05-May-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

Complete outsourcing of zlib

* Add optional packages Zlib and Zlib-devel.
* Simplify the build feature section for zlib and also extract the
source package.
* Replace all remaining references to the zlib instance in the tree and
remove it.


# 6978941aac85ea329a8552253f384924dcccd1b3 06-Apr-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

packagefs: Remove support for multiple package domains per volume

That also get rid of the job stuff and the package loader thread.


# 0c6927b5d7c8f73abd7663168f5f437b39661c6c 05-Apr-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

packagefs: Add ioctl to get basic volume information

Also rename the MountType enum and members, since they are no longer
packagefs private.


# c864ba1a2d8525aeabd6199c01675f70f5abd7bd 16-Aug-2012 Alex Smith <alex@alex-smith.me.uk>

Build a separate libsupc++ for the kernel with correct flags.

Kernel mode code on x86_64 needs to be built with -mno-red-zone as
interrupts would corrupt the red zone if it were in use. However, the
kernel is linked with libsupc++, which was not compiled with
-mno-red-zone. If an interrupt occurred in libsupc++ code the red zone
would get corrupted. This was causing random panics, particularly under
heavy system load. Therefore, on x86_64 a separate build of libsupc++
with -mno-red-zone is now done for the kernel to use. Note: this commit
will require a rerun of configure and rebuild of cross tools.


# 03aed3a3146e5e989b327eba191e41a1d4bf3dfc 08-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Attribute index support for non-special attributes

* Add AttributeIndex class.
* Each attribute does now have an attribute index cookie. The new
attribute index service methods Node::IndexAttribute() and
IndexCookieForAttribute() create+set/retrieve the cookie. The cookie
is actually the attribute index's tree node.
* Add OldNodeAttribute::IndexCookieForAttribute() so the cookie is
available when the node changes.


# 6cc3dcdb9baedcc500d02055ff8927cc947f59bf 07-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Move helper function out of QueryParser.h

They live in the new QueryParserUtils.{h,cpp} now.


# ed81de869e47eff53197b2a81a739a6da6e4b64c 07-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Add last modified index support

* Add class LastModifiedIndex.
* Create and add an instance of it in Volume::Mount().


# 3793289c21d17d6e8f22c149879d4201871a4880 07-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Add size index support

* Add class SizeIndex.
* Create and add an instance of it in Volume mount.


# 182e58f709cc0d9e0ae0f905874c13dfe38ce516 07-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

NodeListener::NodeChanged(): Provide old value

* Add interface OldNodeAttributes an instance of which is passed to
NodeListener::NodeChanged() to provide the old attribute values
(currently only modification time and file size).
* Also extend PackageLinksListener::PackageLinkNodeChanged() with a
OldNodeAttributes parameter.
* Add OldNodeAttributes implementations for PackageLinkSymlink (inner
class OldAttributes) and UnpackingNode (OldUnpackageNodeAttributes).


# 617ac41c601a395ce3065e44cc8355d792c33765 05-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Add Query class and query management in Volume


# 331b89b3a5568ad9efcd8a10aa587366753bc6a4 05-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Add NameIndex class and create instance in Volume


# 4791f5ebb3bec07d9592b2bc5b461e269880ed3b 05-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Add Index base class and index table in Volume


# ec59ac751529851c81e8c3db96e06ba1b790dcbd 05-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Add a global node listener mechanism


# c4c9e06c88d03c20bcf84b4e627ce4a4fb15d22f 25-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Support for auto-generated package node attributes

* Add utility class AutoPackageAttributes and AttributeCookie subclass
AutoPackageAttributeCookie.
* UnpackingAttributeCookie::Open() does now try to create a
AutoPackageAttributeCookie, when it doesn't find the attribute in the
PackageNode.
* Adjust UnpackingAttributeDirectoryCookie to also list auto-generated
attributes.

Currently the only supported attribute is "SYS:PACKAGE", which is the
file name of the package containing the node.


# c6dd220780584bd9debaad5bd82bab1dc953b881 25-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Move PackageLinkDirectory::Link to own file

And rename it to PackageLinkSymlink.


# 7d2fa6f0f83c87b90df3d3f87f47873bf0f26b4d 25-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

WIP towards dependency package links

* Add ResolvableFamily and DependencyFamily classes for grouping equally
named resolvables/dependencies.
* Add hash tables to PackageFSRoot to track resolvables and
dependencies. That is done in {Add,Remove}Package.
* Resolvable does now have a list of Dependency objects, the ones it
satisfies.


# fe49869e03e724de875ad54c91f9f66275cfcf32 23-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Add package link directories to system volume

* Add PackageLinksListener interface. It is used by
PackageLink[s]Directory to notify a listener about changes.
* Volume does now implement PackageLinksListener and recursively adds/
removes package link directories.

This makes the package link directories appear at least. They are still
empty.


# b5baaa8428dc8319bb8a040430cd44a9ae18b677 23-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

WIP: Create empty package links directories

* Rename PackageFamily to PackageLinkDirectory and derive from
Directory.
* PackageLinksDirectory: Add the PackageLinkDirectory objects as
children and remove the no longer needed hash table (we use the
Directory's child hash table).


# d175681861f0d38517da21cba36c14c08381ba8d 23-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Move EmptyAttributeDirectoryCookie to own files


# 63875d1702406f1bdc0e0f7adaa3492dd9fa3bdd 23-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Add yet empty package-links directory

* Add PackageLinksDirectory Directory subclass. Currently not doing
anything.
* PackageFSRoot: Create a PackageLinksDirectory.
* Volume: Add/remove the package links directory for the system volume.


# e16ce53bccea3c101dadc1c4f4cfb73913aacd39 23-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Pull derived UnpackingDirectory out of Directory

Move all package specifics from now abstract Directory to new derived
class UnpackingDirectory and adjust the Volume implementation
accordingly. This concludes the Node/Directory refactoring. Neither
class is aware of packages anymore.


# 097e795f8e34d908418b06ae63d81d2f7916eb54 23-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Rename LeafNode to UnpackingLeafNode


# 20142717e78e3d349d0da642a8a5ae66a6d0a415 23-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Remove package related dependencies from Node

* Move package related methods from Node to new interface UnpackingNode.
* LeafNode and Directory derive from UnpackingNode now.
* Adjust Volume implementation accordingly.


# 5167a807038bd05fa521f7efd389815578cb1bc9 23-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Attribute dir access kernel interface abstraction

* Introduce interface AttributeDirectoryCookie and currently only
implementation UnpackingAttributeDirectoryCookie. This is an interface
for reading/rewinding an attribute directory.
* Add abstract virtual Node::OpenAttributeDirectory() method that
returns an AttributeDirectoryCookie and implement it for derived
classes.
* In the kernel interface attribute directory hooks use
AttributeDirectoryCookie now.


# 882b03aba9f028dc99fd79499f3e20b52a91a485 23-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Kernel interface abstraction for attribute access

* Introduce interface AttributeCookie and currently only implementation
UnpackingAttributeCookie. This is an interface for reading/stat()ing
an attribute.
* Add abstract virtual Node::OpenAttribute() method that returns an
AttributeCookie and implemented it for derived classes.
* In the kernel interface attribute hooks use AttributeCookie now. The
attribute directory hooks are unchanged.


# 991ba9fddf31971e08b038b0f84ff165c8cb94b7 23-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

WIP towards packagefs package links support

* Introduce Version class representing a version.
* Introduce Dependency and Resolvable class and add lists of either to
Package.
* Parse package attributes and add dependencies and resolvables to
Package.
* Add a mount type to Volume and add a respective mount parameter
"mount-type" (values "system", "common", "home", "custom"). Also
implies the shine-through type, if that's not given.
* Introduce class PackageFamily which groups equally named and versioned
packages.
* Add class PackageFSRoot. Each instance represents a possible file
system root (separate roots for different chroot environments). Tracks
Volumes belonging to the same root and their packages.


# fab5eddca9e54e7325fe452aed2c7a0bbd3dfe62 19-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Split package kit DataReader.cpp

Pull AttributeDataReader and FDDataReader implementations out of
DataReader.cpp into own source files. Thus we can avoid dependencies
(e.g. to fs_attr code) we don't need/want.


# 55b969b13bfbfba814aea0c961cae29825083ee6 08-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Attribute index support for non-special attributes

* Add AttributeIndex class.
* Each attribute does now have an attribute index cookie. The new
attribute index service methods Node::IndexAttribute() and
IndexCookieForAttribute() create+set/retrieve the cookie. The cookie
is actually the attribute index's tree node.
* Add OldNodeAttribute::IndexCookieForAttribute() so the cookie is
available when the node changes.


# 01f7f92aef0dada1afd9c57366e3358c309dd825 07-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Move helper function out of QueryParser.h

They live in the new QueryParserUtils.{h,cpp} now.


# 0c63c7738a1b281eb4232cc7f7a323436b09b63b 07-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Add last modified index support

* Add class LastModifiedIndex.
* Create and add an instance of it in Volume::Mount().


# d35565bed0f5c64aa02e5e69b5ffa3ae7bd484e8 07-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Add size index support

* Add class SizeIndex.
* Create and add an instance of it in Volume mount.


# 773005292a36c2a1f7cd1eed4fe3a7ca8fc95559 07-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

NodeListener::NodeChanged(): Provide old value

* Add interface OldNodeAttributes an instance of which is passed to
NodeListener::NodeChanged() to provide the old attribute values
(currently only modification time and file size).
* Also extend PackageLinksListener::PackageLinkNodeChanged() with a
OldNodeAttributes parameter.
* Add OldNodeAttributes implementations for PackageLinkSymlink (inner
class OldAttributes) and UnpackingNode (OldUnpackageNodeAttributes).


# a3f976768e5b4e7678827775c817fd1f38950304 05-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Add Query class and query management in Volume


# 3897e7298eabe1bfe7faf8f12c9f865863938938 05-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Add NameIndex class and create instance in Volume


# 804a92da7afe1a970f88ac11f0fc374635fc56f7 05-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Add Index base class and index table in Volume


# 67f11c47a76f21dab107649cf072ab919e0dd1ba 05-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Add a global node listener mechanism


# 59e76dbe414f32cc65320b605442f97eb60296c0 25-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Support for auto-generated package node attributes

* Add utility class AutoPackageAttributes and AttributeCookie subclass
AutoPackageAttributeCookie.
* UnpackingAttributeCookie::Open() does now try to create a
AutoPackageAttributeCookie, when it doesn't find the attribute in the
PackageNode.
* Adjust UnpackingAttributeDirectoryCookie to also list auto-generated
attributes.

Currently the only supported attribute is "SYS:PACKAGE", which is the
file name of the package containing the node.


# a39e95cd73139d85c43cbece88fa5ffa22e73129 25-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Move PackageLinkDirectory::Link to own file

And rename it to PackageLinkSymlink.


# 9320567ed2407276a14f86ec44fbe088b13e8e1f 25-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

WIP towards dependency package links

* Add ResolvableFamily and DependencyFamily classes for grouping equally
named resolvables/dependencies.
* Add hash tables to PackageFSRoot to track resolvables and
dependencies. That is done in {Add,Remove}Package.
* Resolvable does now have a list of Dependency objects, the ones it
satisfies.


# 3e7333b7c188f2193a1bc5109c101461f33197b9 23-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Add package link directories to system volume

* Add PackageLinksListener interface. It is used by
PackageLink[s]Directory to notify a listener about changes.
* Volume does now implement PackageLinksListener and recursively adds/
removes package link directories.

This makes the package link directories appear at least. They are still
empty.


# 4031a32accd2bba7bca7c8e93494e95564ae3d60 23-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

WIP: Create empty package links directories

* Rename PackageFamily to PackageLinkDirectory and derive from
Directory.
* PackageLinksDirectory: Add the PackageLinkDirectory objects as
children and remove the no longer needed hash table (we use the
Directory's child hash table).


# a2fc40be04897a8bd7be45e1e1a9296c5aab042f 23-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Move EmptyAttributeDirectoryCookie to own files


# b8a96de92993a211fef83f249dd815e7ffa0014d 23-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Add yet empty package-links directory

* Add PackageLinksDirectory Directory subclass. Currently not doing
anything.
* PackageFSRoot: Create a PackageLinksDirectory.
* Volume: Add/remove the package links directory for the system volume.


# 511b4fe8b36aaefb5a8a709d1b36ab9728dced76 23-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Pull derived UnpackingDirectory out of Directory

Move all package specifics from now abstract Directory to new derived
class UnpackingDirectory and adjust the Volume implementation
accordingly. This concludes the Node/Directory refactoring. Neither
class is aware of packages anymore.


# 876a16a21e528ade35c5b4bfd3e10c0b835fe03a 23-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Rename LeafNode to UnpackingLeafNode


# e85e0ae85a25fe859f950b1218bf8cb8c7a56322 23-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Remove package related dependencies from Node

* Move package related methods from Node to new interface UnpackingNode.
* LeafNode and Directory derive from UnpackingNode now.
* Adjust Volume implementation accordingly.


# e807d80833d95840f9b2b529debd6f9de2558e2d 23-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Attribute dir access kernel interface abstraction

* Introduce interface AttributeDirectoryCookie and currently only
implementation UnpackingAttributeDirectoryCookie. This is an interface
for reading/rewinding an attribute directory.
* Add abstract virtual Node::OpenAttributeDirectory() method that
returns an AttributeDirectoryCookie and implement it for derived
classes.
* In the kernel interface attribute directory hooks use
AttributeDirectoryCookie now.


# 8ae81ef94eb2a0941bdde3cfa8b0ef01cfe38d73 23-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Kernel interface abstraction for attribute access

* Introduce interface AttributeCookie and currently only implementation
UnpackingAttributeCookie. This is an interface for reading/stat()ing
an attribute.
* Add abstract virtual Node::OpenAttribute() method that returns an
AttributeCookie and implemented it for derived classes.
* In the kernel interface attribute hooks use AttributeCookie now. The
attribute directory hooks are unchanged.


# 01102ee50e3e6ade8bdfe88b9a991ff42d01c364 23-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

WIP towards packagefs package links support

* Introduce Version class representing a version.
* Introduce Dependency and Resolvable class and add lists of either to
Package.
* Parse package attributes and add dependencies and resolvables to
Package.
* Add a mount type to Volume and add a respective mount parameter
"mount-type" (values "system", "common", "home", "custom"). Also
implies the shine-through type, if that's not given.
* Introduce class PackageFamily which groups equally named and versioned
packages.
* Add class PackageFSRoot. Each instance represents a possible file
system root (separate roots for different chroot environments). Tracks
Volumes belonging to the same root and their packages.


# 9a8c1339ce802a820347b72eb509039affa9e96c 19-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Split package kit DataReader.cpp

Pull AttributeDataReader and FDDataReader implementations out of
DataReader.cpp into own source files. Thus we can avoid dependencies
(e.g. to fs_attr code) we don't need/want.


# ad6a8dbe2bffcac6a1df7a59ee6119f240a8edee 14-Feb-2011 Oliver Tappe <zooey@hirschkaefer.de>

Pulled reusable stuff from PackageReaderImpl into new class ReaderImplBase.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40485 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 5fb1c6ff1f55fe4094a761b653041b3a0b9abf1d 30-Jan-2011 Oliver Tappe <zooey@hirschkaefer.de>

Refactored hpkg implementation to provide some separation between
public and private API (still far from ideal, but a start):
* moved several HPKG-classes into the public namespace BPackageKit::HPKG
* added fImpl-wrappers around PackageReader and PackageWriter to hide
most of the gory details
* adjusted 'package'-binary and packagefs accordingly


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40320 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 0d6b3b20e15fe2cbeb5e81749f888c26ca289338 27-Jan-2011 Oliver Tappe <zooey@hirschkaefer.de>

More work on package kit:
* added class BPackageInfo, which contains packaging attributes of
a package (the values relevant for package management)
* implemented parser (mostly) for reading a BPackageInfo from a config
file (.PackageInfo) in order to pass them on to the PackageWriter
when creating a package
* pulled hpkg-related stuff from bin/package into the package kit
* adjusted packagefs-Volume to skip .PackageInfo files when populating
the mountpoint, as those files shouldn't appear as part of an
activated package


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40301 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 46776004f7f9bdf5af8c91372f050ee9f4e64076 18-Nov-2009 Ingo Weinhold <ingo_weinhold@gmx.de>

* Extract the attributes from the package files and attach them as
PackageNodeAttribute to the PackageNodes.
* Implemented the attribute FS interface hooks.
* Made Package and PackageNode BReferenceable.
* Fixed the reference management for Node.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34119 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 4e2cd77109c257aa0be1e475ddcd379f9e9286df 18-Nov-2009 Ingo Weinhold <ingo_weinhold@gmx.de>

* Added new interface BufferCache -- basically a memory allocator with the
option to cache a freed buffer -- and implementations
BlockBufferCache{NoLock,Kernel}.
* ZlibPackageDataReader does now dynamically get its read and uncompress
buffers from a provided BufferCache when needed.
* Allocating the buffers once and keeping them over the whole life time was a
bit too memory heavy, since we create a reader for every file for which a
vnode is created. A FS module global factory provides a buffer cache.
* Added a mutex to PackageFile::DataAccessor which guards the access to the
data reader which isn't thread safe.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34115 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 694cb0b270e4acba08d83b0a520217081011ba28 17-Nov-2009 Ingo Weinhold <ingo_weinhold@gmx.de>

* Implemented intermediate base class PackageLeafNode for PackageFile and
PackageSymlink with a "fat" interface.
* Replaced File and Symlink by fat class LeafNode.
* Added Package* object management to Directory and LeafNode.
* Implemented packagefs_read_symlink(), so symlinks work now.
* Added some missing locking the kernel interface.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34096 a95241bf-73f2-0310-859d-f6bbb57e9c96


# cc32c48494415e116417542ddc25bf0d28e616c5 17-Nov-2009 Ingo Weinhold <ingo_weinhold@gmx.de>

Work in progress:
* The FS parses package files from "/boot/common/packages" and builds an
node tree representation of the contained entries. Merging directories should
work. Lots of other stuff is missing yet, though.
* Implemented the hooks for directory entry lookup and iteration. So it's
possible to see the contents of the FS at least.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34088 a95241bf-73f2-0310-859d-f6bbb57e9c96


# b932032a35bf6775e1b37bc3b39a2c9afa8c3ac1 15-Nov-2009 Ingo Weinhold <ingo_weinhold@gmx.de>

Implemented the most basic functionality required to cleanly mount and unmount
(at least in userlandfs).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34069 a95241bf-73f2-0310-859d-f6bbb57e9c96


# eaf37e54bf6c781c10beadeddb2f3331d74f44f1 15-Nov-2009 Ingo Weinhold <ingo_weinhold@gmx.de>

Added Jamfile for building for the userlandfs.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34065 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 3791c3fc274dc21abaaa8619045e016489ce123b 15-Nov-2009 Ingo Weinhold <ingo_weinhold@gmx.de>

The very beginning of a package FS: Empty stubs for a minimal read-only file
system.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34064 a95241bf-73f2-0310-859d-f6bbb57e9c96