Выборочная проверка в политике в TFS? - PullRequest
2 голосов
/ 26 мая 2011

У нас есть некоторые xml-файлы в нашем проекте, и всякий раз, когда мы регистрируем эти xml-файлы в TFS, перед проверкой мы должны убедиться, что добавили эти xml-файлы в проприетарное приложение.

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

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

Пожалуйста, предложите, если такая возможность возможна, и любой соответствующий код или ссылки будут действительно оценены.

Ответы [ 3 ]

2 голосов
/ 26 мая 2011

Я бы создал собственный шаблон сборки, который проверяет наличие этих XML-файлов.Сделайте это закрытой регистрацией, и вы получите свое решение.

2 голосов
/ 26 мая 2011

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

Можете ли вы программно определить, проверяются ли соответствующие файлы XML?Если это так, вы можете создать собственную политику регистрации, которая завершится неудачно, если XML-файлы не ожидают добавления.

Gated Check-in может быть лучшим решением этой проблемы: сбой сборки, если эти XMLфайлы не существуют - или модульные тесты не пройдут, если эти файлы отсутствуют?Если это так, то это идеальный кандидат на регистрацию заезда, которая предотвратит эти проверки.

1 голос
/ 31 января 2014

Метод Evaluate должен быть быстрым и не должен отображать пользовательский интерфейс, но в политике есть событие, которое срабатывает, когда пользователь взаимодействует с политикой, называемой Activate, это хороший момент для отображения пользовательского интерфейса и общаться с политикой. Вы могли бы сделать что-то вроде этого:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace JesseHouwing.CheckinPolicies
{
    using System.Windows.Forms;

    using Microsoft.TeamFoundation.Client.Reporting;
    using Microsoft.TeamFoundation.VersionControl.Client;

    [Serializable]
    public class ConfirmPolicy :PolicyBase
    {
        private AffectedTeamProjectsEventHandler _affectedTeamProjectsEventHandler;
        private EventHandler _checkedPendingChangesEventHandler;

        public ConfirmPolicy()
        {
        }

        public void StatusChanged()
        {
            _userconfirmed = false;
            OnPolicyStateChanged(Evaluate());
        }

        public override void Initialize(IPendingCheckin pendingCheckin)
        {
            _affectedTeamProjectsEventHandler = (sender, e) => StatusChanged();
            _checkedPendingChangesEventHandler = (sender, e) => StatusChanged();

            base.Initialize(pendingCheckin);
            _userconfirmed = false;                
            pendingCheckin.PendingChanges.AffectedTeamProjectsChanged += _affectedTeamProjectsEventHandler;
            pendingCheckin.PendingChanges.CheckedPendingChangesChanged += _checkedPendingChangesEventHandler;
        }

        protected override void OnPolicyStateChanged(PolicyFailure[] failures)
        {
            _userconfirmed = false;
            base.OnPolicyStateChanged(Evaluate());
        }

        public override void Activate(PolicyFailure failure)
        {
            if (MessageBox.Show("Confirm the policy?", "Policy Check", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                _userconfirmed = true;
                base.OnPolicyStateChanged(Evaluate());
            }
        }

        public override PolicyFailure[] Evaluate()
        {
            if (_userconfirmed == true)
            {
                return new PolicyFailure[0];
            }
            else
            {
                return new PolicyFailure[]{new PolicyFailure("User must confirm", this)};
            }
        }

        public override string Description
        {
            get { throw new NotImplementedException(); }
        }

        public override bool Edit(IPolicyEditArgs policyEditArgs)
        {
            return true;
        }

        public override string Type
        {
            get
            {
                return "User Confirm";
            }
        }

        public override string TypeDescription
        {
            get
            {
                return "User Confirm";
            }
        }

        public override void Dispose()
        {
            this.PendingCheckin.PendingChanges.AffectedTeamProjectsChanged -= _affectedTeamProjectsEventHandler;
            this.PendingCheckin.PendingChanges.CheckedPendingChangesChanged -= _checkedPendingChangesEventHandler;

            base.Dispose();
        }
    }
}

Я еще не тестировал этот точный код, возможно, его нужно немного подправить, но это обычное дело. Прямо сейчас это вызывает изменение в проверяемых файлах, но вы также можете подписаться на любые другие события (изменения рабочих элементов) или запускать собственную оценку проекта каждый раз, когда вызывается Evaluate.

Или вы можете просто вызвать подтверждение один раз за цикл регистрации. все зависит от тебя. Вы даже можете сделать «Click to Dismiss» и вообще пропустить Messagebox. Просто установите _userConfirmed=true и запустите событие PolicyStateChanged.

...