- fileInfo = ParseIncludeExclude (separatedPath, 0, baseDirectory);
- foreach (FileInfo fi in fileInfo)
- if (!excludedItems.Contains (fi.FullName))
- includedItems.Add (fi.FullName);
+
+ int offset = 0;
+ if (Path.IsPathRooted (name)) {
+ baseDirectory = new DirectoryInfo (Path.GetPathRoot (name));
+ if (IsRunningOnWindows)
+ // skip the "drive:"
+ offset = 1;
+ }
+
+ string full_path = Path.GetFullPath (Path.Combine (Environment.CurrentDirectory, include_item.ItemSpec));
+ fileInfo = ParseIncludeExclude (separatedPath, offset, baseDirectory);
+
+ int wildcard_offset = full_path.IndexOf ("**");
+ foreach (FileInfo fi in fileInfo) {
+ if (!excludedItems.ContainsKey (fi.FullName)) {
+ TaskItem item = new TaskItem (include_item);
+ item.ItemSpec = fi.FullName;
+ if (wildcard_offset >= 0) {
+ string rec_dir = Path.GetDirectoryName (fi.FullName.Substring (wildcard_offset));
+ if (rec_dir.Length > 0)
+ rec_dir += Path.DirectorySeparatorChar;
+ item.SetMetadata ("RecursiveDir", rec_dir);
+ }
+ includedItems.Add (item);
+ }
+ }