Skip to content

Find new, modified and unversioned Subversion files on Windows

Nobody likes to break the build. When I do it, it is often because I forgot to add a file to the repository. The build server will not get it and the build will break.

This Windows batch file will parse Subversion’s svn up output and show you what files were modified, but also what files should be added.

It looks for C++, C, H, PHP, Python, Java and then some. You can easily add your own to the list.

To use simply call localfiles.bat from any versionned directory. Anything you add to the command line will be passed along to svn up. Try these variations :

  • localfiles.bat -u to see potential update conflicts.
  • localfiles.bat c:\the\path\to\my\project\sources works, you can run the command from anywhere
  • localfiles.bat --ignore-externals or any other Subversion command you can think of

In the sample output (below) you will see

  • New Source Files are source that were added (localy) but never comitted.
  • Modified Source Files are source that are under source control and were modified locally.
  • Unversioned Source Files are source that probably should be under source control.
  • Each file is listed, with (no source file) if it looks ok.
$ localfiles.bat C:\Users\Guillaume\src\Projects\aucun.selfserve

Gathering data...

======================================
 New sourcefiles
======================================
(none found)

======================================
 Modified sourcefiles
======================================
M       C:\Users\Guillaume\src\Projects\aucun.selfserve\GINA\SecurityHelper.cpp
M       C:\Users\Guillaume\src\Projects\aucun.selfserve\GINA\loggedout_dlg.cpp
M       C:\Users\Guillaume\src\Projects\aucun.selfserve\common\Trace.c
M       C:\Users\Guillaume\src\Projects\aucun.selfserve\GINA\GinaHook.c

======================================
 Unversioned files
======================================
?       C:\Users\Guillaume\src\Projects\aucun.selfserve\GINA\StaticPrompt.cpp
?       C:\Users\Guillaume\src\Projects\aucun.selfserve\shellie\shellie_p.c
?       C:\Users\Guillaume\src\Projects\aucun.selfserve\shellie\dlldata.c
?       C:\Users\Guillaume\src\Projects\aucun.selfserve\shellie\shellie_i.c
?       C:\Users\Guillaume\src\Projects\aucun.selfserve\shellie\shellie.h

Here is the file. I gave it a txt extension, in case you are behing a paranoïac corporate proxy.