Release Notes

Public Jul 30 2019


Windows - Plastic: The new Code Review system now allows to start conversations, using the "Reply" functionality.

Remember, right now, you need to start with plastic --codereview to enjoy the new feature.

You can check how it looks here, dealing with a conversation with several threads.


macOS - Plastic: Improved the progress text shown in the workspace window toolbar to correctly use the available space and adapt it when the window is resized. We saw that sometimes the progress text was cropped even when there was plenty of space available to display it.

Here goes the "before and after":


All platforms - Server: New Merge Rules system.

We added a Merge Rules system (mergerules.conf). Use it to make branch reviews mandatory prior to merge.

This is a good equivalent to the popular "pull request restrictions" that force to review branches before merge.

The Merge Rules define what branches must be reviewed when merged to certain branches.

If a merge can't happen, you'll receive an error like this:

Cannot perform the merge. Review the branch '/main/QUAK-00' to merge it to '/main'.

Here is an example of a very simple mergerules.conf forcing all branches QUAK-* to be reviewed prior to be merged to main.

>cat mergerules.conf
     "enabled": true,
     "repositories": "*",

     "rule": "only_allow_merges_if_reviewed",
         "branchNames": ["main"]
         "branchNames": ["QUAK-*"],

The new mergerules.conf is a JSON file that must be placed in the server directory (where plasticd.exe is located).

You will find a mergerules.conf file with some examples in your server directory, inside config_samples, and alongside the binaries for clean setups (on Windows using the installer, and GNU/Linux using the official packages) so you can directly modify it. You don't need to restart the server for changes to take effect!

Each rule defines source and destination branch matching as well. Branch matching is done using name patterns (with '*' to represent any substring), attribute matching, and you can specify multiple rules of each kind, too.

Finally, when you're about to merge a branch, the server will check whether there are any rules that apply to that source/destination pair.

We plan to support different kinds of mergerules in the future, but right now there is only one: 'only_allow_merges_if_reviewed'. If both source and destination branches match a rule of this kind, the server will only to merge source branches that have an Approved review.

It is also possible to filter branches by attributes, instead of names. Check the example mergerules.conf to find all the filtering options.


Server, DevOps: Added notifications of "code review changed" events through the web socket channel the DevOps mergebots use. This means the mergebots will now be able to implement filters to avoid merging branches that don't have an approved code review.

We will enable this filter for our built-in "trunk-bot" really soon. Stay tuned!

To enable this notification on custom mergebots you may have written, your mergebot will have to subscribe to these events by sending a message to the Plastic Server websocket endpoint (e.g. ws://<SERVER_IP_HOSTNAME>:7111/plug).

The subscription message looks like the following json:

  "action": "register",
  "type": "trigger",
  "eventlist": [

(The "eventlist" array could also contain "newChangesets" and "branchAttributeChanged" trigger types to subscribe to these events too).

Once the subscription is completed, your mergebot will be able to receive "code review changed" messages when a code review is created, when the code review status is changes, when the code review title is changed, and when a code review is deleted.

The message sent this way through the web socket looks like the following json:

  "type": "trigger",
  "event": "codeReviewChanged",
  "properties": {
    "branchComment": "HDP-122 - implement stats tool",
    "branchFullName": "/main/HDP-122",
    "branchId": "682",
    "branchOwner": "JesusManuel",
    "codeReviewId": "684",
    "codeReviewStatus": "Approved",
    "codeReviewTitle": "Review HDP-122",
    "repository": "tooling"

REMARK: The code review notifications are sent only if the code review is bound to a branch.


All platforms - Command line client: we have added an "--ignored" option to the "cm rm private" command.

By default, ignored files are skipped during the delete. The "--ignored" option allows you to include ignored files.

Note: this is a change from the previous default behaviour. Previously, ignored files were included by default.


macOS - Plastic: Sometimes, when switching workspaces, users got the following error:

"cannot access a disposed object".

Now it's fixed!


macOS, Linux - Plastic: Disable the 'Diff changeset' context menu in annotates for lines changed locally.

We were investigating a bug reported by a customer. They occasionally see an evil "cannot process your request" exception. We weren't able to reproduce their case, but the closest was this thing: same error (and similar stack dumped) if you have local changes and "diff changeset" over the changed lines in an annotate.


All platforms - Plastic, Gluon: We improved the behavior when you have local changes and the changeset loaded in your workspace is deleted by a different user.

Before these improvements, this meant that you got stuck: at that point you were unable to checkin, shelve or undo your local changes.

We modified the client behavior to enable you to undo your local changes, letting you out of that loophole. Shelving or checking them in will still be unavailable, as they wouldn't have a parent changeset.

The 'undo' behavior will be slightly different depending on the client you use:

Gluon will always allow you to undo the local changes. If the original contents aren't available anymore, the head contents of the current branch will be used instead.

Plastic, on the other hand, will notify you about the inconsistency and then ask you for confirmation to undo all your local changes and update the current workspace.


Server: The sync view was failing with the error 'Error: There has been an unexpected error "Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.". For more information check the server log.' on the following case:

* We have the servers A and the server B

* On both servers we have the repository myrep

* On myrep@B, we create the branch main/task and perform 2 checkins on it (changeset 4 & 5).

* We create a sync view with source myrep@A and destination myrep@B

* We pull all changes -> We pull main/task

* On myrep@B, we delete the changeset 5.

* We try to sync, and the sync view fails with the error ''Error: There has been an unexpected error "Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.". For more information check the server log.'

Now it's fixed.


macOS - Plastic: Right-clicking in the Workspace Explorer view before the view is loaded triggered an unexpected error.

Now it's fixed!


Windows - Visual Studio integration package: Include missing JAR files necessary to show the semantic history of java and c++ files.