/// <summary> /// Выполняет деплой модуля. /// </summary> /// <param name="deployInfo"></param> internal override bool Deploy(DeployInfo deployInfo) { if (deployInfo == null) { throw new ArgumentNullException(nameof(deployInfo)); } OptionItem item = this.CustomerComboBox.SelectedItem as OptionItem; if (item == null) { throw new NotificationException("Не выбрана папка комплекта"); } //получение папки string todayDirName = DateTime.Now.ToString("yyyy.MM.dd"); string readmeFilePath = null; string[] dateFolders = Directory.GetDirectories(item.DirectoryPath).Where(x => Regex.IsMatch(x, @"[\d\.]+")).ToArray(); string todayDir = dateFolders.FirstOrDefault(x => x.EndsWith("\\" + todayDirName)); DirectoryInfo dir; if (todayDir == null) { dir = Directory.CreateDirectory(Path.Combine(item.DirectoryPath, todayDirName)); } else { dir = new DirectoryInfo(todayDir); readmeFilePath = Directory.GetFiles(dir.FullName, "readme.txt", SearchOption.TopDirectoryOnly).FirstOrDefault(); } if (readmeFilePath == null) { //получаем уже существующий файл readme IOrderedEnumerable <string> orderedDirectories = dateFolders.OrderByDescending(x => x); readmeFilePath = orderedDirectories .Select(d => Directory.GetFiles(d, "readme.txt", SearchOption.TopDirectoryOnly).FirstOrDefault()) .FirstOrDefault(x => x != null); } //формируем комплект return(this.CreatePackage(deployInfo, dir, readmeFilePath)); }
/// <summary> /// Выполняет действия при инициализации контролов для данного вида деплоя. /// </summary> internal override void OnInit() { //пытаемся автоматически выбрать подходящую папку bool? projectSelected = null; string projectNameStartPatter = "wssc.v4.dms."; string projectName = this.Form.Command.DTEInfo.SelectedProject.Name.ToLower(); if (!String.IsNullOrEmpty(projectName) && projectName.StartsWith(projectNameStartPatter)) { projectName = projectName.Substring(projectNameStartPatter.Length); int dotIndex = projectName.IndexOf('.'); if (dotIndex != -1) { projectName = projectName.Substring(0, dotIndex - 1); } projectSelected = false; } int selectIndex = -1; //заполняем варианты папок для деплоя string[] directories = Directory.GetDirectories(this.Form.Command.Options.PackageFolderPath, "*", SearchOption.TopDirectoryOnly); if (directories.Length > 0) { foreach (string directory in directories) { OptionItem optionItem = new OptionItem(directory); this.CustomerComboBox.Items.Add(optionItem); if (selectIndex == -1 && projectSelected.HasValue && projectSelected.Value == false && optionItem.DisplayName.ToLower().StartsWith(projectName)) { selectIndex = this.CustomerComboBox.Items.Count - 1; projectSelected = true; } } this.CustomerComboBox.SelectedIndex = projectSelected == true ? selectIndex : 0; } }
/// <summary> /// Выкладывание в тестирование. /// </summary> /// <param name="switcher"></param> /// <param name="testComboBox">Выбор папки с папками тестирования.</param> /// <param name="deployPackageDestinationForm"></param> public TestDeploy(RadioButton switcher, ComboBox testComboBox, ComboBox testFoldersBox, DeployPackageDestinationForm deployPackageDestinationForm) : base(switcher, new Control[] { testComboBox, testFoldersBox }, deployPackageDestinationForm) { this.TestComboBox = testComboBox ?? throw new ArgumentNullException(nameof(testComboBox)); TestFoldersBox = testFoldersBox ?? throw new ArgumentNullException(nameof(testFoldersBox)); // Определяем поведение при выборе папки тестирования this.TestComboBox.SelectedIndexChanged += (s, e) => { OptionItem item = this.TestComboBox.SelectedItem as OptionItem; int year = DateTime.Now.Year; this.TestFoldersBox.Items.Clear(); this.TestFoldersBox.Items.AddRange( // Берём подпапки выбранной папки тестирования Directory.EnumerateDirectories(item.DirectoryPath, $"{year}*", SearchOption.TopDirectoryOnly) // Получаем информацию по папкам .Select(path => new DirectoryInfo(path)) // На всякий случай отсеиваем несуществующие .Where(dir => dir.Exists) // Сортируем по названию .OrderByDescending(dir => dir.Name) // Берём первые 10 .Take(10) // Формируем варианты выбора для списка .Select(x => new OptionItem(x)).ToArray() ); this.TestFoldersBox.Text = this.FolderTemplateName; }; }