public void Setup()
        {
            javaScriptBundleFactory = new JavaScriptBundleFactory();
            var retryableFileOpener = new RetryableFileOpener();

            hasher = new Hasher(retryableFileOpener);
        }
Ejemplo n.º 2
0
        private CrusherManager()
        {
            var crusherConfiguration = CurrentCrusherConfiguration.Current;

            _hashQueryStringKeyName = crusherConfiguration.QuerystringKeyName;
            _cssGroups = crusherConfiguration.CssGroups;
            _jsGroups  = crusherConfiguration.JsGroups;

            var retryableFileOpener = new RetryableFileOpener();
            var hasher = new Hasher(retryableFileOpener);
            var retryableFileWriter = new RetryableFileWriter(BufferSize, _encoding, retryableFileOpener, hasher);

            _pathProvider = new PathProvider();
            var cssAssetsFileHasher = new CssAssetsFileHasher(_hashQueryStringKeyName, hasher, _pathProvider);
            var cssPathRewriter     = new CssPathRewriter(cssAssetsFileHasher, _pathProvider);

            var cacheManager = new HttpCacheManager();

            var jsSpriteMetaDataFileInfo = new FileInfo("js.metadata");
            var jsMetaData = new SingleFileMetaData(jsSpriteMetaDataFileInfo, retryableFileOpener, retryableFileWriter);

            var cssSpriteMetaDataFileInfo = new FileInfo("css.metadata");
            var cssMetaData = new SingleFileMetaData(cssSpriteMetaDataFileInfo, retryableFileOpener, retryableFileWriter);

            _cssCrusher = new CssCrusher(cacheManager, _pathProvider, retryableFileOpener, retryableFileWriter, cssPathRewriter, cssMetaData, crusherConfiguration.WatchAssets);
            _jsCrusher  = new JsCrusher(cacheManager, _pathProvider, retryableFileOpener, retryableFileWriter, jsMetaData);

            InitManager();
        }
Ejemplo n.º 3
0
        private CrusherManager()
        {
            var crusherConfiguration = CurrentCrusherConfiguration.Current;
            _hashQueryStringKeyName = crusherConfiguration.QuerystringKeyName;
            _cssGroups = crusherConfiguration.CssGroups;
            _jsGroups = crusherConfiguration.JsGroups;

            var retryableFileOpener = new RetryableFileOpener();
            var hasher = new Hasher(retryableFileOpener);
            var retryableFileWriter = new RetryableFileWriter(BufferSize, _encoding, retryableFileOpener, hasher);
            _pathProvider = new PathProvider();
            var cssAssetsFileHasher = new CssAssetsFileHasher(_hashQueryStringKeyName, hasher, _pathProvider);
            var cssPathRewriter = new CssPathRewriter(cssAssetsFileHasher, _pathProvider);

            var cacheManager = new HttpCacheManager();

            var jsSpriteMetaDataFileInfo = new FileInfo("js.metadata");
            var jsMetaData = new SingleFileMetaData(jsSpriteMetaDataFileInfo, retryableFileOpener, retryableFileWriter);

            var cssSpriteMetaDataFileInfo = new FileInfo("css.metadata");
            var cssMetaData = new SingleFileMetaData(cssSpriteMetaDataFileInfo, retryableFileOpener, retryableFileWriter);

            _cssCrusher = new CssCrusher(cacheManager, _pathProvider, retryableFileOpener, retryableFileWriter, cssPathRewriter, cssMetaData, crusherConfiguration.WatchAssets);
            _jsCrusher = new JsCrusher(cacheManager, _pathProvider, retryableFileOpener, retryableFileWriter, jsMetaData);

            InitManager();
        }
Ejemplo n.º 4
0
        public void Setup()
        {
            cssBundleFactory = new CssBundleFactory();
            var retryableFileOpener = new RetryableFileOpener();

            hasher = new Hasher(retryableFileOpener);
        }
Ejemplo n.º 5
0
        public void OpenFileStream_Throws_Exception_With_Filepath()
        {
            var fakePath = Guid.NewGuid().ToString();

            var opener = new RetryableFileOpener();

            var ex = Assert.Throws <IOException>(() => opener.OpenFileStream(fakePath, 0, FileMode.Open, FileAccess.ReadWrite, FileShare.None));

            Assert.True(ex.Message.Contains(fakePath));
        }
Ejemplo n.º 6
0
        public void OpenTextStreamReader_Throws_Exception_With_Filepath()
        {
            var fakePath = Guid.NewGuid().ToString();

            var opener = new RetryableFileOpener();

            var ex = Assert.Throws <IOException>(() => opener.OpenTextStreamReader(fakePath, 0));

            Assert.True(ex.Message.Contains(fakePath));
        }
Ejemplo n.º 7
0
        private CssSpriteManager()
        {
            var retryableFileOpener = new RetryableFileOpener();
            var hasher = new Hasher(retryableFileOpener);
            var retryableFileWriter = new RetryableFileWriter(BufferSize, retryableFileOpener, hasher);

            _pathProvider = new PathProvider();
            _cssSpriteCreator = new CssSpriteCreator(retryableFileOpener, hasher, retryableFileWriter);

            InitManager();
        }
Ejemplo n.º 8
0
 private CrusherManager()
 {
     var retryableFileOpener = new RetryableFileOpener();
     var hasher = new Hasher(retryableFileOpener);
     var retryableFileWriter = new RetryableFileWriter(BufferSize, retryableFileOpener, hasher);
     _pathProvider = new PathProvider();
     var cssAssetsFileHasher = new CssAssetsFileHasher(_hashQueryStringKeyName, hasher, _pathProvider);
     var cssPathRewriter = new CssPathRewriter(cssAssetsFileHasher, _pathProvider);
     _cssCrusher = new CssCrusher(retryableFileOpener, retryableFileWriter, cssPathRewriter, _pathProvider);
     _jsCrusher = new JsCrusher(retryableFileOpener, retryableFileWriter, _pathProvider);
     InitManager();
 }
Ejemplo n.º 9
0
        private CssSpriteManager()
        {
            var retryableFileOpener = new RetryableFileOpener();
            var hasher = new Hasher(retryableFileOpener);
            var retryableFileWriter = new RetryableFileWriter(BufferSize, retryableFileOpener, hasher);

            _cacheManager     = new HttpCacheManager();
            _pathProvider     = new PathProvider();
            _cssSpriteCreator = new CssSpriteCreator(_cacheManager, retryableFileOpener, _pathProvider, retryableFileWriter);

            InitManager();
        }
Ejemplo n.º 10
0
 public Configuration()
 {
     DefaultJavascriptMimeType        = "application/javascript";
     DefaultCssMimeType               = "text/css";
     DefaultCacheInvalidationStrategy = new DefaultCacheInvalidationStrategy();
     DefaultCssMinifier               = new Minifiers.CSS.MsMinifier();
     DefaultHashKeyName               = "r";
     DefaultJsMinifier          = new Minifiers.JavaScript.MsMinifier();
     DefaultTempPathProvider    = new TempPathProvider();
     DefaultRetryableFileOpener = new RetryableFileOpener();
     DefaultHasher = new SHA1Hasher(DefaultRetryableFileOpener);
 }
Ejemplo n.º 11
0
        protected override void Given()
        {
            base.Given();

            FileToHash = new FileInfo(FileName);
            FileStream = MockRepository.GenerateMock <FileStream>();

            RetryableFileOpener.Expect(x => x.OpenFileStream(FileToHash, 5, FileMode.Open, FileAccess.Read, FileShare.Read)).Return(FileStream);

            Func <byte[], int, int, int> read = Stream.Read;

            FileStream.Stub(x => x.Read(null, 0, 0)).IgnoreArguments().Do(read);
        }
Ejemplo n.º 12
0
        private CssSpriteManager()
        {
            var retryableFileOpener = new RetryableFileOpener();
            var hasher = new Hasher(retryableFileOpener);
            var retryableFileWriter = new RetryableFileWriter(BufferSize, _encoding, retryableFileOpener, hasher);

            var cacheManager = new HttpCacheManager();
            _pathProvider = new PathProvider();
            var cssSpriteMetaDataFileInfo = new FileInfo("cssSprite.metadata");
            _cssSpriteMetaData = new SingleFileMetaData(cssSpriteMetaDataFileInfo, retryableFileOpener, retryableFileWriter);
            _cssSpriteCreator = new CssSpriteCreator(cacheManager, retryableFileOpener, _pathProvider, retryableFileWriter, _cssSpriteMetaData);

            InitManager();
        }
Ejemplo n.º 13
0
        private CssSpriteManager()
        {
            var retryableFileOpener = new RetryableFileOpener();
            var hasher = new Hasher(retryableFileOpener);
            var retryableFileWriter = new RetryableFileWriter(BufferSize, _encoding, retryableFileOpener, hasher);

            var cacheManager = new HttpCacheManager();

            _pathProvider = new PathProvider();
            var cssSpriteMetaDataFileInfo = new FileInfo("cssSprite.metadata");

            _cssSpriteMetaData = new SingleFileMetaData(cssSpriteMetaDataFileInfo, retryableFileOpener, retryableFileWriter);
            _cssSpriteCreator  = new CssSpriteCreator(cacheManager, retryableFileOpener, _pathProvider, retryableFileWriter, _cssSpriteMetaData);

            InitManager();
        }
Ejemplo n.º 14
0
        public void Setup()
        {
            var nonDebugStatusReader = new StubDebugStatusReader(false);
            var debugStatusReader    = new StubDebugStatusReader(true);

            currentDirectoryWrapper = new StubCurrentDirectoryWrapper();
            stubBundleCache         = new ApplicationCache();

            var retryableFileOpener = new RetryableFileOpener();

            hasher = new Hasher(retryableFileOpener);

            //fileReaderFactory.SetContents(javaScript);

            javaScriptBundle = new JavaScriptBundle(nonDebugStatusReader,
                                                    fileWriterFactory,
                                                    fileReaderFactory,
                                                    currentDirectoryWrapper,
                                                    hasher,
                                                    stubBundleCache);

            javaScriptBundle2 = new JavaScriptBundle(nonDebugStatusReader,
                                                     fileWriterFactory,
                                                     fileReaderFactory,
                                                     currentDirectoryWrapper,
                                                     hasher,
                                                     stubBundleCache);

            debugJavaScriptBundle = new JavaScriptBundle(debugStatusReader,
                                                         fileWriterFactory,
                                                         fileReaderFactory,
                                                         currentDirectoryWrapper,
                                                         hasher,
                                                         stubBundleCache);

            debugJavaScriptBundle2 = new JavaScriptBundle(debugStatusReader,
                                                          fileWriterFactory,
                                                          fileReaderFactory,
                                                          currentDirectoryWrapper,
                                                          hasher,
                                                          stubBundleCache);

            outputFileNumber += 1;
            currentOutputFile = outputFileRoot + outputFileNumber + ".js";
        }
Ejemplo n.º 15
0
        public void Setup()
        {
            var nonDebugStatusReader = new StubDebugStatusReader(false);
            var debugStatusReader    = new StubDebugStatusReader(true);

            fileWriterFactory       = new StubFileWriterFactory();
            fileReaderFactory       = new StubFileReaderFactory();
            currentDirectoryWrapper = new StubCurrentDirectoryWrapper();
            stubBundleCache         = new StubBundleCache();

            var retryableFileOpener = new RetryableFileOpener();

            hasher = new Hasher(retryableFileOpener);

            fileReaderFactory.SetContents(javaScript);

            javaScriptBundle = new JavaScriptBundle(nonDebugStatusReader,
                                                    fileWriterFactory,
                                                    fileReaderFactory,
                                                    currentDirectoryWrapper,
                                                    hasher,
                                                    stubBundleCache);

            javaScriptBundle2 = new JavaScriptBundle(nonDebugStatusReader,
                                                     fileWriterFactory,
                                                     fileReaderFactory,
                                                     currentDirectoryWrapper,
                                                     hasher,
                                                     stubBundleCache);

            debugJavaScriptBundle = new JavaScriptBundle(debugStatusReader,
                                                         fileWriterFactory,
                                                         fileReaderFactory,
                                                         currentDirectoryWrapper,
                                                         hasher,
                                                         stubBundleCache);

            debugJavaScriptBundle2 = new JavaScriptBundle(debugStatusReader,
                                                          fileWriterFactory,
                                                          fileReaderFactory,
                                                          currentDirectoryWrapper,
                                                          hasher,
                                                          stubBundleCache);
        }
        public void OpenTextStreamWriter_Directory_DoesNotExists_ShouldCreate()
        {
            var folder = TestUtilities.PreparePath(Path.Combine(Environment.CurrentDirectory, Guid.NewGuid().ToString(), Guid.NewGuid().ToString()));

            try
            {
                var opener = new RetryableFileOpener();

                var filePath = Path.Combine(folder, "file.js");
                using (opener.OpenTextStreamWriter(filePath, 2, false))
                {
                }

                Assert.True(File.Exists(filePath));
            }
            finally
            {
                Directory.Delete(folder, true);
            }
        }
Ejemplo n.º 17
0
        private CrusherManager()
        {
            var crusherConfiguration = CurrentCrusherConfiguration.Current;
            _hashQueryStringKeyName = crusherConfiguration.QuerystringKeyName;
            _cssGroups = crusherConfiguration.CssGroups;
            _jsGroups = crusherConfiguration.JsGroups;

            var retryableFileOpener = new RetryableFileOpener();
            var hasher = new Hasher(retryableFileOpener);
            var retryableFileWriter = new RetryableFileWriter(BufferSize, retryableFileOpener, hasher);
            _pathProvider = new PathProvider();
            var cssAssetsFileHasher = new CssAssetsFileHasher(_hashQueryStringKeyName, hasher, _pathProvider);
            var cssPathRewriter = new CssPathRewriter(cssAssetsFileHasher, _pathProvider);

            _cacheManager = new HttpCacheManager();
            _cssCrusher = new CssCrusher(_cacheManager, _pathProvider, retryableFileOpener, retryableFileWriter, cssPathRewriter);
            _jsCrusher = new JsCrusher(_cacheManager, _pathProvider, retryableFileOpener, retryableFileWriter);

            InitManager();
        }
        public void OpenFileStream_Directory_Exists()
        {
            var folder = TestUtilities.PreparePath(Path.Combine(Environment.CurrentDirectory, Guid.NewGuid().ToString()));

            try
            {
                Directory.CreateDirectory(folder);

                var opener = new RetryableFileOpener();

                var filePath = Path.Combine(folder, "file.js");
                using (opener.OpenFileStream(filePath, 1, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite))
                {
                }

                Assert.True(File.Exists(filePath));
            }
            finally
            {
                Directory.Delete(folder, true);
            }
        }
Ejemplo n.º 19
0
        private CrusherManager()
        {
            var crusherConfiguration = CurrentCrusherConfiguration.Current;

            _hashQueryStringKeyName = crusherConfiguration.QuerystringKeyName;
            _cssGroups = crusherConfiguration.CssGroups;
            _jsGroups  = crusherConfiguration.JsGroups;

            var retryableFileOpener = new RetryableFileOpener();
            var hasher = new Hasher(retryableFileOpener);
            var retryableFileWriter = new RetryableFileWriter(BufferSize, retryableFileOpener, hasher);

            _pathProvider = new PathProvider();
            var cssAssetsFileHasher = new CssAssetsFileHasher(_hashQueryStringKeyName, hasher, _pathProvider);
            var cssPathRewriter     = new CssPathRewriter(cssAssetsFileHasher, _pathProvider);

            _cacheManager = new HttpCacheManager();
            _cssCrusher   = new CssCrusher(_cacheManager, _pathProvider, retryableFileOpener, retryableFileWriter, cssPathRewriter);
            _jsCrusher    = new JsCrusher(_cacheManager, _pathProvider, retryableFileOpener, retryableFileWriter);

            InitManager();
        }
Ejemplo n.º 20
0
        public object Clone()
        {
            var cssSpriteConfiguration = GetCssSpriteSection(_configPath, CssSpriteSectionName);
            var crusherConfiguration   = GetCrusherSection(_configPath, CrusherSectionName);

            var configUri = new Uri(_configPath, UriKind.RelativeOrAbsolute);

            if (!configUri.IsAbsoluteUri)
            {
                configUri = new Uri(Path.Combine(Environment.CurrentDirectory, configUri.ToString()));
            }

            var physicalApplicationPath = new FileInfo(configUri.LocalPath).DirectoryName;

            var retryableFileOpener = new RetryableFileOpener();
            var hasher = new Hasher(retryableFileOpener);
            var retryableFileWriter = new RetryableFileWriter(BufferSize, Encoding, retryableFileOpener, hasher);
            var pathProvider        = new PathProvider(_applicationPath, physicalApplicationPath);
            var cacheManager        = new HttpCacheManager();

            var cssSpriteOutput = string.Empty;
            var jsOutput        = string.Empty;
            var cssOutput       = string.Empty;

            var countdownEvents = new CountdownEvent(1);

            ThreadPool.QueueUserWorkItem(data =>
            {
                var countdownEvent = (CountdownEvent)data;

                try
                {
                    if (cssSpriteConfiguration != null)
                    {
                        var cssSpriteGroups          = cssSpriteConfiguration.CssSpriteGroups;
                        var cssSpriteCreator         = new CssSpriteCreator(cacheManager, retryableFileOpener, pathProvider, retryableFileWriter);
                        var cssSpriteGroupsProcessor = new CssSpriteGroupsProcessor();

                        cssSpriteOutput = cssSpriteGroupsProcessor.ProcessGroups(pathProvider, cssSpriteCreator, cssSpriteGroups).ToString();

                        _logMessage(cssSpriteOutput);
                    }
                }
                catch (Exception exception)
                {
                    _logError(exception.ToString());
                }
                countdownEvent.Signal();
            }, countdownEvents);

            countdownEvents.Wait();

            countdownEvents = new CountdownEvent(2);

            ThreadPool.QueueUserWorkItem(data =>
            {
                var countdownEvent = (CountdownEvent)data;

                try
                {
                    if (crusherConfiguration != null)
                    {
                        var jsCrusher = new JsCrusher(cacheManager, pathProvider, retryableFileOpener,
                                                      retryableFileWriter);
                        var jsGroups          = crusherConfiguration.JsGroups;
                        var jsGroupsProcessor = new JsGroupsProcessor();

                        jsOutput = jsGroupsProcessor.ProcessGroups(pathProvider, jsCrusher, jsGroups).ToString();

                        _logMessage(jsOutput);
                    }
                }
                catch (Exception exception)
                {
                    _logError(exception.ToString());
                }
                countdownEvent.Signal();
            }, countdownEvents);

            ThreadPool.QueueUserWorkItem(data =>
            {
                var countdownEvent = (CountdownEvent)data;

                try
                {
                    if (crusherConfiguration != null)
                    {
                        var hashQueryStringKeyName = crusherConfiguration.QuerystringKeyName;
                        var cssAssetsFileHasher    = new CssAssetsFileHasher(hashQueryStringKeyName, hasher,
                                                                             pathProvider);
                        var cssPathRewriter = new CssPathRewriter(cssAssetsFileHasher, pathProvider);
                        var cssCrusher      = new CssCrusher(cacheManager, pathProvider, retryableFileOpener,
                                                             retryableFileWriter, cssPathRewriter);
                        var cssGroups        = crusherConfiguration.CssGroups;
                        var cssGroupsCrusher = new CssGroupsProcessor();
                        cssOutput            = cssGroupsCrusher.ProcessGroups(pathProvider, cssCrusher, cssGroups).ToString();

                        _logMessage(cssOutput);
                    }
                }
                catch (Exception exception)
                {
                    _logError(exception.ToString());
                }
                countdownEvent.Signal();
            },
                                         countdownEvents);

            countdownEvents.Wait();

            return(null);
        }
Ejemplo n.º 21
0
        static int Main(string[] args)
        {
            var showHelp             = false;
            var configPath           = string.Empty;
            var crusherSectionName   = "Crusher";
            var cssSpriteSectionName = "CssSprite";
            var applicationPath      = "/";

            var options = new OptionSet()
            {
                {
                    "c=|configPath=",
                    "the configuration path to the web.config or app.config file. E.g. ../../../Talifun.Web.Examples/Crusher.Demo/web.config",
                    c => configPath = c
                },
                {
                    "cs=|crusherSectionName=",
                    "the section name of the configuration element for the Talifun.Crusher configuration. Defaults to 'Crusher' if not specified.",
                    cs => crusherSectionName = cs
                },
                {
                    "css=|cssSpriteSectionName=",
                    "the section name of the configuration element for the Talifun.CssSprite configuration. Defaults to 'CssSprite' if not specified.",
                    css => cssSpriteSectionName = css
                },
                {
                    "a=|applicationPath=",
                    "the application path to be relative from. Defaults to  '/' if not specified.",
                    a => applicationPath = a
                },
                {
                    "?|h|help",
                    "display help screen",
                    h => showHelp = h != null
                }
            };

            try
            {
                options.Parse(args);
            }
            catch (OptionException e)
            {
                Console.WriteLine(HeaderMessage);
                Console.WriteLine(e.Message);
                Console.WriteLine(UsageMessage);
                Console.WriteLine(HelpMessage);
                return(DisplayHelpScreenExitCode);
            }

            if (showHelp)
            {
                DisplayHelp(options);
                return(DisplayHelpScreenExitCode);
            }

            if (string.IsNullOrEmpty(configPath))
            {
                Console.WriteLine(HeaderMessage);
                Console.WriteLine(UsageMessage);
                Console.WriteLine(HelpMessage);
                return(DisplayHelpScreenExitCode);
            }

            var crusherConfiguration   = GetCrusherSection(configPath, crusherSectionName);
            var cssSpriteConfiguration = GetCssSpriteSection(configPath, cssSpriteSectionName);

            if (crusherConfiguration == null && cssSpriteConfiguration == null)
            {
                Console.WriteLine(HeaderMessage);
                Console.WriteLine("\"{0}\" section name not found in {1} ", cssSpriteSectionName, configPath);
                Console.WriteLine("\"{0}\" section name not found in {1} ", crusherSectionName, configPath);
                Console.WriteLine(HelpMessage);
                return(DisplayHelpScreenExitCode);
            }

            try
            {
                Console.WriteLine();
                Console.WriteLine("Settings used:");
                Console.WriteLine("configPath = " + configPath);
                Console.WriteLine("cssSpriteSectionName = " + cssSpriteSectionName);
                Console.WriteLine("crusherSectionName = " + crusherSectionName);
                Console.WriteLine("applicationPath = " + applicationPath);

                var configUri = new Uri(configPath, UriKind.RelativeOrAbsolute);
                if (!configUri.IsAbsoluteUri)
                {
                    configUri = new Uri(Path.Combine(Environment.CurrentDirectory, configUri.ToString()));
                }

                var physicalApplicationPath = new FileInfo(configUri.LocalPath).DirectoryName;

                var retryableFileOpener = new RetryableFileOpener();
                var hasher = new Hasher(retryableFileOpener);
                var retryableFileWriter = new RetryableFileWriter(BufferSize, Encoding, retryableFileOpener, hasher);
                var pathProvider        = new PathProvider(applicationPath, physicalApplicationPath);
                var cacheManager        = new HttpCacheManager();

                var cssSpriteSpriteMetaDataFileInfo = new FileInfo("cssSprite.metadata");
                var cssSpriteMetaData = new SingleFileMetaData(cssSpriteSpriteMetaDataFileInfo, retryableFileOpener, retryableFileWriter);

                var jsSpriteMetaDataFileInfo = new FileInfo("js.metadata");
                var jsMetaData = new SingleFileMetaData(jsSpriteMetaDataFileInfo, retryableFileOpener, retryableFileWriter);

                var cssSpriteMetaDataFileInfo = new FileInfo("css.metadata");
                var cssMetaData = new SingleFileMetaData(cssSpriteMetaDataFileInfo, retryableFileOpener, retryableFileWriter);

                var jsOutput        = string.Empty;
                var cssOutput       = string.Empty;
                var cssSpriteOutput = string.Empty;


                //We want to be able to use output from css sprites in crushed content
                var countdownEvents = new CountdownEvent(1);

                var cssSpriteExceptions = new List <CssSpriteException>();
                ThreadPool.QueueUserWorkItem(data =>
                {
                    var manualResetEvent = (CountdownEvent)data;
                    try
                    {
                        if (cssSpriteConfiguration != null)
                        {
                            var cssSpriteGroups          = cssSpriteConfiguration.CssSpriteGroups;
                            var cssSpriteCreator         = new CssSpriteCreator(cacheManager, retryableFileOpener, pathProvider, retryableFileWriter, cssSpriteMetaData);
                            var cssSpriteGroupsProcessor = new CssSpriteGroupsProcessor();

                            cssSpriteOutput = cssSpriteGroupsProcessor.ProcessGroups(pathProvider, cssSpriteCreator, cssSpriteGroups).ToString();
                        }
                    }
                    catch (Exception exception)
                    {
                        cssSpriteExceptions.Add(new CssSpriteException(exception));
                    }
                    manualResetEvent.Signal();
                }, countdownEvents);

                countdownEvents.Wait();

                countdownEvents = new CountdownEvent(2);
                var jsExceptions = new List <JsException>();
                ThreadPool.QueueUserWorkItem(data =>
                {
                    var manualResetEvent = (CountdownEvent)data;
                    try
                    {
                        if (crusherConfiguration != null)
                        {
                            var jsCrusher         = new JsCrusher(cacheManager, pathProvider, retryableFileOpener, retryableFileWriter, jsMetaData);
                            var jsGroups          = crusherConfiguration.JsGroups;
                            var jsGroupsProcessor = new JsGroupsProcessor();

                            jsOutput = jsGroupsProcessor.ProcessGroups(pathProvider, jsCrusher, jsGroups).ToString();
                        }
                    }
                    catch (Exception exception)
                    {
                        jsExceptions.Add(new JsException(exception));
                    }
                    manualResetEvent.Signal();
                }, countdownEvents);

                var cssExceptions = new List <CssException>();
                ThreadPool.QueueUserWorkItem(data =>
                {
                    var manualResetEvent = (CountdownEvent)data;
                    try
                    {
                        if (crusherConfiguration != null)
                        {
                            var hashQueryStringKeyName = crusherConfiguration.QuerystringKeyName;
                            var cssAssetsFileHasher    = new CssAssetsFileHasher(hashQueryStringKeyName, hasher, pathProvider);
                            var cssPathRewriter        = new CssPathRewriter(cssAssetsFileHasher, pathProvider);
                            var cssCrusher             = new CssCrusher(cacheManager, pathProvider, retryableFileOpener, retryableFileWriter, cssPathRewriter, cssMetaData, crusherConfiguration.WatchAssets);
                            var cssGroups        = crusherConfiguration.CssGroups;
                            var cssGroupsCrusher = new CssGroupsProcessor();
                            cssOutput            = cssGroupsCrusher.ProcessGroups(pathProvider, cssCrusher, cssGroups).ToString();
                        }
                    }
                    catch (Exception exception)
                    {
                        cssExceptions.Add(new CssException(exception));
                    }
                    manualResetEvent.Signal();
                }, countdownEvents);

                countdownEvents.Wait();

                if (string.IsNullOrEmpty(cssSpriteOutput) && !cssSpriteExceptions.Any())
                {
                    Console.WriteLine();
                    Console.WriteLine("Skipping css sprite creation. \"{0}\" section name not found in \"{1}\"", cssSpriteSectionName, configPath);
                }
                else
                {
                    Console.WriteLine();
                    Console.WriteLine(cssSpriteOutput);

                    if (cssSpriteExceptions.Any())
                    {
                        Console.WriteLine("Css sprite errors:");
                        Console.WriteLine(new AggregateException(cssSpriteExceptions.Cast <Exception>()));
                    }
                }

                if (string.IsNullOrEmpty(jsOutput) && string.IsNullOrEmpty(cssOutput) && !jsExceptions.Any() && !cssExceptions.Any())
                {
                    Console.WriteLine();
                    Console.WriteLine("Skipping css/js crushed content creation. \"{0}\" section name not found in \"{1}\"", crusherSectionName, configPath);
                }
                else
                {
                    Console.WriteLine();
                    Console.WriteLine(cssOutput);
                    if (cssExceptions.Any())
                    {
                        Console.WriteLine("Css errors:");
                        Console.WriteLine(new AggregateException(cssExceptions.Cast <Exception>()));
                    }

                    Console.WriteLine();
                    Console.WriteLine(jsOutput);
                    if (jsExceptions.Any())
                    {
                        Console.WriteLine("Js errors:");
                        Console.WriteLine(new AggregateException(jsExceptions.Cast <Exception>()));
                    }
                }
            }
            catch (Exception exception)
            {
                Console.Write(exception);
                return(ErrorExitCode);
            }

            return(SuccessExitCode);
        }
Ejemplo n.º 22
0
        static int Main(string[] args)
        {
            var showHelp             = false;
            var configPath           = string.Empty;
            var crusherSectionName   = "Crusher";
            var cssSpriteSectionName = "CssSprite";
            var applicationPath      = "/";

            var options = new OptionSet()
            {
                {
                    "c=|configPath=",
                    "the configuration path to the web.config or app.config file. E.g. ../../../Talifun.Web.Examples/Crusher.Demo/web.config",
                    c => configPath = c
                },
                {
                    "cs=|crusherSectionName=",
                    "the section name of the configuration element for the Talifun.Crusher configuration. Defaults to 'Crusher' if not specified.",
                    cs => crusherSectionName = cs
                },
                {
                    "css=|cssSpriteSectionName=",
                    "the section name of the configuration element for the Talifun.CssSprite configuration. Defaults to 'CssSprite' if not specified.",
                    css => cssSpriteSectionName = css
                },
                {
                    "a=|applicationPath=",
                    "the application path to be relative from. Defaults to  '/' if not specified.",
                    a => applicationPath = a
                },
                {
                    "?|h|help",
                    "display help screen",
                    h => showHelp = h != null
                }
            };

            try
            {
                options.Parse(args);
            }
            catch (OptionException e)
            {
                Console.WriteLine(HeaderMessage);
                Console.WriteLine(e.Message);
                Console.WriteLine(UsageMessage);
                Console.WriteLine(HelpMessage);
                return(DisplayHelpScreenExitCode);
            }

            if (showHelp)
            {
                DisplayHelp(options);
                return(DisplayHelpScreenExitCode);
            }

            if (string.IsNullOrEmpty(configPath))
            {
                Console.WriteLine(HeaderMessage);
                Console.WriteLine(UsageMessage);
                Console.WriteLine(HelpMessage);
                return(DisplayHelpScreenExitCode);
            }

            var crusherConfiguration   = GetCrusherSection(configPath, crusherSectionName);
            var cssSpriteConfiguration = GetCssSpriteSection(configPath, cssSpriteSectionName);

            if (crusherConfiguration == null && cssSpriteConfiguration == null)
            {
                Console.WriteLine(HeaderMessage);
                Console.WriteLine("\"{0}\" section name not found in {1} ", crusherSectionName, configPath);
                Console.WriteLine("\"{0}\" section name not found in {1} ", cssSpriteSectionName, configPath);
                Console.WriteLine(HelpMessage);
                return(DisplayHelpScreenExitCode);
            }

            try
            {
                Console.WriteLine();
                Console.WriteLine("Settings used:");
                Console.WriteLine("configPath = " + configPath);
                Console.WriteLine("crusherSectionName = " + crusherSectionName);
                Console.WriteLine("cssSpriteSectionName = " + cssSpriteSectionName);
                Console.WriteLine("applicationPath = " + applicationPath);

                var physicalApplicationPath = new FileInfo(configPath).DirectoryName;
                var retryableFileOpener     = new RetryableFileOpener();
                var hasher = new Hasher(retryableFileOpener);
                var retryableFileWriter = new RetryableFileWriter(BufferSize, retryableFileOpener, hasher);
                var pathProvider        = new PathProvider(applicationPath, physicalApplicationPath);
                var cacheManager        = new HttpCacheManager();

                if (crusherConfiguration == null)
                {
                    Console.WriteLine();
                    Console.WriteLine("Skipping css/js crushed content creation. \"{0}\" section name not found in \"{1}\"", crusherSectionName, configPath);
                }
                else
                {
                    var hashQueryStringKeyName = crusherConfiguration.QuerystringKeyName;
                    var cssAssetsFileHasher    = new CssAssetsFileHasher(hashQueryStringKeyName, hasher, pathProvider);
                    var cssPathRewriter        = new CssPathRewriter(cssAssetsFileHasher, pathProvider);
                    var cssCrusher             = new CssCrusher(cacheManager, pathProvider, retryableFileOpener, retryableFileWriter, cssPathRewriter);
                    var jsCrusher = new JsCrusher(cacheManager, pathProvider, retryableFileOpener, retryableFileWriter);

                    var cssGroups = crusherConfiguration.CssGroups;
                    var jsGroups  = crusherConfiguration.JsGroups;
                    CreateCrushedFiles(pathProvider, cssGroups, jsGroups, cssCrusher, jsCrusher);

                    Console.WriteLine();
                    Console.WriteLine(_cssOutput);
                    Console.WriteLine();
                    Console.WriteLine(_jsOutput);
                }

                if (cssSpriteConfiguration == null)
                {
                    Console.WriteLine();
                    Console.WriteLine("Skipping css sprite creation. \"{0}\" section name not found in \"{1}\"", cssSpriteSectionName, configPath);
                }
                else
                {
                    var cssSpriteGroups  = cssSpriteConfiguration.CssSpriteGroups;
                    var cssSpriteCreator = new CssSpriteCreator(cacheManager, retryableFileOpener, pathProvider, retryableFileWriter);
                    CreateCssSpriteFiles(pathProvider, cssSpriteGroups, cssSpriteCreator);

                    Console.WriteLine();
                    Console.WriteLine(_cssSpriteOutput);
                }
            }
            catch (Exception exception)
            {
                Console.Write(exception);
                return(ErrorExitCode);
            }

            return(SuccessExitCode);
        }