Как лучше всего, используя TFS API, добавить метку в файл? - PullRequest
1 голос
/ 26 марта 2010

Я хотел бы добавить метку к набору файлов, используя TFS API. Мой код выглядит так:

VersionControlLabel label = new VersionControlLabel(this.vcServer, this.label,
                this.vcServer.AuthenticatedUser, this.labelScopeDirectory, this.labelComment);

            List<LabelItemSpec> labelSpecs = new List<LabelItemSpec>();

            // iterate files and versions 
            foreach (var fileAndVersion in this.filesAndVersions)
            {
                VersionSpec vs = null;
                Item i = null;
                // i have no idea why the itemspec is needed instead of the item and version... 
                ItemSpec iSpec = new ItemSpec("{0}/{1}".FormatString(this.source, fileAndVersion.Key), RecursionType.None);
                GetItemAndVersionSpec(fileAndVersion.Key, fileAndVersion.Value, out vs, out i);
                labelSpecs.Add(new LabelItemSpec(iSpec, vs, false));
            }

            this.vcServer.CreateLabel(label, labelSpecs.ToArray(), LabelChildOption.Merge);

(там есть несколько методов расширения ... все это в значительной степени снято с этого сообщения в блоге )

Что меня беспокоит, так это в MSDN документах :

This enumeration supports the .NET Framework infrastructure 
and is not intended to be used directly from your code. 

Так что MSDN говорит мне не использовать это перечисление (LabelChildOption), которое на самом деле является единственным способом создать метку и добавить ее в файл.

Есть ли лучший способ? Является ли этот вид «серой» области в TFS API?

1 Ответ

2 голосов
/ 26 марта 2010

// я понятия не имею, зачем нужен itempec вместо item и version ...

ItemSpec содержит RecursionType. Если вы заранее знаете, что собираетесь пометить все дочерние элементы папки (1-уровня или с полной рекурсией во все подпапки), вы можете использовать ItemSpec, чтобы значительно сократить размер LabelItemSpec [], передается на сервер и с сервера.

Является ли эта разновидность "серой" области в TFS API?

Не серый, просто плохо документирован. Метки являются своего рода запоздалой мыслью в TFS; они не играют никакой роли в «способе Microsoft» управления SDLC, и поэтому вы вообще не найдете их в руководстве. Из того, что я могу сказать, они в основном там для полноты функции (иначе конкурентный анализ). Они также удобны для нескольких сложных одноразовых манипуляций с базой данных, которые в противном случае были бы невозможны из клиентского API.

Прочитайте объяснение Бака Ходжеса в разделе «Содержимое сообщества» под статьей MSDN - это важная часть. Replace, как правило, ближе к тому, что хотят люди, чем Merge, но если вы уверены, что создаете новый лейбл, это не имеет значения.

...