예제 #1
0
        public IEnumerable <IFile> Install(PackageDefinition package, DirectoryPath root)
        {
            var result = new List <FilePath>();
            var paths  = new FilePathCollection(PathComparer.Default);

            // InstallPackage the package.
            var packagePath      = InstallPackage(package, root);
            var packageDirectory = _fileSystem.GetDirectory(packagePath);

            if (package.Filters != null && package.Filters.Count > 0)
            {
                // Get all files matching the filters.
                foreach (var filter in package.Filters)
                {
                    var pattern = string.Concat(packagePath.FullPath, "/", filter.TrimStart('/', '\\'));
                    paths.Add(_globber.GetFiles(pattern));
                }
            }
            else
            {
                // Do a recursive search in the package directory.
                paths.Add(packageDirectory.
                          GetFiles("*", SearchScope.Recursive)
                          .Select(file => file.Path));
            }

            if (paths.Count > 0)
            {
                result.AddRange(paths);
            }

            return(result.Select(path => _fileSystem.GetFile(path)));
        }