예제 #1
0
		public override bool Execute ()
		{
			if (include == null || include.Length == 0)
				return true;

			// Handle wild cards
			var directoryScanner = new Microsoft.Build.BuildEngine.DirectoryScanner ();
			directoryScanner.Includes = include;
			directoryScanner.Excludes = exclude;
			directoryScanner.BaseDirectory = new DirectoryInfo (Directory.GetCurrentDirectory ());

			directoryScanner.Scan ();

			List<ITaskItem> output = new List<ITaskItem> ();
			foreach (ITaskItem matchedItem in directoryScanner.MatchedItems) {
				output.Add (matchedItem);
				if (AdditionalMetadata == null)
					continue;

				foreach (string metadata in AdditionalMetadata) {
					//a=1
					string [] parts = metadata.Split (new char [] {'='}, 2, StringSplitOptions.RemoveEmptyEntries);
					if (parts.Length == 2) {
						string name = parts [0].Trim ();
						string oldValue = matchedItem.GetMetadata (name);
						if (!preserveExistingMetadata || string.IsNullOrEmpty (oldValue))
							matchedItem.SetMetadata (name, parts [1].Trim ());
					}
				}
			}

			include = output.ToArray ();

			return true;
		}
예제 #2
0
        public override bool Execute()
        {
            if (include == null || include.Length == 0)
            {
                return(true);
            }

            // Handle wild cards
            var directoryScanner = new Microsoft.Build.BuildEngine.DirectoryScanner();

            directoryScanner.Includes      = include;
            directoryScanner.Excludes      = exclude;
            directoryScanner.BaseDirectory = new DirectoryInfo(Directory.GetCurrentDirectory());

            directoryScanner.Scan();

            List <ITaskItem> output = new List <ITaskItem> ();

            foreach (ITaskItem matchedItem in directoryScanner.MatchedItems)
            {
                output.Add(matchedItem);
                if (AdditionalMetadata == null)
                {
                    continue;
                }

                foreach (string metadata in AdditionalMetadata)
                {
                    //a=1
                    string [] parts = metadata.Split(new char [] { '=' }, 2, StringSplitOptions.RemoveEmptyEntries);
                    if (parts.Length == 2)
                    {
                        string name     = parts [0].Trim();
                        string oldValue = matchedItem.GetMetadata(name);
                        if (!preserveExistingMetadata || string.IsNullOrEmpty(oldValue))
                        {
                            matchedItem.SetMetadata(name, parts [1].Trim());
                        }
                    }
                }
            }

            include = output.ToArray();

            return(true);
        }
예제 #3
0
        internal static IEnumerable <T> GetAllItems <T> (Func <string, string> expandString, string include, string exclude, Func <string, T> creator, Func <string, ITaskItem> taskItemCreator, string directory, Action <T, string> assignRecurse, Func <ITaskItem, bool> isDuplicate)
        {
            var includes = expandString(include).Trim().Split(item_target_sep, StringSplitOptions.RemoveEmptyEntries);
            var excludes = expandString(exclude).Trim().Split(item_target_sep, StringSplitOptions.RemoveEmptyEntries);

            if (includes.Length == 0)
            {
                yield break;
            }
            if (includes.Length == 1 && includes [0].IndexOf('*') < 0 && excludes.Length == 0)
            {
                // for most case - shortcut.
                var item = creator(includes [0]);
                yield return(item);
            }
            else
            {
                var ds = new Microsoft.Build.BuildEngine.DirectoryScanner()
                {
                    BaseDirectory = new DirectoryInfo(directory),
                    Includes      = includes.Where(s => !string.IsNullOrWhiteSpace(s)).Select(i => taskItemCreator(i)).ToArray(),
                    Excludes      = excludes.Where(s => !string.IsNullOrWhiteSpace(s)).Select(e => taskItemCreator(e)).ToArray(),
                };
                ds.Scan();
                foreach (var taskItem in ds.MatchedItems)
                {
                    if (isDuplicate(taskItem))
                    {
                        continue;                         // skip duplicate
                    }
                    var    item    = creator(taskItem.ItemSpec);
                    string recurse = taskItem.GetMetadata("RecursiveDir");
                    assignRecurse(item, recurse);
                    yield return(item);
                }
            }
        }