Интеграция репозитория информации (SVN) с Excel - PullRequest
3 голосов
/ 04 августа 2010

Я новичок в таких вещах.Вроде первый пост за всю историю программирования, так как до сих пор мне удавалось гуглить все что мне нужноСпасибо за ваше терпение :).

О моей проблеме / цели: В нашем проекте нам потребуется некоторый контроль управления документацией.У нас будет около 160 файлов .docx (все файлы уже известны), для контроля версий мы будем использовать SVN.Эти файлы будут сохранены в разных папках (далее я создам структуру репозитория), у папок будет функция фазы, на которой мы сейчас находимся в нашем проекте (у нас будет около 12 папок).Когда фаза завершена, пометьте aka.Официальный релиз будет сделан.Каждый файл будет размещен в столбце MS Excel WorkSheet с такими данными, как: Фаза, Имя, Редакция, Тег, Гиперссылка.

Что мне нужно сделать, это: Макрос, который будет искать файл в хранилище, еслинайден прочитан, его ревизия, тег (последний) .. запишите его в таблицу Excel, а также создайте гиперссылку на этот файл в другом столбце.

Структура репозитория:

  • транк
    • System_Development
      • System_Requirements_Specifications.docx
      • System_Architecture_Description.docx
      • System_Safety_Plan.docx
      • ...
    • Планирование программного обеспечения
      • Software_Quality_Assurance_Plan.docx
      • Software_Configuration_Management_Plan.docx
      • ...
    • ...
  • ветви (вероятно, не привыкнут, пока не уверены)
  • теги
    • 1
      • System_Development
        • System_Requirements_Specifications.docx
        • System_Architecture_Description.docx
        • System_Safety_Plan.docx
        • ...
    • 2
      • System_Development
        • System_Requirements_Specifications.docx
        • System_Architecture_Description.docx
        • System_Safety_Plan.docx
        • ...
      • Планирование программного обеспечения
        • Software_Quality_Assurance_Plan.docx
        • Software_Configuration_Management_Plan.docx
        • ...

Я уже сделал макрос, который делает точную вещь, но проблема в том, что он очень медленный.Как и почему?

Я использовал ShellAndWait("cmd.exe /c svn list --verbose http:\\localhost\trunk > text.txt"), проанализировал этот текстовый файл для получения папок в транке, затем проверил, какие файлы находятся в этих папках (с другим ShellAndWait для каждой папки), если они были найдены, получить номер ревизии и т. Д...

Как вы видите в конце, в моем коде команда svn была выполнена 13 раз, поэтому файл в хранилище был найден.С svn list --verbose я также получил номер ревизии.Для выполнения команды svn она длится около 0,15–0,20 секунды, поэтому сбор номера моей ревизии длится около 2 секунд.Что не проблема.

Получение тега - проблема, так как у меня есть папка в папке, так что в итоге у нас может быть около 40 или даже больше svn, что сделало бы мою функцию тега очень медленной.

Iпонятия не имею, как получить доступ к хранилищу любым другим способом, кроме svn.exe.Я думаю об удаленном доступе к хранилищу и запросе базы данных или о чем-то еще, все еще исследуя эту часть.

Надеюсь, вы понимаете мою проблему, для получения дополнительной информации, которую я могу получить целый день!Спасибо за вашу помощь!

Ответы [ 4 ]

1 голос
/ 04 августа 2010

svn list имеет опцию -R или --recursive, чтобы включить все подпапки. Таким образом, организация структуры папок таким образом, что все необходимые папки являются подпапками основной папки, уменьшит количество необходимых вызовов. В качестве альтернативы, вы можете использовать опцию --depth для контроля глубины вложенных папок по убыванию.

Выписка из svn help list Вывод:

  -R [--recursive]         : descend recursively, same as --depth=infinity
  --depth ARG              : limit operation by depth ARG ('empty', 'files',
                            'immediates', or 'infinity')

I. е. организовать ваш проект таким образом, чтобы ствол и ветви располагались относительно высоко в структуре папок, а различные фазы были ниже этого.

0 голосов
/ 15 ноября 2016

Если вы используете клиент типа Tortoise svn, который предоставляет объект, пригодный для использования в vba, вы можете запросить ваш репозиторий, не используя временный текстовый файл для анализа.

Вместо этого вы можете иметь информацию непосредственно в вашем объекте vba:

пример:

Dim oSvn As Object
Set oSvn = CreateObject("SubWCRev.object.1")

workingCopy = path & "\" & filename

oSvn.GetWCInfo workingCopy, 1, 1

If Not oSvn.IsSvnItem Then
    ErrorCode = -1
End If

Это не совсем то, что вы хотите, это просто пример прямого запроса к хранилищу из кода VBA. это быстро и легко написать

Существует множество других функций, которые поставляются с SubWCRev. Вот официальная страница.

https://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-subwcrev-com-interface.html

0 голосов
/ 04 августа 2010

Вы можете получить доступ к хранилищу, используя API для .NET.См. этот ответ

Вам, вероятно, придется использовать VSTO вместо VBA.

0 голосов
/ 04 августа 2010

Вы можете написать вещь Java, которая может обращаться к SVN-репозиторию через SVNKit напрямую, без вызова svn.exe, извлекать информацию оттуда и записывать в файлы Excel через PIO Framework.Это можно построить как веб-приложение и создавать информацию на лету ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...