#subversiontags

I have intended for a long, long time now to write a blog post about one of my favorite soapbox topics of configuration management – tagging. It can’t be a hard topic to at least understand the principle given we apply tags to Flickr, hashtags to Twitter, and tags to Facebook. The idea is to apply a piece of metadata to some type of content in each of those tools. That’s what we’re talking about with Subversion with the key being that the metadata is applied to a revision of the folders and files that you’ve put under version control. The purpose isn’t that much different in many ways from tagging in those other tools. You want to draw attention to that revision by providing meaning to the set of folders and files that makes that set important to others, or important over the passage of time.

At best, most projects apply a tag to the revision they approve for deployment into production. That means that the casual user or the new employee months or years later can see on-going development through the individual commits and associated changesets, but it appears as though one day the project team was developing as usual and then the next they suddenly felt the code was worthy of being put into production. Now that’s not usually what happens (one can never say never in some organizations) as instead the project team has a logical and often multi-step process through which to move a revision of code before it is deemed production worthy. Without tags, that information is lost and when someone asks about the process and where it might be improved, they are left with harvesting human recollections that are inherently flawed. A negative event is much like a criticism in that it carries more weight than its opposite. I’ve heard it said that it takes seven compliments to overcome one criticism. I don’t if that’s the right ratio, but it is obvious that it isn’t one to one. If we want to be able to talk accurately about what has gone on historically, we need to have it recorded in a way that keeps it correct and unchangeable.

The value of knowing what a particular engineer did on a particular day at a particular point in time is of quickly decreasing interest over time. The value of knowing what happened in our process of moving developed code to production code is likely to become more value with the passing of time. Oftentimes we just haven’t been asked the questions that require us having that information available yet, so we can’t appreciate its value. We’ve also found that tagging, labeling, or whatever a previous tool did to track this data becomes a drag on performance and scalability over time. We might appreciate some value in having this data tracked, but the trade-off for performance and scalability didn’t make it worth the effort.

Subversion tackles the issue of tagging in the exact same manner as it does branching, but obviously the use of the result is quite different for tagging than it is for branching. The process of creating a tag is consistently quick and with low overhead no matter how few or how many folders and files we’re using. In most cases, we’re talking about capturing two small pieces of data to define our tag – a pointer to the folder at the top of the structure we want tagged, and a global revision number indicating the point in time we want captured. The time and space doesn’t change if the structure contains five folders and a hundred files or if it contains 500 folders and 100,000 files. That means there is no downside to using this functionality to capture the various stages of our “promotion” process, but there is certainly a lot of potential upside. Think about how you would answer the following questions accurately without this data:

  • How many times was there a handoff from development to the release engineer before a successful test candidate could be built?
  • How many times did we go through phase M before we were successful and able to move on to phase N?
  • How much time did we spend in phase M?
  • Where do we spend the most time in our “promotion” model on average?
  • How much time does it take for us to get a release out once we’ve started down the “promotion” process?
  • What files are doing the most thrashing through the “promotion” process?
  • Who’s consistently responsible for the code issues that cause us to spend time fixing bugs and producing a new test candidate?

For many organizations applying these extra tags is a new part of their processes, but with a little time spent understanding the low cost and high value should make it obvious to add tagging. Even if your tags are more complex than the simple ones discussed above, you would be hard pressed to make a case that the potential value doesn’t significantly outweigh any cost. In short tagging is a #nobrainer.

Subversion Edge 2.2 Released

Subversion Edge 2.2 was released this week and brings some exciting new features that our users have been asking for. A general changelog for the release can be found in the wiki. Here are some of the highlights:

Subversion 1.7.2

The Apache Subversion binaries have been updated to the latest release. Subversion 1.7.2 is a bug fix release, the changelog can be found here.

Repository Templates

Prior to this release when creating a new repository your choices were to create an empty repository or to initialize it with the standard trunk/branches/tags structure. A number of users requested the ability to initialize repositories with the standard folder structure that they use in their organization, and other users have asked for the ability to install their standard hook scripts. This release introduces the concept of repository templates which provides both of these features. A repository template can either be a standard Subversion dump file or a zipped copy of a Subversion repository. In either case, the repository can contain whatever content you want and in the case of a zipped repository the template can also include hook scripts.

With this feature you could now disable our templates and replace them with your own that include things like your standard hook scripts and/or the default repository structure that you want. Technically, the template repository can include as much content as you desire, so if you have some standard document or project templates that content can also be included in the repository template.

New Create Repository UI

To go with the previous feature, and to add another one, we have revamped the Create Repository UI. When creating a repository you now have the option of initializing the repository from a template OR from a backup. This works in conjunction with the backup feature we added in the 2.1.0 release by providing a UI to restore any of those backups as part of creating your repository.

REST API – CollabNet Desktop Support

We are in the process of exposing the Subversion Edge administration capabilities via REST API. This release brings the initial release of some of that API. For this release, we focused on the API needed to address the user stories for our CollabNet Desktops. Prior to this release, the desktops only supported Subversion Edge via their capability of working with any Subversion repository. With this release, the desktops now have first class support for Subversion Edge. You can add a Subversion Edge “site” in the desktop by providing the URL and credentials for your Subversion Edge console. The desktop can then use the new REST API to retrieve the list of repositories available and make then instantly accessible in your client. If you work with multiple Subversion repositories this saves you from having to manage connections to each repository. Just connect your client to Subversion Edge and any repositories are instantly available in your client.

The Eclipse Desktop also has support for the Subversion Edge Discovery API. If your client is located on the same LAN segment as the Subversion Edge console you can click a Browse button and have your Subversion Edge server(s) discovered automatically. You still need to provide valid credentials to access the console, but this makes it easy to find it and add the correct URL.

Proxy Server Support

Many users install Subversion Edge on servers that are behind a corporate proxy. When Subversion Edge needs access to the Internet, such as to check for updates or to act as a replica for TeamForge, the proxy server needs to be configurable. Prior to this release you had to configure proxies manually by editing environment variables and configuration files. We have now pulled this into the Subversion Edge UI so you can easily configure your proxy server from the web interface.

This is our 15th release of Subversion Edge since introducing it in the summer of 2010 and there will be more releases to come in the next year. On behalf of the Subversion Edge team I want to thank you for your tremendous support for this product.  Happy Holidays! We will see you next year!

Subversion 1.7 Q & A, part 4

So… have you installed Subversion 1.7 yet?  Are you enjoying the performance increases it brings?  Is WC-NG your new best friend, or are you hanging posters around your home town which read:  “MISSING:  .svn folders.  Last seen hanging around Subversion 1.6.  REWARD OFFERED!!”?

Subversion 1.7 has been available for seven weeks now, and has already seen one subsequent patch release, with a second one (1.7.2) expected to be released today or tomorrow.  Many of you have embraced this new version of Subversion; others have not.  If you haven’t, and you aren’t quite sure what I’m talking about or don’t see the humor in my hypothetical poster’s wording above, perhaps it’s time for you to settle back into a comfy chair for about 45 minutes and watch the replay of my recent Subversion 1.7 webinar.

This post is actually the final installment of a series of follow-ups to that webinar, fielding unanswered questions asked of me and my colleague Bob Jenkins during that event.  (For the previous posts, see part 1, part 2, and part 3 of this series.)  Hopefully, you’ll find my answers enlightening.  And if not, you can at least take comfort in knowing that I’ve run out of questions to (try to) answer!


Q: What improvements have been made to the WebDAV write-through proxy? Currently, if the master server is down, the slaves don’t work either — has this been addressed in Subversion 1.7?

I’m sorry to hear that you’re having troubles with your WebDAV proxy setup.  My own experience with WebDAV proxies using Subversion 1.7 so far is that if the master server is down, the slaves continue to operate, albeit in a read-only mode. You can checkout, query logs, and so on, but simply can’t commit new changes or modify revision properties. If you’re seeing different behavior when your master server is offline, there might be a problem with your particular deployment scenario or possibly even a bug in Subversion itself that needs to be reported to the community.  Don’t look for any specific improvements to this feature that are unique to Subversion 1.7, though — all the improvements made to the WebDAV proxy code in the 1.7 timeframe (which were mostly minor bug fixes) have been backported to the 1.6.x line.

Q: Is there a plan for supporting mirrors as part of Subversion itself instead of forcing users to configure and maintain those things?

The Subversion core software doesn’t really concern itself so much with its own specific deployment. You won’t see Subversion modifying your Apache httpd.conf file automatically, or generating its own repository hook scripts, for example.  There are just too many different ways to deploy Subversion, too many different operating systems and platforms and such, etc.

Fortunately, CollabNet TeamForge 6.1 provides pain-free mirror maintenance as a value-add beyond what the core Apache Subversion distribution offers. With TeamForge, you can administer multiple Subversion Edge instances, and even configure some of your repositories on one Edge server to act as write-through proxies for other ones in another Edge server. Honestly, it’s the slickest packaging of the WebDAV proxy feature that I’ve ever seen. Check out the TeamForge 6.1 press release and TeamForge product page.

Q: We are using Subversion with LDAP Authentication. What is the best way to manage role-based access for users and project members? Do we need to use Jeremy Whitlock’s python script (http://www.thoughtspark.org/node/26)?

Jeremy’s script is useful if you need to replicate your LDAP groups into Subversion’s stock authz-file access control mechanism. But many organizations find that Subversion and LDAP are happier together and easier to administer when deployed on the server under CollabNet TeamForge, which offers real role-based access control for Subversion repositories and LDAP integration. Can you say, “No more editing access control configuration files”?

Q: What is CollabNet planning on doing with respect to their cloud offering? When will it upgrade?

CollabNet’s Codesion Cloud Services is currently still deploying Subversion 1.6.17. (If you’re interested, you can always see which product versions are deployed by Codesion at https://help.codesion.com/View.jsp?procId=e875af1afcaa7fc8e573946dfcc6a225.) But I have it on good authority that within the next few months, the upgrade to Subversion 1.7 should occur.

Q: We just upgraded TeamForge 6.1.0. How do we upgrade to the new release of Subversion?

My understanding is that the forthcoming TeamForge 6.2 will be the first TeamForge vehicle to directly offer a Subversion 1.7 integration. That said, you should be able to use TeamForge 6.1 today with Subversion Edge 2.1 as your Subversion integration server, and that will give you server-side Subversion 1.7. Of course, you can upgrade your Subversion clients immediately — they’ll work just fine against your TeamForge 6.1 server.

The answer to your Visual SourceSafe dilemma: FIVE things (we bet) you didn’t know about Subversion

On November 8th, I presented the webinar, “The answer to your Visual SourceSafe dilemma: FIVE things (we bet) you didn’t know about Subversion,” with Arneh Eskandari, SQL Tools, Red Gate Software. We introduced five powerful truths about Subversion and Arneh performed a live demo showing how to source control your database in Subversion in less than five minutes.

During the webinar, we encouraged our attendees to interact with us by participating in polls and by entering questions for the live Q&A session that we had at the end of the presentation. As a result, we received many great questions that we just couldn’t get to during the live event so we have provided answers to the audience’s questions below.

If you missed the session live, you can watch the recording and download the slides. For more information about this topic, please download my whitepaper, Economics of Migration. We have also put together a whitepaper specifically on the Five Things We Bet You Didn’t Know About Subversion. I also encourage you to download CollabNet Subversion Edge as is the answer for easy installation, administration, security, and governance of your Subversion environment.

Don’t forget to register for our upcoming webinars. CollabNet offers multiple webinars a month that cover a variety of topics related to software development.

As promised, here’s the follow up to the live audience questions.

Q: What is your Codesion offering, is it still free (I’m suspicious of free lunches!)
A:
While I like the idea of free lunches, I too am suspect when offered one. We still offer a free 30-day trial for Codesion, but after that it costs based on a price per user. We do offer a 10 user license of our Application Lifecycle Management platform, CollabNet TeamForge, for free though we do suggest you purchase support for those users.

Q: Where can you see the SVN Revision number?
A:
There are lots of places where a Subversion revision number can be viewed. Perhaps the most applicable is the Subversion info command which provides you with the revision number that reflects what you last got from the repository for your local copy (i.e., working copy) or, if given a URL path to the root of the repository (rather than a path in your working copy), the latest revision number for the repository as a whole.

Q: who is a good contact point for researching SVN support contracts?
A:
Assuming you’re talking about purchase a Subversion support contract, then I’d point you to http://www.open.collab.net/support/support-programs/subversion.html which outlines the various offerings. Or you can contact us directly about support and other topics at info@collab.net.

Q: How does RedGate Source Control resolve/prevent change conflict?
A:
SQL Source Control gives you the option to resolve a conflict by keeping your changes or taking the other developer’s changes. To merge changes from two conflicting versions of an object – resolve the conflict and then manually edit the object to include the changes from the other version.

Q: Does SQL SourceControl allow you to configure directory paths for specific database items?
A:
This isn’t configurable; it enforces a directory structure.

Q: Any obvious tips on improving SVN server performance, say if my server is 1000 miles away from our dev office and dev clients?
A:
In such a situation, your performance is likely most constrained by the network architecture and purchased bandwidth. Do a network trace to see how information is being passed between the clients and the server and based on that see if you can optimize the traffic by reducing the number of hops, etc. Monitor traffic in and out of the server site to see if you’re maxing out the bandwidth you have. If so, then consider purchasing more bandwidth. Server performance is rarely really about the server as Subversion has pretty low demands on the hardware. Certainly you can monitor CPU usage and memory with the latter more likely to be maxed out and therefore another potential area to address. As a database application, Subversion can be impacted based on the performance of the hard drives used for the repositories.

There are also additional steps you can take based on determining what operations are having performance issues. If you find it is pretty much the checkout command (which is always going to be the slowest given that everything has to be passed and then Subversion creates a second copy to help with the performance of all other operations), then often you can just establish a “reference” working copy local to the developers and instead of doing individual checkouts, they can just copy that working copy to get started. If performance is an issue across all read operations, then you might consider establishing a local replica and using Subversion’s WebDAV write-through proxy feature.

Key is not to jump to any particular solution without doing good analysis. Very few organizations need to utilize the last option discussed and most just need some fine-tuning of their network.

Q: Any way to force an SVN server to issue read-only files, in a get-latest scenario?  We like read-only, for various internal reasons.
A:
Certainly. Subversion implements this type of functionality using a property, svn:needs-lock. Applying this property to a file means that a checkout will get that file in read-only mode. The user will need to get the lock on that file on that branch to have write access. You apply properties to new files via the configuration file on your client machines so make an entry there that wildcards the applying of the svn:needs-lock property to all new files with a default value of “*”. For your current files, you’ll need to apply the property to all of them and commit that change to the repository. I’ll stay off my soapbox on not making this the default for all types of files.

Q: Will the Red Gate tool work for cloud-hosted SVN repositories?
A:
Yes. There is no reason why this would work any differently than with local repositories.

Q: My team is actually thinking about to migrate from SVN to VSS.  But now I think we should not to do that, at all.  At least, I’ll ask him to re-think about…
A:
I definitely wouldn’t consider moving from Subversion to Visual SourceSafe given that the latter is not going to be supported past June. I’d be quite interested in why you were considering that move and might be able to help you be successful with Subversion. Feel free to respond to this posting and I’ll be in touch.

Q: We saw 1.7.0 was recently released. Should we use it? What’s in it?
A:
I definitely encourage people to use the latest releases whenever possible. Open source projects operate differently than commercial tool develop in that process is never held hostage by the need to get the product out the door. That means that you don’t have to wait for 1.7.1 to feel comfortable that you’ve got a robust release. In addition to releases bringing in new functionality or optimizing existing functionality, they often include bug fixes to functionality that you are likely using on a regular basis so keeping up-to-date is important. It is also quite easy to do since you don’t have to migrate repositories to new releases so you’re only looking at upgrading the binaries (and your users are likely doing that already with the clients).

Release 1.7’s key focus was on a rewrite of the working copy structure to help both with performance as well as with increasing feature velocity moving forward. The metadata and pristine/base copy of what you check out are both moved to the top of the working copy with the metadata consolidated into a SQLite database. Other parts of this release include cutting down HTTP chatter, improving merge tracking, enforcing some best practices, enhancing change reporting, and a few administration features and improvements. I encourage you to view the webinar that I did with one of leading Subversion committers, Mike Pilato, to learn more.

Q: We are in a regulated industry and must have our history available. Can we migrate VSS with full history?
A:
I’d still consider leaving history in VSS and archiving both the repository and the tool to satisfy this need. That said, it is possible to migrate with full history depending on the amount and kind of corruption in your VSS repository as well as the time and money you want to invest in the migration. People successfully migrate from VSS, with history, all the time using open source tools. If you want to pursue this option, we do have a unique migration tool at CollabNet that allows for a bit more of the environment to be accurately reflected in the resulting Subversion repository.  One other thing, if you do choose to migrate your history, I’d recommend not migrating it into the production repository, but into a history repository. It is still a good idea to start things fresh after a move.

Q: We code mainly in C# and Java. Could/should we have those projects in the same Subversion repository?
A:
You definitely could put them in the same repository as Subversion will revision anything that you can put onto a hard drive. As whether you should, well that would take knowing more about the projects and your organization. If the projects directly relate to one another (e.g., the C# defines the back-end of the application and the Java the front-end), then it may well make sense to have them in the same project. If there is no relationship, then different repositories may make more sense (e.g., repositories by platform).

Often repository layouts are determined by access permission commonality. If an organization treats all projects the same with the same group of users given the same permissions, then it may be best to have the projects in a single repository. If the access varies based on a different set of developers for each, then separate repositories is probably better. More often than not, organizations do separate repositories by platform.

Q: What service do you recommend to make the transition to Subversion easier and more productive?
A:
I strongly recommend that organizations look at the Subversion Applied Workshop. While we frequently focus on migrating data, we often forget that we need to consider how our processes should be impacted in order to get the most out of our new version control tool and to avoid the possibility of trying to put a square peg in a round hole. An organization’s current version control process has been driven, to some extent, by what the legacy tool did well and did not do well. There is a need to go back to the core requirements, define the high level process needed to satisfy those requirements, and then apply Subversion Best Practices to implementing that process. That’s hard for an organization to do on their own since they are new to Subversion, but it is critical to being successful and happy with Subversion.

Eclipse Marketplace passed 1 million installations

Last count was at 1,033,450. The marketplace now features an impressive list of 1,200+ plug-ins. #1 download (and favorite) is Subclipse, developed by CollabNet. Glad to see the strong momentum behind Subversion (and a bit proud too). The Eclipse plugin is actually quite easy to use, I’d encourage you to check it out. And when at it, also see the Eclipse desktop, and the related training video.

What’s New in CollabNet’s Distribution including Apache Subversion, Version 1.7

Last Monday, I presented the webinar, “What’s New in CollabNet’s Distribution including Apache Subversion, Version 1.7,” with Mark Phippard, Director Engineering, Subversion and Integrations at CollabNet. We talked about the new features in Subversion Edge 2.1, the latest release of CollabNet’s Apache Subversion distribution. Specifically, we covered:

  • Browser based management console, and Subversion browser
  • Built-in update mechanism, for latest Subversion patches and features enhancements
  • New: Back-up services, and dump/load features for repository migration and upgrade.

We encouraged our attendees to come to the session armed with questions. As a result, we received many great questions that we just couldn’t get to during the live event so we have provided answers to the audience’s questions below.

If you missed the session live, you can watch the recording and download my slides. I also encourage you to download CollabNet Subversion Edge as is the answer for easy installation, administration, security, and governance of your Subversion environment. Also, don’t forget to register for our upcoming webinars. CollabNet offers multiple webinars a month that cover a variety of topics related to software development.

As promised, here’s the follow up to the live audience questions.

Q: What about Mac OSx? Any plans to support it?
A:
Note that *client-side* Subversion has been supported on Mac OS for some time.   Since Subversion Edge is used for setting up a Subversion *server*, we’ve focused on environments that are traditionally used for servers – Windows 2008, LInux, Solaris, etc.

Q: Can you commit to a replica repository? If not what the replica is used for?
A:
A Subversion Edge replica has a write-through proxy enabled, so commits can be directed at the replica, and commits will be proxied through to the back-end repository master.  Since the majority of Subversion transactions are read-only, the replica’s primary is meant for speeding up read access in remote locations, or for distributing read load across multiple replicas.

Q: What Linux distributions are supported?
A:
Red Hat 5 is officially supported.  The software runs fine on quite a distributions that we’ve seen – including CentOS, SuSE, and Ubuntu.

Q: Any tools for managing custom Subversion hooks?
A:
This is on our roadmap.  Of course, nothing prevents you from managing the hooks “manually” right now.

Q: Is there any repository migration support in subversion edge?
A:
There are several choices for migrating a repository into Subversion Edge.  You can point the repository directory to a directory that stores older FSFS-based repositories, and have Subversion Edge.  You can also dump your old repositories (of whatever format), and load that dump file into a Subversion Edge repostory.

Q: Is SVN Edge meant to manage one repository (and optional replicas)? We have multiple repositories we were thinking of moving to an Edge server.
A:
There is no fixed limit on the number of repositories that can be managed by Subversion Edge.

Q: Will there be a file/directory search function in the web UI?
A:
Not currently planned, but feel free to bring it up in the forum, or add as a user request in our User Requests tracker:  https://ctf.open.collab.net/sf/tracker/do/listArtifacts/projects.svnedge/tracker.user_requests

Q: will user properties like email be available via an API for use in my own maintainance scripts?
A
: We are working on a Rest API right now.  This sounds like a good requirement to have.  If you have any other requests for info available via API, please let us know on the forum or in the User Requests tracker: https://ctf.open.collab.net/sf/tracker/do/listArtifacts/projects.svnedge/tracker.user_requests

Q: What is the status of backward-compatibility with package containing Subversion v.1.6? Any serious limitations?
A:
Subversion maintains backward-compatibility across all its versions.

Q: Is there a way to get email list of all users that are added in edge?
A:
See the question on the APIs, above.

Q: Do you support Red Hat Enterprise 64 bit?
A: Yes!

Q: What is your technical roadmap for supporing Mac OS.  We intend to develop on Mac and deploy to Red Hat.
A:
This is fully supported today, as answered above.  The Subversion client has been supported on the Mac OS for a long while – we have many developers here who use Mac OS.  The Subversion Edge *server* can be on a different OS, and Red Hat is officially supported by us.

More questions? Post them in the comments section below.

Subversion 1.7 Q & A, part 3

This is the third of, I predict, four posts containing answers to questions asked of my colleague Bob Jenkins and I during our recent Subversion 1.7 webinar. (For the previous posts, see part 1 and part 2 of this series.) Today’s batch of questions begin to deviate a bit from the primary topic of Subversion 1.7, but that’s okay — maybe one or more of these questions were on your mind, too.


Q: How does Subversion 1.7 compare with Git and Mercurial?

I think a full comparison of Subversion with Git or Mercurial might be a bit more of an endeavor than I’m willing to engage in at the moment, so I’ll shoot for a mile-high approach.

Subversion offers centralized version control, meaning that the primary storehouse for the version history is a repository in some central location, accessed by clients whose direct interactions are solely with the repository, not with each other. The Subversion client maintains only enough information as required to complete those interactions with the repository for the purposes of version control. Information is only shared between clients after passing through the central repository — a classic hub-and-spoke model.

Git and Mercurial offer distributed version control. The primary storehouse for version history in a DVCS is still a repository, but there’s no single central repository. Instead, each client has its own private repository against which it primarily operates, and the business of sharing information between clients is actually done by sharing information from one client’s local repository with another client’s local repository. Centralization of information can occur by policy, but is not a required component of this point-to-point model.

There are pros and cons to each type of system, and the Web is full of write-ups about these. Sadly, most such write-ups that I’ve seen tend to be quite biased, so as you further research this topic, you’ll need to crank up your FUD filter. But in general, I believe it can be safely said that the DVCSes excel in everyday performance and in the maturity of their merge algorithms. Centralized version control systems, on the other hand, claim ease-of-use and enterprise-friendly aspects such as path-based access control and, indeed, centralization of information itself as their high points.

Q: Can you create local topic branches in Subversion without sharing to the central server?

You cannot. This is precisely the sort of thing that a DVCS tool allows, but for which Subversion has not been designed. That said, the Subversion developers are exploring some related features (shelving and checkpointing) for future releases which we believe will go a long way toward alleviating the need to use a full-blown DVCS tool just to get some more client-side support for locally checkpointed changes which will be committed to the central server at a later time.

Q: Will Subversion be a distributed VCS some day?

The Subversion developers have consistently agreed that the version control landscape is not really in need of yet another contender in the DVCS arena, while there remains a need for solid centralized version control. Our project’s goal is to be the very best centralized version control system — no more, no less. Efforts spent completely re-architecting Subversion as yet another DVCS would be ill-invested.

Q: Is there a limitation on the size of any given branch in Subversion?

Not really. There are certainly some things that you could do in Subversion that would make operations slower — placing a gazillion files into a single directory, for example — but there’s nothing about those scalability characteristics which is specific to branches. After all, branches in Subversion are just directories.

Q: How do we backup Subversion? How can we test restores of those backups?

There are many different ways to backup your Subversion repositories. You’ll want to determine your needs as far as backup goes: do you need full backups, will incremental ones suffice, or do you prefer a combination of both? Sometimes the answers to those questions are found in what tools and resources are available to you. Sometimes they are found by examining your restoration needs: do you need near-immediate restoration in a failover scenario, or is a longer downtime event an acceptable cost in your situation? Version Control with Subversion covers various different approaches to backup in its chapter on Repository Administration. See http://svnbook.red-bean.com/en/1.6/svn.reposadmin.maint.html#svn.reposadmin.maint.backup for details.

In terms of testing restoration, I would suggest using the ‘svnadmin verify’ command. Actually, I’d recommend occasionally using that command against any full backups that you have, too, so that if corruption of a backup occurs for some reason, you can catch that before needing to rely on that backup.

Users of CollabNet Subversion Edge will be pleased to learn that Subversion Edge 2.1 — which bundles Apache HTTP Server, Apache Subversion 1.7, and ViewVC with an easy-to-use Subversion administration console — offers automated backup capabilities. (Not on the Edge? Download it today at http://www.collab.net/getSVN/!)

Q: I need CollabNet certified binaries, but don’t really want Edge. What are my options?

CollabNet continues to produce certified Apache Subversion binaries which are distinct from our Subversion Edge product. Visit http://www.open.collab.net/downloads/subversion/ as a starting point for locating all of our available packages. There, you can see package offerings by operating system, as well as an admittedly somewhat non-obvious link to http://www.open.collab.net/downloads/subversion/svn-other.html, where our non-Edge server packages may be found.

Q: Is your support staff US-based?

(That’s an odd question for a technical webinar, but …) The short answer is, “Yes, partially.” CollabNet is an industry leader in globally distributed development for a reason: for over a decade, we’ve been successfully practicing globally distributed development using the very same platforms and tools that we offer to our customers! Headquartered in California, CollabNet currently has six additional offices located around the world, empowering us to boast of 24×7 product support delivered by staff in several time zones.

Subversion 1.7.0 Released

Subversion 1.7.0 has been officially released today.  With the release of Subversion 1.7 comes the release of Subversion Edge 2.1.0.  This release of Subversion Edge brings you the server binaries for Subversion 1.7.0 as well as the latest release of Apache httpd.  In addition to the inclusion of the Subversion 1.7 server binaries this release of Subversion Edge brings a number of other nice improvements including the addition of a complete 64-bit Windows binary stack.  As with all previous Subversion Edge releases you can simply update your existing installation from the Subversion Edge web console.  There are no other special considerations, the update mechanism handles all details.

I encourage all users to update their Subversion Edge servers to this release so that you and your users can enjoy the new features brought from this release as well as the improved performance and fixes that comes with Subversion 1.7.  Look for updates to your favorite Subversion clients to follow shortly.

Related Posts:

Subversion 1.7 Q & A, part 2

As promised, I’m continuing to answer questions posed during my recent Subversion 1.7 webinar. Today’s batch of questions were mostly queries about the release itself — whether it brings some particular feature or fixes some particular problem. Admittedly, much of what folks were asking about is not part of this current Subversion release, which can make for a somewhat disappointing read. But I would urge readers to keep the context in mind: these questions were asked immediately after I spend a half hour or so talking about all the things that Subversion 1.7 does deliver.

So without further ado, here are today’s questions and answers.


Q: We have been running into problems with working copy corruption in working copies which contain many large binary files in a single directory. Will Subversion 1.7 be more robust in this scenario?

Subversion has a great track record when it comes to avoiding corruption and data-loss scenarios, and is used by many organizations with massive data sets consisting of many large binary files, so I’m surprised to learn of your problem. Without fully understanding the root cause of the working copy corruption you are seeing, I am hesitant to claim that Subversion 1.7 delivers specific improvements for this problem. Given the vast number of improvements delivered in WC-NG, though, consider me cautiously optimistic about your case.

But let’s be scientific about this, shall we? Perhaps you could upgrade a single user to the most recent 1.7 release candidate (1.7.0-rc4, at the time of this writing) and see if the problem goes away. You should be able to safely upgrade just one user to 1.7 with zero impact on the other members of your project. If the problems appear to be resolved, great! And if not, then I’d encourage you to contact the Subversion community or your Subversion Support provider about this problem so Subversion’s developers can better understand and fix the problem you are seeing. (If you don’t have a Subversion Support provider, please consider CollabNet’s offerings in that space — see http://www.collab.net/support/subversion/ for details.)

Q: Our users currently have to use web browsers to determine their particular project’s URL. Can the Subversion 1.7 client display a “collection of repositories” HTTP page?

No, the Subversion 1.7 client does not offer such a feature, but it sounds like an interesting idea. If you have a suggestion for how this feature might work if added to Subversion, let us know at dev@subversion.apache.org!

Q: Does Subversion 1.7 deliver the obliterate feature? If not, will CollabNet be addressing that feature?

There was a good deal of noise made during the Subversion 1.7 development cycle about a forthcoming obliterate feature, and even some trivial amount of progress made toward that feature. Unfortunately, nothing meaningful resulted from those efforts and users were left holding only empty promises. CollabNet, as the only company that has been an active sponsor of Subversion development throughout the entire history of the project, has been working with the community all along to resolve the difficult design challenges here. From our uniquely experienced perspective, we at CollabNet believe that to solve the obliterate problem, Subversion’s repository design must be revisited. This is not the sort of feature that can be cleanly tacked on to the existing design.

The good news is that the Subversion developers have discussed the idea of a repository rewrite and recognize the value that such a major overhaul could bring. But that value comes at a very high development cost, so for now we’re prioritizing features and enhancements that bring more of daily impact to Subversion’s users. You can be sure, though, that when the community decides that the time is right for a repository redesign, CollabNet’s Subversion developers will actively participate in that effort.

Q: Is there any support for checking out a single file or do you still have to check out an entire directory?

At this time, you still have to check out at the granularity of a directory. Now, the sparse directories feature will at least allow you to check out a directory and include only a single file in it, excluding all other items that would normally have been in that directory. But alas, you still need the containing directory. There has been some talk amongst the developers of moving the working copy administrative information (the .svn directory) to a still-more-centralized location (such as the user’s home directory) in the future. That change could open the door to allowing single-file checkouts.

Q: What is the best locking strategy? Is it better to use built-in locking properties or to add customized hook scripts?

First, if you find that your reflex action is to lock a file before editing it without regard to what kind of file it is, you might have picked up some bad habits from lesser version control systems. (If this is a widespread problem in your organization, consider getting some professional Subversion training.) Having said that, there are appropriate occasions for locking, even in Subversion. Remember, proper locking is all about avoiding wasted time through better communication. When used correctly — to save your peers time wasted editing unmergeable files that you’re already modifying — it’s a good thing. When used excessively and unnecessarily, you may actually waste more time by forcing your team to serialize what could have been perfectly manageable concurrent file modifications. But I’ll spare you the sermon, as I’ve covered all of this already in the Subversion book: http://svnbook.red-bean.com/en/1.6/svn.advanced.locking.html.

I would suggest that if you must lock, you do so primarily using the built-in locking feature and that you set the svn:needs-lock property on files whose contents aren’t line-based (binary files) or for which merge conflicts happen often in your environment. Subversion clients will recognize the svn:needs-lock property and toggle your OS filesystem’s permission bits to mark unlocked files which need locks as read-only. This can serve as an immediate form of communication to the user that, hey, he needs to lock this file. And, of course, when he then locks the file, that action is itself a form of communication to his peers. (Are you sensing the importance of communication yet?) That said, Subversion won’t require that a file carrying the svn:needs-lock property actually be locked when you commit to it. Also, Subversion won’t require users to set the svn:needs-lock property on any new files they add to version control which might benefit from that property. So you might wish to use hook scripts for those bits of supplemental enforcement.

Q: Are there any plans to include labeling and the ability to use the labels to perform builds?

The Subversion developer community is not planning to add a labeling feature at this time. Subversion’s architecture differs significantly from many tools which offer this capability in that directories are first-class version control objects, not mere containers for versioned files. On the plus side, this is why tagging in Subversion is so simple and efficient versus the similar action in other systems. Unfortunately, a consequence of this design is that per-file-revision labeling — and a mechanism for using said labels in build contexts — is a complicated feature to develop.

Q: Does Subversion 1.7 allow you to graph the history of merges?

The Subversion core software is a collection of libraries and command-line programs, and the terms “graph” and “command-line” don’t intersect often. But the information required to create such a graph does exist within your Subversion repository if you’ve been using the merge tracking feature. That information is accessible through Subversion’s APIs (though perhaps not in a fashion which is particularly optimized for this sort of graph display). Various third-party tools and clients such as SmartSVN and Subclipse claim support at various levels of revision and merge graphs.

Q: Regarding the new ‘svn switch’ restrictions: if I’m trying to switch from “branches/v1″ to “branches/v2″, but accidentally leave off the “v2″ part, does Subversion consider the “branches” parent directory an ancestor of my branch?

An ancestral relationship, as it is used in this context, means that the two items share version history, not that one is a parent of the other in the filesystem space. Clearly the “branches” directory is a distinct versioned object from its own children. So in your scenario, ‘svn switch’ will now print an error that indicates that “branches” shares no common ancestry with “branches/v2″ (and that you can use –ignore-ancestry to bypass that sanity check). In fact, it was precisely this scenario that caused me to introduce this additional sanity check into Subversion, as I seem to accidentally leave off that final branch-name far too often!

Subversion 1.7 Q & A, part 1

Last week, my colleague Bob Jenkins and I presented a webinar introducing folks to the forthcoming Subversion 1.7.0 release. As always, there were right many questions asked of us during the designated Q & A period and not enough allotted time to answer them all. So, we promised to answer the unanswered questions here on this blog. This is the first batch of those questions and our answers. We’ve grouped questions into general categories, merged similar or related questions, and slightly rephrased some questions based on our interpretation of them. If you don’t see your question here, keep watching this space — maybe we’ll hit it in one of the subsequent batches of Q & A responses.


Compatibility

Q: Can a pre-1.7 Subversion client communicate with a Subversion 1.7 server? How about the opposite: a 1.7 client and an older server?

Yes. The Subversion project has always guaranteed client/server compatibility across all 1.x releases. Obviously, you might miss out on some of the newer benefits when you use older clients or servers, though. For example, you can use the latest and greatest client, but if your server is still running Subversion 1.4, you won’t have any merge tracking capabilities (added in Subversion 1.5) or server support for the HTTPv2 protocol changes (new to Subversion 1.7). Subversion will still function properly, but may operate more slowly over HTTP networks; you’ll still be able to perform merges, but Subversion won’t track them for you.

Q: Will the language bindings (Perl, Python, etc.) be updated to take advantage of Subversion 1.7?

The language bindings maintained by the Subversion project tend to track the Subversion C API and changes made to it pretty closely. This is facilitated by the fact that the Python, Perl and Ruby bindings are mostly auto-generated from exactly that C API.

The Java bindings have also been updated for 1.7.  In fact, they’ve undergone some pretty significant changes in 1.7. First, due to the move of the project to the Apache Software Foundation, the JavaHL bindings package now lives in the org.apache.subversion namespace. (We’ll still ship the old org.tigris.subversion package for compatibility, of course.) Also, the maintainers of that package have begun taking advantage of some of the language features of Java 1.5, which is the new minimum Java version requirement.

Upgrading

Q: How do I upgrade from Subversion 1.6 to 1.7? Will every client need to update their working copy the first time they try to access it after upgrading?

I’ll answer these in reverse.

Working copies will not need to be updated the first time they are accessed. They will, however, have to be upgraded. The 1.7 command-line client introduces a new ‘svn upgrade’ subcommand for transforming a pre-1.7 working copy into a 1.7 working copy. This is a local metadata storage change only, though. ‘svn upgrade’ does not contact the server and does not modify the content of the users’ working files. That said, it is a significant metadata storage change, and one that will take longer to complete on larger working copies.

As for the actual upgrade itself, you’ll want to do this in the fashion recommended by your Subversion package provider. If you are using your operating system’s distribution-provided Subversion packages, you should be able to update those packages as you would any other package, resulting in the removal of the old Subversion binaries and the installation of the new ones on your system. Admins who are hosting Subversion services using CollabNet Subversion Edge can take advantage of that software’s build-in upgrade functionality, too. You’ll probably want to upgrade all of your Subversion-related client-side packages at the same time (which implies that you might not wish to upgrade any of them until you’re sure that they all have posted new releases offering Subversion 1.7 compatibility). The reason is due to the first part of my answer: you must upgrade your working copies to the 1.7 format in order to use them with Subversion 1.7, and once you upgrade them you cannot use them with older Subversion releases.

I will note here, though, that the Subversion project strongly recommends that you run ‘svn cleanup’ on your working copies before upgrading to Subversion 1.7. This is because working copies with metadata in an inconsistent state may not be able to be successfully upgraded. See http://subversion.apache.org/docs/release-notes/1.7.html#wc-upgrade for more information.

Q: For users with multiple working copies from multiple repositories, how do you recommend upgrading all those independent working copies at once? Since the 1.7 TortoiseSVN client does not show icon decorators on 1.6 working copies, it could be difficult to find all old working copies after upgrading.

That’s a great question. I reached out to Stefan Küng of the TortoiseSVN project to get his perspective. He tells me that TortoiseSVN will identify pre-1.7 working copies as being under version control using the normal icon overlay for versioned directories, but only if you have the “Show excluded root folders as normal” option enabled. (Note that TortoiseSVN will not to use a distinct icon overlay for the special case of “working copy in need of upgrading”, just the normal “this is versioned” icon. See http://tortoisesvn.net/faq.html#ovlnotall for why this decision was made.) So, as long as the aforementioned option is enabled, you should still be able to see that your old working copies are, in fact, working copies. It’s just that when you right-click on such a working copy, you get only the “SVN upgrade working copy” menu option. This is described more fully in the TortoiseSVN 1.7 release notes: http://tortoisesvn.net/tsvn_1.7_releasenotes.html#wcformat. Note that one down side of the “Show excluded root folders as normal” option is that it is expensive, performance-wise. So Stefan recommends that folks enable the option only until they are sure that all their working copies have been upgraded to the 1.7 format, and disable it afterwards.

Availability

Q: When will CollabNet officially release its certified versions of the Subversion 1.7 server and client?

CollabNet’s certified packages are typically released within 48 hours of the open-source project’s release of the corresponding source code. As good citizens of the Apache Subversion ecosystem, CollabNet does not release binary packages of Apache Subversion software that has not received the prior blessing of the Subversion developer community. And as good stewards of your trust, CollabNet does not release binary Subversion packages until we’ve completed our thorough quality assurance measures. As a result of these promises made to you and to the greater Subversion community, this typically means that our packages come out a day or so after the Subversion project’s source code releases.

Q: Will CollabNet update Subversion Edge to Subversion 1.7 soon after the 1.7 release?

Absolutely! We’re already in the process of finalizing the next release of Subversion Edge, and it will carry Apache Subversion 1.7. Expect a new Subversion Edge release shortly after the release of Subversion 1.7 itself.

Q: When will binaries be available for OS X?
Q: Can I get binary packages for the AIX platform?

I’ll these two questions simultaneously. The Subversion project maintains a list of known providers of binary packages for various platforms at http://subversion.apache.org/packages.html. Unfortunately, I’m unable to predict the release schedule of any of the various third parties who generate these packages. Even the AIX and MacOS X packages hosted at openCollabNet are not actually generated by CollabNet, but by awesome volunteers who build these packages and post them to CollabNet’s hosting platform. Experience teaches that Subversion 1.7 packages for both of these operating systems should be available relatively soon after the project releases the 1.7 source code, though.

Q: Will we be able to get 1.7 compatibility in the various third-party Subversion clients and integrations (Eclipse, TortoiseSVN, VisualSVN, Microsoft Studio, etc.)? When?

Many of the third-party providers of Subversion clients and integrations are already working toward Subversion 1.7 compliance, and some have even completed this work. For example, you can grab builds of TortoiseSVN that are already fully integrated with Subversion 1.7′s recent release candidates. The leaders of the AnkhSVN and Subclipse projects have informed me that they’ve mostly finished their planned changes for Subversion 1.7 support, and that their new software versions should be available shortly after Subversion 1.7 itself is released. Contact the individual communities behind these tools for the specific details of their release schedules, but it looks as though 1.7 will have great tool coverage — at least for the most commonly used tools — within mere days of its release!

Q: When will the Subversion book be updated to cover Subversion 1.7?

The Subversion book has already been updated to cover most of the changes in Subversion 1.7. I currently lack updates for chapter 4 (“Branching and Merging”) and chapter 9 (“Reference”), but hope to get those shortcomings addressed soon. You can watch the progress on this task via the following wiki page: http://code.google.com/p/svnbook/wiki/SvnBook17Status