Пример #1
0
        public override void Run(IBuildContext context)
        {
            var console = new ConsoleService(context.Configuration);
            context.IsAborted = true;

            var projectDirectory = context.ProjectDirectory;
            if (!context.FileSystem.DirectoryExists(projectDirectory))
            {
                context.FileSystem.CreateDirectory(projectDirectory);
            }

            console.WriteLine();
            console.WriteLine("Adding project...");

            CopyProjectTemplate(context, projectDirectory);
            UpdateSccCmd(context, projectDirectory);
        }
Пример #2
0
        public override void Run(IBuildContext context)
        {
            var console = new ConsoleService(context.Configuration);
            context.IsAborted = true;

            var projectDirectory = context.ProjectDirectory;
            if (!context.FileSystem.DirectoryExists(projectDirectory))
            {
                context.FileSystem.CreateDirectory(projectDirectory);
            }

            console.WriteLine("Welcome to Sitecore Pathfinder.");

            if (Directory.GetFiles(projectDirectory).Length > 0 || Directory.GetDirectories(projectDirectory).Length > 0)
            {
                console.WriteLine();
                console.WriteLine("The current directory is not empty. It is recommended to create a new project in an empty directory.");
                console.WriteLine();
                if (console.YesNo("Are you sure you want to create the project in this directory [N]: ", false, "overwrite") != true)
                {
                    context.IsAborted = true;
                    return;
                }
            }

            console.WriteLine();
            console.WriteLine("Pathfinder needs 4 pieces of information to create a new project; a unique Id for the project, the Sitecore website and data folder directories to deploy to, and the hostname of the website. If you have not yet created a Sitecore website, use a tool like Sitecore Instance Manager to create it for you.");
            console.WriteLine();
            console.WriteLine("The project’s unique ID can be a unique string (like MyCompany.MyProject) or a Guid. If you do not specify a unique ID, Pathfinder will generate a Guid for you.");
            console.WriteLine();
            console.WriteLine("You should *not* change the project unique ID at a later point, since Sitecore item IDs are dependent on it.");
            console.WriteLine();

            _projectUniqueId = Guid.NewGuid().ToString("B").ToUpperInvariant();
            _projectUniqueId = console.ReadLine("Enter the project unique ID [" + _projectUniqueId + "]: ", _projectUniqueId, "projectid");

            console.WriteLine();
            console.WriteLine("Pathfinder requires physical access to both the Website and DataFolder directories to deploy packages.");
            console.WriteLine();

            var projectName = "Sitecore";
            Guid guid;
            if (!Guid.TryParse(_projectUniqueId, out guid))
            {
                projectName = _projectUniqueId;
            }

            var wwwrootDirectory = context.Configuration.GetString(Constants.Configuration.WwwrootDirectory, "c:\\inetpub\\wwwroot").TrimEnd('\\');
            var defaultProjectDirectory = $"{wwwrootDirectory}\\{projectName}\\Website";
            do
            {
                var website = console.ReadLine($"Enter the directory of the Website [{defaultProjectDirectory}: ", defaultProjectDirectory, "website");
                _websiteDirectory = PathHelper.Combine(defaultProjectDirectory, website);
            }
            while (!ValidateWebsiteDirectory(context, console));

            console.WriteLine();
            var defaultDataFolderDirectory = Path.Combine(Path.GetDirectoryName(_websiteDirectory) ?? string.Empty, "Data");
            do
            {
                _dataFolderDirectory = console.ReadLine("Enter the directory of the DataFolder [" + defaultDataFolderDirectory + "]: ", defaultDataFolderDirectory, "datafolder");
            }
            while (!ValidateDataFolderDirectory(context, console));

            console.WriteLine();
            console.WriteLine("Finally Pathfinder requires the hostname of the Sitecore website.");
            console.WriteLine();

            _hostName = console.ReadLine($"Enter the hostname of the website [http://{projectName.ToLowerInvariant()}]: ", $"http://{projectName.ToLowerInvariant()}", "host");
            if (!_hostName.StartsWith("https:") && !_hostName.StartsWith("https:"))
            {
                _hostName = "http://" + _hostName.TrimStart('/');
            }

            console.WriteLine();
            if (console.YesNo("Do you want to install an editor configuration [Y]: ", true) == true)
            {
                var editorsDirectory = Path.Combine(context.ToolsDirectory, "files\\editors");
                var editors = Directory.GetFiles(editorsDirectory, "*.zip", SearchOption.AllDirectories).ToDictionary(Path.GetFileNameWithoutExtension, e => e);

                _editorFileName = console.Pick("Select editor [1]: ", editors, "editor");
            }

            console.WriteLine();
            if (console.YesNo("Do you want to install a starter kit [Y]: ", true) == true)
            {
                var starterKitDirectory = Path.Combine(context.ToolsDirectory, "files\\starterkits");
                var starterKits = Directory.GetFiles(starterKitDirectory, "*.zip", SearchOption.AllDirectories).ToDictionary(Path.GetFileNameWithoutExtension, e => e);

                _starterKitFileName = console.Pick("Select starter kit [1]: ", starterKits, "starterkit");
            }

            console.WriteLine();
            console.WriteLine("Creating project...");

            CopyProjectTemplate(context, projectDirectory);
            UpdateSccCmd(context, projectDirectory);
            CopyStarterKit(context, projectDirectory);
            CopyEditor(context, projectDirectory);
            UpdateConfigFile(context, projectDirectory);
        }