Использование Microsoft.TeamFoundation.VersionControl.Client для загрузки определенных файлов из VersionSpec

Я пытаюсь найти все.sql-скрипты, вставленные в мой тестовый командный проект TFS в течение определенного периода времени, а затем получить либо ссылку для просмотра файла, либо загрузить копию за пределами моего рабочего пространства. Так что я не хочу получать последние новости. Это будет для приложения, чтобы просмотреть все специфические изменения.sql, выполненные в течение определенного периода времени, и затем я буду сравнивать эти файлы с разветвленной средой, чтобы определить, какой.sql был скопирован и запущен для базы данных.

Я застрял при получении ссылки для просмотра файла или загрузки файлов. Проблема, которую я предвижу при загрузке файлов, заключается в том, что я собираюсь загрузить сотни файлов, и что я действительно сделаю для просмотра каждого файла, чтобы определить, могу ли я повторно запустить скрипт.sql в другой среде вне Test.

 public void GetChangesets(DataTable files,
                           bool excludeManualDatabaseFiles,
                           bool containsExcludedDerictoriesAndFiles)
    {
        // this gets collection-lvl services, in contrast to TfsConfigurationServer (server-lvl)
        Uri serverUri = new Uri("<insert serverUri>");
        var tpc = new TfsTeamProjectCollection(serverUri);
        var vcs = tpc.GetService<VersionControlServer>();

        DateTime testDate;
        DateTime.TryParse("2017-07-01", out testDate);

        VersionSpec fromDateVersion = new DateVersionSpec(testDate);
        VersionSpec toDateVersion = new DateVersionSpec(DateTime.Now);

        vcs.QueryRootBranchObjects(RecursionType.Full);

        string teamProjectName = "<insert team project name>";
        TeamProject[] tps = new TeamProject[]
        {
            vcs.GetTeamProject(teamProjectName)
        };

        DataTable returnedChangesetDetail = new DataTable();
        // Step 1: THIS WORKS
        returnedChangesetDetail.Columns.Add("FileName");
        // Step 2: THIS DOES NOT WORK, this is currently empty !!!!!!
        returnedChangesetDetail.Columns.Add("Uri");


        foreach(TeamProject tp in tps)
        {
            IEnumerable changesets = vcs.QueryHistory(string.Concat("$/", tp.Name, "/Test/SQL"), 
                VersionSpec.Latest,
                deletionId: 0,
                recursion: RecursionType.Full,
                user: null,
                versionFrom: fromDateVersion,
                versionTo: toDateVersion,
                maxCount: int.MaxValue,
                includeChanges: true,
                slotMode: true);



            foreach(Changeset changeset in changesets)
            {

                foreach(Change change in changeset.Changes)
                {
                    string fileName = change.Item.ServerItem;
                    // I think this would be it but its not an accessible link, do I add/remove
                    // something to make this a Uri?
                    //var artifactUrui = change.Item.ArtifactUri; 

                    // Step 1: WORKING
                    lstbxFileNames.Items.Add(fileName);

                 }
            }

        }

    }

Я надеюсь, что комментарии объясняют то, что я ищу. Это будет приложение для не-dev, но технического пользователя, чтобы иметь возможность просматривать изменения, необходимые в их среде. Им нужно будет просмотреть около 100 файлов, и я подумал, что Uri будет для них простым способом увидеть изменения, а затем выбрать нужные им файлы, игнорируя изменения, найденные на шаге 1, но определенные как ненужные.

1 ответ

Там нет URL загрузки файла.

Если ваша версия TFS - TFS 2015 или выше, вы можете использовать ссылку REST API для элементов управления версиями (убедитесь, что у текущего пользователя есть разрешение на доступ к целевым файлам).

В противном случае вы можете предоставить кнопку / гиперссылку с аргументами Path и version (date), затем загрузить файл (временный файл) с помощью метода DownloadFile и отправить поток содержимого (чтение содержимого по потоку) клиенту, чтобы пользователь мог сохранить его на локальном компьютере. в событии нажатия кнопки / гиперссылки.

Другие вопросы по тегам