All platforms – Pending changes are now converted into checkouts before calculating merges.
This is a very important change to improve usability, but it might be surprising for Plastic long-term users.
== Motivation ==
Suppose you have foo.c modified in your workspace and then you merge from main/task001 where foo.c was also modified.
The merge didn't show foo.c as a conflict because the merge only considers the checkouts.
If you checkout foo.c then the merge preview showed the conflict.
The merge was still correct because changes were "promoted to checkouts" during the merge.
But, let's see a different example now: suppose you moved art/ into game-art/ locally and there were changes inside art/ in main/task001. The merge didn't consider your local changes and it would end up causing trouble.
We changed all this by simply "applying changes" before calculating the merge. This means any local "changed" will be converted into "checkout" and also that local moves, local deletes, will be put under control too (checkout for short).
It is an important change to ensure consistency and avoid corner cases.
== What are checkouts exactly ==
Plastic supports two ways of working:
* You can directly modify foo.c, then go to Pending Changes and checkin.
* Or you can checkout foo.c first, then modify, then checkin.
Checkouts are just a way to say Plastic "hey, I modified this file", or "hey, I moved this file this way", so it doesn't have to "guess" what happened. Plastic is very good guessing what you did by looking into the workspace and detecting changes, but it is even faster if it doesn't have to guess because "it knows" a change or a move happened.
Checkouts are not locks. You can checkout foo.c and it won't be locked at all. In fact, checkouts are stored locally and don't impose any performance hit at all.
Checkouts only lock files (a.k.a. exclusive checkouts) when the files are configured to be locked. This way, you can say all .png files must be locked on checkout, and when you checkout game.png it will be locked. Locks are stored on the server, although the performance hit is minimal.
Note for former Perforce users: Plastic checkouts are similar to p4 edit but without the performance hit.
Note for former Git users: Plastic checkouts are like adding something to the Git index.
== How it works ==
When you launch a merge, before actually calculating the merge in the server, your local changes will be converted to "controlled changes" a.k.a. checkouts.