For the longest time, I thought the problems I encountered with AccuRev were just a basic fact of version control. The sort of thing that you just need to accept, like the tides. I’m starting to appreciate that AccuRev is really the cause of many of my frustrations.
So, let’s talk about some ways in which AccuRev screws things up.
there’s no going back
You ran accurev update and discovered the build is broken. The obvious thing to do is to yell at the guy who broke it. While he’s fixing the problem, you can base your workspace off an earlier point in history and keep working. Or, heck, just roll your workspace back to how it was before you updated.
After a little hunting, you find that via the command line you can specify the transaction to update to… but it only accepts transaction numbers greater than the transaction you’re currently updated to.
There is no way to revert your workspace back to how it was before you updated.
stream inheritance sucks for features
Let’s say you naively decide to create feature streams. You have your main DevStream at the root of your depot and a pair of feature streams as its children. We’ll call them FeatureStreamA and FeatureStreamB.
Alice and Anthony are working in FeatureStreamA.
Bob and Benjamin are working on FeatureStreamB.
Everyone is happy.
Alice finishes the feature in FeatureStreamA.
Alice pushes the changes from FeatureStreamA into DevStream.
Bob and Benjamin are no longer happy.
AccuRev will automatically bring changes down from DevStream into child streams. That sounds really convenient, except if any file merge is required, the files which conflict will not be updated! They’re marked as being in ‘deep overlap’ and that’s it.
FeatureStreamB is left in a halfway state. What kind of garbage is that? A stream should never contain half a commit. Until the merges are resolved, no part of the offending commit should be in the stream.
silent update failures
Similar behaviour can be spotted when updating workspaces. If you have ‘kept’ files in your workspace, merge conflicts in those files will no longer block updates. Instead, the files will be marked as ‘overlapped’ and you’ll be left with the old version. Unless you explicitly look for the conflict, you’ll never even know it exists. Your code will just be missing a smattering of changes, breaking your program in confusing ways.
but wait, there’s more
I could rant about other similarly egregious issues, but I think I’ll save those for another time.