public void MoveItemsTest() { // Arrange var id = Guid.NewGuid().ToString(); var sourceItems = new List <IDataItem>(); var sourceItem = new QuickContentDataItem(string.Empty, string.Empty, string.Empty, new SyncItem() { ID = id, TemplateID = id, ItemPath = "/sitecore/content/Home/Test1" }, true); sourceItems.Add(sourceItem); var targetItems = new List <IDataItem>(); var targetItem = new QuickContentDataItem(string.Empty, string.Empty, string.Empty, new SyncItem() { ID = id, TemplateID = id, ItemPath = "/sitecore/content/Home/Test2" }, true); targetItems.Add(targetItem); var sourceDataIterator = new TestDataIterator(sourceItems); var targetDataIterator = new TestDataIterator(targetItems); var engineMock = new Mock <DataEngine>(null, null, new List <ICommandFilter>()); // Act var commands = DiffGenerator.GetDiffCommands(new HashSet <string>(), CollisionBehavior.Force, sourceDataIterator, targetDataIterator, engineMock.Object); //Assert Assert.AreEqual(1, commands.Count); Assert.AreEqual(1, commands.Count(x => x is ChangeItemCommand)); }
/// <summary> /// Mains the specified args. /// </summary> /// <param name="args">The arguments.</param> public static void Main(string[] args) { var options = new Options(); if (CommandLine.Parser.Default.ParseArguments(args, options)) { Console.WriteLine("Source: {0}", options.Source); Console.WriteLine("Target: {0}", options.Target); Console.WriteLine("Output: {0}", options.Output); Console.WriteLine("Collision behavior: {0}", options.CollisionBehavior); Console.WriteLine("Configuration: {0}", options.Configuration); Console.WriteLine("Path to project file: {0}", options.ScProjFilePath); if (ExclusionHandler.HasValidExclusions(options.Configuration, options.ScProjFilePath)) { var exclusions = ExclusionHandler.GetExcludedItems(options.ScProjFilePath, options.Configuration); ExclusionHandler.RemoveExcludedItems(options.Source, exclusions); ExclusionHandler.RemoveExcludedItems(options.Target, exclusions); } var diff = new DiffInfo( DiffGenerator.GetDiffCommands(options.Source, options.Target, options.CollisionBehavior), "Sitecore Courier Package", string.Empty, string.Format("Diff between serialization folders '{0}' and '{1}'.", options.Source, options.Target)); PackageGenerator.GeneratePackage(diff, string.Empty, options.Output); } else { Console.WriteLine(options.GetUsage()); } }
protected override void BeginProcessing() { try { var currentDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", Path.Combine(currentDirectory, "Sitecore.Courier.dll.config")); ResetConfigMechanism(); string version = Guid.NewGuid().ToString(); Console.WriteLine("Source: {0}", Source); Console.WriteLine("Target: {0}", Target); Console.WriteLine("Output: {0}", Output); Console.WriteLine("SerializationProvider: {0}", SerializationProvider); Console.WriteLine("CollisionBehavior: {0}", CollisionBehavior); Console.WriteLine("IncludeFiles: {0}", IncludeFiles); Console.WriteLine("DacPac: {0}", DacPac); RainbowSerializationProvider.Enabled = SerializationProvider == SerializationProvider.Rainbow; RainbowSerializationProvider.IncludeFiles = IncludeFiles; RainbowSerializationProvider.EnsureRevision = EnsureRevision; var diff = new DiffInfo( DiffGenerator.GetDiffCommands(Source, Target, IncludeSecurity, version, CollisionBehavior), "Sitecore Courier Package", string.Empty, string.Format("Diff between serialization folders '{0}' and '{1}'.", Source, Target)); if (IncludeSecurity) { diff.Commands.Add(new PostStepFileSystemDataItem(currentDirectory, string.Empty, PostDeployDll) .GenerateAddCommand().FirstOrDefault()); diff.PostStep = PostStep; diff.Version = version; } if (DacPac) { SqlConverter c = new SqlConverter(); c.ConvertPackage(diff, Output); var builder = new DacPacBuilder(); DirectoryInfo d = new DirectoryInfo(Output); foreach (var file in d.GetFiles("*.sql")) { builder.ConvertToDacPac(file.FullName, Path.Combine(file.DirectoryName, $"{Path.GetFileNameWithoutExtension(file.Name)}.dacpac")); } } else { PackageGenerator.GeneratePackage(diff, string.Empty, Output); } } catch (Exception ex) { Console.WriteLine(ex.ToString()); throw ex; } }
/// <summary> /// Handles the Generate_ click event. /// </summary> /// <param name="sender">The sender.</param> /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param> protected void Generate_Click(object sender, EventArgs e) { var sourcePath = this.SourcePath.Text; var targetPath = this.TargetPath.Text; var result = DiffGenerator.GetDiffCommands(sourcePath, targetPath); var fileName = "SitecoreCourier_{0}.update".FormatWith(Guid.NewGuid()); var filePath = string.Format("{0}/{1}", this.Server.MapPath("/temp"), fileName); result = FilterCommands(result); var diff = new DiffInfo(result, "Sitecore Courier Package", string.Empty, string.Format("Diff has been generated between '{0}' and '{1}'", this.SourcePath.Text, this.TargetPath.Text)); PackageGenerator.GeneratePackage(diff, string.Empty, filePath); this.DownloadLink.NavigateUrl = string.Format("/temp/{0}", fileName); this.DownloadLink.Visible = true; this.AnalyzeResults.Visible = false; }
/// <summary> /// Handles the Analyze_ click event. /// </summary> /// <param name="sender">The sender.</param> /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param> protected void Analyze_Click(object sender, EventArgs e) { var sourcePath = this.SourcePath.Text; var targetPath = this.TargetPath.Text; var result = DiffGenerator.GetDiffCommands(sourcePath, targetPath); this.Added.Items.Clear(); this.Changed.Items.Clear(); this.Deleted.Items.Clear(); foreach (var command in result) { if (command.CommandPrefix == "addeditems") { var item = new ListItem(command.EntityPath.Substring(0, command.EntityPath.IndexOf("{", System.StringComparison.Ordinal) - 1), command.EntityID); item.Selected = true; this.Added.Items.Add(item); } if (command.CommandPrefix == "changeditems") { var item = new ListItem(command.EntityPath.Substring(0, command.EntityPath.IndexOf("{", System.StringComparison.Ordinal) - 1), command.EntityID); item.Selected = true; this.Changed.Items.Add(item); } if (command.CommandPrefix == "deleteditems") { var item = new ListItem(command.EntityPath.Substring(0, command.EntityPath.IndexOf("{", System.StringComparison.Ordinal) - 1), command.EntityID); item.Selected = true; this.Deleted.Items.Add(item); } } AddedCount.Text = Added.Items.Count.ToString(CultureInfo.InvariantCulture); DeletedCount.Text = Deleted.Items.Count.ToString(CultureInfo.InvariantCulture); ChangedCount.Text = Changed.Items.Count.ToString(CultureInfo.InvariantCulture); this.DownloadLink.Visible = false; this.AnalyzeResults.Visible = true; }
public void DeleteItemsTest() { // Arrange var sourceItems = new List <IDataItem>(); var sourceItem = new QuickContentDataItem(string.Empty, string.Empty, string.Empty, new SyncItem()); sourceItems.Add(sourceItem); var targetItems = new List <IDataItem>(); var sourceDataIterator = new TestDataIterator(sourceItems); var targetDataIterator = new TestDataIterator(targetItems); var engineMock = new Mock <DataEngine>(null, null, new List <ICommandFilter>()); // Act var commands = DiffGenerator.GetDiffCommands(new HashSet <string>(), CollisionBehavior.Force, sourceDataIterator, targetDataIterator, engineMock.Object); //Assert Assert.AreEqual(1, commands.Count); Assert.AreEqual(1, commands.Count(x => x is DeleteItemCommand)); }
/// <summary> /// Mains the specified args. /// </summary> /// <param name="args">The arguments.</param> public static void Main(string[] args) { var options = new Options(); if (CommandLine.Parser.Default.ParseArguments(args, options)) { Console.WriteLine("Source: {0}", options.Source); Console.WriteLine("Target: {0}", options.Target); Console.WriteLine("Output: {0}", options.Output); var diff = new DiffInfo( DiffGenerator.GetDiffCommands(options.Source, options.Target), "Sitecore Courier Package", string.Empty, string.Format("Diff between serialization folders '{0}' and '{1}'.", options.Source, options.Target)); PackageGenerator.GeneratePackage(diff, string.Empty, options.Output); } else { Console.WriteLine(options.GetUsage()); } }
/// <summary> /// Mains the specified args. /// </summary> /// <param name="args">The arguments.</param> public static void Main(string[] args) { var options = new Options(); if (CommandLine.Parser.Default.ParseArguments(args, options)) { Console.WriteLine("Source: {0}", options.Source); Console.WriteLine("Target: {0}", options.Target); Console.WriteLine("Output: {0}", options.Output); Console.WriteLine("Collision behavior: {0}", options.CollisionBehavior); Console.WriteLine("Use Rainbow: {0}", options.UseRainbow); Console.WriteLine("Include Security: {0}", options.IncludeSecurity); Console.WriteLine("Include Files: {0}", options.IncludeFiles); Console.WriteLine("Configuration: {0}", options.Configuration); Console.WriteLine("Ensure Revision: {0}", options.EnsureRevision); Console.WriteLine("Path to project file: {0}", options.ScProjFilePath); Console.WriteLine("DacPac Output: {0}", options.DacPac); string version = Guid.NewGuid().ToString(); SanitizeOptions(options); if (ExclusionHandler.HasValidExclusions(options.Configuration, options.ScProjFilePath)) { var exclusions = ExclusionHandler.GetExcludedItems(options.ScProjFilePath, options.Configuration); ExclusionHandler.RemoveExcludedItems(options.Source, exclusions); ExclusionHandler.RemoveExcludedItems(options.Target, exclusions); } RainbowSerializationProvider.Enabled = options.UseRainbow; RainbowSerializationProvider.IncludeFiles = options.IncludeFiles; RainbowSerializationProvider.EnsureRevision = options.EnsureRevision; var commands = DiffGenerator.GetDiffCommands(options.Source, options.Target, options.IncludeSecurity, version, options.CollisionBehavior); var diff = new DiffInfo( commands, "Sitecore Courier Package", string.Empty, string.Format("Diff between serialization folders '{0}' and '{1}'.", options.Source, options.Target)); if (options.IncludeSecurity) { var currentDirectory = Directory.GetCurrentDirectory(); commands.Add(new PostStepFileSystemDataItem(currentDirectory, string.Empty, PostDeployDll) .GenerateAddCommand().FirstOrDefault()); diff.PostStep = PostStep; diff.Version = version; } if (options.DacPac) { SqlConverter c = new SqlConverter(); c.ConvertPackage(diff, options.Output); var builder = new DacPacBuilder(); DirectoryInfo d = new DirectoryInfo(options.Output); foreach (var file in d.GetFiles("*.sql")) { builder.ConvertToDacPac(file.FullName, Path.Combine(file.DirectoryName, $"{Path.GetFileNameWithoutExtension(file.Name)}.dacpac")); } } else { PackageGenerator.GeneratePackage(diff, string.Empty, options.Output); } } else { Console.WriteLine(options.GetUsage()); } }
public void ChangedUnicornSerializationNameAndDeletionTest() { //Source dataset, a template with 2 fields. Serialized to a unicorn setting named Unicorn1 var sourceItems = new List <IDataItem>(); sourceItems.Add(new QuickContentDataItem("C:\\Source", "Unicorn1", "Template 1.yml", new SyncItem() { ID = "2a54b494-68fe-44f6-85d9-88a3b57cf689", TemplateID = "ab86861a-6030-46c5-b394-e8f99e8b87db", ParentID = "3C1715FE-6A13-4FCF-845F-DE308BA9741D", ItemPath = "/sitecore/Templates/Template 1" }, true)); sourceItems.Add(new QuickContentDataItem("C:\\Source", "Unicorn1\\Template 1", "Section 1.yml", new SyncItem() { ID = "79a314b1-82ad-4733-bb82-92cc62306c31", TemplateID = "e269fbb5-3750-427a-9149-7aa950b49301", ParentID = "2a54b494-68fe-44f6-85d9-88a3b57cf689", ItemPath = "/sitecore/Templates/Template 1/Section 1" }, true)); sourceItems.Add(new QuickContentDataItem("C:\\Source", "Unicorn1\\Template 1\\Section 1", "Field1.yml", new SyncItem() { ID = "dcfcf4d9-6fed-4f16-a8a3-acf22188dd74", TemplateID = "455a3e98-a627-4b40-8035-e683a0331ac7", ParentID = "79a314b1-82ad-4733-bb82-92cc62306c31", ItemPath = "/sitecore/Templates/Template 1/Section 1/Field1" }, true)); sourceItems.Add(new QuickContentDataItem("C:\\Source", "Unicorn1\\Template 1\\Section 1", "Field2.yml", new SyncItem() { ID = "dcfcf4d9-6fed-4f16-a8a3-acf22188dd73", TemplateID = "455a3e98-a627-4b40-8035-e683a0331ac7", ParentID = "79a314b1-82ad-4733-bb82-92cc62306c31", ItemPath = "/sitecore/Templates/Template 1/Section 1/Field2" }, true)); //Target dataset, same template, 1 field removed. Serialized to a unicorn setting named Unicorn2 var targetItems = new List <IDataItem>(); targetItems.Add(new QuickContentDataItem("C:\\Target", "Unicorn2", "Template 1.yml", new SyncItem() { ID = "2a54b494-68fe-44f6-85d9-88a3b57cf689", TemplateID = "ab86861a-6030-46c5-b394-e8f99e8b87db", ParentID = "3C1715FE-6A13-4FCF-845F-DE308BA9741D", ItemPath = "/sitecore/Templates/Template 1" }, true)); targetItems.Add(new QuickContentDataItem("C:\\Target", "Unicorn2\\Template 1", "Section 1.yml", new SyncItem() { ID = "79a314b1-82ad-4733-bb82-92cc62306c31", TemplateID = "e269fbb5-3750-427a-9149-7aa950b49301", ParentID = "2a54b494-68fe-44f6-85d9-88a3b57cf689", ItemPath = "/sitecore/Templates/Template 1/Section 1" }, true)); targetItems.Add(new QuickContentDataItem("C:\\Target", "Unicorn2\\Template 1\\Section 1", "Field1.yml", new SyncItem() { ID = "dcfcf4d9-6fed-4f16-a8a3-acf22188dd74", TemplateID = "455a3e98-a627-4b40-8035-e683a0331ac7", ParentID = "79a314b1-82ad-4733-bb82-92cc62306c31", ItemPath = "/sitecore/Templates/Template 1/Section 1/Field1" }, true)); var sourceDataIterator = new TestDataIterator(sourceItems); var targetDataIterator = new TestDataIterator(targetItems); var engineMock = new Mock <DataEngine>(null, null, new List <ICommandFilter>()); // Act var commands = DiffGenerator.GetDiffCommands(new HashSet <string>(targetItems.Select(x => (x as QuickContentDataItem).ItemID)), CollisionBehavior.Force, sourceDataIterator, targetDataIterator, engineMock.Object); //Assert Assert.AreEqual(1, commands.Count); Assert.AreEqual(1, commands.Count(x => x is DeleteItemCommand)); }