History log of /haiku/src/kits/package/hpkg/PackageWriterImpl.cpp
Revision Date Author Comments
# fce7f3a7 09-Dec-2020 X512 <danger_mail@list.ru>

integrate AutoDeleter's into pointers

Change-Id: I6c3925a7aec4d0647c76c2a03aad7b08985d7166
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3490
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: waddlesplash <waddlesplash@gmail.com>


# cdccd323 09-Dec-2020 X512 <danger_mail@list.ru>

use common AutoDeleter types

Change-Id: I115e14b76f3ff049c5f7d9471efd3619a0038fcf
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3483
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
Reviewed-by: Axel Dörfler <axeld@pinc-software.de>


# 36aafa56 04-Dec-2020 X512 <danger_mail@list.ru>

fix build after CObjectDeleter interface change

Change-Id: I76e217abcd13c22c4d68170e07333cdde4d7a891
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3461
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>


# b08627f3 04-May-2018 Murai Takashi <tmurai01@gmail.com>

Fix catching polymorphic type by value

Replace catching polymorphic type std::bad_alloc 'by value'
with 'by reference'.
Pointed by gcc8


# e1e6c124 13-Jul-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

BPackageWriter::Recompress(): Change param to BPositionIO*

Besides that this is a nicer interface, it allows us to get a the HPKG
header as a side effect of initializing the reader, thus preventing
seeking backward in the file. This makes "package recompress - <file>"
work.


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

BPackageWriter: Add BPositionIO support


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

package kit: Actually add support for B_HPKG_COMPRESSION_NONE

Until now we always declared in the HPKG header that the package file is
zlib compressed. For uncompressed files we would just store all
individual chunks uncompressed. Now we handle completely uncompressed
files slightly differently: We don't write the redundant chunk size
table anymore. The size savings are minor, but it makes the uncompressed
format read-streamable which may be handy.


# 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.


# cdfeba5a 08-Jul-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

BPackageWriter: Add Recompress()

Allows rewriting an existing package file with a different compression.


# 2fc2aebc 07-Jul-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

PackageWriterImpl: Move _Finish() impl to match order in header


# 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


# 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.


# fc198cc3 21-Nov-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

PackageWriteImpl: Report error when failing to read .PackageInfo

Fixes #10228.


# 3f40dcb6 25-Oct-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

PackageWriterImpl::_AttributeRemoved(): Update string cache

When removing a string attribute, decrement the referenced string's
usage count in the string cache. This fixes the potentially incorrect
usage counts in update mode. Not a serious problem, but it could lead
to only singly (or no longer) used strings to be written to the string
subsection instead of encoding them inline and thus to slightly greater
file sizes.


# c9ed1ea2 25-Oct-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

PackageWriterImpl: Fix package file heap leak on update

_Init(): In update mode remove the package attributes section and the
TOC section from the package file's heap. We write the updated sections
in Finish(); previously the space for the old sections would be leaked.
This was also the reason why updating haiku_loader would result in a
non-bootable image.


# 86cdd3f8 27-Sep-2013 Axel Dörfler <axeld@pinc-software.de>

PackageWriterImpl: improve error output.


# 695a1b24 04-Jul-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

repository writer: fix use of incorrect header size

The header size of the package file header was used, which resulted in
broken repository files.


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

Package/repository file format: Add a minor version header field

* Add minor_version to hpkg_header and hpkg_repo_header and make
heap_compression uint16.
* If the minor version of a package/repository file is greater than the
current one unknown attributes are ignored without error. This allows
introducing new harmless attributes without making the resulting files
unreadable for older package kit versions.


# 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.


# d59e0feb 20-May-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package: Suppress version mismatch errors where V1 is supported

* Add flags parameter to Init() of BPackageReader and friends.
* Introduce flag B_HPKG_READER_DONT_PRINT_VERSION_MISMATCH_MESSAGE and
don't print a version mismatch error when given.
* package extract/list: Use the new flag.


# 172f25fd 18-May-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

PackageWriterImpl: Fix reading the package-info in update mode


# 796343ed 18-May-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

Allow specifying the compression level for package creation

* Introduce BPackageWriterParameters which comprises all parameters
for package creation, currently flags and compression level. Such an
object can be passed to BPackageWriter::Init() and is passed on to
PackageWriterImpl and WriterImplBase.
* PackageFileHeapWriter: Add compressionLevel property and pass the
value on to ZlibCompressor.
* package add/create: Add options -0 ... -9 to specify the compression
level to be used.


# 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.


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

Some comment updates


# 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.


# 2c32402d 12-May-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package kit: internalize BPackageDataReader

It is no longer public (or even private) API. BPackageDataReaderFactory
returns a BAbstractBufferedDataReader instead. The advantage is that
the latter doesn't have hpkg format specific dependencies.


# 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.


# 0e35d5d2 12-Dec-2011 John Scipione <jscipione@gmail.com>

Change instances of wether in comments to whether. No functional change intended.


# f96d3856 16-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Removed left-over code


# 9968845d 16-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Use BStringList in package kit

Replace all instances of BObjectList<BString> by BStringList.


# 6ae0ecd4 11-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Add a package info "install-path" attribute

The attribute is intended for simplifying package building. The
package's install path will be used for the package's .self package
symlink, allowing installation to a temporary directory when building
the package.


# 7efa133c 11-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

BPackageWriter: Add SetCheckLicenses()

The default is still "true", but now it is possible to disable the
license check.


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

PackageWriterImpl::_AddEntry(): Fix update logic

* Don't only look up the entry attribute when the entry is implicit.
Look it up, when it is a directory instead. This aligns it the logic
with _UpdateCheckEntryCollisions().
* When the entry attribute exits and the entry is not implicit, add file
attributes, but not stat data. This also aligns the logic with
_UpdateCheckEntryCollisions(), which removes colliding attributes, but
keeps stat data.


# 420a5c3e 03-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Remove copy'n'paste left-over


# 4d639659 03-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Fix "package add" heap compacting

PackageWriterImpl::_CompactHeap(): Incorrectly used fHeapEnd instead of
the heap size. So the last copied chunk was too large.


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

PackageWriterImpl::_MoveHeapChunk(): better output


# 8ffba2a6 02-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Write uncompressed package file TOC, if necessary


# 00bc8e9c 02-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Add support for adding/updating package entries

Add flags parameter to BPackageWriter::Init() (and the private
implementation classes) to indicate that an existing package file shall
be updated instead of created. Currently that always happens in-place.


# de9e64b2 02-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Write uncompressed package attributes if necessary

When compression doesn't save space, using it nonetheless results in a
file that the reader complains about. So we fall back to writing an
uncompressed package attributes section in such a case.

The same still needs to be done for the TOC section.


# 443be501 02-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Use fHeapOffset instead of sizeof(hpkg_header)


# e6ebdaaf 02-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Move RegisterPackageInfo() to Finish()


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

PackageWriterImpl::_AddEntry(): Improve output

Print the relative path instead of only the leaf name.


# 8524dd36 01-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

SubPathAdder: Check for overflows, omit initial /


# 37880dd0 01-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Remove debug output


# 0f9a98a4 30-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Add optional FD parameter to AddEntry()

If a FD is specified, instead of using the file with the given the FD is
used. Allows for adding entries without first copying them into the
directory structure.


# 85e13d1e 30-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Remove the build platform work-arounds


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

Hard code "Public Domain" as acceptable license


# caa4217e 17-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

PackageWriterImpl: Build platform symlink issues

On a non-Haiku build platform map openat(), fstat(), and
FileDescriptorCloser to _kern_open(), _kern_read_stat(), and
BuildFileDescriptorCloser respectively, so symlinks can be opened and
stat()ed.


# 7162cff6 17-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

<build>package: attribute iteration, license dir

PackageWriterImpl:
* Iterate through attributes using fs_read_attr_dir() instead of
readdir(). Makes it work correctly on the build platform.
* On the build platform look up the system licenses in their source
directory rather than based on find_directory().


# d62ec0bd 16-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Fixed host build issues/warnings


# f195cdc8 16-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Removed left-over code


# 2021c984 16-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Use BStringList in package kit

Replace all instances of BObjectList<BString> by BStringList.


# f19957b8 11-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Add a package info "install-path" attribute

The attribute is intended for simplifying package building. The
package's install path will be used for the package's .self package
symlink, allowing installation to a temporary directory when building
the package.


# d7227dfa 11-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

BPackageWriter: Add SetCheckLicenses()

The default is still "true", but now it is possible to disable the
license check.


# 718fba99 03-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

PackageWriterImpl::_AddEntry(): Fix update logic

* Don't only look up the entry attribute when the entry is implicit.
Look it up, when it is a directory instead. This aligns it the logic
with _UpdateCheckEntryCollisions().
* When the entry attribute exits and the entry is not implicit, add file
attributes, but not stat data. This also aligns the logic with
_UpdateCheckEntryCollisions(), which removes colliding attributes, but
keeps stat data.


# 3095cb1b 03-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Remove copy'n'paste left-over


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

Fix "package add" heap compacting

PackageWriterImpl::_CompactHeap(): Incorrectly used fHeapEnd instead of
the heap size. So the last copied chunk was too large.


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

PackageWriterImpl::_MoveHeapChunk(): better output


# 6f785748 02-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Write uncompressed package file TOC, if necessary


# 327b38d6 02-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Add support for adding/updating package entries

Add flags parameter to BPackageWriter::Init() (and the private
implementation classes) to indicate that an existing package file shall
be updated instead of created. Currently that always happens in-place.


# 7b6bcdb1 02-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Write uncompressed package attributes if necessary

When compression doesn't save space, using it nonetheless results in a
file that the reader complains about. So we fall back to writing an
uncompressed package attributes section in such a case.

The same still needs to be done for the TOC section.


# 04258e47 02-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Use fHeapOffset instead of sizeof(hpkg_header)


# abbeb15a 02-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Move RegisterPackageInfo() to Finish()


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

PackageWriterImpl::_AddEntry(): Improve output

Print the relative path instead of only the leaf name.


# 82af91fb 01-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

SubPathAdder: Check for overflows, omit initial /


# 285f4a32 01-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Remove debug output


# 4512e8d5 30-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Add optional FD parameter to AddEntry()

If a FD is specified, instead of using the file with the given the FD is
used. Allows for adding entries without first copying them into the
directory structure.


# bd530a08 30-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Remove the build platform work-arounds


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

Hard code "Public Domain" as acceptable license


# 93211f33 17-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

PackageWriterImpl: Build platform symlink issues

On a non-Haiku build platform map openat(), fstat(), and
FileDescriptorCloser to _kern_open(), _kern_read_stat(), and
BuildFileDescriptorCloser respectively, so symlinks can be opened and
stat()ed.


# e272fb5d 17-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

<build>package: attribute iteration, license dir

PackageWriterImpl:
* Iterate through attributes using fs_read_attr_dir() instead of
readdir(). Makes it work correctly on the build platform.
* On the build platform look up the system licenses in their source
directory rather than based on find_directory().


# 14c34be2 16-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Fixed host build issues/warnings


# 33bc4425 12-Feb-2011 Oliver Tappe <zooey@hirschkaefer.de>

Largish adjustments to PackagerReaderImpl and package attribute
handling:
* package attributes are now compatible with the low level attribute
handling of other HPKG attributes (such that 'package dump' now shows
package attributes, too)
* dropped type names from hpkg format, the attributes were identified
by IDs already and this simplifies the code considerably. Type names
are now handled in BLowLevelPackageHandler only.
* instead of rolling their own mechanism, high-level package attributes
handling is now implemented via a corresonding set of
AttributeHandler-subclasses
* adjusted package writer to only write package attributes that are
needed (empty ones are left out)


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


# 91ebce66 10-Feb-2011 Oliver Tappe <zooey@hirschkaefer.de>

Some cleanup, no functional change
* typedef base classes as 'inherited' and use that instead of the
explicit base class name
* remove superfluous scopes in case blocks


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


# d77c6cd2 08-Feb-2011 Oliver Tappe <zooey@hirschkaefer.de>

* implemented checking of licenses, such that it is no longer possible
to create a package that refers to a license that is not a system
license or contained in the package
* added package-info flags (currently only approve_license and
system_package)
* adjusted package-reader/writer and pkgman accordingly

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


# 4ee7d007 08-Feb-2011 Oliver Tappe <zooey@hirschkaefer.de>

Cleanup:
* PackageWriterImpl no longer accesses members of WriterImplBase
directly, but uses getters/setters instead
* package attribute registration has been moved from PackageWriterImpl
to WriterImplBase, as it will be used in the same manner by the
RepositoryWriter


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


# f2022173 07-Feb-2011 Oliver Tappe <zooey@hirschkaefer.de>

Refactoring step towards implementation of RepositoryWriter:
* pulled commonly useful parts out of PackageWriterImpl into
WriterImplBase
* moved CachedStringTable and related methods into a separate class,
StringCache, in order to support having more than one string cache
per package file
* made package attribute section use a string cache, too, as that's
going to be very useful for repositories
* instead of writing package attributes directly, we now collect
corresponding PackageAttributes and write those later
* adjusted package reader accordingly


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


# aaf05784 07-Feb-2011 Oliver Tappe <zooey@hirschkaefer.de>

* some rearrangements and renames with respect to public/private
types and defines of HPKG
* added header, magic and version for haiku repository format

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


# fd9c0b33 04-Feb-2011 Oliver Tappe <zooey@hirschkaefer.de>

* added support for compressing the package attributes section to
PackageWriterImpl
* added my own copyright

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


# 6f0278cd 04-Feb-2011 Oliver Tappe <zooey@hirschkaefer.de>

Implemented reading of package info attributes from hpkg file
* added kernel-compatible datatypes for reading package info attribute
values (PackageInfoAttributeValue.h) - these will be used at a later
stage by the package-fs to transport those attributes to userland
when asked to do so (by ioctl)
* implemented parsing of package info attributes in PackageReaderImpl
* added support for compressed package attribute section to
PackageReaderImpl
* completed the writing of package info attributes in PackageWriterImpl
and fixed a couple of bugs exposed by parsing
* adjusted 'package list' to show the package info attributes as they
are found


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


# 68dc1eb6 01-Feb-2011 Oliver Tappe <zooey@hirschkaefer.de>

* implemented writing of package attributes to hpkg file

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


# 7fd711ef 31-Jan-2011 Oliver Tappe <zooey@hirschkaefer.de>

* refactored PackageWriter(Impl) to no longer print anything itself,
but publish that info through a BPackageWriterListener
* adjusted 'package create' to print a package summary by default and
more verbose info upon request.


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


# 15a5c3f7 31-Jan-2011 Oliver Tappe <zooey@hirschkaefer.de>

* follow hint by Axel: drop FDCloser and use shared class
FileDescriptorCloser instead


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40330 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


# e1e6c124809fae466b89b13ef1ecf87f8026d7fb 13-Jul-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

BPackageWriter::Recompress(): Change param to BPositionIO*

Besides that this is a nicer interface, it allows us to get a the HPKG
header as a side effect of initializing the reader, thus preventing
seeking backward in the file. This makes "package recompress - <file>"
work.


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

BPackageWriter: Add BPositionIO support


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

package kit: Actually add support for B_HPKG_COMPRESSION_NONE

Until now we always declared in the HPKG header that the package file is
zlib compressed. For uncompressed files we would just store all
individual chunks uncompressed. Now we handle completely uncompressed
files slightly differently: We don't write the redundant chunk size
table anymore. The size savings are minor, but it makes the uncompressed
format read-streamable which may be handy.


# 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.


# cdfeba5a1e49d0993e7ab6853c77392bbc10d3c4 08-Jul-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

BPackageWriter: Add Recompress()

Allows rewriting an existing package file with a different compression.


# 2fc2aebcba504f169142344ff04ae75fbb0e7ccb 07-Jul-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

PackageWriterImpl: Move _Finish() impl to match order in header


# 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


# 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.


# fc198cc3e49f7141d8217f09353d29d35856645b 21-Nov-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

PackageWriteImpl: Report error when failing to read .PackageInfo

Fixes #10228.


# 3f40dcb6b457b3560ba6e5c190e52b18b5531bc2 25-Oct-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

PackageWriterImpl::_AttributeRemoved(): Update string cache

When removing a string attribute, decrement the referenced string's
usage count in the string cache. This fixes the potentially incorrect
usage counts in update mode. Not a serious problem, but it could lead
to only singly (or no longer) used strings to be written to the string
subsection instead of encoding them inline and thus to slightly greater
file sizes.


# c9ed1ea292780eb14b2652974c2623cc7ed0574f 25-Oct-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

PackageWriterImpl: Fix package file heap leak on update

_Init(): In update mode remove the package attributes section and the
TOC section from the package file's heap. We write the updated sections
in Finish(); previously the space for the old sections would be leaked.
This was also the reason why updating haiku_loader would result in a
non-bootable image.


# 86cdd3f81a805c95f70035eb0be28a46ac3745f5 27-Sep-2013 Axel Dörfler <axeld@pinc-software.de>

PackageWriterImpl: improve error output.


# 695a1b248a193f9a403d76d3b32666240ee76fcc 04-Jul-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

repository writer: fix use of incorrect header size

The header size of the package file header was used, which resulted in
broken repository files.


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

Package/repository file format: Add a minor version header field

* Add minor_version to hpkg_header and hpkg_repo_header and make
heap_compression uint16.
* If the minor version of a package/repository file is greater than the
current one unknown attributes are ignored without error. This allows
introducing new harmless attributes without making the resulting files
unreadable for older package kit versions.


# 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.


# d59e0feb59b92ca19ecda2935369fd0fcc5a4f56 20-May-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package: Suppress version mismatch errors where V1 is supported

* Add flags parameter to Init() of BPackageReader and friends.
* Introduce flag B_HPKG_READER_DONT_PRINT_VERSION_MISMATCH_MESSAGE and
don't print a version mismatch error when given.
* package extract/list: Use the new flag.


# 172f25fdda75f2ab92089511c89f0ee37483504e 18-May-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

PackageWriterImpl: Fix reading the package-info in update mode


# 796343ed73b1707ed97e91e22b72b8ca81bcdbad 18-May-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

Allow specifying the compression level for package creation

* Introduce BPackageWriterParameters which comprises all parameters
for package creation, currently flags and compression level. Such an
object can be passed to BPackageWriter::Init() and is passed on to
PackageWriterImpl and WriterImplBase.
* PackageFileHeapWriter: Add compressionLevel property and pass the
value on to ZlibCompressor.
* package add/create: Add options -0 ... -9 to specify the compression
level to be used.


# 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.


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

Some comment updates


# 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.


# 2c32402da583cbd0a091a08308237592679c05c4 12-May-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package kit: internalize BPackageDataReader

It is no longer public (or even private) API. BPackageDataReaderFactory
returns a BAbstractBufferedDataReader instead. The advantage is that
the latter doesn't have hpkg format specific dependencies.


# 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.


# 0e35d5d2e5ef3d288e056d60ef1b16dc399eaa0c 12-Dec-2011 John Scipione <jscipione@gmail.com>

Change instances of wether in comments to whether. No functional change intended.


# f96d3856e1609756c637c9dede668353c52bf76c 16-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Removed left-over code


# 9968845d6988000a9235d7eb09031e80d997f31d 16-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Use BStringList in package kit

Replace all instances of BObjectList<BString> by BStringList.


# 6ae0ecd49a584abd81f3fa0fb0c0dd5b7a3ddb71 11-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Add a package info "install-path" attribute

The attribute is intended for simplifying package building. The
package's install path will be used for the package's .self package
symlink, allowing installation to a temporary directory when building
the package.


# 7efa133cb45708be6f134f3dc60a0426beaeb440 11-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

BPackageWriter: Add SetCheckLicenses()

The default is still "true", but now it is possible to disable the
license check.


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

PackageWriterImpl::_AddEntry(): Fix update logic

* Don't only look up the entry attribute when the entry is implicit.
Look it up, when it is a directory instead. This aligns it the logic
with _UpdateCheckEntryCollisions().
* When the entry attribute exits and the entry is not implicit, add file
attributes, but not stat data. This also aligns the logic with
_UpdateCheckEntryCollisions(), which removes colliding attributes, but
keeps stat data.


# 420a5c3e4231d05f9ad3b961764b5b05ba4f1ca9 03-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Remove copy'n'paste left-over


# 4d63965914e781125c29105ce20e9d89aa198d99 03-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Fix "package add" heap compacting

PackageWriterImpl::_CompactHeap(): Incorrectly used fHeapEnd instead of
the heap size. So the last copied chunk was too large.


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

PackageWriterImpl::_MoveHeapChunk(): better output


# 8ffba2a6cbd6f0bafeb7380bec6a73ab55e97c78 02-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Write uncompressed package file TOC, if necessary


# 00bc8e9cbd92f6a812d75ad75ca91c34beb67e72 02-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Add support for adding/updating package entries

Add flags parameter to BPackageWriter::Init() (and the private
implementation classes) to indicate that an existing package file shall
be updated instead of created. Currently that always happens in-place.


# de9e64b235bffc7bc03fa006dca67f9df0178105 02-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Write uncompressed package attributes if necessary

When compression doesn't save space, using it nonetheless results in a
file that the reader complains about. So we fall back to writing an
uncompressed package attributes section in such a case.

The same still needs to be done for the TOC section.


# 443be501c0c6da38a0efc1c803e8e53aa9cbdbfb 02-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Use fHeapOffset instead of sizeof(hpkg_header)


# e6ebdaaf210e003557a5587a477582210933bf9f 02-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Move RegisterPackageInfo() to Finish()


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

PackageWriterImpl::_AddEntry(): Improve output

Print the relative path instead of only the leaf name.


# 8524dd366041c1838536000b5deeed22c5ebbff4 01-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

SubPathAdder: Check for overflows, omit initial /


# 37880dd0a78fe2263fd742f72a21c1d9fa53ac20 01-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Remove debug output


# 0f9a98a4194cd773a14affbf7aba5de5a2800b81 30-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Add optional FD parameter to AddEntry()

If a FD is specified, instead of using the file with the given the FD is
used. Allows for adding entries without first copying them into the
directory structure.


# 85e13d1ef8117de0fd425578ac135295401bb79b 30-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Remove the build platform work-arounds


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

Hard code "Public Domain" as acceptable license


# caa4217eb51697290a7248e028e7803c31cfc5c3 17-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

PackageWriterImpl: Build platform symlink issues

On a non-Haiku build platform map openat(), fstat(), and
FileDescriptorCloser to _kern_open(), _kern_read_stat(), and
BuildFileDescriptorCloser respectively, so symlinks can be opened and
stat()ed.


# 7162cff6b0ace7dd53d95d732e17a9ae7ff5f2d2 17-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

<build>package: attribute iteration, license dir

PackageWriterImpl:
* Iterate through attributes using fs_read_attr_dir() instead of
readdir(). Makes it work correctly on the build platform.
* On the build platform look up the system licenses in their source
directory rather than based on find_directory().


# d62ec0bd759ccd6ba3c0efdfe7a9f61e954500da 16-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Fixed host build issues/warnings


# f195cdc8c0274c685edc51cc0513d6066da49fd6 16-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Removed left-over code


# 2021c9842e1e61a3bf0f6550725ec3baf53d44b1 16-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Use BStringList in package kit

Replace all instances of BObjectList<BString> by BStringList.


# f19957b8e5311ffc5b802032e4f24cdda81f9b50 11-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Add a package info "install-path" attribute

The attribute is intended for simplifying package building. The
package's install path will be used for the package's .self package
symlink, allowing installation to a temporary directory when building
the package.


# d7227dfa9e644112f7019d94b4611da400c6c884 11-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

BPackageWriter: Add SetCheckLicenses()

The default is still "true", but now it is possible to disable the
license check.


# 718fba99c819b419a8eccff713a3ff71b44a2ecb 03-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

PackageWriterImpl::_AddEntry(): Fix update logic

* Don't only look up the entry attribute when the entry is implicit.
Look it up, when it is a directory instead. This aligns it the logic
with _UpdateCheckEntryCollisions().
* When the entry attribute exits and the entry is not implicit, add file
attributes, but not stat data. This also aligns the logic with
_UpdateCheckEntryCollisions(), which removes colliding attributes, but
keeps stat data.


# 3095cb1bc9f5d9bafa4b5d2ead76449c99567c4a 03-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Remove copy'n'paste left-over


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

Fix "package add" heap compacting

PackageWriterImpl::_CompactHeap(): Incorrectly used fHeapEnd instead of
the heap size. So the last copied chunk was too large.


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

PackageWriterImpl::_MoveHeapChunk(): better output


# 6f785748aa1fef5bb193e17ff243794250004ac6 02-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Write uncompressed package file TOC, if necessary


# 327b38d69c8d9a128c64d0535f15b0274b51c51b 02-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Add support for adding/updating package entries

Add flags parameter to BPackageWriter::Init() (and the private
implementation classes) to indicate that an existing package file shall
be updated instead of created. Currently that always happens in-place.


# 7b6bcdb146b8ac24ef3569fcb152627f724e156c 02-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Write uncompressed package attributes if necessary

When compression doesn't save space, using it nonetheless results in a
file that the reader complains about. So we fall back to writing an
uncompressed package attributes section in such a case.

The same still needs to be done for the TOC section.


# 04258e474118bc6d00e704d058723aec6fcf193f 02-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Use fHeapOffset instead of sizeof(hpkg_header)


# abbeb15ac4f2b6524852c09a35db7b3b90b0cd3c 02-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Move RegisterPackageInfo() to Finish()


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

PackageWriterImpl::_AddEntry(): Improve output

Print the relative path instead of only the leaf name.


# 82af91fb0ecc92d000d8be513d71353961bffd71 01-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

SubPathAdder: Check for overflows, omit initial /


# 285f4a321ab6fbfc7988f37ef3ef9b64f0aadbc4 01-Jul-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Remove debug output


# 4512e8d5669716c2d0e41f6f117cb86635482ebc 30-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Add optional FD parameter to AddEntry()

If a FD is specified, instead of using the file with the given the FD is
used. Allows for adding entries without first copying them into the
directory structure.


# bd530a0800c184d4fcc0091fa4c7949697e58b1d 30-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Remove the build platform work-arounds


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

Hard code "Public Domain" as acceptable license


# 93211f331fa18d566cedcbf86ea6554af074ad96 17-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

PackageWriterImpl: Build platform symlink issues

On a non-Haiku build platform map openat(), fstat(), and
FileDescriptorCloser to _kern_open(), _kern_read_stat(), and
BuildFileDescriptorCloser respectively, so symlinks can be opened and
stat()ed.


# e272fb5dec8ed35de0ad8303f675c4d9602777c8 17-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

<build>package: attribute iteration, license dir

PackageWriterImpl:
* Iterate through attributes using fs_read_attr_dir() instead of
readdir(). Makes it work correctly on the build platform.
* On the build platform look up the system licenses in their source
directory rather than based on find_directory().


# 14c34be2e11541af33f8a19f620c66a28810acef 16-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Fixed host build issues/warnings


# 33bc4425be0b545ed3d0b7e7a9a873d31e5a0330 12-Feb-2011 Oliver Tappe <zooey@hirschkaefer.de>

Largish adjustments to PackagerReaderImpl and package attribute
handling:
* package attributes are now compatible with the low level attribute
handling of other HPKG attributes (such that 'package dump' now shows
package attributes, too)
* dropped type names from hpkg format, the attributes were identified
by IDs already and this simplifies the code considerably. Type names
are now handled in BLowLevelPackageHandler only.
* instead of rolling their own mechanism, high-level package attributes
handling is now implemented via a corresonding set of
AttributeHandler-subclasses
* adjusted package writer to only write package attributes that are
needed (empty ones are left out)


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


# 91ebce663d5f11e5763851ad131e55d4c020421b 10-Feb-2011 Oliver Tappe <zooey@hirschkaefer.de>

Some cleanup, no functional change
* typedef base classes as 'inherited' and use that instead of the
explicit base class name
* remove superfluous scopes in case blocks


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


# d77c6cd26a5cf3863ba4258a063d7d8645abf1e3 08-Feb-2011 Oliver Tappe <zooey@hirschkaefer.de>

* implemented checking of licenses, such that it is no longer possible
to create a package that refers to a license that is not a system
license or contained in the package
* added package-info flags (currently only approve_license and
system_package)
* adjusted package-reader/writer and pkgman accordingly

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


# 4ee7d007d6aa14cd7d9286e52dbb57580fd8f8f7 08-Feb-2011 Oliver Tappe <zooey@hirschkaefer.de>

Cleanup:
* PackageWriterImpl no longer accesses members of WriterImplBase
directly, but uses getters/setters instead
* package attribute registration has been moved from PackageWriterImpl
to WriterImplBase, as it will be used in the same manner by the
RepositoryWriter


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


# f202217364f40d170b7bf07b60a75457b275b0c1 07-Feb-2011 Oliver Tappe <zooey@hirschkaefer.de>

Refactoring step towards implementation of RepositoryWriter:
* pulled commonly useful parts out of PackageWriterImpl into
WriterImplBase
* moved CachedStringTable and related methods into a separate class,
StringCache, in order to support having more than one string cache
per package file
* made package attribute section use a string cache, too, as that's
going to be very useful for repositories
* instead of writing package attributes directly, we now collect
corresponding PackageAttributes and write those later
* adjusted package reader accordingly


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


# aaf05784d48abf7b2a24609ea200b29bc144a752 07-Feb-2011 Oliver Tappe <zooey@hirschkaefer.de>

* some rearrangements and renames with respect to public/private
types and defines of HPKG
* added header, magic and version for haiku repository format

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


# fd9c0b33616cfc25e833baa6e4a51deeee366634 04-Feb-2011 Oliver Tappe <zooey@hirschkaefer.de>

* added support for compressing the package attributes section to
PackageWriterImpl
* added my own copyright

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


# 6f0278cdc9a22a1e22c3ac3f480beffd6bb5fcff 04-Feb-2011 Oliver Tappe <zooey@hirschkaefer.de>

Implemented reading of package info attributes from hpkg file
* added kernel-compatible datatypes for reading package info attribute
values (PackageInfoAttributeValue.h) - these will be used at a later
stage by the package-fs to transport those attributes to userland
when asked to do so (by ioctl)
* implemented parsing of package info attributes in PackageReaderImpl
* added support for compressed package attribute section to
PackageReaderImpl
* completed the writing of package info attributes in PackageWriterImpl
and fixed a couple of bugs exposed by parsing
* adjusted 'package list' to show the package info attributes as they
are found


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


# 68dc1eb6adc2e36ec99677a03e20c42c5cc7c5f6 01-Feb-2011 Oliver Tappe <zooey@hirschkaefer.de>

* implemented writing of package attributes to hpkg file

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


# 7fd711ef9999af8ce8dc6c44509ee154230b8d90 31-Jan-2011 Oliver Tappe <zooey@hirschkaefer.de>

* refactored PackageWriter(Impl) to no longer print anything itself,
but publish that info through a BPackageWriterListener
* adjusted 'package create' to print a package summary by default and
more verbose info upon request.


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


# 15a5c3f7d91ab7657dc13deee1a18ef9e9c14567 31-Jan-2011 Oliver Tappe <zooey@hirschkaefer.de>

* follow hint by Axel: drop FDCloser and use shared class
FileDescriptorCloser instead


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40330 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