svnleave – a Tool for Cleaning-up an SVN Directory
When you need to copy a project that resides in a Subversion repository to another location or send a piece of the source code by email, you need to clean the all .svn or _svn files from its directory structure.
I know an easy way to do this by the TortoiseSVN GUI client for Windows:
This works pretty well but sometime you need more simple solution: removing all .svn directories from given project. I didn’t found any useful tool for this so I wrote one: svnleave.
My favourite programming language for writing such small programs is C#. It is highly productive, user friendly, have very good development environment and runs on any Windows machine (I mostly use Windows as desktop).
Here is the source code:
using System; using System.Collections.Generic; using System.Text; using System.IO; /** * This utility deletes all ".svn" and "_svn" directories from * the current directory and its subdirectories recursively. It * is helpful when you need to send to somebody a part of your * project that is under version control with Subversion. * * The "svn export" command can help in most cases but this * solution can be better when you cannot perform export. */ class SVNLeave { static void Main(string[] args) { string currentDir = Directory.GetCurrentDirectory(); DeleteSVNDirectories(currentDir); } /** * Deletes all ".svn" and "_svn" directories from given directory * recursively in depth. */ private static void DeleteSVNDirectories(string path) { string[] subdirs = Directory.GetDirectories(path); foreach (string subdir in subdirs) { FileInfo subdirFileInfo = new FileInfo(subdir); String subdirName = subdirFileInfo.Name; if ((subdirName == ".svn") || (subdirName == "_svn")) { DeleteSubdirectory(subdir); } else { DeleteSVNDirectories(subdir); } } } /** * Deletes a directory along with all its subdirectories. Unlike * Directory.Delete(path, true) deletes read-only and system files. */ private static void DeleteSubdirectory(string path) { string[] subdirs = Directory.GetDirectories(path); foreach (string subdir in subdirs) { DeleteSubdirectory(subdir); } string[] files = Directory.GetFiles(path); foreach (String file in files) { File.SetAttributes(file, FileAttributes.Normal); File.Delete(file); } File.SetAttributes(path, FileAttributes.Normal); Directory.Delete(path, false); } }
A compiled version svnleave for .NET Framework 2.0 is available for download here: svnleave.exe.