public PackagingResult Execute(string packagePath, string targetDirectory, int phase, string[] parameters, TextWriter output)
        {
            Log.AppendLine($"CALL: PackageManager({packagePath}, {targetDirectory}, {phase}, parameters:string[{parameters.Length}])");
            var result    = new PackagingResult();
            var resultAcc = new ObjectAccessor(result);

            resultAcc.SetProperty("Successful", false);
            return(result);
        }
Ejemplo n.º 2
0
        public FileInfo CreateThemePackage(ThemeManifest manifest)
        {
            var result = new PackagingResult
            {
                ExtensionType  = "Theme",
                PackageName    = manifest.ThemeName,
                PackageVersion = manifest.Version,
                PackageStream  = _packageBuilder.BuildPackage(manifest)
            };

            return(SavePackageFile(result));
        }
Ejemplo n.º 3
0
        public FileInfo CreatePluginPackage(PluginDescriptor descriptor)
        {
            var result = new PackagingResult
            {
                ExtensionType  = "Plugin",
                PackageName    = descriptor.FolderName,
                PackageVersion = descriptor.Version.ToString(),
                PackageStream  = _packageBuilder.BuildPackage(descriptor)
            };

            return(SavePackageFile(result));
        }
Ejemplo n.º 4
0
        private static int ExecutePhase(string packagePath, string targetDirectory, int phase, string[] parameters, string logFilePath, bool help)
        {
            var sandboxPath = Path.Combine(Path.GetDirectoryName(packagePath), PackageManager.SANDBOXDIRECTORYNAME);
            var preloaded   = SenseNet.ContentRepository.Storage.TypeHandler.LoadAssembliesFrom(sandboxPath);

            var packageCustomizationPath = Path.Combine(packagePath, "PackageCustomization");

            if (Directory.Exists(packageCustomizationPath))
            {
                Console.WriteLine("Loading package customizations:");
                var loaded = SenseNet.ContentRepository.Storage.TypeHandler.LoadAssembliesFrom(packageCustomizationPath);
                foreach (var item in loaded)
                {
                    Console.Write("  ");
                    Console.WriteLine(item);
                }
            }

            if (help)
            {
                LogAssemblies();
                Logger.LogMessage(Environment.NewLine + PackageManager.GetHelp());
                var sb = new StringBuilder();
                return(0);
            }

            PackagingResult result = null;

            try
            {
                result = PackageManager.Execute(packagePath, targetDirectory, phase, parameters, Console.Out);
            }
            catch (Exception e)
            {
                Logger.LogException(e);
            }

            // result: 0: successful with no errors, 1: need restart, -1: error
            if (result == null || !result.Successful)
            {
                return(-1);
            }
            if (result.NeedRestart)
            {
                return(1 + Logger.Errors * 2);
            }
            return(Logger.Errors * 2);
        }
Ejemplo n.º 5
0
        private FileInfo SavePackageFile(PackagingResult result)
        {
            var fileName = string.Format("{0}{1}.{2}.nupkg",
                                         PackagingUtils.GetExtensionPrefix(result.ExtensionType),
                                         result.PackageName,
                                         result.PackageVersion);

            if (!Directory.Exists(_outputPath))
            {
                Directory.CreateDirectory(_outputPath);
            }

            fileName = Path.Combine(_outputPath, fileName);

            using (var stream = File.Create(fileName))
            {
                result.PackageStream.CopyTo(stream);
            }

            var fileInfo = new FileInfo(fileName);

            return(fileInfo);
        }
Ejemplo n.º 6
0
        internal static int ExecutePhase(string packagePath, string targetDirectory, int phase, string[] parameters,
                                         string logFilePath, bool help, bool schema)
        {
            Logger.LogTitle(ToolTitle);
            var typeResolver = TypeResolverWrapper.Instance;

            // preload all assemblies from the sandbox folder so that we have every dll in memory
            typeResolver.LoadAssembliesFrom(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));

            var packageCustomizationPath = Path.Combine(packagePath, "PackageCustomization");

            if (Disk.DirectoryExists(packageCustomizationPath))
            {
                Output.WriteLine("Loading package customizations:");
                var loaded = typeResolver.LoadAssembliesFrom(packageCustomizationPath);
                foreach (var item in loaded)
                {
                    Output.Write("  ");
                    Output.WriteLine(item);
                }
            }

            var phaseCustomizationPath = GetPhaseCustomizationPath(packagePath, phase);

            if (Disk.DirectoryExists(phaseCustomizationPath))
            {
                Output.WriteLine($"Loading phase-{phase + 1} customizations:");
                var loaded = typeResolver.LoadAssembliesFrom(phaseCustomizationPath);
                foreach (var item in loaded)
                {
                    Output.Write("  ");
                    Output.WriteLine(item);
                }
            }

            if (help)
            {
                LogAssemblies();
                Logger.LogMessage(Environment.NewLine + PackageManagerWrapper.Instance.GetHelp());
                var sb = new StringBuilder();
                return(0);
            }
            if (schema)
            {
                var xsd = PackageManagerWrapper.Instance.GetXmlSchema();
                Logger.LogMessage(Environment.NewLine + xsd);
                var xsdPath = Path.GetFullPath(packagePath + @"\..\bin\SenseNetPackage.xsd");

                using (var writer = new StreamWriter(xsdPath, false))
                    writer.Write(xsd);

                Logger.LogMessage("XSD is written to " + xsdPath);

                return(0);
            }

            PackagingResult result = null;

            try
            {
                result = PackageManagerWrapper.Instance.Execute(packagePath, targetDirectory, phase, parameters, Output);
            }
            catch (Exception e)
            {
                Logger.LogException(e);
            }
            finally
            {
                // Stop this background thread so that the app could exit correctly. This is a
                // workaround for cases when the Repository was not started during execution,
                // but the clusterchannel started because one of the components needed it.
                DistributedApplication.ClusterChannel.ShutDownAsync(CancellationToken.None).GetAwaiter().GetResult();
            }

            // result:
            // -2: error,
            // -1: terminated,
            // 0: successful with no errors,
            // 1: need restart,
            // 2: (not used)
            // 3: 1 error
            // 4: 1 error and restart
            // n: (n-1)/2 errors plus 1 if restart
            if (result == null)
            {
                return(-2);
            }
            if (!result.Successful)
            {
                return(result.Terminated ? -1 : -2);
            }
            if (result.NeedRestart)
            {
                return(1 + Logger.Errors * 2);
            }
            return(Logger.Errors * 2);
        }
Ejemplo n.º 7
0
        private static int ExecutePhase(string packagePath, string targetDirectory, int phase, string[] parameters, string logFilePath, bool help, bool schema)
        {
            Logger.LogTitle(ToolTitle);

            // preload all assemblies from the sandbox folder so that we have every dll in memory
            TypeResolver.LoadAssembliesFrom(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));

            var packageCustomizationPath = Path.Combine(packagePath, "PackageCustomization");

            if (Directory.Exists(packageCustomizationPath))
            {
                Console.WriteLine("Loading package customizations:");
                var loaded = TypeResolver.LoadAssembliesFrom(packageCustomizationPath);
                foreach (var item in loaded)
                {
                    Console.Write("  ");
                    Console.WriteLine(item);
                }
            }

            if (help)
            {
                LogAssemblies();
                Logger.LogMessage(Environment.NewLine + PackageManager.GetHelp());
                var sb = new StringBuilder();
                return(0);
            }
            if (schema)
            {
                var xsd = PackageManager.GetXmlSchema();
                Logger.LogMessage(Environment.NewLine + xsd);
                var xsdPath = Path.GetFullPath(packagePath + @"\..\bin\SenseNetPackage.xsd");

                using (var writer = new StreamWriter(xsdPath, false))
                    writer.Write(xsd);

                Logger.LogMessage("XSD is written to " + xsdPath);

                return(0);
            }

            PackagingResult result = null;

            try
            {
                result = PackageManager.Execute(packagePath, targetDirectory, phase, parameters, Console.Out);
            }
            catch (Exception e)
            {
                Logger.LogException(e);
            }

            // result:
            // -2: error,
            // -1: terminated,
            // 0: successful with no errors,
            // 1: need restart,
            // 2: (not used)
            // 3: 1 error
            // 4: 1 error and restart
            // n: (n-1)/2 errors plus 1 if restart
            if (result == null)
            {
                return(-2);
            }
            if (!result.Successful)
            {
                return(result.Terminated ? -1 : -2);
            }
            if (result.NeedRestart)
            {
                return(1 + Logger.Errors * 2);
            }
            return(Logger.Errors * 2);
        }