#
564f56b1 |
|
20-Jul-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Fix node handling on package addition/removal * UnpackingLeafNode: Add a fFinalPackageNode attribute. It is set when the node is about to be removed and will point to the node's previous head package node and be used in its stead. From the perspective of the FS hooks this leaves the node in an unchanged state. * Unpacking[Leaf,Directory]Node: - Add WillBeFirstPackageNode(), returning whether the given package node would become the head package node when added. - Add PrepareForRemoval() which removes all package nodes. In case of UnpackingLeafNode it also sets fFinalPackageNode. - Add CloneTransferPackageNodes(). It is only implemented for UnpackingLeafNode. It clones the node, transfers all package nodes to the clone and sets fFinalPackageNode on this node. * Volume::_{Add,Remove}PackageNode(): Solved the following TODO: When a package is added or removed and a file present in both the added/removed package and another package with the version in the former having precedence, we have to remove the node (leaving it unchanged) and replace it by a new node. This prevents clients having the node opened or mapped from suddenly seeing different data. It also fixes unbalanced calls to PackageNode::VFSInit()/VFSUninit() which would result in file descriptors to package files being leaked.
|
#
f391c9b0 |
|
11-Jul-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Add UnpackingNode::IsOnlyPackageNode() It returns whether the given package node is the only package node attached to that node.
|
#
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.
|
#
fcdac386 |
|
23-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Add Node::Init() flags parameter * Add Node::Init() flags: - NODE_FLAG_KEEP_NAME: Take over ownership of the name. - NODE_FLAG_CONST_NAME: Don't copy the name -- it's a constant that lives at least as long as the object. * Remove Init() implementations in derived classes that just call the base class version.
|
#
f33a6b76 |
|
23-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
UnpackingDirectory: Remove unnessary methods Remove Read() and ReadSymlink() methods which are already implemented in Directory.
|
#
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.
|
#
564f56b15075b0d15349ebfcc24f07b33ce109a0 |
|
20-Jul-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Fix node handling on package addition/removal * UnpackingLeafNode: Add a fFinalPackageNode attribute. It is set when the node is about to be removed and will point to the node's previous head package node and be used in its stead. From the perspective of the FS hooks this leaves the node in an unchanged state. * Unpacking[Leaf,Directory]Node: - Add WillBeFirstPackageNode(), returning whether the given package node would become the head package node when added. - Add PrepareForRemoval() which removes all package nodes. In case of UnpackingLeafNode it also sets fFinalPackageNode. - Add CloneTransferPackageNodes(). It is only implemented for UnpackingLeafNode. It clones the node, transfers all package nodes to the clone and sets fFinalPackageNode on this node. * Volume::_{Add,Remove}PackageNode(): Solved the following TODO: When a package is added or removed and a file present in both the added/removed package and another package with the version in the former having precedence, we have to remove the node (leaving it unchanged) and replace it by a new node. This prevents clients having the node opened or mapped from suddenly seeing different data. It also fixes unbalanced calls to PackageNode::VFSInit()/VFSUninit() which would result in file descriptors to package files being leaked.
|
#
f391c9b0eacd77a8fa58a955050f7b9063e547d4 |
|
11-Jul-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Add UnpackingNode::IsOnlyPackageNode() It returns whether the given package node is the only package node attached to that node.
|
#
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.
|
#
fcdac38641324da5f35f398d345c33c3fa12d920 |
|
23-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Add Node::Init() flags parameter * Add Node::Init() flags: - NODE_FLAG_KEEP_NAME: Take over ownership of the name. - NODE_FLAG_CONST_NAME: Don't copy the name -- it's a constant that lives at least as long as the object. * Remove Init() implementations in derived classes that just call the base class version.
|
#
f33a6b765af4eb00a5ad43df51411b2c007180d8 |
|
23-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
UnpackingDirectory: Remove unnessary methods Remove Read() and ReadSymlink() methods which are already implemented in Directory.
|
#
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.
|