Esempio n. 1
0
        public bool TryCreateHash(ExecuteScriptCommandOptions options, out string hash)
        {
            if (options.NoCache)
            {
                _logger.Debug($"The script {options.File.Path} was executed with the '--no-cache' flag. Skipping cache.");
                hash = null;
                return(false);
            }

            var scriptFilesProvider = new ScriptFilesResolver();
            var allScriptFiles      = scriptFilesProvider.GetScriptFiles(options.File.Path);
            var projectFile         = new ScriptProjectProvider(_logFactory).CreateProjectFileFromScriptFiles(ScriptEnvironment.Default.TargetFramework, allScriptFiles.ToArray());

            if (!projectFile.IsCacheable)
            {
                _logger.Warning($"The script {options.File.Path} is not cacheable. For caching and optimal performance, ensure that the script only contains NuGet references with pinned/exact versions.");
                hash = null;
                return(false);
            }


            IncrementalHash incrementalHash = IncrementalHash.CreateHash(HashAlgorithmName.SHA256);

            foreach (var scriptFile in allScriptFiles)
            {
                incrementalHash.AppendData(File.ReadAllBytes(scriptFile));
            }

            var configuration = options.OptimizationLevel.ToString();

            incrementalHash.AppendData(Encoding.UTF8.GetBytes(configuration));

            hash = Convert.ToBase64String(incrementalHash.GetHashAndReset());
            return(true);
        }
        public void ShouldNotParseLoadDirectiveIgnoringCase()
        {
            using (var rootFolder = new DisposableFolder())
            {
                var rootScript = WriteScript("#LOAD \"Bar.csx\"", rootFolder.Path, "Foo.csx");
                WriteScript(string.Empty, rootFolder.Path, "Bar.csx");
                var scriptFilesResolver = new ScriptFilesResolver();

                var files = scriptFilesResolver.GetScriptFiles(rootScript);

                Assert.Equal(new[] { "Foo.csx" }, files.Select(Path.GetFileName));
            }
        }
Esempio n. 3
0
        public void ShouldOnlyResolveRootScript()
        {
            using (var rootFolder = new DisposableFolder())
            {
                var rootScript = WriteScript(string.Empty, rootFolder.Path, "Foo.csx");
                WriteScript(string.Empty, rootFolder.Path, "Bar.csx");
                var scriptFilesResolver = new ScriptFilesResolver();

                var files = scriptFilesResolver.GetScriptFiles(rootScript);

                Assert.True(files.Count == 1);
                Assert.Contains(files, f => f.Contains("Foo.csx"));
                Assert.Contains(files, f => !f.Contains("Bar.csx"));
            }
        }
        public void ShouldParseFilesStartingWithNuGet()
        {
            using (var rootFolder = new DisposableFolder())
            {
                var rootScript = WriteScript("#load \"NuGet.csx\"", rootFolder.Path, "Foo.csx");
                WriteScript(string.Empty, rootFolder.Path, "NuGet.csx");
                var scriptFilesResolver = new ScriptFilesResolver();

                var files = scriptFilesResolver.GetScriptFiles(rootScript);

                Assert.True(files.Count == 2);
                Assert.Contains(files, f => f.Contains("Foo.csx"));
                Assert.Contains(files, f => f.Contains("NuGet.csx"));
            }
        }
Esempio n. 5
0
        public void ShouldResolveLoadedScriptInSubFolder()
        {
            using (var rootFolder = new DisposableFolder())
            {
                var rootScript = WriteScript("#load \"SubFolder/Bar.csx\"", rootFolder.Path, "Foo.csx");
                var subFolder  = Path.Combine(rootFolder.Path, "SubFolder");
                Directory.CreateDirectory(subFolder);
                WriteScript(string.Empty, subFolder, "Bar.csx");

                var scriptFilesResolver = new ScriptFilesResolver();
                var files = scriptFilesResolver.GetScriptFiles(rootScript);

                Assert.True(files.Count == 2);
                Assert.Contains(files, f => f.Contains("Foo.csx"));
                Assert.Contains(files, f => f.Contains("Bar.csx"));
            }
        }
Esempio n. 6
0
        public ScriptSource(string code, FileInfo file = null)
        {
            Code = code;
            File = file;

            if (file == null)
            {
                return;
            }

            var imports = new ScriptFilesResolver().GetScriptFiles(file.FullName);

            imports.RemoveWhere(x => x.ToLowerInvariant().Equals(File.FullName.ToLowerInvariant()));

            Imports = imports
                      .Select(x => new ScriptSource(System.IO.File.ReadAllText(x), new FileInfo(x)))
                      .ToArray();
        }