Click here to Skip to main content
15,895,709 members
Articles / Programming Languages / Visual Basic

Visual SourceSafe automation to get shared references

Rate me:
Please Sign up or sign in to vote.
0.00/5 (No votes)
13 Feb 2013CPOL2 min read 14K   194   1  
This paper would provide a small code snippet which will report all files from VSS (Visual SourceSafe 6.0) with shared reference instances. It will be useful for migrating files from VSS to TFS.
Imports SourceSafeTypeLib
Imports Microsoft.Office.Interop.Excel
Public Class Form1
    'VSS related declarations
    Private obj_vss_db As New VSSDatabase
    Private obj_root As VSSItem

    Private _vss_ini_path As String
    Private _input_path As String
    Private _uid As String
    Private _pwd As String
    Private _chk_linked_files As Boolean = False

    'Excel related declarations
    Private obj_excel As New Microsoft.Office.Interop.Excel.Application
    Private ows As New Worksheet
    Private owb As Workbook

    Dim _i_xl_rw As Integer
    Dim _i_xl_rw_err As Integer


    Const COL_FILE_NAME = 1
    Const COL_FOLDER_NAME = 2
    Const COL_VSS_PATH = 3
    Const COL_SHARED = 4
    Const COL_LINKS = 5

    Const COL_ERR_FILE_NAME = 1
    Const COL_ERR_FOLDER_NAME = 2
    Const COL_ERR_VSS_PATH = 3
    Const COL_ERR_LINKED_PATH = 4
    Const COL_ERR_DESC = 5
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

    End Sub

    

    Private Sub cmd_getdata_Click(sender As System.Object, e As System.EventArgs) Handles cmd_getdata.Click
        'inputs
        _vss_ini_path = txt_ini_path.Text
        _input_path = txt_root_path.Text
        _uid = txt_uid.Text
        _pwd = txt_pwd.Text
        _chk_linked_files = chk_get_linked_files.Checked

        _i_xl_rw_err = 2
        obj_vss_db.Open(_vss_ini_path, _uid, _pwd)
        obj_vss_db.CurrentProject = _input_path

        Try
            obj_root = obj_vss_db.VSSItem(_input_path & "/", False)
        Catch ex As Exception
            MsgBox("SourceSafe DB access error!" + vbCrLf + ex.Message)
        End Try

        obj_excel.Visible = True

        owb = obj_excel.Workbooks.Add

        owb.Sheets(1).Cells(1, COL_FILE_NAME).Value = "File "
        owb.Sheets(1).Cells(1, COL_FOLDER_NAME).Value = "Folder"
        owb.Sheets(1).Cells(1, COL_VSS_PATH).Value = "VSS PATH"
        owb.Sheets(1).Cells(1, COL_SHARED).Value = "SHARED"
        owb.Sheets(1).Cells(1, COL_LINKS).Value = "Shared Paths"

        owb.Sheets(2).Cells(1, COL_ERR_FILE_NAME) = "File"
        owb.Sheets(2).Cells(1, COL_ERR_FOLDER_NAME) = "Folder"
        owb.Sheets(2).Cells(1, COL_ERR_VSS_PATH) = "VSS PATH"
        owb.Sheets(2).Cells(1, COL_ERR_LINKED_PATH) = "SHARED FILE PATH"
        owb.Sheets(2).Cells(1, COL_ERR_DESC) = "ERROR DESC"
        owb.Sheets(2).Name = "Error Details"

        ows = owb.Worksheets(1)
        _i_xl_rw = 2

        Call get_sub_items(obj_root)


        MsgBox("Completed successfully!", vbInformation, "")

    End Sub


    Sub get_sub_items(root_item As VSSItem)

        Dim ProjectItem As VSSItem
        Dim strLinkList As String = ""
        Dim sShared As Boolean

        If root_item.Type = VSSItemType.VSSITEM_PROJECT Then

            For Each ProjectItem In root_item.Items
                Call get_sub_items(ProjectItem)
            Next
        Else
            If root_item.Type = VSSItemType.VSSITEM_FILE Then

                Dim objVSSLinkItem As VSSItem
                Dim LinkCount As Integer

                strLinkList = ""
                LinkCount = 0
                sShared = False

                If _chk_linked_files = True Then
                    For Each objVSSLinkItem In root_item.Links
                        LinkCount = LinkCount + 1
                        If LinkCount = 2 Then sShared = True

                        On Error Resume Next

                        strLinkList = strLinkList + objVSSLinkItem.Parent.Spec + vbCrLf

                        If Err.Number = -2147166577 Then
                            owb.Sheets(2).Cells(_i_xl_rw_err, COL_ERR_FILE_NAME) = root_item.Name
                            owb.Sheets(2).Cells(_i_xl_rw_err, COL_ERR_FOLDER_NAME) = root_item.Parent.Name
                            owb.Sheets(2).Cells(_i_xl_rw_err, COL_ERR_VSS_PATH) = root_item.Spec
                            owb.Sheets(2).Cells(_i_xl_rw_err, COL_ERR_LINKED_PATH) = objVSSLinkItem.Spec
                            owb.Sheets(2).Cells(_i_xl_rw_err, COL_ERR_DESC) = Err.Description
                            _i_xl_rw_err = _i_xl_rw_err + 1
                        End If
                    Next
                End If

            End If

            On Error Resume Next

            ows.Cells(_i_xl_rw, COL_FILE_NAME).Value = root_item.Name
            ows.Cells(_i_xl_rw, COL_FOLDER_NAME).Value = root_item.Parent.Spec
            ows.Cells(_i_xl_rw, COL_VSS_PATH).Value = root_item.Spec

            If sShared = True Then
                ows.Cells(_i_xl_rw, COL_SHARED).Value = "SHARED"
                ows.Cells(_i_xl_rw, COL_LINKS).Value = strLinkList
            End If

            _i_xl_rw = _i_xl_rw + 1
        End If
    End Sub
End Class

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Web Developer
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions