UpdateTimestamp(FileSetTarget fileSet) { Guard.NotNull(fileSet, nameof(fileSet)); var newestDependencyTimestamp = Graph.RequiredBy(fileSet).Max(t => t.Timestamp); if (fileSet.Timestamp == null) { fileSet.SetTimestamp(newestDependencyTimestamp ?? DateTime.Now); } else if (newestDependencyTimestamp.HasValue && newestDependencyTimestamp.Value > fileSet.Timestamp) { fileSet.SetTimestamp(newestDependencyTimestamp.Value); } }
UpdateFiles(FileSetTarget fileSet) { Guard.NotNull(fileSet, nameof(fileSet)); // Get file specs from required list target(s) // TODO Handle patterns not just paths var patterns = Graph.RequiredBy(fileSet).OfType <ListTarget>().SelectMany(t => t.Values); var paths = patterns.Select(p => Path.GetFullPath(p)).Where(p => File.Exists(p)); // Get current set of files var newFiles = paths.Select(p => Graph.File(p)).ToList(); // Adjust dependencies var toRemove = fileSet.Files.Except(newFiles).ToList(); var toAdd = newFiles.Except(fileSet.Files).ToList(); foreach (var file in toRemove) { Graph.RemoveDependency(file, fileSet); } foreach (var file in toAdd) { Graph.Dependency(file, fileSet); } // Update timestamp if the set of files has changed var changed = toAdd.Any() || toRemove.Any(); if (changed) { fileSet.SetTimestamp(DateTime.Now); } }