SourceSafe Import Tool Overview

Goals

To import your SourceSafe database accurately in its current state.

By current state we mean that items that are shared will be shared and items that are pinned will still be pinned. And most importantly, all revisions of non-deleted files will be imported. (Keep in mind that a file shared to a project that is not being imported will not be shared after import.)

Background

The import tool uses the SourceSafe Automation Component API to query the SourceSafe database history for file and project information. This information is used to build a list of all the events that took place over time.

What is wrong with the SourceSafe Automation Component’s API that makes this so difficult to do a 100% import?

Due to several inadequacies in the SourceSafe Automation Component API, a few compromises have been made. The decision was made that the current state of most customers’ databases was more important than the actual history. To see how this may affect you, read the section below called “How will this affect me?”.

The API is very limited in several areas, described below.

--  There are several events that do not report the item that is being modified.

Added, Deleted, Destroyed, Recovered - A parent project receives this event. The event does not contain the name of the item that was added, deleted, destroyed, or recovered.

--  History may be re-written.

Moved, Renamed – History is re-written to use the new name instead of the original name for events before the rename/move.

--  Sometimes history is just wrong.

Share a pinned file. The file in the new location is also pinned. However, the action describing the pin (in the new location) says that the old file was pinned. Unpinning this file will show the correct filename.

--  Sometimes history is missing.

We have a database that shows two files as being shared. Looking at properties shows them as shared. However, looking through history using Visual SourceSafe Explorer or through the API there is no evidence that the files were ever shared. We can tell that they are shared, but do not know when it happened.

How will this affect me?

You will not have history for several events. Specifically, the following:

--  Branch: An item that has been branched will show up as if it had never been shared.

Likewise, You will be missing history for “Share” under these circumstances.

--  Shares: Items that are currently shared will be shared in your new Vault Repository. However, the time of the share will be just after the first item in the share (alphabetically) was created.

--  Deleted, Destroyed: If it doesn’t currently exist in your database then it will not show up in your Vault Repository. No import of a deleted item occurs. No information about Destroyed items is available so they cannot be imported.

Related to this are Recovered items. The item will be imported but history will not indicate that it was ever deleted and therefore never recovered.

--  Move, Rename: Moves and Renames are not done. The item will be imported as if it had always existed at its current location.

--  Pinned, Unpinned: If the item is currently pinned it will be pinned in your new Vault Repository. Multiple pin and unpin of an item is not imported. Pin will only appear if it is pinned at time of import.

Also, due to version numbering differences between SourceSafe and Vault, every attempt is made to ensure that the correct version of the file is pinned.

Conclusion

--  We have made every attempt to accurately import your SourceSafe database. We realize that our current solution may not work for everyone and continue to try to resolve the issues mentioned above.

--  Please let us know of any problems you encounter while trying to do an import. We are also interested in any ideas you may have for improving the tool.


Thanks!

The Vault Team