RhodeCode 4.5.0 Release: enhanced diffs, smart code reviewers

The newest release of RhodeCode 4.5 is here

It's our biggest release so far, and we're very proud of it.

This release includes several new features including, new enhanced diffs, code annotations, smart reviewers and live notifications. We improved our pull requests for usage in CI/CD systems, and also enabled our new high-performance HTTP backend for VCSServer and this is now the default mode for all installations and upgrades.

We also improved integrations for Jira and Webhooks which allows greater flexibility. There are few small security improvements as well as many bug fixes.

Take a few minutes to update your RhodeCode instance:

rccontrol self-update && rccontrol upgrade '*'

New to RhodeCode? Download the latest RhodeCode 4.5.0 from our website.

Keep reading for full release details.

Performance

When we released RhodeCode 4.X series, we split our architecture into two services. RhodeCode Enterprise/Community, and VCSServer which handles all communication with your Git, Mercurial and Svn repositories. Initially, we used Pyro4 library and it's protocol to make RPC calls and fetch data. This turned out to be a bottleneck in many cases. Since release 4.3 we added an alternative HTTP backend for VCSServer, which allows resolving few of the shortcomings of Pyro4.

First, we enabled HTTP streaming which allows cloning GB of data without much of memory footprint. Secondly, HTTP mode uses multiprocess workers, so it can use multi-core CPUs to serve data faster. Now on 4.5.0 release we're confident that HTTP backend is stable, and we're enabling it by default on all installations, and also via an upgrade to 4.5.0. During an upgrade, your server will be converted from pyro4 to HTTP communication mode. We tested our HTTP backend with one of our biggest customers, and they are really happy to say it improved their performance by more than 10%, and allows them to peak over 200 pulls/minute on a moderate 8 core machine with 32GB of RAM. We're going to remove pyro4 mode completely in one of the upcoming releases.

Enhanced diffs and annotations

I'm particularly excited by a new feature in 4.5.0 release which is our new enhanced diff rendering engine.

We spend a fair amount of time to produce a new diff implementation which enables so long awaited features like side-by-side diff inline comments or syntax highlighting. New diffs will also auto collapse on large diffs for optimal performance.

We also implemented the new inline-diffing algorithm. We tested several iterations and we think we found the sweet spot when it comes to detection of which characters changed in similar lines. New diffs support much-requested feature of ability to comment on side-by-side view. Now both unified/side-by-side diff mode is saved into user session so you can pick the one you prefer and RhodeCode will remember that preference.

Our live chat feature added in RhodeCode 4.4.0 release is also now enabled on those diffs so you can easily discuss more complex code with other members more efficiently.

The diff/commenting code has been rewritten from scratch and things like submitting comments are now much snappier. In addition,

we also re-implemented annotation logic. Annotation view now uses much nicer grouped commits display, it's possible to click and highlight similar commits.

Smart code reviewers (EE only)

In larger organizations, it's often hard to determine who is the best person to review submitted code changes. Our default reviewers feature is helping with that. RhodeCode allows you to specify a list of default reviewers that are added if your changes are targeted to a particular branch, or changes match defined file patterns.

For example, a rule could be:

when you submit a change to files matching .less or .css patterns pick the Design team usergroup.

when you submit a change to any files matching db/migrations/* pattern add your database administrator to reviewers.

In addition, we added a special option that allows picking users based on the source code authorship. The way how it works is that RhodeCode will analyze the source code you have changed, and detect previous authors of changed lines. In most cases, the author of the code you just changed is the most suited to do the review.

In the pull request view you can always see now a reason why a reviewer was added.

We're planning to extend this functionality based on our user's feedback, and our internal team feedback in the next RhodeCode releases. However in our internal instance just after exposing this new feature to our team it helped us ship better code faster. Our code-review quality improved significantly.

Live notifications

When doing code reviews it often happens that there are many live changes happening in the background.

A pull request might be updated, someone might already found the same mistake you had and submitted a note.

Till now you only found this out after submitting your code, or maybe via your email client that sends you notifications from RhodeCode.

We added a live notification system that pushes such information to users in real-time. You'll be always on top of what's going on.

When someone (other users, CI server) updates a pull request, or submits a comment RhodeCode will show you this information without interrupting.

For me personally, the most useful case is when our reviewer user Jenkins is commenting on a pull request I'm currently looking. If Jenkins reports a test failure I'm getting this information live, and I can skip review since I know this code needs some changes in order to pass our test suite.

Live notifications use our Open-Source Channelstream project, that we ship together with our installer. Source is available here.

You have to have Channelstream enabled to use this feature.

System info

When administrating your instance it's often useful to quickly check the system status. We added a bunch of useful information

to our system info page. We show and monitor most important parameters of your server and you will be notified if RhodeCode detects any

problems that might cause RhodeCode to not function properly. Those checks include things like low disk space, no free disk inodes, lack of free RAM. In addition to that RhodeCode now checks the VCSServer connectivity and can show you any misconfigurations if they happen.

Other highlights of this release:

New Features

Integrations: Webhooks integration now allows to use variables inside the call URL. Currently supported variables are ${repo_name}, ${repo_type}, ${repo_id}, ${repo_url}, ${branch}, ${commit_id}, ${pull_request_id}, ${pull_request_url}. Commits are now grouped by branches as well. Allows much easier integration with CI systems.

Integrations (EE only): allow wildcard * project key in Jira integration settings to allow referencing multiple projects per commit, fixes #4267.

Repository groups: added default personal repository groups. Personal groups are isolated playground for users allowing them to create projects or forks. Adds a new setting to automatically create personal repo groups for newly created users. New groups are created from specified pattern, for example, /u/{username}. Implements #4003.

Pull requests: exposed shadow repositories to end users. Users are now given access to the shadow repository which represents state after merge performed. In this way, users or especially CI servers can much easier perform code analysis of the final merged code.

User groups: an overhaul of edit user group page. Added new selector for adding new user group members.

Licensing (EE only): exposed unlock link to deactivate users that are over license limit, to unlock full functionality. This might happen when migrating from CE into EE, and your license supports less active users than allowed.

Security

Security: It's now possible to disable password reset functionality. This is useful for cases when users only use LDAP or similar types of authentication. Implements #3944

See the full list of changes in the release notes.

As usual, the update process is a simple one-liner: type

rccontrol self-update && rccontrol upgrade '*' in the command line interface. Done!

Performantly yours,

The RhodeCode team.