What We Learned from the Kando Self Host

May 10th, 2012 by kleonard No comments »

You may know that the AccuRev source code is kept on two AccuRev servers, plus replicas. But when our Kando project started, we wanted to keep the source code on Kando servers, which weren’t ready yet. So we started with a central Git repository accessible by ssh. We gained experience using Git’s command line, third party GUIs, a branching model, and plug-ins such as Eclipse’s Egit. The biggest surprise I found? The hassle of managing multiple ssh keys- whenever a new person started working on the project, he or she would edit the Git server’s authorized_keys file, and, as often as not, mangle the file so that other users could not access the repository.

After six months we decided to self host with Kando. While setting up the installation, we discovered a missing essential feature – the capability to map just a subdirectory of an AccuRev stream. The initial self host was delayed by a few days while that mount-point feature was implemented. Ever since then, the code has been accessible through both our in-house AccuRev servers, and our in-house Kando server. On the same stream, some developers have used AccuRev while others used Git, and the nightly builds used AccuRev to fetch the code.

As each of the Kando features was implemented (change package integration, an administrative GUI, access control lists, and other security features) the team got to use Kando a self hosted Kando. This approach gave us confidence that Kando was ready for the field; we found bugs and gaps in the feature set, some which could have slipped by traditional testing. (All were resolved.) And while there were a few problems during the self host, no source code was ever lost.

Our installation was a medium sized Kando installation, with 1,600 source code files and 1,400 commits over 12 months. Self hosting Kando has been more helpful in identifying problems and understanding how our customers will use it than we imagined. From a missing essential feature, to bugs and gaps, we were able to fix and adjust the product in ways that will directly benefit end usage. Our plan from here is to continue using our self host with all the Kando features, and to get the earliest feedback from in-house users.

 

A Word From the AccuRev Help Desk

May 1st, 2012 by dafoster No comments »

Context-sensitive help has long been a staple of the AccuRev Java GUI. Can’t reconnoiter reparenting? Puzzled about post-op triggers? Press F1 or click the question mark at the top of the AccuRev window (question A Word From the AccuRev Help Desk) and you have at your fingertips the entire AccuRev oeuvre. Help is displayed in HTML by default, but you can get PDF by clicking the PDF button (pdf A Word From the AccuRev Help Desk).

java help A Word From the AccuRev Help Desk

But did you know that context-sensitive help is available in all of the main views of the AccuRev Web UI? It’s true (I could not and would not write such a thing otherwise!).

So the next time you find yourself with a furrowed brow looking at the Web UI File Browser or wondering about workflow, give F1 a try:

wf help A Word From the AccuRev Help Desk

Once you display the online help, you have at your disposal not only the table of contents, but the index, full search capabilities, and the ability to create a list of favorite topics for easy access – it’s as easy as bookmarking a favorite web site in your browser:

help favorites A Word From the AccuRev Help Desk

 

Context-sensitive help in the Web UI is currently available in the StreamBrowser, File Browser, Query Browser, History Browser, Version Browser, and Workflow Editor.

Seek and Go Hide, or Getting Acquainted with AccuRev’s StreamBrowser Display Options

April 9th, 2012 by dafoster No comments »

The first time you open the StreamBrowser in the AccuRev Web User Interface (Web UI), AccuRev displays only the streams in the hierarchy that terminate with workspaces belonging to the current user. Of course, you don’t have to remember this fact because AccuRev tells you (at least until you tell it not to any more):

first search message Seek and Go Hide, or Getting Acquainted with AccuRevs StreamBrowser Display Options

Conveniently, at the same time AccuRev also displays the StreamBrowser search options panel, which contains tools for searching the depot and tools for displaying streams:

search filter stream type Seek and Go Hide, or Getting Acquainted with AccuRevs StreamBrowser Display Options

This blog post concerns itself with the StreamBrowser’s display options: Stream Type, User Options, and Other Options.  We’ll take a look a Search by Keyword in a future post.

Wy B Normal?snapshot1 Seek and Go Hide, or Getting Acquainted with AccuRevs StreamBrowser Display Options

As you can see, by default the StreamBrowser displays only so-called normal and pass-through streams that lead to a workspace for the current user. What does AccuRev mean by “normal”? Good question. Normal streams include dynamic streams, time basis streams, and workspaces. Pass-through streams and snapshots are considered special types of streams and have their own controls. And if you choose to display snapshots, AccuRev lets you specify the time period whose snapshots you want include – from the past week to the entire year:

Clean it Up

In addition to controlling the types of streams displayed in the StreamBrowser, you can also decide whether or not you want to display symbols for locked streams ( lock Seek and Go Hide, or Getting Acquainted with AccuRevs StreamBrowser Display Options ) and for streams that are mapped to Git branches in Kando ( kando Seek and Go Hide, or Getting Acquainted with AccuRevs StreamBrowser Display Options ).

While such information can be useful, toss in the icon for default groups and it’s easy to see why being able to simplify the StreamBrowser display as you see fit is a good idea.

Look Right. Or Left.

Lefties (and righties) will appreciate being able to easily change the flow of the stream hierarchy to suit individual preferences – by default, streams flow from right to left, with the root stream (which is always displayed, by the way) in the upper left corner of the StreamBrowser:

streams r l Seek and Go Hide, or Getting Acquainted with AccuRevs StreamBrowser Display Options

 

By changing the default Flow setting to Left-to-Right: left to right Seek and Go Hide, or Getting Acquainted with AccuRevs StreamBrowser Display Options

and clicking the Search button you can flip the hierarchy direction, placing the root stream in the StreamBrowser’s upper right corner:

streams l r Seek and Go Hide, or Getting Acquainted with AccuRevs StreamBrowser Display Options

Try. Try Again.

Perhaps the best feature of the StreamBrowser filter is that it allows you to easily experiment with different searches and display options in real time, without having to go through the bother of finding your way back to the filter once you discover that, say, hiding all normal streams doesn’t really show you the information you need. It’s easy:

  1. Set an option.
  2. Click the Search button.

If you like what you see, you can:

  • Click the Save button to save these settings as your new StreamBrowser default display. AccuRev will use the new default each time you open the StreamBrowser.
  • Click the filter panel’s close button ( close1 Seek and Go Hide, or Getting Acquainted with AccuRevs StreamBrowser Display Options ) to dismiss the filter panel. The settings you specified will remain in effect for the current AccuRev session, but the next time you open the StreamBrowser AccuRev reverts to the system defaults.

And opening the StreamBrowser search options panel is simple: just click the Show Search Options button located in the StreamBrowser tool bar:

show filter button Seek and Go Hide, or Getting Acquainted with AccuRevs StreamBrowser Display Options

In the next post we’ll talk more about using the StreamBrowser Search by Keyword feature.

 

Using Include and Exclude Rules (Part 2 of 2)

February 23rd, 2012 by shrikantshirbhate No comments »

In the last post, we talked about why Include/Exclude rules are important, and how use them in projects, streams, and workspaces. But you can also set the rules within the GUI by enabling the Include/Exclude checkbox on the left hand side (above the filters). See below.

2 23 1 Using Include and Exclude Rules (Part 2 of 2)

You can verify the rules which are set with the following commands:

C:\Program Files\AccuRev\bin>accurev lsrules -s Client
incl -s Depot \.\
incldo -s Client \.\Src
incl -s Client \.\Src\Client
incl -s Client \.\Src\Common  

Also, in the GUI it will be displayed in the following format in the lower pane window:

2 23 2 Using Include and Exclude Rules (Part 2 of 2)

You can always set the rules as per your requirement. In case you have to select only a few directories inside src, you can either exclude (excl) all the folders inside the src or include directory (incldo) src and then cherry pick the files or folders with include (incl) rule.

Cross-Links

An include rule can implement a cross-link, specifying a different backing stream for an individual element or an entire subtree. This enables different elements to have different stream hierarchies, even though they are in the same depot. In any dynamic stream or workspace, you can also change the backing stream of individual elements or entire subtrees of elements (termed cross-linking). This provides a way to make the stream hierarchy look different for different elements. In the above stream structure we can use cross-links to include the common libraries 1.0 or 1.1 or 1.2. Lets say Client wants to use the Common 1.1 library and Server wants to use the Common 1.0 library, then we can implement that with the following rules where –b represent the stream from which you have to include the element.

C:\Program Files\AccuRev\bin>accurev incl -b common1.1 -s Client \.\Src\Common
Including /Src/Common .

Please note: the effect of changing a parent stream will not show up until after an accurev update operation is performed.

C:\Program Files\AccuRev\bin>accurev incl -b common1.0 -s Server \.\Src\Common
Including /Src/Common .

Please note: the effect of changing a parent stream will not show up until after an accurev update operation is performed.

Rules are displayed in the following way in CLI and GUI :

C:\Program Files\AccuRev\bin>accurev lsrules -s Server
incl -s Depot \.\
incldo -s Server \.\Src
incl -s Server \.\Src\Common
  xlink \.\Src\Common from Server to common1.0
incl -s Server \.\Src\Server

2 23 3 Using Include and Exclude Rules (Part 2 of 2)

In case library 1.0 is deprecated and we have decided to use library 1.1 we have to just edit cross-link and include 1.1 library. Also we can include the different libraries in different applications as per the requirement. In this way cross-links not only reduces the redundancy but also provide lot of flexibility. Cross-links can also be implemented with CLI. Please check the CLI guide “incl” Section.

Using Include and Exclude Rules (Part 1 of 2)

February 21st, 2012 by shrikantshirbhate No comments »

With AccuRev’s Include and Exclude rules, users can choose how much code is available at any point in their development process. These rules make it very easy to pare down how much of the directory structure is loaded and can be done at the depot level (the entire directory tree), the stream level (a specific configuration of the directory tree), and workspace level (the developer’s sand-box).

Why Include and Exclude Rules are Useful
By default, a workspace contains a copy of each file under version control in a particular depot. More precisely, a workspace contains a copy of each version in a particular stream.  But sometimes, you don’t want or need a copy of every file — for example, if your current assignment doesn’t include “rebuilding the world” each night. The depot might contain many thousands of files, of which you might need only a small subset. The File Browser’s Include/Exclude facility enables you to define and work with a subset of the depot’s elements.

Include and exclude rules also make it easy to logically break up a source tree, so that different development projects can work on different parts of the source code, and different development groups cannot even see each other’s work.

How to Include and Exclude Rules in Your Projects, Streams, and Workspaces
There are four types of Include/Exclude rules:
- Include directory only (incldo) : This rule will just include the empty directory structure and exclude all the contents inside it
- Include (incl) : This rules will include the directory and all its contents and sub folders
- Exclude (excl) : This rule will exclude the directory and its contents
- Include from stream (cross links) : This rule will include the contents (file or directories) from other stream

In the workspace or the stream view, when you check (or clear) the Include/Exclude Mode checkbox, the File Browser immediately switches into (or out of) Include/Exclude mode. The File Browser works significantly differently in this mode. In Include/Exclude mode, both the Folders and Details panes show all elements in the workspace or stream. Elements that are currently excluded have (backed)(excluded) indicators in the Status column. Elements which are included have the (include) status, while the directories which are included except for their contents have (incldo) status.

Lets assume your project has a client server application, and your different teams are working on the separate modules.  One team is working on client, while the other is working on the server code. All these applications are accessing a common set of libraries. Let’s assume we have the following folder structure:  Src Src\Client Src\Server Src\Common  and you have following stream structure:
Services1 Using Include and Exclude Rules (Part 1 of 2)

With the Include/Exclude rules, we can set the rules in the above way so that the Client team will only work on the Client code and include the libraries. The Server team will work on the Server code and libraries. While the Common stream will include only libraries. Rules can be set as per the need of the scenario. You can either set it through the GUI or through the CLI.

If you use the CLI then you set the rules in following way:

C:\Program Files\AccuRev\bin>accurev excl -s Client \.\src
Excluding /src .

Please note: the effect of changing a parent stream
will not show up until after an accurev update operation
is performed.

C:\Program Files\AccuRev\bin>accurev incl -s Client \.\src\client
Including /src/client .

Please note: the effect of changing a parent stream
will not show up until after an accurev update operation
is performed.

C:\Program Files\AccuRev\bin>accurev incl -s Client \.\src\common
Including /src/common .

Please note: the effect of changing a parent stream will not show up until after an accurev update operation is performed. 

 

Part 2, coming soon: Cross Links

 

 

Announcing Kando!

January 31st, 2012 by AccuRev No comments »

I am happy to officially announce the release of Kando, AccuRev’s seamless integration with Git. Kando is the first software development solution that enables Git development shops to unleash the most powerful features of AccuRev SCM, adding workflow, issue tracking, security, change requirements and other capabilities to the software development process, all while maintaining the flexibility and familiarity of Git environments.

Kando’s ground-breaking enterprise-level security and compliance capabilities allow its users to:

  • Comply with enterprise-level regulations, by providing full audit and traceability
  • Secure Git with access control capabilities, and support for enterprise authentication via LDAP and Microsoft Active Directory
  • Visualize and manage development processes that use Git in AccuRev’s StreamBrowser™ environment
  • Support Software Change and Configuration Management (SCCM) through change-based development with AccuRev Change Packages

Bob Aiello, noted author and Principal Consultant at CM Best Practices Consulting said, “Kando allows your developers to enjoy the flexibility of Git’s lightweight distributed version control system, while still providing a leading-edge and robust enterprise ALM solution. AccuRev’s new product offers the best of both worlds, nimbly meeting the challenges of Agile process maturity and scalability with an impressive blend of power, speed and agility.”

To learn more about Kando, check out:

 Kando Info Button2 Announcing Kando!   Kando Demo Button1 Announcing Kando!    Kando Press Release Button1 Announcing Kando!

 

 

Check Out What’s New in AccuRev Version 5.4!

January 26th, 2012 by clucca 1 comment »

AccuRev has announced its latest release, version 5.4, to all customers! We’ve made some changes and added a few new features that I’m really excited about.

Support

First, we added native Windows 64-bit support, and support for “Lion” Mac OS for AccuRev clients. (Mac OS AccuRev servers are supported on a “beta” release basis.)

New stream and workspace search, find, and filter features.
I’m really excited about this new feature. With enhanced search in the stream browser, users are now able to search and filter results to easily find streams within the hierarchy.  Additionally, users can search files within their workspace. We’ve all had the problem where there are 1000′s of files in our workspace and we just want to find the one file we are working on. With our new workspace search feature, you are able to search through your files, filter the results and even limit them to file status. Hooray!

Check out the feature demo.

 

New optional Timestamp Optimization Behavior

A new Timestamp Optimization (TSO) feature is now optionally available as a server side setting.  While the traditional TSO provides good performance when identifying modified files, we’ve improved the functionality so it will always understand files with older time stamps that have been copied into the workspace from another directory.  The new TSO maintains a small local database cache on the client which allows all modified files to be identified without a significant impact to performance.

Some deprecated features and platforms are no longer available as of this release.

To get the full list of what’s changed, check out the “What’s New In AccuRev 5.4″ page!

Thanks!

 

New Year’s Resolution: Bulk Up(date)!

January 13th, 2012 by dafoster No comments »

The new year is underway, and mine started with several solemnly uttered vows aimed at professional and personal betterment—out with the old, in with the new, and all that jazz. (Actually, my new year  started on a highway east of Worcester, alone, on my way to pick up one of my sons from a party, but that’s another story for another blog.)

Professionally, I enjoy tools that boost productivity, eliminate repetitive tasks, and help lighten the workload. The bulk update feature of the AccuRev Web UI is one such tool. It doesn’t slice or dice, and forget about julienne fries, but AccuRev bulk update does allow you to change field values for multiple issue records about as fast as you can say, “But wait! There’s more!” Let me show you how.

I’ve just run a query that shows me what’s on my plate at the start of the new year.

20120109 Foster 11 New Year’s Resolution: Bulk Up(date)!

Server-side stuff isn’t really my forte, so I want to reassign issues 2121, 2113, and 2109 to my colleague Jim, who can pretty much do this stuff in his sleep. And while I’m at it, I want to change the Status from Scheduled back to New until Jim’s had the chance to assess his workload.

Of course, I could open each of these issues individually, but if you were paying attention earlier you know I’m all about the efficiency, so I select issues 2121, 2113, and 2109 and dial up some bulk update:

20120109 Foster 2 New Year’s Resolution: Bulk Up(date)!

Click! And Assigned To now points to Jim. Click! Status is New. One more click! (this time on the Update Issues button), and I can take a well-deserved siesta.

20120109 Foster 3 New Year’s Resolution: Bulk Up(date)!

And Jim can get to work.

Understanding Streams: Intelligent Branching In SCM

December 5th, 2011 by clucca No comments »

Any software project of a certain team size will always require efforts to be conducted in parallel. The funny thing is that there are many different ways to do it. If you read Brad Appleton’s (and other authors) post about it on CMCrossroads http://www.cmcrossroads.com/bradapp/acme/branching/ you’ll see that there are dizzying amounts of possibilities when it comes to mapping your development process to your parallel development efforts.

While many of them are great in theory, they’re often hard to implement, especially if you’re not an SCM expert. Many novice users have a need for complex development workflows, but just can’t pull it off because taking those ideas from a whiteboard and using them in real life is just too complicated in practice. There, the complication of making sure that the process is followed in the way that you designed it. Often we find ourselves not able to complete merges, abandon changes on project branches, or just plain can’t keep track of where things are.

For many of us, branches are just different folders or separate code bases that have no relationship of where they come from or where they are going to.

In order to implement a successful branching strategy, you’ll have to support it with scripts, spreadsheets, all kinds of offline communication and usually you write the whole thing down on a whiteboard, and hopefully noone erases it.

What’s really upsetting about this whole situation is how often it gets screwed up. People will often merge to the wrong place, pick the wrong revision when merging, overwrite other peoples changes, lose track of what files they already merged and which ones they didn’t. The amount of things that could go wrong are staggering, and this is why release engineers get grumpy sometimes.

Enter: Streams

The concept of a stream matches the mental model of software development. Think of it as a branch with brains!

Streams are the workflow of the process from beginning to end. Think of your old collection of branches sitting out there now connected in a way that manges the process. You can now flow changes between a release branch and mainline automatically, or move code from DEV->QA->PROD easily.

Streams also introduce a concept of parents and children. With this, changes can automatically “inherit” from parents to children. This means that if 2 teams want to share code to a single parent, the code automatically is merged and shared with each team as they finish.

streambrowser Understanding Streams: Intelligent Branching In SCM

Streams offer an easy way to see your branching and merging strategy. This type of visibility gives you the power to manage your strategy without having to use that pesky whiteboard we talked about before. It helps keep everyone on the same page.

For the more curious, we’ve, I’ve written a whitepaper which describes AccuRev’s stream architecture at an even deeper level. Check it out!

 

Configuration Management & Customer Specials Shouldn’t Be Difficult

November 12th, 2011 by jtalbott No comments »

In the world of software development, or any product, for that matter, one of the things you may frequently be asked to do is to create a “special version” for a specific consumer.  This version might be almost identical to something you have already created, but with a few minor tweaks, or it might need to share some of the same core characteristics but have critical deviations in certain areas.

For software development – and the correspondingly essential Configuration Management of that software – I’ve seen how this can be one of the more challenging aspects of the job.  It’s not actually the creation of the “customer-special” that’s difficult though; in fact this is usually fairly trivial.  Traditional software configuration management, or SCM, systems use the branch-per-variant approach typically, and everyone knows that branching is easy.  The hard part comes when you need to manage that customer release in an ongoing fashion.  How do you upgrade them to a newer release of your product?  They probably won’t want to remain on their baseline version forever.  They’ll want to take advantage of new features and fixes, while still retaining their unique aspects.  So this brings you to… oh yeah, the actual _merge_ part!  That’s where it gets hard.  Reliably merging changes from one variant to another is a manual, error-prone, labor-intensive process.  Now I remember!  That’s why we try to limit branching.

Configuration Management with Customer Specials

Well, all of that messy, cumbersome, and problematic stuff in traditional configuration management systems utilizes a traditional architecture of branches.  Fortunately, you use AccuRev, which completely removes this obstruction and makes the management of customer specials not only easy, but elegant as well.  Let’s consider the following purely mythical scenario.  A company called ‘Stadiums’ that makes Ballparks for general use releasedStadiums_Ballpark_2.0 a while back.  Stadiums had a customer who wanted a custom version of the Ballpark that had some significant differences.  For example, they had special contours to the outfield, a truly unique left-field wall, and a good old fashioned mechanical scoreboard.  Those were the changes that needed to be made which deviated from the core Ballpark.  So Stadiums made these changes in a dedicated stream, associated their work with issue records using AccuRev Change Packages, and cut the Stadiums_Ballpark_Fenway_1911 snapshot:

customer image1 Configuration Management & Customer Specials Shouldnt Be Difficult

customer image2 Configuration Management & Customer Specials Shouldnt Be Difficult

Fast forward a few years.  It’s been a while and there have been numerous advances in Stadiums’ technology.  Ballpark_4.0 has been released.  The Fenway people don’t want to purchase a brand new product, but they do want to upgrade. This is where it would get really complicated in a different configuration management tool. To boil it down, Stadiums would have to figure out what changes were made for Fenway back then, what changes have happened in their ongoing development, and intelligently merge these together.  They’d probably still want to maintain traceability and reproducibility of the “older” version of Fenway.  Some of the other tools out there make this near impossible, some slighly less onerous, but none of them make it simple.

Enter AccuRev.  Here’s what you do.  Drag the Stadiums_Ballpark_Fenway stream and drop it onto Stadiums_Ballpark_4.0.  That’s it, you’re almost done!  Because of Inheritance capabilities in AccuRev streams, all the content of Stadiums_Ballpark_4.0 will flow down into the _Fenwaystream… except items that are in conflict.  Those items will be identified by AccuRev both visually and with status flags, and you will be able to deal with them quickly and appropriately.

customer image3 Configuration Management & Customer Specials Shouldnt Be Difficult

In our example, Stadiums developer llucchino has worked on the greenMonster.wall file and replaced class Netting with class monsterSeats.  So this file automatically becomes (overlap) in the_Fenway stream and can be merged.  There are more teams in the league so the scoreboard.mechanical file has been updated to change various properties.  This also is in (overlap) status.  But the contours of the outfield haven’t been updated at all, so despite that file being a custom modification for _Fenway, AccuRev intelligently knows that it doesn’t even need to be merged.  All other new content was automatically inherited by the stream, and so literally nothing needs to be done by the development team.

It’s that simple.  You’re done, go ahead and release Stadiums_Ballpark_Fenway_2011.  Another happy customer and it didn’t set you back many man months.  Can your configuration management tool do this?