private void CopySearch()

in src/Artifacts/Tasks/Robocopy.cs [128:168]


        private void CopySearch(IList<RobocopyMetadata> bucket, bool isRecursive, string match, DirectoryInfo source, string subDirectory)
        {
            bool hasSubDirectory = !string.IsNullOrEmpty(subDirectory);
            foreach (FileInfo sourceFile in FileSystem.EnumerateFiles(source, match))
            {
                foreach (RobocopyMetadata item in bucket)
                {
                    if (item.IsMatch(sourceFile.Name, subDirectory, isFile: true))
                    {
                        foreach (string destination in item.DestinationFolders)
                        {
                            string fullDest = hasSubDirectory ? Path.Combine(destination, subDirectory) : destination;
                            FileInfo destFile = new FileInfo(Path.Combine(fullDest, sourceFile.Name));

                            Verify(destFile, false, false);
                            CopyFile(sourceFile, destFile, true, item);
                        }
                    }
                }
            }

            // Doing recursion manually so we can consider DirExcludes
            if (isRecursive)
            {
                foreach (DirectoryInfo childSource in FileSystem.EnumerateDirectories(source))
                {
                    // per dir we need to re-items for those items excluding a specific dir
                    string childSubDirectory = hasSubDirectory ? Path.Combine(subDirectory, childSource.Name) : childSource.Name;
                    IList<RobocopyMetadata> subBucket = new List<RobocopyMetadata>();
                    foreach (RobocopyMetadata item in bucket)
                    {
                        if (item.IsMatch(childSubDirectory, subDirectory, isFile: false))
                        {
                            subBucket.Add(item);
                        }
                    }

                    CopySearch(subBucket, isRecursive: true, match, childSource, childSubDirectory);
                }
            }
        }