Transformable workspaces: Implemented transformer rules, explained below:
== Transformer rules ==
* The workspace content can be locally transformed based on some rules. It means, workspace items can be moved to different locations or even not loaded.
Two kind of rules are currently supported:
=== Move rules ===
* This rule moves a controlled path to a different location. The source path and the parent folder of the destination path must be also controlled.
* Parts of one repository can be loaded inside a different repository without any restriction.
mv /Game /TnT/Game
mv /src/libs/nh3 /nh3
=== Remove rules ===
* This rule avoids loading certain parts of the tree. The specified path must be a controlled path.
== Transformer rules: How to use them ==
* These rules are specified in a file named 'plastic.transformerrules' inside the workspace folder named '.plastic' (it must be manually created first).
* After editing the file to add, remove or change any rule, an update operation must be manually executed to make the workspace changes effective (forgetting the update operation after editing the file can lead to weird issues).
* There cannot be pending changes in the workspace when editing the rules file.
== Transformer rules: Current status ==
* This functionality is still under development although a standard working cycle can be normally performed. The most common operations are supported: add, rm, co, unco, ci, merge, status, ls, etc.
=== Not supported scenarios with transformer rules ===
* Fast-update operation.
* Update with controlled pending changes.
* Cloaked functionality.
* Merge inside rm rules.
=== Known issues ===
* The 'unco' operation of a local delete operation with a move rule inside cannot be completed. This issue can be workarounded by running a standard update once there aren't controlled changes in the workspace.
* The edited xlinks are automatically checked in when they contain a transfomed item with changes inside it.
* The 'Retry update' or 'Update forced' buttons from the 'Update report' view can lead to an uncontrolled exception if message says that some rule couldn't be applied. A partial update (unrecommended operation) from the command line could end up with the same error.
* A directory can be kept as checked out after a merge operation if a replace operation involves a transfomed moved item (the move rule must involve different parents).
=== Restrictions ===
* The xlinks cannot be moved by transformer rules. Example:
mv /src/xlink /xlink
* The tranformer rules cannot modify an already applied rule. Example:
mv /src/foo.c /src/bar.c mv /src /source
* The rm rules cannot be applied when they contain the source or destination of a mv rule. Example:
mv /src/foo.c /doc/foo.c rm /src or rm /doc
* The rm operation cannot be applied when it contains the source or destination of a mv rule. Example:
mv /src/foo.c /doc/foo.c $cm rm src
* The transformed moved nodes cannot be moved again. Example:
mv /src/foo.c /doc/foo.c $cm mv doc/foo.c foo.c
Command line client: The fast-update operation was failing when it had to update an xlink whose target repository has changed (the relative server option). Fixed.
Merge operation: The recursive merge could fail when multiple intermediate merges calculate the same writable xlink to be copied (added). Fixed.