Командная строка tfs эквивалентна «объединению» в .NET

EDIT: плохая формулировка моего вопроса. Чего я пытаюсь добиться, так это «отбросить» историю слияния набора изменений.

EDIT 2 Я придумал, как удалить набор изменений из очереди кандидатов на слияние. Я не думаю, что это хорошая идея, но я включаю код просто для «полноты».

СЦЕНАРИЙ: разработчик исправляет ошибку в ветке и регистрируется. Затем разработчик исправляет ошибку в транке вместо слияния (транк сильно изменился, поэтому слияние не происходит). Однако набор изменений появляется в списке при слиянии из ветки в ствол. Я пытаюсь пометить этот набор изменений, чтобы удалить его из этого списка. Это можно сделать с помощью утилиты командной строки, передав переключатель «отменить»... Я пытаюсь добиться того же, используя API TFS.

Я думаю, что я довольно близок к использованию метода слияния, но не уверен в параметрах для передачи. Я НЕ хочу выполнять слияние, просто хочу пометить набор изменений как объединенный без слияния

получили список наборов изменений из TFS с помощью приложения Winforms и хотели бы иметь возможность объединить набор изменений, вызвав для него discard с помощью С#

команда слияния находится здесь

можно ли это сделать с помощью библиотек TFS .NET или мне нужно вызвать редактор командной строки из приложения winforms?

//get the merge candidates
IEnumerable<MergeCandidate> mergeCandidates =
                _vcs.GetMergeCandidates(cboSource.Text, cboTarget.Text, RecursionType.Full)
                    .OrderByDescending(x => x.Changeset.ChangesetId)
                    .AsEnumerable();


//user select a changeset from a grid and then I want to discard this changeset from the //'merge list'

 string _changeset = grdChangeSets.CurrentRow.Cells[0].Value.ToString();
            VersionSpec vfrom = VersionSpec.ParseSingleSpec(_changeset, null);
            VersionSpec vto = VersionSpec.ParseSingleSpec(_changeset,null);
            _workspaces[0].Merge(cboSource.Text, cboTarget.Text, vfrom, vto, LockLevel.None, RecursionType.Full,
                                 MergeOptions.AlwaysAcceptMine);

ИЗМЕНИТЬ 2 КОД

string _changeSetId = grdChangeSets.CurrentRow.Cells[0].Value.ToString();


            VersionSpec vfrom = VersionSpec.ParseSingleSpec(_changeSetId, null);
            VersionSpec vto = VersionSpec.ParseSingleSpec(_changeSetId, null);


            UsiWorkspace wksp = new UsiWorkspace();
            wksp.ResolveConflicts(_workspaces[0]);

            GetStatus getStatus = _workspaces[0].Merge(cboSource.Text,
                cboTarget.Text, 
                vfrom, 
                vto, 
                LockLevel.None, 
                RecursionType.Full, 
                MergeOptions.AlwaysAcceptMine);


var _conflicts = workspaces[0].QueryConflicts(null, true);
            foreach (Conflict conflict in _conflicts)
            {
                conflict.Resolution = Resolution.DeleteConflict;
                workspace.ResolveConflict(conflict);
            }



            var wip = new WorkspaceCheckInParameters(_workspaces[0].GetPendingChanges(),string.Format("CHECKED IN FROM TFS TOOL - {0} {1}", DateTimeOffset.Now.ToString(), Environment.UserName))
                {

                    OverrideGatedCheckIn = ((CheckInOptions2) _vcs.SupportedFeatures & CheckInOptions2.OverrideGatedCheckIn) ==
                        CheckInOptions2.OverrideGatedCheckIn,
                    PolicyOverride = new PolicyOverrideInfo("CHECKED IN FROM TFS TOOL - POLICY", null)
                };

            _workspaces[0].CheckIn(wip);

person kurasa    schedule 28.05.2013    source источник
comment
У вас есть код?   -  person Dustin Kingen    schedule 28.05.2013


Ответы (1)


В API TFS есть метод слияния: http://msdn.microsoft.com/en-us/library/ff731634.aspx

Возможно что-то вроде этого:

var status = _workspace.Merge(sourceTfsPath, targetTfsPath, null, null, LockLevel.None, RecursionType.Full,
    MergeOptions.AlwaysAcceptMine);
Trace.WriteLine(status.NumOperations);
var conflicts = _workspace.QueryConflicts(null, true);
foreach (var conflict in conflicts)
{
    conflict.Resolution = Resolution.AcceptYours;
    _workspace.ResolveConflict(conflict);
}
person Philippe    schedule 28.05.2013
comment
это кажется ответом, за исключением того, что я не понимаю, как я могу «отбросить» - person kurasa; 29.05.2013
comment
спасибо, Филипп - я не очень хорошо сформулировал исходный вопрос. Я пытаюсь отказаться от набора изменений. Исправление было реализовано вручную без необходимости слияния, и я просто хочу пометить историю набора изменений как отброшенную, чтобы она больше не появлялась в списке. Я отредактирую свой вопрос и включу код. Я думаю, что ваш ответ определенно движется в правильном направлении - person kurasa; 29.05.2013
comment
Я лучше понимаю вашу проблему, и у меня нет хорошего решения для нее. Возможно, хороший способ сделать это — создать ветку исправления из набора изменений, общего для всех веток, содержащего только ваше исправление ошибки, и объединить эту ветку с вашей основной веткой и вашей веткой разработки. Таким образом, вы не должны раздражаться при слиянии вашей ветки dev в вашем транке... - person Philippe; 29.05.2013
comment
Спасибо за вашу помощь. Я нашел способ получить набор изменений списка кандидатов на слияние, используя слияние с последующей регистрацией. Я отредактирую OP, чтобы включить код. Лично я не думаю, что то, что я сделал, является хорошей идеей, но меня попросили провести расследование и попытаться найти решение для команды. Я также представлю это команде. Спасибо еще раз - person kurasa; 30.05.2013