Subscribe: Plastic SCM blog
Added By: Feedage Forager Feedage Grade A rated
Language: English
based development  based  branch  branches  code  development  devops  new  plastic scm  plastic  scm  task  trunk based 
Rate this Feed
Rate this feedRate this feedRate this feedRate this feedRate this feed
Rate this feed 1 starRate this feed 2 starRate this feed 3 starRate this feed 4 starRate this feed 5 star

Comments (0)

Feed Details and Statistics Feed Statistics
Preview: Plastic SCM blog

Plastic SCM blog

New features, version control best practices and stories about the Plastic SCM development.

Last Build Date: Fri, 23 Mar 2018 13:06:46 +0000


DevOps with Bamboo and Plastic

Wed, 07 Mar 2018 10:45:00 +0000

UPDATE 2018/03/22: Added section "Update branch attributes".

DevOps is all about breaking silos and making production and development cooperate to deploy a continuous flow of stable changes to production.

In the previous blogpost, DevOps Primer, I explained the basics of what DevOps is and our vision on how to implement it with Plastic SCM.

This blogpost will start where the last one ended and will cover how to implement a full DevOps cycle using both Atlassian's Bamboo and Plastic SCM.

I will delve into the details of how to handle task branches with Plastic and then run tests, merge and deploy using Bamboo with the Plastic Plugin. The entire cycle is based on the Bamboo Gatekeeper feature using Plastic attributes that are set to branches to decide when a branch is ready to be merged.

A DevOps Primer

Thu, 01 Mar 2018 10:34:00 +0000

My goal is to start a series of blogposts explaining how to implement a true DevOps cycle with Plastic SCM and the main CI systems we integrate with — Bamboo, Jenkins and TeamCity.

But, prior to jumping into the specifics of each tool, I'd like to describe better what DevOps is, and how we envision the actual cycle every task must go through.

DevOps is all about breaking the production and development silos by delivering a continuous flow of stable changes to production.

Achieving stability means every task must go through enough checks to ensure nothing is broken before entering the main branch. Thus, every change merged-to-main is a potential new release.

Use Unix diff from console

Mon, 26 Feb 2018 16:42:00 +0000

While we invest lots of efforts improving our built-in diff, semantic diff and the graphical merge tools, there are times where you really need to run a diff in a terminal.

How can you configure unix diff to be your diff tool?

Why checkin asks to update first?

Fri, 02 Feb 2018 10:58:00 +0000

Mike is working on the main branch and has some changed files that are ready to checkin. Bob and Joe are also working on main. When Mike is about to checkin, Plastic asks him to update his workspace first. Mike goes nuts. He didn't have to do this with Perforce. Why is Plastic forcing him to work this way?

Short answer: Mike, if you want to work this way (SVN/Perforce style), please use Plastic Gluon :-P. It comes with Plastic, has no extra cost, but supports a different workflow. It is perfect for working with non-mergeable files (art, docs, blogposts...).

Long answer: it is all about merge-tracking. If you want to look under the hood of version control then keep reading. I will explain why Git, Mercurial and Plastic SCM implement per-changeset merge tracking instead of per-file merge tracking like older systems used to do (P4, Clearcase, SVN).

Introducing Plastic SCM's external tools actions

Fri, 15 Dec 2017 11:28:00 +0000

External tool actions have been around since release, thanks to some of you asking for them.

You can create custom actions to run on selected objects such as labels, changesets, branches, and items, and invoke those custom actions directly from Plastic SCM.

Add custom actions to branches and files

Okay, this is a little bit difficult to understand without an example, so I'm going to teach you how to implement two different actions: one for branches, and one for items. I'll let you tinker around with action for labels and changesets on your own, but it is just as easy. Remember, this feature is available on Windows, macOS, and GNU/Linux, but only in the regular Plastic SCM client, and not in Gluon.

For the action to a branch, I'm going to add a custom action to directly apply an attribute to the branch. This is instead of the alternative of having to navigate to attributes, then selecting the attribute I want to apply, and then looking for the value, which is a real hassle if you do this a lot, like we do.

For the action to an item, I'm going to add a custom action to directly open that item in Visual Studio Code.

Ready? Ok, let's go.

nodata: the secret sauce of lighter clones

Fri, 10 Nov 2017 12:26:00 +0000

Having local repos (working distributed) is great: super-fast checkins, speed-of-light branch creation... nothing breaks the flow. In contrast, slow checkins to a remote server simply get on my nerves and drive me directly to productivity-killing time filling like checking conversations and forums on Slack.

Super big local repos with tons of history I never actually use are not good, though. Yeah, disk is cheap and all that, but 20GB local repos drive me crazy.

And, I'm connected to the internet while I code 99.9% of the time. Cant I just have lighter clones and grab the data from the central server on demand?

We have just introduced nodata replication. You only get the metadata and data is downloaded on demand from the central server.


webadmin – introducing the new server admin tool

Thu, 19 Oct 2017 22:40:00 +0000

We have just released a new cross-platform (web-based) admin tool to configure and monitor the Plastic SCM server. We call it webadmin and it is included in release


Plastic SCM development cycle - key practices described

Thu, 15 Jun 2017 10:01:00 +0000

So far, we shared how we do DevOps and Trunk Based Development using Plastic SCM and a set of tools around it. But I wanted to make the blogposts short, so I left lots of notes and explanation intentionally out for the sake of brevity.

In this 5th blogpost in the series, I will cover why automated testing is so important for us, but also 2 other practices we adopted long ago: code review and explore test each task.

Monitoring a Plastic server performance

Wed, 14 Jun 2017 17:01:00 +0000

In this blog post we will explain how you can easily analyze your Plastic SCM Server logs to get very useful information of our server behavior and identify potential issues.

The Plastic SCM installation provides a tool (plasticlogstats.exe) that is able to parse your server logs and generate detailed reports.

How we do trunk-based development: answering frequent questions

Tue, 25 Apr 2017 16:08:00 +0000

We have reached the 4th installment of the series telling how we implement trunk-based development at Codice today. Previously, we covered:

Today, we will answer some common questions that were not covered before. So far, we just described the ideal cycle, but never told you what happens if tests fail, the various reasons why a task/branch can be rejected, what to do when a branch can’t be merged or how to handle broken builds. These are the topics we cover today.

Trunk-based development blends well with task branches

Tue, 18 Apr 2017 14:15:00 +0000

This is the third installment in the series of blogposts telling how we develop Plastic SCM. In the first two posts, we covered what our new working cycle looks like once we moved to trunk based development and then we gave a brief overview of the meaning of release versus deploy.

In this third blog post, we will be looking back and filling in some gaps. What exactly is trunk-based development and how does it blend with task branches?

To deploy versus to release

Mon, 10 Apr 2017 08:41:00 +0000

If you read our previous blogpost about how we do trunk based development with Plastic SCM, you probably have a few unanswered questions.

This blogpost is the second in the series and covers something we find interesting: the difference between deploying and releasing.

How we do trunk based development with Plastic SCM

Mon, 03 Apr 2017 13:50:00 +0000

For years, we praised the benefits of branch per task: a new branch for each task in your issue tracker, lasting only a maximum of 2 days (and better just a few hours), and one single developer per branch. This is how we used it and we really preferred this to mainline, even despite of Continuous Integration (CI).

But we started singing that song more than 10 years ago, and many things have changed since. What's new today? Does branch per task still work? Does it blend at all with new practices such as DevOps and Trunk Based Development?

These are the questions we are going to answer in a series of blogposts, during which we explain how we use Plastic ourselves in "eat your own dog food" fashion.

Custom preview tool for DLL files

Thu, 19 Jan 2017 18:44:00 +0000

Encouraged by your feedback in UserVoice asking to add previews to dll files we would like to show you how to support the scenario by creating your own preview tool.

Driving a PITA merge conflict to the release branch

Fri, 02 Dec 2016 16:59:00 +0000

Everything was green and working automatically while merging a feature branch to our latest release branch. In fact, I was about to meet my colleagues in the coffee room for a break, but... Ouch! A big red conflict involving a lot of lines appeared. At first glance, I have no idea what happened to the conflicting file. Cancel the coffee break? Hold on, not yet, not today!

Let me show you the steps I followed to solve a non-trivial merge conflict with Plastic SCM and have the feature branch integrate and checked-in into the release branch. For this purpose, I used some 2nd-class-citizen features in Plastic that definitively I have to promote to 1st class after this experience.

OS X Branch Explorer learns to filter branches

Sat, 26 Nov 2016 08:26:00 +0000

BL793 comes with another great feature for OS X users: now you can filter branches in the Branch Explorer! It is an added capability on top of the “inclusion/exclusion rules”. It works as follows:


Move changesets to a different branch

Thu, 24 Nov 2016 10:36:00 +0000

Release BL793 (short of – BL means baseline) brought a great new feature: moving changesets to a different branch! This way we close the Top-1 User Voice request from our users.

Do you know when you are working on something, you checkin, and then you realized you made the checkout on the wrong branch? Like directly on “main” instead of your task branch? Painful, uh?

Well, now the pain is gone, watch how simple it is to solve the issue:


Available on OS X, Linux and Windows, and also from the command line using the refurbished “cm changeset” command.


Merging in Plastic Cloud is now available

Mon, 21 Nov 2016 15:50:00 +0000

We are happy to announce that it is now possible to merge branches using a Plastic Cloud server (it applies both to Team + Cloud and Cloud Edition).

We initially disabled it because we wanted to encourage users to stick to the distributed model (push/pull), but you sent us so many requests asking to enable it that we decided to release it.

Merging in Plastic Cloud enables the simpler “centralized workflow” not only for artists using Gluon but also for coders. Now nothing stops you to start creating branches, checkin changes and finally get child branches integrated back to main.

Path is too long fixed in Plastic SCM

Wed, 12 Oct 2016 12:24:00 +0000

UPDATE 2018/01/31: If the main fix explained below doesn't work for you check the edit at the bottom in order to learn how to change the plastic.exe manifest, this method succeeds where the main one fails.

Ever faced the following issue while dealing with long paths in Windows?

Good news! Microsoft has released the .NET 4.6.2 framework and it fixes the “path is too long” error.

Applications using the Win32 framework will also take advantage of this new feature but you will need to tweak a couple of settings to make it work, since Microsoft didn’t enable it by default.

This blogpost explains how to set up your machine to get the issue fixed.

Jenkins multibranch pipeline projects with Plastic GitServer

Tue, 11 Oct 2016 14:01:00 +0000

The goal of this blog post is to explain how you can take advantage of the Jenkins pipeline projects with Plastic. As you probably know, Plastic SCM already includes a plugin for regular Jenkins projects. This way each of your commits/checkins will trigger a build in Jenkins. But the standard plugin does not yet support the Jenkins Pipelines (formerly called "workflows"). Jenkins supports Pipelines with Git, though, so we will use Plastic GitServer to take advantage of that.

Pipelines are Jenkins jobs enabled by the Pipeline plugin and built with simple text scripts that use a Pipeline DSL (domain-specific language) based on the Groovy programming language.

Pipelines leverage the power of multiple steps to execute both simple and complex tasks according to parameters that you establish. Once created, pipelines can build code and orchestrate the work required to drive applications from commit to delivery.

The concept of build pipelines has been around for a few years and it is now becoming more and more a standard practice.

p2pcopy: C# console app to transfer files peer to peer

Thu, 06 Oct 2016 11:01:00 +0000

Back in late August, I was working from home. Then someone asked me to send a VMWare image to the office. The virtual machine was +17 GB in size so using Slack was not an option. Since I wasn't at the office, using a USB drive was not an option either.

I had some spare time so I thought: "well, writing a small program using UDT's rendezvous mode should be straightforward" (this mode which basically lets you establish a true P2P connection)... By the way, I could have used something better like but... hey, I just wanted to do some coding :-)

Using PeerFinder from Console: Wi-Fi Direct data transfer in C#

Tue, 13 Sep 2016 09:42:00 +0000

There are situations where you don't have a wifi or LAN available but you would like to exchange some files. Then you find yourself copying to a usb stick and giving it to your colleague. You are probably sitting together on the lobby of a hotel, a train, a plane, it doesn't matter, but connecting to the internet or a local network is not an option.

Wi-Fi Direct is a standard to connect with each other without a wireless access point. So, if your two laptops are close enough, you should be able to take advantage of your wifi antennas to transfer data faster than using the usb.

.NET has a bunch of classes to help implementing this. Unfortunately, (IMO) they are all designed to be used from UWP or Windows Store apps, and it is sort of a nightmare to use them from a simple Console application (or a Windows service, which could greatly benefit from this functionality). I'm going to explain how to use the old PeerFinder (available since Windows 8.1) to transfer data using Wi-Fi Direct from a simple C# Console program. Full source code available on GitHub.

Visual improvements - OS X GUI

Fri, 09 Sep 2016 23:25:00 +0000

We have just released BL775 and it includes a number of visual improvements native Plastic SCM GUI for OS X. They are small touches that help creating a more polished tool, something that is a priority for us since OS X is definitely one of our more important platforms.

The following screenshots shows the new syntax highlight in diff plus the line numbers. It also shows the improved selection in lists, with the white text on blue background.


Plastic repo spelunking with PowerBI

Mon, 05 Sep 2016 17:00:00 +0000

Code repositories can give you lots of useful information about how you work with your code. This post will explain how to extract part of this information and how to visualize it using powerful tools such as Power BI.


Getting the information

The Plastic SCM command line tool allows you to export all the information you need from the commits. Unlike Git, Plastic SCM allows you to export logs in XML format so you can parse from Power BI without having to develop a parser.

Geoloc: a trigger to track the coordinates of each checkin

Wed, 31 Aug 2016 23:02:00 +0000

While the office is not far, I code from home very often. So I want to keep track of the location of each checkin to extract some statistics later on, and figure out how much code I check in from each place. In fact, I have checked in some interesting code from planes too, and I added the info on the comments, which is fan to read later on.

So, I have been using a small trigger for about a week now, tracking the exact location of each of my checkins and adding the info as attributes to the changesets in Plastic.

The trigger code is available on GitHub and you are free to modify it and tune it for your own purposes. Each time I checkin I get a notification like this one on your desktop (Windows only so far):