Release Notes
8.0.16.3651: Oct 23 2019
All platforms - Plastic: We're improving the Branch Explorer layout! Until now, every developer would see the same chart when they open the Branch Explorer view. That's not entirely helpful because not everyone pays attention to the same things at the same time. That's why we decided to reorder the branches according to the current workspace status.
Your current workspace branch (as well as their parents and children) will always appear at the top of the chart -this allows you to remove clutter and see your current branch in a more meaningful context.
Integrated branches will sink to the bottom of the chart. Since those branches are already merged into main, they aren't likely to be active anymore.
Finally, all branches will be sorted according to these criteria:
* Branches that are higher up in the hierarchy will also be up in the chart
* Branches with a more recent activity will appear at the top
* Branches with a longer life span will appear at the top
To try out this new layout, simply add the following property in your client.conf file:
<DynamicBranchExplorerLayout>yes</DynamicBranchExplorerLayout>
We'd really appreciate your feedback! Let us know what would you want the Branch Explorer layout to look like in the forum thread.
All platforms - Plastic: Branch Explorer now stores configuration per workspace!
This is a huge change in usability, and something we should have done eons ago.
This affects the GUIs in all platforms: Windows, Linux and macOS.
Now every workspace remembers its Branch Explorer configuration, instead of it being global to all workspaces.
This is a huge change and worth an upgrade :-) Let me tell you about the details if you are interested!
* Branch Explorer configuration used to be stored in the standard application configuration folder. Typically, this is "%LOCALAPPDATA%\plastic4\branchexplorer.cfg" on Windows, "$HOME/.plastic4/branchexplorer.conf" on GNU/Linux and macOS.
* But now, it will be stored in ".plastic/plastic.branchexplorer" in the workspace root.
* The branch explorer settings that are affected are the date filters, the “Only relevant” flag, all the “Display Options” and everything under “Filters and conditional format”.
The upgrade will happen as follows: after upgrading, when you open the branch explorer, its configuration will be read from the old configuration file, but from that point onwards it will be written and read from the new configuration file.
All platforms - Server triggers: the before-mklabel and after-mklabel have two new environment variables available: PLASTIC_CHANGESET_NUMBER and PLASTIC_CHANGESET_OWNER. The former indicates the number of the labeled changeset. The latter, the owner of that changeset. We hope you find it useful in your triggers!
DevOps: trunk-bot will pass a new property to the underlying Continuous Integration system to clearly identify whether the CI job is triggered in the 'Plan for build & test a branch' stage or 'Plan to run after checking-in a branch' stage, if any. This is useful when the same CI job is used for both stages, but we need to identify which stage launched the job to perform different build actions.
Example with Jenkins: when mergebot triggers a job in Jenkins, it will pass a new parameter to the Jenkins job called PLASTICSCM_MERGEBOT_STAGE. Its possible values are:
* pre -> the job was triggered in the 'Plan for build & test a branch' stage.
* post -> the job was triggered in the 'Plan to run after checking-in a branch' stage.
DevOps: We added a new configuration check to trunk-bot before it starts processing branches: If the 'Resolved' value for the Plastic status attribute is the same as the 'Merged' value, the trunk-bot won't start and it will log the error in the appropriate log file. We implemented this to prevent trunk-bot to enter in an infinite loop of branch polling, overloading plastic server's CPU.
The same restriction applies to the 'Resolved' and 'Failed' values.
All platforms - DevOps: The Jenkins mergebot plugin failed to build plans if the Jenkins worskpace path contained whitespaces. This is fixed now!
Windows - Plastic: We removed the now unnecessary "Run fast update" option from Preferences > Other options.
We need to do some rework on fast-update, and while it continues working, we consider it is best to simply hide it, so users don't select it without really knowing what it is about.

All platforms - Plastic: We improved the Undo Checkout operation when executed from the Workspace Explorer. Now:
* You can undo changed files when you're working on a label.
* When the operation fails, the item is not left checked out anymore.
* You can undo a changed file under a readonly Xlink.
All platforms - Server: Sometimes concurrent check-in operations that affected the same branch weren't aware of each other. This resulted in a two-headed branch. It happened in the following scenario:
* Liam and Emma are working on branch /main/task1.
* Liam is working out of date on changeset 4.
* Emma is working on changeset 5, the branch head.
* Liam merged his changes with the head changes and checks everything in.
* At the same time, Emma checks in her changes (she doesn't need a merge since she's working on the branch head).
* The simultaneous check-in wasn't properly handled, leaving the branch with two head changesets.
Now the server detects the concurrent check-in. One of them will fail, letting the user know that the branch is currently locked.
Merge: Solved an issue in merge and locked files.
Let's better explain it with an example:
* We have 2 file conflicts to resolve during a merge.
* The first file is merged correctly.
* The second one fails because the file is being used by another process (locked).
* Then, the first file shows up again as pending to be merged.
We fixed this :-)
Windows - Plastic: Your preferred maximized toolbar width was lost if you closed the application with the toolbar minimized. We fixed it! The state is now correctly restored on application startup. We also increased the default toolbar width slightly, so that the main actions all fit on single lines.
Windows - Plastic: When you select a file with no changes in the new Code Review window, you get "An unexpected error has occurred". Now it's fixed.
All platforms - Client core: Fixed some issues to deal with failing proxy servers.
When a client is using a Proxy Server (a.k.a. cache server) and the proxy suddenly becomes unreachable, the client was unable to disable it and kept trying to reach it on every data call, making the resulting experience slow.
We changed that, so that now proxies are properly disabled in each client session after the client detects the first failure.
We also removed a retry in the calls to the proxies: to disable a proxy (that was not even working) 5 calls needed to fail. This was very old code that was not even needed anymore because now the network code can handle retries (more on this later).
Finally, the proxies only support remoting protocol instead of plasticproto, but every single connection was trying to use plasticproto first, slowing down the whole thing.
A note on retries: suppose you were successfully downloading data from a proxy, and a second later the proxy is no longer reachable. Then, the client will try to reconnect (provided there was a recent successful connection) up to 10 times as follows in the next log. It can take up to 30 seconds to complete.
>tail -f plastic.log.txt |grep InvokeMethodRetry 2019-10-18 13:34:44,334 21 (null) (null) (null) DEBUG InvokeMethodRetry - HasToHandleSocketException. SocketError: ConnectionRefused. Exception: No connection could be made because the target machine actively refused it 127.0.0.1:8888 2019-10-18 13:34:44,342 21 (null) (null) (null) INFO InvokeMethodRetry - plastic://localhost:8888/CacheHandler.GetObjectsData waiting 2000 ms before retrying the connection 2019-10-18 13:34:47,346 21 (null) (null) (null) DEBUG InvokeMethodRetry - HasToHandleSocketException. SocketError: ConnectionRefused. Exception: No connection could be made because the target machine actively refused it 127.0.0.1:8888 2019-10-18 13:34:47,346 21 (null) (null) (null) INFO InvokeMethodRetry - plastic://localhost:8888/CacheHandler.GetObjectsData waiting 5000 ms before retrying the connection 2019-10-18 13:34:53,349 21 (null) (null) (null) DEBUG InvokeMethodRetry - HasToHandleSocketException. SocketError: ConnectionRefused. Exception: No connection could be made because the target machine actively refused it 127.0.0.1:8888 2019-10-18 13:34:53,349 21 (null) (null) (null) INFO InvokeMethodRetry - plastic://localhost:8888/CacheHandler.GetObjectsData waiting 1000 ms before retrying the connection 2019-10-18 13:34:55,352 21 (null) (null) (null) DEBUG InvokeMethodRetry - HasToHandleSocketException. SocketError: ConnectionRefused. Exception: No connection could be made because the target machine actively refused it 127.0.0.1:8888 2019-10-18 13:34:55,353 21 (null) (null) (null) INFO InvokeMethodRetry - plastic://localhost:8888/CacheHandler.GetObjectsData waiting 10000 ms before retrying the connection 2019-10-18 13:35:06,358 21 (null) (null) (null) DEBUG InvokeMethodRetry - HasToHandleSocketException. SocketError: ConnectionRefused. Exception: No connection could be made because the target machine actively refused it 127.0.0.1:8888 2019-10-18 13:35:06,359 21 (null) (null) (null) INFO InvokeMethodRetry - plastic://localhost:8888/CacheHandler.GetObjectsData waiting 1000 ms before retrying the connection 2019-10-18 13:35:08,362 21 (null) (null) (null) DEBUG InvokeMethodRetry - HasToHandleSocketException. SocketError: ConnectionRefused. Exception: No connection could be made because the target machine actively refused it 127.0.0.1:8888 2019-10-18 13:35:08,363 21 (null) (null) (null) INFO InvokeMethodRetry - plastic://localhost:8888/CacheHandler.GetObjectsData waiting 2000 ms before retrying the connection 2019-10-18 13:35:11,365 21 (null) (null) (null) DEBUG InvokeMethodRetry - HasToHandleSocketException. SocketError: ConnectionRefused. Exception: No connection could be made because the target machine actively refused it 127.0.0.1:8888 2019-10-18 13:35:11,365 21 (null) (null) (null) INFO InvokeMethodRetry - plastic://localhost:8888/CacheHandler.GetObjectsData waiting 1000 ms before retrying the connection 2019-10-18 13:35:13,368 21 (null) (null) (null) DEBUG InvokeMethodRetry - HasToHandleSocketException. SocketError: ConnectionRefused. Exception: No connection could be made because the target machine actively refused it 127.0.0.1:8888 2019-10-18 13:35:13,369 21 (null) (null) (null) INFO InvokeMethodRetry - plastic://localhost:8888/CacheHandler.GetObjectsData waiting 1000 ms before retrying the connection 2019-10-18 13:35:15,374 21 (null) (null) (null) DEBUG InvokeMethodRetry - HasToHandleSocketException. SocketError: ConnectionRefused. Exception: No connection could be made because the target machine actively refused it 127.0.0.1:8888 2019-10-18 13:35:15,374 21 (null) (null) (null) INFO InvokeMethodRetry - plastic://localhost:8888/CacheHandler.GetObjectsData waiting 5000 ms before retrying the connection 2019-10-18 13:35:21,378 21 (null) (null) (null) DEBUG InvokeMethodRetry - HasToHandleSocketException. SocketError: ConnectionRefused. Exception: No connection could be made because the target machine actively refused it 127.0.0.1:8888 2019-10-18 13:35:21,379 21 (null) (null) (null) INFO InvokeMethodRetry - plastic://localhost:8888/CacheHandler.GetObjectsData waiting 1000 ms before retrying the connection 2019-10-18 13:35:23,382 21 (null) (null) (null) DEBUG InvokeMethodRetry - HasToHandleSocketException. SocketError: ConnectionRefused. Exception: No connection could be made because the target machine actively refused it 127.0.0.1:8888 2019-10-18 13:35:23,382 21 (null) (null) (null) INFO InvokeMethodRetry - plastic://localhost:8888/CacheHandler.GetObjectsData retried 10 times and still can't connect. Failing. No connection could be made because the target machine actively refused it 127.0.0.1:8888