Archive for February, 2008

Team of One Pattern

February 22nd, 2008

We all know that AccuRev is well suited for large enterprises with teams of developers spread across the globe. But what about the crack team of one developer? You know, those of use who go solo because we know we can do it faster, better, and leaner than any contrived dream team.

Can AccuRev really work for small teams including a team of one? … You bet your ASCII it does!

In fact, I use AccuRev for my own personal projects. They happen to be AccuRev integrations, but are software projects nonetheless [Vim Plugin, GNU Bash, etc]. At this point, critics may proclaim, “For one developer, you just need to commit to trunk and label for each release.” Well… that worked OK for the first and second release, but then came the need to maintain multiple versions in parallel with patch releases (due to wholescale refactoring per major release) as well as compatibility between corresponding versions of AccuRev (since these are plugins). The compatibility matrix completely obliterates any suggestion of linear branching/labeling… so fuh-get-abot-it. Time to graduate from the traditional branch-based tools.

Stream Structure for Team of One Development in AccuRev SCM

click to enlarge

The above picture shows my stream structure containing projects including vim-plugin and bash-completion. I’ll use the bash-completion project as a reference example to discuss my pattern of development. Even as a single developer, I found it critical to maintain a strict develop -> test -> release pattern simply because my development activities change day-to-day and typically turn into “It’s been a month since I looked at this code… time to roll up the sleeves and figure out what the heck I was thinking!” If I was forced to a single commit bucket (branch), I’d go nuts — trying to manage multiple patches, new development, updates to documentation, etc and then being forced to deliver it all because pulling out changes is about as fun as filling sandbags with a pitch fork… I’d rack my brains trying to keep it all straight especially since I have multiple projects going on concurrently!

My development process is as follows (annotated as steps 1-6 on the picture):

  1. Develop – After working in my private workspace on a unit of work for days, weeks, months, I promote to the “-test “stream. Then, continue working in the private workspace on the next set of work.
  2. Test – After unit testing and performing a clean-room functional test of all changes in my “-test” stream, I deem all changes “release ready” and promote to the top bash-completion stream.
  3. Release Candidate — The changes in the base stream represent a configuration that is good-enough to start a new codeline. I do NOT snapshot an official release X.Y (just yet). I first create a “dash-x” line to start the codeline (e.g. bash-completion-3.x for the 3.0, 3.1, 3.2, etc versions).
  4. Maintenance — In anticipation for even minor patch work, I proactively create a “-maint” stream to collect any upcoming maintenance changes based on the starting codeline. Initially, this stream will just be empty and identical in configuration to the parent ‘dash-x’ stream.
  5. Official Release — At this point, I’ve immediately created the”dash-x” and “-maint” streams in succession so they are all identical in contents – namely, all containing the next release. So NOW I create my first official “dot oh” release (e.g. bash-completion-3.0).
  6. Publish – With the official configuration under snapshot, I ‘pop’ the code, archive, and ship to my web server. La commedia e finite!

With the visual nature of the StreamBrowser and the ease of creating streams, managing multiple versions of multiple products with AccuRev is priceless. I use a simple, repeatable development pattern that lets me separate ongoing development work (workspaces) from upcoming changes being tested (-test stream) all separate from previous releases (dash-x) and patch development (-maint). And the best part about all of this is I can (and have, MANY times) come back to any project even months later and quickly ascertain the current state of the union — what’s in development, what’s in test, which releases are published, etc. Sweet.

Lastly, while I use this ‘dot oh’ pattern for my own projects, I even recommend it for large team development. It’s a great pattern and I hope you find it useful for your own stream management.

/happy releasing/ – dave

A Few Good AccuRevvers

February 14th, 2008

James from AccuRev: You want answers?

Tom the CC User: I think I’m entitled to them.

James from AccuRev: You want answers?!

Tom the CC User: I want the truth.

James from AccuRev: You can’t handle the truth! Tom, we live in a world that has complex software. And that software is going to be coded by men with computers. Who’s gonna do it? You? You, Tom with your CC? We at AccuRev have a greater responsibility than you can possibly fathom. You weep for CVS and you curse SVN. You have that luxury. You have the luxury of not knowing what we know: That the AccuRev SCM tool, while special and unique, probably saved jobs. And AccuRev’s existence, while grotesque and incomprehensible to you, saves jobs. You don’t want the truth. Because deep down, in places you don’t talk about at tradeshows, you want us for your source code. You need us for your source code. AccuRev uses words like Keep, Promote, Update…we use these words as the backbone to a life spent managing source code. You use ‘em as a punchline. We have neither the time nor the inclination to explain ourselves to a man who drinks coffee and programs under the blanket of the code management we provide, then questions the manner in which we provide it. We’d prefer you just send us a P.O. and went on your way. Otherwise, I suggest you pick up an IDE and start programming. Either way, I don’t give a damn what you think you’re entitled to.

James from AccuRev: Did you order something besides AccuRev?

Tom the CC User: I did the job that the IBM bigot made me do.

James from AccuRev: Did you order the CC?

Tom the CC User: You’re damn right I did!!!

James from AccuRev: All you did was weaken a company today, Tom. That’s all you did. You put software projects in danger. Sweet dreams, son.

GNU Bash plugin for AccuRev 4.6

February 8th, 2008

I’m happy to announce the latest release of the GNU Bash programmable completion for AccuRev 4.6!

For those AccuRev users out there that know the true power of the GNU Bash shell, life just got even better.

This GNU Bash plugin has its own site at www.bash4accurev.com for downloads, announcements, documentation and user feedback (ala blog style). You can download the plugin from the download page.

The plugin requires GNU Bash 2.05+ and supports AccuRev 4.6.x. It was developed and tested using linux (Ubuntu 7.10) and GNU Bash 3.2.25.

Important note: While the plugin was developed by an AccuRev employee (me) and GNU Bash user for 10+ years, it is considered a third-party open-source plugin and is not officially supported by the folks @ AccuRev support. That being said, I’m proud of the plugin and welcome feedback and enhancement requests for the next release. You’ll find my contact information on the plugin website.

/happy tabbing/ – dave

AccuRev GUI – Love or Hate – Just Communicate

February 6th, 2008

In a recent blog post, an AccuRev user praised the AccuRev server architecture, but had several criticisms of the AccuRev GUI. AccuRev appreciates and encourages this level of feedback. We’d like to update the user community on the current state of the AccuRev 4.6 GUI and how it addresses many of the blogger’s comments about AccuRev 4.5.4.

1.    From time to time it starts rendering everything in gray.This is due to a known Java bug, the so-called ‘gray rect’ issue. AccuRev 4.6 now ships with a Java 6 JVM, in which this issue has been resolved for most operating systems. 

2.    “AccuRev comes with its own vocabulary that describes the source code management.”   

Common term

AccuRev term
update update & populate
check in/commit promote
delete defunct
move cut & paste
conflict overlap

We understand that these vocabulary differences can present short-term challenges for new AccuRev users, yet the benefits of the added functionality generally outweigh the differences. AccuRev provides all of the functionality of legacy SCM systems (ones that use the ‘common terms’ above); but we also have many innovative features that require new terminology. For example, ‘promote’ is new to some users of legacy SCM systems that don’t support private workspaces. An AccuRev product review went into more detail about the Promote feature. Also, since AccuRev is TimeSafe®, nothing ever gets deleted, so ‘defunct’ is a more accurate term for the operation of removing an element from a stream. 

3.        “In order to make sure that you’ve got all recent changes you need to update and populate your workspace…The update button is the best hidden button I’ve ever seen.” 

Actually, Update is sufficient for most operations where a user wants to obtain the latest changes from the AccuRev repository. Populate is a different operation that normally shouldn’t be required as part of a standard update operation.  There is an update menu item on the File menu, and no one has pointed this out before, but the user is absolutely correct in noting that Update could be made easier to identify from the AccuRev GUI – great feedback! 

4.        “Whenever AccuRev can not update your workspace because there is something wrong with it you get a cryptic error message.”  

In AccuRev 4.6 we’ve improved the update command so that trivial merges to modified files are handled automatically. This gets rid of the Warning message that the user refers to. 

» Read more: AccuRev GUI – Love or Hate – Just Communicate