Monday, August 3, 2009

SourceSafe history report - from the command line

Sometimes it is really useful to be able to do a history report on your SourceSafe archive. For instance, what check-ins did the developer called X make between 1 June 2009 and 30 June 2009?

Surprisingly it can be tough to search out the exact info you need to make this work effectively. Having this sort of reporting is also really helpful when putting together release notes, especially if developers use the 'comment' feature when checking items in, and mention specific bug cases (you are using a bug tracking product, aren't you?).


Here is how you do it. Open up a command prompt. Then you need to set an environmental variable called SSDIR, this is so the following commands know what repository we will be working with. To do this type the path to the folder containing the srcsafe.ini file of the repository:

C:>set SSDIR=c:\Program Files\Sourcesafe\

Note the trailing slash, and note that the filename itself is not included. Then you need to navigate to the folder where sourcesafe is installed:

C:>cd C:\Program Files\Microsoft Visual SourceSafe

Then we use ss.exe to generate the history report. This particular command gives me all the files that were checked in between 0900 on the 1st July and 0900 on the 30th July.

C:\Program Files\Microsoft Visual SourceSafe>ss history "$/Projects/My Project" -Oc:\history.txt -R -vd30/07/09;09:00a~01/07/09;09:00a

Breaking down the command line arguments:


















Command optionWhat it means
history ss.exe can be used for many things - we are telling it to do a history report.
"$/Projects/My Project"Path to the project i want reported on in the SourceSafe repository pointed to by SSDIR.
-Oc:\blah.txt-O means output, and then i specify the file i want the data outputed to.
-RThis is the recursive flag, IOW it means do all projects (folders) under the project specified as the start point.
-vdThis is the bit that limits the date. In my case the dates are in real english format (dd/mm/yy), not US format. The later date is listed first. The tilde (~) indicates that it is a range. The time is included with the date by separating it with a semi-colon, and the AM/PM is indicated by using either 'a' or 'p'.


This gives me a nice little text file called history.txt that i can scan through (or programmatically parse), it looks a little like this:

**********************
Label: "1.0.0.635"
User: Builder Date: 31/07/09 Time: 5:02p
Labeled
Label comment: Automated Build of Version 1.0.0.635

***** AssemblyInfo.cs *****
Version 29
User: Builder Date: 31/07/09 Time: 5:02p
Checked in $/Projects/My Project/Properties
Comment: Automated Build of Version 1.0.0.635

***** GridView.cs *****
Version 41
User: Shane Date: 16/07/09 Time: 4:27p
Checked in $/Projects/My Project/Controls/GridView
Comment: case 12345, changed how a column was rendered







Keywords: sourcesafe, history report, command line

3 comments:

HoyaBaptiste said...

Thanks for this post... It helped me with our automated build.

shane said...

No worries, glad you found it useful. There are a few other handy command line options that can be used with ssafe, i may blog those in the future.

Unknown said...

How can you stop the version from being displayed in your output?
I'm running the following command:
ss.exe history $/ -r -yUser,Password -f -vdEndDate~StartDate;7:00a

I would like to be able to see the history from today back to when a certain label has been applied, like in GUI, when you right-click on a project, select show history and in the Project History Options menu I insert my label name in the From field, having enabled the options recursive, include file history, include labels. Do you know how could I achieve this?