示例#1
0
        public string Execute([NotNull] string fileName)
        {
            var sourceFileName = LocalFile.MapPath(fileName);

            var targetFileName = GetTargetFileName(sourceFileName);

            var packageAnalyzer = new PackageAnalyzer(new SimpleProcessingContext());

            var reader = new PackageReader(sourceFileName);

            reader.Populate(packageAnalyzer);

            var newItems = new List <PackageAnalyzer.PackageItem>();
            var newFiles = new List <PackageAnalyzer.PackageFile>();

            var package = new ZipPackageBuilder(targetFileName)
            {
                PackageName = "Anti Package for " + Path.GetFileNameWithoutExtension(sourceFileName),
                Readme      = string.Format("Anti Package for {0}. Created {1} by {2}.", Path.GetFileNameWithoutExtension(sourceFileName), DateTime.Now.ToString(), Context.GetUserName())
            };

            AddItems(packageAnalyzer, package, newItems);
            AddFiles(packageAnalyzer, package, newFiles);
            AddPostStep(package, newItems, newFiles);

            package.Build();

            return(WebUtil.GetServerUrl() + LocalFile.UnmapPath(targetFileName));
        }
示例#2
0
        private void AddItems(PackageAnalyzer packageAnalyzer, ZipPackageBuilder package, List <PackageAnalyzer.PackageItem> newItems)
        {
            var items = new List <Item>();
            var paths = new Dictionary <string, PackageAnalyzer.PackageItem>();

            foreach (var packageItem in packageAnalyzer.Items)
            {
                var database = Factory.GetDatabase(packageItem.DatabaseName);
                if (database == null)
                {
                    continue;
                }

                var item = database.GetItem(packageItem.ID);
                if (item == null)
                {
                    AddNewItem(paths, packageItem);
                    continue;
                }

                var isAdded = items.Any(i => i.ID == item.ID || i.Axes.IsAncestorOf(item));
                if (!isAdded)
                {
                    items.Add(item);
                }
            }

            newItems.AddRange(paths.Values);

            foreach (var item in items)
            {
                AddDescendants(package, item);
            }
        }
示例#3
0
        public string Execute([NotNull] string databaseName, [NotNull] string itemList)
        {
            Assert.ArgumentNotNull(databaseName, nameof(databaseName));
            Assert.ArgumentNotNull(itemList, nameof(itemList));

            var database = Factory.GetDatabase(databaseName);

            if (database == null)
            {
                throw new Exception("Database not found");
            }

            var fileName = TempFolder.GetFilename("package.zip");

            var items   = GetItems(database, itemList);
            var package = new ZipPackageBuilder(fileName);

            foreach (var item in items)
            {
                package.Items.Add(item);
            }

            var result = package.Build();

            return(WebUtil.GetServerUrl() + result);
        }
示例#4
0
        private int Execute([NotNull] Query query, [NotNull] QueryContext contextNode)
        {
            Debug.ArgumentNotNull(query, nameof(query));
            Debug.ArgumentNotNull(contextNode, nameof(contextNode));

            object o = contextNode;

            var from = From;

            if (from != null)
            {
                o = query.Evaluate(from, contextNode);
                if (o == null)
                {
                    return(0);
                }
            }

            var package = new ZipPackageBuilder(FileName);

            var items = query.GetItems(o);

            foreach (var item in items)
            {
                package.Items.Add(item);
            }

            package.Build();

            return(items.Count());
        }
示例#5
0
        private void AddDescendants(ZipPackageBuilder package, Item item)
        {
            package.Items.Add(item);

            foreach (Item child in item.Children)
            {
                AddDescendants(package, child);
            }
        }
示例#6
0
        private void AddPostStep(ZipPackageBuilder package, List <PackageAnalyzer.PackageItem> newItems, List <PackageAnalyzer.PackageFile> newFiles)
        {
            if (newItems.Count == 0 && newFiles.Count == 0)
            {
                return;
            }

            package.PostStep = "Sitecore.Rocks.Server.Requests.Packages.PackagePostStep,Sitecore.Rocks.Server";
            package.Comment  = GetPostStepData(newItems, newFiles);
        }
示例#7
0
        private void AddFiles(PackageAnalyzer packageAnalyzer, ZipPackageBuilder package, List <PackageAnalyzer.PackageFile> newFiles)
        {
            foreach (var packageFile in packageAnalyzer.Files)
            {
                var file = FileUtil.MapPath(packageFile.FileName);

                if (File.Exists(file))
                {
                    package.Files.Add(packageFile.FileName);
                }
                else
                {
                    newFiles.Add(packageFile);
                }
            }
        }