/// <summary>
/// Creates manifest nodes for a set of file system elements.
/// </summary>
/// <param name="entries">The file system elements to create nodes for.</param>
/// <returns>The nodes for the elements.</returns>
private IEnumerable <ManifestNode> GetNodes(IEnumerable <FileSystemInfo> entries)
{
var externalXbits = FlagUtils.GetFiles(FlagUtils.XbitFile, TargetDir);
var externalSymlinks = FlagUtils.GetFiles(FlagUtils.SymlinkFile, TargetDir);
// Iterate through the directory listing to build a list of manifets entries
var nodes = new List <ManifestNode>();
foreach (var entry in entries)
{
CancellationToken.ThrowIfCancellationRequested();
var file = entry as FileInfo;
if (file != null)
{
// Don't include manifest management files in manifest
if (file.Name == Manifest.ManifestFile || file.Name == FlagUtils.XbitFile || file.Name == FlagUtils.SymlinkFile)
{
continue;
}
nodes.Add(GetFileNode(file, Format, externalXbits, externalSymlinks));
UnitsProcessed += file.Length;
}
else
{
var directory = entry as DirectoryInfo;
if (directory != null)
{
nodes.Add(GetDirectoryNode(directory, Format, Path.GetFullPath(TargetDir)));
}
}
}
return(nodes);
}