Пример #1
0
        public void Execute(PackagesInput input, IFileSystem fileSystem)
        {
            var exploder = BuildExploder();

            if (input.CleanAllFlag)
            {
                exploder.CleanAll(input.AppFolder);
            }


            if (input.ExplodeFlag)
            {
                // TODO -- will need to do this for assembly packages as well

                Console.WriteLine("Exploding all the package zip files for the application at " + input.AppFolder);
                exploder.ExplodeAllZipsAndReturnPackageDirectories(input.AppFolder, new PackageLog());
            }

            // TODO -- this doesn't work for anything but fubu
            if (input.RemoveAllFlag)
            {
                var packageFolder = BottleFiles.GetApplicationPackagesDirectory(input.AppFolder);
                Console.WriteLine("Removing all package files and directories from the application at " + packageFolder);
                new FileSystem().DeleteDirectory(packageFolder);
            }

            // TODO -- this needs to be redone
            //exploder.LogPackageState(input.AppFolder);
        }
Пример #2
0
        protected void theExistingVersionIs(string packageName, Guid guid)
        {
            string directory = BottleFiles.GetDirectoryForExplodedPackage(theApplicationDirectory, packageName);

            MockFor <IFileSystem>().Stub(x => x.FileExists(directory, BottleFiles.VersionFile)).Return(true);
            MockFor <IFileSystem>().Stub(x => x.ReadStringFromFile(directory, BottleFiles.VersionFile)).Return(guid.ToString());
        }
Пример #3
0
        private void logExplodedDirectories(string applicationDirectory)
        {
            var explodedDirectory   = BottleFiles.GetExplodedPackagesDirectory(applicationDirectory);
            var existingDirectories = _fileSystem.ChildDirectoriesFor(explodedDirectory);

            _logger.WriteExistingDirectories(applicationDirectory, existingDirectories);
        }
Пример #4
0
        public void CleanAll(string applicationDirectory)
        {
            var directory = BottleFiles.GetExplodedPackagesDirectory(applicationDirectory);

            clearExplodedDirectories(directory);

            // This is here for legacy installations that may have old exploded packages in bin/fubu-packages
            clearExplodedDirectories(BottleFiles.GetApplicationPackagesDirectory(applicationDirectory));
        }
Пример #5
0
        protected void assertZipFileWasNotExploded(string packageName)
        {
            var fileName = FileSystem.Combine(theApplicationDirectory, "bin", BottleFiles.PackagesFolder,
                                              packageName + ".zip");

            var directoryName = BottleFiles.GetDirectoryForExplodedPackage(theApplicationDirectory, packageName);

            MockFor <IZipFileService>().AssertWasNotCalled(x => x.ExtractTo(fileName, directoryName, ExplodeOptions.DeleteDestination));
        }
Пример #6
0
        public IEnumerable <string> FindAssemblies(string applicationDirectory)
        {
            var assemblyNames = new FileSet {
                Include = "*.dll", DeepSearch = false
            };
            var directory = BottleFiles.GetApplicationPackagesDirectory(applicationDirectory);

            return(_fileSystem.FindFiles(directory, assemblyNames).Select(Path.GetFileNameWithoutExtension));
        }
Пример #7
0
        private IEnumerable <string> findPackageFileNames(string applicationDirectory)
        {
            var fileSet = new FileSet {
                Include = "*.zip"
            };

            var packageFolder = BottleFiles.GetApplicationPackagesDirectory(applicationDirectory);

            return(_fileSystem.FileNamesFor(fileSet, packageFolder));
        }
Пример #8
0
        public void the_version_file_exists()
        {
            var guid = Guid.NewGuid();

            theExistingVersionIs("pak1", guid);

            string directory = BottleFiles.GetDirectoryForExplodedPackage(theApplicationDirectory, "pak1");

            ClassUnderTest.ReadVersion(directory).ShouldEqual(guid);
        }
Пример #9
0
        public IEnumerable <string> ExplodeAllZipsAndReturnPackageDirectories(string applicationDirectory, IPackageLog log)
        {
            LogWriter.Current.Trace("Exploding all the package zip files for the application at " + applicationDirectory);

            return(ExplodeDirectory(new ExplodeDirectory()
            {
                DestinationDirectory = BottleFiles.GetExplodedPackagesDirectory(applicationDirectory),
                BottleDirectory = BottleFiles.GetApplicationPackagesDirectory(applicationDirectory),
                Log = log
            }));
        }
Пример #10
0
        private IEnumerable <string> findPackageFileNames(string applicationDirectory, IPackageLog log)
        {
            var fileSet = new FileSet {
                Include = "*.zip"
            };

            var packageFolder = BottleFiles.GetApplicationPackagesDirectory(applicationDirectory);

            log.Trace("Searching for zip files in package directory " + packageFolder);

            return(_fileSystem.FileNamesFor(fileSet, packageFolder));
        }
Пример #11
0
        protected void theZipFilesAre(params string[] packageNames)
        {
            var zipFiles =
                packageNames.Select(
                    x =>
                    FileSystem.Combine(theApplicationDirectory, "bin", BottleFiles.PackagesFolder, x + ".zip"));

            var directory = BottleFiles.GetApplicationPackagesDirectory(theApplicationDirectory);

            MockFor <IFileSystem>().Stub(x => x.FileNamesFor(new FileSet()
            {
                Include = "*.zip"
            }, directory)).Return(zipFiles);
        }
Пример #12
0
        private string explodeZipAndReturnDirectory(string file, string applicationDirectory)
        {
            var directory = BottleFiles.DirectoryForPackageZipFile(applicationDirectory, file);
            var request   = new ExplodeRequest {
                Directory      = directory,
                ExplodeAction  = () => Explode(applicationDirectory, file, BottleFiles.DirectoryForPackageZipFile(applicationDirectory, file), ExplodeOptions.DeleteDestination),
                GetVersion     = () => _service.GetVersion(file),
                LogSameVersion = () => _logger.WritePackageZipFileWasSameVersionAsExploded(file)
            };


            explode(request);

            return(directory);
        }
Пример #13
0
        protected void thePackagesAlreadyExplodedAre(params string[] packageNames)
        {
            var directories = packageNames.Select(x =>
            {
                return(BottleFiles.GetDirectoryForExplodedPackage(theApplicationDirectory, x));
            });

            directories.Each(dir =>
            {
                MockFor <IFileSystem>().Stub(x => x.DirectoryExists(dir)).Return(true);
            });

            MockFor <IFileSystem>().Stub(x => x.ChildDirectoriesFor(BottleFiles.GetExplodedPackagesDirectory(theApplicationDirectory)))
            .Return(directories);

            MockFor <IFileSystem>().Stub(x => x.ChildDirectoriesFor(BottleFiles.GetApplicationPackagesDirectory(theApplicationDirectory)))
            .Return(new string[0]);
        }
Пример #14
0
        private void explodeAssembly(Assembly assembly, string directory)
        {
            _fileSystem.DeleteDirectory(directory);
            _fileSystem.CreateDirectory(directory);

            assembly.GetManifestResourceNames().Where(BottleFiles.IsEmbeddedPackageZipFile).Each(name =>
            {
                var folderName = BottleFiles.EmbeddedPackageFolderName(name);
                var stream     = assembly.GetManifestResourceStream(name);

                var description       = "Resource {0} in Assembly {1}".ToFormat(name, assembly.GetName().FullName);
                var destinationFolder = FileSystem.Combine(directory, folderName);

                _service.ExtractTo(description, stream, destinationFolder);

                var version = assembly.GetName().Version.ToString();
                _fileSystem.WriteStringToFile(FileSystem.Combine(directory, BottleFiles.VersionFile), version);
            });
        }
Пример #15
0
        public void ExplodeAssembly(string applicationDirectory, Assembly assembly, IPackageInfo packageInfo)
        {
            var directory = BottleFiles.GetDirectoryForExplodedPackage(applicationDirectory, assembly.GetName().Name);

            var request = new ExplodeRequest {
                Directory      = directory,
                GetVersion     = () => assembly.GetName().Version.ToString(),
                LogSameVersion = () => {
                    var message = "Assembly {0} has already been 'exploded' onto disk".ToFormat(assembly.GetName().FullName);
                    PackageRegistry.Diagnostics.LogFor(packageInfo).Trace(message);
                },
                ExplodeAction = () => explodeAssembly(assembly, directory)
            };

            explode(request);

            _fileSystem.ChildDirectoriesFor(directory).Each(child =>
            {
                var name = Path.GetFileName(child);

                packageInfo.Files.RegisterFolder(name, child.ToFullPath());
            });
        }
Пример #16
0
        public void ExplodeAssembly(string applicationDirectory, Assembly assembly, IPackageFiles files)
        {
            var directory = BottleFiles.GetDirectoryForExplodedPackage(applicationDirectory, assembly.GetName().Name);

            var request = new ExplodeRequest {
                Directory      = directory,
                GetVersion     = () => assembly.GetName().Version.ToString(),
                LogSameVersion =
                    () =>
                    Console.WriteLine(
                        "Assembly {0} has already been 'exploded' onto disk".ToFormat(assembly.GetName().FullName)),
                ExplodeAction = () => explodeAssembly(assembly, directory)
            };

            explode(request);

            _fileSystem.ChildDirectoriesFor(directory).Each(child =>
            {
                var name = Path.GetFileName(child);

                files.RegisterFolder(name, child.ToFullPath());
            });
        }
Пример #17
0
 public void get_package_folder_name()
 {
     BottleFiles.EmbeddedPackageFolderName("a.b.c.pak-webcontent.zip").ShouldEndWith("webcontent");
     BottleFiles.EmbeddedPackageFolderName("a.b.c.pak-data.zip").ShouldEndWith("data");
 }
Пример #18
0
 public void is_package_zip_negative_2()
 {
     BottleFiles.IsEmbeddedPackageZipFile("a.b.c.webcontent.zip").ShouldBeFalse();
 }
Пример #19
0
 public void is_package_zip_positive()
 {
     BottleFiles.IsEmbeddedPackageZipFile("a.b.c.pak-webcontent.zip").ShouldBeTrue();
 }
Пример #20
0
        protected void assertPackageFolderWasDeleted(string packageName)
        {
            var packageDirectory = BottleFiles.GetDirectoryForExplodedPackage(theApplicationDirectory, packageName);

            MockFor <IFileSystem>().AssertWasCalled(x => x.DeleteDirectory(packageDirectory));
        }