Commit Graph
100 Commits
Author SHA1 Message Date
Ingo Weinhold 03aed3a314 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.
2011-11-25 06:19:27 +01:00
Ingo Weinhold 1cf4d082ab More abstraction in GenericIndexIterator
* Move tree node operations to a subpolicy TreePolicy.
* Add a GenericIndexIteratorTreePolicy templatized over the policy,
  implementing the tree policy for the standard indices.
2011-11-25 06:19:27 +01:00
Ingo Weinhold af1cc77849 QueryPolicy::NodeGetAttribute(): Get the type too 2011-11-25 06:19:26 +01:00
Ingo Weinhold 28269859c8 Remove unused PackageNodeAttribute::fParent 2011-11-25 06:19:25 +01:00
Ingo Weinhold 8b07f87a91 compareKeys(): Also handle B_MIME_STRING_TYPE 2011-11-25 06:19:25 +01:00
Ingo Weinhold a54f7dc250 Move B_MIME_STRING_TYPE to <TypeConstants.h> 2011-11-25 06:19:24 +01:00
Ingo Weinhold 2c5c1adc91 Remove TwoKeyAVLTree from kernel utils again
It's not ready for shared use yet.
2011-11-25 06:19:23 +01:00
Ingo Weinhold 6cc3dcdb9b Move helper function out of QueryParser.h
They live in the new QueryParserUtils.{h,cpp} now.
2011-11-25 06:19:23 +01:00
Ingo Weinhold 8fd0aea602 AVLTreeMap fixes
* AVLTreeMap::_GetKey(): Change return type from const Key& to Key, so
  the strategy can do that as well and doesn't have have a Key object in
  the node.
* Fix the Auto strategy: It was using the undefined _GetKey() instead
  of GetKey().
2011-11-25 06:19:22 +01:00
Ingo Weinhold c5c7c2d817 Build fix 2011-11-25 06:19:21 +01:00
Ingo Weinhold ed81de869e Add last modified index support
* Add class LastModifiedIndex.
* Create and add an instance of it in Volume::Mount().
2011-11-25 06:19:21 +01:00
Ingo Weinhold e708cdd90f Removed left-over commented code 2011-11-25 06:19:20 +01:00
Ingo Weinhold ab6a1e0f74 QueryParser: The last_modified index is time_t
* Changed value type from B_INT64_TYPE to B_INT32_TYPE.
* Changed QueryPolicy::NodeGetLastModifiedTime() return value from
  bigtime_t to time_t.
2011-11-25 06:19:20 +01:00
Ingo Weinhold 3793289c21 Add size index support
* Add class SizeIndex.
* Create and add an instance of it in Volume mount.
2011-11-25 06:19:19 +01:00
Ingo Weinhold 0d988526bc GenericIndexIterator: Add node change helpers
Add NodeChangeBegin()/NodeChangeEnd() methods that can be used by the
index when the respective node attribute has changed. They make sure
that the iterator doesn't move with the node, should it be inserted into
the index at a different position.
2011-11-25 06:19:19 +01:00
Ingo Weinhold 304eaea680 Add comment 2011-11-25 06:19:18 +01:00
Ingo Weinhold 84989de15b GenericIndexIterator::SetTo(): Find fuzzily
Use TwoKeyAVLTree::FindFirstClosest() instead of FindFirst(), so, if the
value isn't in the index, we find the closest greater value. That's the
semantics Index::InternalFind() is expected to have.
2011-11-25 06:19:17 +01:00
Ingo Weinhold abaf82e5a9 GenericIndexIterator: Fix NameIndex dependency
Next() was still copying the name. Add a GetNodeValue() method to the
policy that fetches the value instead.
2011-11-25 06:19:17 +01:00
Ingo Weinhold f4bb0389e8 TwoKeyAVLTree: Add FindFirstClosest() 2011-11-25 06:19:16 +01:00
Ingo Weinhold e88759a518 Small cleanup 2011-11-25 06:19:16 +01:00
Ingo Weinhold 24c2d0cc09 Refactor NameIndexIterator into template class
Create template class GenericIndexIterator from NameIndexIterator.
2011-11-25 06:19:15 +01:00
Ingo Weinhold 182e58f709 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).
2011-11-25 06:19:15 +01:00
Ingo Weinhold ac490e3bb9 PackageLinkSymlink: Init fLinkPath in constructor 2011-11-25 06:19:14 +01:00
Ingo Weinhold 670b0d106a ~NameIndex(): Make more robust
Remove the listener only, if it was registered.
2011-11-25 06:19:13 +01:00
Ingo Weinhold 8373bcd169 Name::Index(): Fix initialization order
Add the node listener directly after calling the base class Init().
Otherwise, on error, the we could try to remove the listener although it
wasn't added in the first place.
2011-11-25 06:19:13 +01:00
Ingo Weinhold 989addc209 Simplify [Abstract]IndexIterator interface
* Remove Current() and Previous() and add a HasNext() instead.
* Reimplement NameIndexIterator. It directly works with tree nodes
  instead of using an iterator, now.
2011-11-25 06:19:12 +01:00
Ingo Weinhold dcc6ab5408 Fix NameIndexPrimaryKeyCompare
It was actually returning whether the names where not equal.
2011-11-25 06:19:12 +01:00
Ingo Weinhold 502a5e2388 QueryParser: Explicitly suspend/resume iterators
Extended policy by IndexIteratorSuspend() and IndexIteratorResume()
methods that are invoked for the index iterator by Query::GetNextEntry()
after entering respectively before exiting.
2011-11-25 06:19:11 +01:00
Ingo Weinhold 004b3604a0 AVLTreeMap/TwoKeyAVLTree: More access to nodes
both:
* Add Previous()/Next().
* Add Insert() version that returns a Node* instead of an Iterator.
* Add Remove() version that takes a Node* instead of a key.

TwoKeyAVLTree:
* Add GetIterator() version that takes an additional Node*, i.e.
  initializing an iterator to point to the node.
* Add Iterator::CurrentNode().
2011-11-25 06:19:10 +01:00
Ingo Weinhold e7346707c9 AVLTree: Add Previous()/Next() 2011-11-25 06:19:10 +01:00
Ingo Weinhold 5deb28d6d2 Cleanup 2011-11-25 06:19:09 +01:00
Ingo Weinhold b4a9359d84 Automatic whitespace cleanup 2011-11-25 06:19:09 +01:00
Ingo Weinhold 1fb71f8739 Implement query FS hooks, add empty index FS hooks 2011-11-25 06:19:08 +01:00
Ingo Weinhold 617ac41c60 Add Query class and query management in Volume 2011-11-25 06:19:08 +01:00
Ingo Weinhold 331b89b3a5 Add NameIndex class and create instance in Volume 2011-11-25 06:19:07 +01:00
Ingo Weinhold 4791f5ebb3 Add Index base class and index table in Volume 2011-11-25 06:19:06 +01:00
Ingo Weinhold ec59ac7515 Add a global node listener mechanism 2011-11-25 06:19:06 +01:00
Ingo Weinhold 856c114ca0 Add TwoKeyAVLTree to kernel utils
This is a tree implementation with elements with primary and secondary
key. The code is a cleaned up version of ramfs's implementation. ramfs
doesn't use this version yet.
2011-11-25 06:19:05 +01:00
Ingo Weinhold 9d698c4573 Create a generalized version of BFS's query code
The new version is templatized over a QueryPolicy which provides the
interface to the file system specifics.
2011-11-25 06:19:05 +01:00
Ingo Weinhold 239ce182ab Fix loading the resolvable compatible version 2011-11-25 06:19:04 +01:00
Ingo Weinhold 7e0f4e5703 Fix Dependency version comparisons 2011-11-25 06:19:04 +01:00
Ingo Weinhold e7c648e06d 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.
2011-11-25 06:19:03 +01:00
Ingo Weinhold 420a5c3e42 Remove copy'n'paste left-over 2011-11-25 06:19:02 +01:00
Ingo Weinhold 4d63965914 Fix "package add" heap compacting
PackageWriterImpl::_CompactHeap(): Incorrectly used fHeapEnd instead of
the heap size. So the last copied chunk was too large.
2011-11-25 06:19:02 +01:00
Ingo Weinhold f4417e14fa PackageWriterImpl::_MoveHeapChunk(): better output 2011-11-25 06:19:01 +01:00
Ingo Weinhold 8ffba2a6cb Write uncompressed package file TOC, if necessary 2011-11-25 06:19:00 +01:00
Ingo Weinhold 2fac6eaa60 Add "package add" command. 2011-11-25 06:19:00 +01:00
Ingo Weinhold 723336fe52 Move directory iteration helper to own file 2011-11-25 06:18:59 +01:00
Ingo Weinhold cba1e22376 Move PackageWriterListener to separate file 2011-11-25 06:18:59 +01:00
Ingo Weinhold 00bc8e9cbd 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.
2011-11-25 06:18:58 +01:00
Ingo Weinhold de9e64b235 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.
2011-11-25 06:18:57 +01:00
Ingo Weinhold 443be501c0 Use fHeapOffset instead of sizeof(hpkg_header) 2011-11-25 06:18:57 +01:00
Ingo Weinhold e6ebdaaf21 Move RegisterPackageInfo() to Finish() 2011-11-25 06:18:56 +01:00
Ingo Weinhold 5bb68d85fc Add PackageReaderImpl heapOffset/Size getters 2011-11-25 06:18:56 +01:00
Ingo Weinhold 78811461b1 Add BLowLevelPackageContentHandler section hooks
* Add hooks HandleSectionStart() and HandleSectionEnd(). They are
  invoked to bracket package file section, so the handler can
  discriminate which section the attributes belong to.
  HandleSectionStart() features a return parameter _handleSection, which
  allows to handler to pick which sections it wants to handle.
* "package dump" does now print the section names.
2011-11-25 06:18:55 +01:00
Ingo Weinhold f9caa05c2a Define IDs for package section 2011-11-25 06:18:55 +01:00
Ingo Weinhold 1dd17fa77f Add Array.h and RangeArray.h build headers 2011-11-25 06:18:54 +01:00
Ingo Weinhold 29d45d5ee7 Add RangeArray utility class
Templatized class for managing a set of sorted non-overlapping integer
ranges. Merges and splits ranges as necessary.
2011-11-25 06:18:53 +01:00
Ingo Weinhold 26589141fc Declare Array destructor inline 2011-11-25 06:18:53 +01:00
Ingo Weinhold 9395c27062 Move Debugger's Array class to headers/shared 2011-11-25 06:18:52 +01:00
Ingo Weinhold b6d9fe9a6b PackageWriterImpl::_AddEntry(): Improve output
Print the relative path instead of only the leaf name.
2011-11-25 06:18:52 +01:00
Ingo Weinhold 8524dd3660 SubPathAdder: Check for overflows, omit initial / 2011-11-25 06:18:51 +01:00
Ingo Weinhold 2fce201893 BLowLevelPackageContentHandler interface extension
HandleAttributeDone(): Add parentToken parameter.
2011-11-25 06:18:50 +01:00
Ingo Weinhold 37880dd0a7 Remove debug output 2011-11-25 06:18:49 +01:00
Ingo Weinhold d06e885aaf Print relative paths in error messages 2011-11-25 06:18:48 +01:00
Ingo Weinhold 37d971d3cc Support for extracting only specified entries 2011-11-25 06:18:48 +01:00
Ingo Weinhold 376bc55c27 Missing include 2011-11-25 06:18:47 +01:00
Ingo Weinhold 006056b7ee Add package extract -i option
Allows to specify an alternate location for the .PackageInfo.
2011-11-25 06:18:47 +01:00
Ingo Weinhold 93fc03aa52 Remove debug output 2011-11-25 06:18:46 +01:00
Ingo Weinhold 7395bf8a76 Add create -i option for specifying a package info 2011-11-25 06:18:45 +01:00
Ingo Weinhold 0f9a98a419 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.
2011-11-25 06:18:45 +01:00
Ingo Weinhold cd8f03a8cc BPackageInfo::ReadFromConfigFile() BFile& version 2011-11-25 06:18:44 +01:00
Ingo Weinhold d046296e85 Improve FileDescriptorCloser
* Add SetTo()/Unset() methods and no-argument constructor.
* Detach() returns the FD now.
2011-11-25 06:18:44 +01:00
Ingo Weinhold efb6462777 Cleanup 2011-11-25 06:18:43 +01:00
Ingo Weinhold b07fd63144 Add missing "cache" shine-through directory 2011-11-25 06:18:43 +01:00
Ingo Weinhold 85e13d1ef8 Remove the build platform work-arounds 2011-11-25 06:18:42 +01:00
Ingo Weinhold 02982802e6 Disable function remapping via macros
STL fstream::open() is used, so the macros break the build.
2011-11-25 06:18:41 +01:00
Ingo Weinhold 55bc371993 Wrap POSIX FD functions in libroot_build
This makes opening symlinks work universally in the build system tools.
Two mechanisms have been implemented, both of which don't always work.
The first is remapping via preprocessor macros. This fails where equally
named methods are used (e.g. STL fstream::open()). The other is using
hidden functions in the new libroot_build_function_remapper.a that is
linked into everything that is linked against libroot_build.so. This one
fails for functions that are defined inline in headers (Linux/glibc does
that). Together they seem to cover our build system needs ATM.
2011-11-25 06:18:41 +01:00
Ingo Weinhold 0fbcad54be Add helper is_unknown_or_system_descriptor() 2011-11-25 06:18:40 +01:00
Ingo Weinhold 640b4ed97d _kern_read_link() ignored the path 2011-11-25 06:18:40 +01:00
Ingo Weinhold c29492a252 Fix gcc 2 build by making Parser a friend 2011-11-25 06:18:39 +01:00
Ingo Weinhold e6466c9a34 package extract: Delay setting node permissions
In HandleEntry() create the file/directory with sufficient permissions
for the user and set the archived permissions in HandleEntryDone(). This
makes sure child attributes and entries can be created.
2011-11-25 06:18:38 +01:00
Ingo Weinhold f2db3c439d .OPD -> .PackageInfo conversion tool 2011-11-25 06:18:38 +01:00
Ingo Weinhold 4ebd3de828 Support package info [source] URL attributes 2011-11-25 06:18:37 +01:00
Ingo Weinhold 4b6a3a9c5f Change source URL package info attribute name
Use "-" instead of "_".
2011-11-25 06:18:36 +01:00
Ingo Weinhold 029f6d0d05 Simplify BPackageInfo::Parser::_Parse() further
* Match the attribute in a loop, use an attribute ID switch, do the
  "seen" checks without the switch.
* Explicitly handle the case when encountering an unknown attribute.
2011-11-25 06:18:36 +01:00
Ingo Weinhold 208b212c56 Simplify BPackageInfo::Parser::_Parse()
This also fixes the memory leak due to the previously used on-stack
BObjectLists not having been defined owning the elements.
2011-11-25 06:18:35 +01:00
Ingo Weinhold 3a802b3d7f Add URL/source URL hpkg package attributes 2011-11-25 06:18:35 +01:00
Ingo Weinhold eb7e89518a Add url and sourceURL properties to BPackageInfo
Also extend the parser to accept "url" and "source-url" attributes.
2011-11-25 06:18:34 +01:00
Ingo Weinhold 1338e7b6ae Make .PackageInfo more driver-settings-ish
* Use braces instead of brackets for lists.
* Semicolons and newlines separate items now. Remove handling for comma.
* Allow '\'' as quotation character.
* Remove assignment after variable name.

This should make the .PackageInfo format driver settings compatible, but
not vice versa. It is still stricter.
2011-11-25 06:18:33 +01:00
Ingo Weinhold baa3cc3ca3 Extract architecture from package file 2011-11-25 06:18:33 +01:00
Ingo Weinhold 0da8142d99 Add architecture property to Package 2011-11-25 06:18:32 +01:00
Ingo Weinhold bc7e181374 Small cleanup 2011-11-25 06:18:32 +01:00
Ingo Weinhold c53e9146c2 Allow single-element string/flag lists without []
As syntactic sugar string and flag lists no longer need to be enclosed
in brackets when they have exactly one element.
2011-11-25 06:18:31 +01:00
Ingo Weinhold 2df5441165 Remove "copyright" and "license" keywords
There's "copyrights" and "licenses" which can be used.
2011-11-25 06:18:30 +01:00
Ingo Weinhold 53da7df201 Small cleanup 2011-11-25 06:18:30 +01:00
Ingo Weinhold c5909fb0d2 Add compatible version support to packagefs 2011-11-25 06:18:29 +01:00
Ingo Weinhold 5c42c97abb Print the resolvables' compatible version 2011-11-25 06:18:29 +01:00
Ingo Weinhold c719d46563 Support for reading compatible version attribute 2011-11-25 06:18:28 +01:00
Ingo Weinhold 9e93bb4bfc Write resolvable compatible version to the package
To avoid a clash with the regular version or an extra attribute level we
use the "package:provides.compatible" package attribute instead of
"package:version.major".
2011-11-25 06:18:27 +01:00