Главная страница

Новости

Вопрос-ответ

Скрипты

ActiveX

Статьи

Книжная полка

Knowledge Base

Конференции

Ссылки

 

Гостевая книга

Напишите мне письмо

 

Подписка на рассылку

Рассылка 'Windows Scripting'  Архив

 

 

Лучше смотреть с Microsoft Internet Explorer 4.0 и выше

 

Создано с помощью UltraEdit

 

Запись в CSV-файл всех активных checkouts

При использовании Microsoft Visual SourceSafe у администратора часто возникает необходимость узнать, какие файлы находятся в состоянии checked-out. Приведенный здесь скрипт решает эту проблему.

В ходе своей работы скрипт создает в текущем каталоге текстовый CSV-файл со списком всех checked-out файлов и для каждого такого файла указывает его полный путь в SourceSafe, а также кто и когда сделал checkout.

Полученный CSV-файл можно загрузить в Microsoft Excel для последующего анализа.

Комментарии к коду:

  • Прежде чем запустить скрипт, измените параметры Path, User, Password и StartFrom в соответствии с Вашей ситуацией.
  • Алгоритм работы прост - мы открываем базу данных SourceSafe с заданными именем пользователя и паролем, и, начиная с заданной точки, рекурсивно обходим все проекты. В каждом проекте мы извлекаем информацию о checked-out файлах и записываем ее в текстовый CSV-файл.
  • Запись в CSV-файл осуществляется стандартно, через объект FileSystemObject.

Листинг: checkouts.vbs

Option Explicit

' Измените эти параметры в соответствии с Вашей ситуацией

Dim Path, User, Password, StartFrom
Path = "C:\Program Files\Microsoft Visual Studio\VSS\srcsafe.ini"
                        ' полный путь к файлу srcsafe.ini
User = "user"           ' имя пользователя SourceSafe
Password = "password"   ' пароль пользователя
StartFrom = "$\"        ' проект, с которого начинать рекурсию

' Создаем пустой CSV-файл и пишем в него заголовок

Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")

Dim File
Set File = FSO.OpenTextFile("checkouts.csv", 2, True)

File.WriteLine """File Path"";""User Name"";""Checkout Time"""

' Открываем SourceSafe

Dim VSSDatabase
Set VSSDatabase = CreateObject("SourceSafe.0")

VSSDatabase.Open Path, User, Password

Dim RootItem
Set RootItem = VSSDatabase.VSSItem(StartFrom)

' Рекурсивно проходим по всем проектам

Scanner RootItem.Items

' Закрываем SourceSafe

Set VSSDatabase = Nothing

' Закрываем файл

File.Close

Set FSO = Nothing

' Все

MsgBox "Finished.", vbInformation

WScript.Quit

' --------------------------------------------------------------------

' Процедура рекурсивного прохода по всем проектам

Sub Scanner(Items)
    Dim Item
    For Each Item In Items
        If Item.Type = 0 Then   ' VSSITEM_PROJECT
            Scanner Item.Items
        ElseIf Item.Type = 1 Then   ' VSSITEM_FILE
            If Item.IsCheckedOut Then
                Dim Checkout
                For Each Checkout In Item.Checkouts
                    ' цикл на случай multiple checkouts
                    File.WriteLine """" & Item.Spec & _
                        """;" & Checkout.UserName & _
                        ";""" & Checkout.Date & """"
                Next
            End If
        End If
    Next
End Sub

' --------------------------------------------------------------------