public bool FileExists(string file) { if (!IsPathInCone(file, out string processedPath)) { return(_basis.FileExists(file)); } file = processedPath; string rel = file.Substring(_root.FullPath.Length).Trim('/', '\\'); string[] parts = rel.Split('/', '\\'); FileSystemDirectory currentDir = _root; for (int i = 0; i < parts.Length - 1; ++i) { FileSystemDirectory dir; if (!currentDir.Directories.TryGetValue(parts[i], out dir)) { return(false); } currentDir = dir; } return(currentDir.Files.ContainsKey(parts[parts.Length - 1])); }
private static bool CheckFileExists(IPhysicalFileSystem fs, JObject config, string outputPath) { string path = Path.Combine(outputPath, config["path"].ToString()); if(fs.FileExists(path)) { return true; } Console.Error.WriteLine($"Expected a file {path} to exist but it did not"); return false; }
private static string ResolveExecutableFilePath(IPhysicalFileSystem fileSystem, string executableFileName, string outputBasePath) { if (!string.IsNullOrEmpty(outputBasePath) && fileSystem.DirectoryExists(outputBasePath)) { string executableCombinedFileName = Path.Combine(Path.GetFullPath(outputBasePath), executableFileName); if (fileSystem.FileExists(executableCombinedFileName)) { return(executableCombinedFileName); } } // The executable has not been found in the template folder, thus do not use the full path to the file. // The executable will be further searched in the directories from the PATH environment variable. return(executableFileName); }
private bool ShouldDownloadFileFromCloud(IEngineEnvironmentSettings environmentSettings, string metadataFileTargetLocation) { IPhysicalFileSystem fileSystem = environmentSettings.Host.FileSystem; if (fileSystem is IFileLastWriteTimeSource lastWriteTimeSource) { if (fileSystem.FileExists(metadataFileTargetLocation)) { DateTime utcNow = DateTime.UtcNow; DateTime lastWriteTimeUtc = lastWriteTimeSource.GetLastWriteTimeUtc(metadataFileTargetLocation); if (lastWriteTimeUtc.AddHours(CachedFileValidityInHours) > utcNow) { return(false); } } } return(true); }
private IReadOnlyList <IFileChange2> GetFileChangesInternal(IDirectory sourceDir, string targetDir, IGlobalRunSpec spec) { EngineConfig cfg = new EngineConfig(_logger, EngineConfig.DefaultWhitespaces, EngineConfig.DefaultLineEndings, spec.RootVariableCollection); IProcessor fallback = Processor.Create(cfg, spec.Operations); List <IFileChange2> changes = new List <IFileChange2>(); List <KeyValuePair <IPathMatcher, IProcessor> > fileGlobProcessors = CreateFileGlobProcessors(_logger, spec); foreach (IFile file in sourceDir.EnumerateFiles("*", SearchOption.AllDirectories)) { string sourceRel = file.PathRelativeTo(sourceDir); string fileName = Path.GetFileName(sourceRel); bool checkingDirWithPlaceholderFile = false; if (spec.IgnoreFileNames.Contains(fileName)) { // The placeholder file should never get copied / created / processed. It just causes the dir to get created if needed. // The change checking / reporting is different, setting this variable tracks it. checkingDirWithPlaceholderFile = true; } foreach (IPathMatcher include in spec.Include) { if (include.IsMatch(sourceRel)) { bool excluded = false; foreach (IPathMatcher exclude in spec.Exclude) { if (exclude.IsMatch(sourceRel)) { excluded = true; break; } } if (!excluded) { if (!spec.TryGetTargetRelPath(sourceRel, out string targetRel)) { targetRel = sourceRel; } string targetPath = Path.Combine(targetDir, targetRel); if (checkingDirWithPlaceholderFile) { targetPath = Path.GetDirectoryName(targetPath); targetRel = Path.GetDirectoryName(targetRel); if (_fileSystem.DirectoryExists(targetPath)) { changes.Add(new FileChange(sourceRel, targetRel, ChangeKind.Overwrite)); } else { changes.Add(new FileChange(sourceRel, targetRel, ChangeKind.Create)); } } else if (_fileSystem.FileExists(targetPath)) { changes.Add(new FileChange(sourceRel, targetRel, ChangeKind.Overwrite)); } else { changes.Add(new FileChange(sourceRel, targetRel, ChangeKind.Create)); } } break; } } } return(changes); }