In Microsoft.Build.BuildEngine:
authorMarek Sieradzki <msierad@mono-cvs.ximian.com>
Wed, 20 Dec 2006 21:46:11 +0000 (21:46 -0000)
committerMarek Sieradzki <msierad@mono-cvs.ximian.com>
Wed, 20 Dec 2006 21:46:11 +0000 (21:46 -0000)
2006-12-20  Marek Sieradzki  <marek.sieradzki@gmail.com>

        * Utilities.cs: Added Unescape ().

        * BuildItemGroup.cs, BuildItem.cs: Pass null project to
        BuildItem.Evaluate () to "evaluate" virtual items added to virtual item
        groups (at the moment just unescape).

        * Expression.cs (CopyToExpressionList): Unescape strings.

In Test/Microsoft.Build.BuildEngine:
2006-12-20  Marek Sieradzki  <marek.sieradzki@gmail.com>

        * BuildItemGroupTest.cs: Enabled TestAddNewItem2 ().

svn path=/trunk/mcs/; revision=69843

mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/BuildItem.cs
mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/BuildItemGroup.cs
mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/ChangeLog
mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/Expression.cs
mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/Utilities.cs
mcs/class/Microsoft.Build.Engine/Test/Microsoft.Build.BuildEngine/BuildItemGroupTest.cs
mcs/class/Microsoft.Build.Engine/Test/Microsoft.Build.BuildEngine/ChangeLog

index ebf86c4132033807b092a4b8061d52144cb5350a..878e7b2664791cf8da4434bf064b0971f2f79ade 100644 (file)
@@ -72,6 +72,7 @@ namespace Microsoft.Build.BuildEngine {
 
                        this.name = itemName;
                        this.finalItemSpec = itemInclude;
+                       this.itemInclude = itemInclude;
                        this.unevaluatedMetadata = CollectionsUtil.CreateCaseInsensitiveHashtable ();
                        this.evaluatedMetadata = CollectionsUtil.CreateCaseInsensitiveHashtable ();
                }
@@ -85,7 +86,7 @@ namespace Microsoft.Build.BuildEngine {
                        BindToXml (itemElement);
                }
                
-               private BuildItem (BuildItem parent)
+               BuildItem (BuildItem parent)
                {
                        this.isImported = parent.isImported;
                        this.name = parent.name;
@@ -175,7 +176,7 @@ namespace Microsoft.Build.BuildEngine {
                                unevaluatedMetadata.Add (metadataName, metadataValue);
                }
                
-               private void BindToXml (XmlElement xmlElement)
+               void BindToXml (XmlElement xmlElement)
                {
                        if (xmlElement == null)
                                throw new ArgumentNullException ("xmlElement");
@@ -190,8 +191,14 @@ namespace Microsoft.Build.BuildEngine {
                                this.SetMetadata (xe.Name, xe.InnerText);
                }
 
-               internal void Evaluate (bool evaluatedTo)
+               internal void Evaluate (Project project, bool evaluatedTo)
                {
+                       // FIXME: maybe make Expression.ConvertTo (null, ...) work as Utilities.Unescape ()?
+                       if (project == null) {
+                               this.finalItemSpec = Utilities.Unescape (itemInclude);
+                               return;
+                       }
+
                        DirectoryScanner directoryScanner;
                        Expression includeExpr, excludeExpr;
                        string includes, excludes;
@@ -201,8 +208,8 @@ namespace Microsoft.Build.BuildEngine {
                        excludeExpr = new Expression ();
                        excludeExpr.Parse (Exclude);
                        
-                       includes = (string) includeExpr.ConvertTo (parentItemGroup.Project, typeof (string));
-                       excludes = (string) excludeExpr.ConvertTo (parentItemGroup.Project, typeof (string));
+                       includes = (string) includeExpr.ConvertTo (project, typeof (string));
+                       excludes = (string) excludeExpr.ConvertTo (project, typeof (string));
 
                        this.finalItemSpec = includes;
                        
@@ -210,22 +217,20 @@ namespace Microsoft.Build.BuildEngine {
                        
                        directoryScanner.Includes = includes;
                        directoryScanner.Excludes = excludes;
-                       if (parentItemGroup.Project.FullFileName != String.Empty) {
-                               directoryScanner.BaseDirectory = new DirectoryInfo (Path.GetDirectoryName (parentItemGroup.Project.FullFileName));
-                       } else {
+
+                       if (project.FullFileName != String.Empty)
+                               directoryScanner.BaseDirectory = new DirectoryInfo (Path.GetDirectoryName (project.FullFileName));
+                       else
                                directoryScanner.BaseDirectory = new DirectoryInfo (Directory.GetCurrentDirectory ());
-                       }
                        
                        directoryScanner.Scan ();
                        
-                       foreach (string matchedFile in directoryScanner.MatchedFilenames) {
-                               AddEvaluatedItem (evaluatedTo, matchedFile);
-                       }
+                       foreach (string matchedFile in directoryScanner.MatchedFilenames)
+                               AddEvaluatedItem (project, evaluatedTo, matchedFile);
                }
                
-               private void AddEvaluatedItem (bool evaluatedTo, string itemSpec)
+               void AddEvaluatedItem (Project project, bool evaluatedTo, string itemSpec)
                {
-                       Project project = this.parentItemGroup.Project;
                        BuildItemGroup big;                     
                        BuildItem bi = new BuildItem (this);
                        bi.finalItemSpec = itemSpec;
@@ -265,7 +270,7 @@ namespace Microsoft.Build.BuildEngine {
                        return taskItem;
                }
 
-               private string GetItemSpecFromTransform (Expression transform)
+               string GetItemSpecFromTransform (Expression transform)
                {
                        StringBuilder sb;
                
index c16ba8f1288f41715f2d3a9d8cac7b09babc5e23..1049a8eea692b39b4034713fb4b12dbe38b82084 100644 (file)
@@ -80,8 +80,15 @@ namespace Microsoft.Build.BuildEngine {
                                             string itemInclude,
                                             bool treatItemIncludeAsLiteral)
                {
+                       if (treatItemIncludeAsLiteral)
+                               itemInclude = Utilities.Escape (itemInclude);
+
                        BuildItem bi = new BuildItem (itemName, itemInclude);
+
+                       bi.Evaluate (null, true);
+
                        buildItems.Add (bi);
+
                        return bi;
                }
                
@@ -168,10 +175,10 @@ namespace Microsoft.Build.BuildEngine {
                {
                        foreach (BuildItem bi in buildItems) {
                                if (bi.Condition == String.Empty)
-                                       bi.Evaluate (true);
+                                       bi.Evaluate (parentProject, true);
                                else {
                                        ConditionExpression ce = ConditionParser.ParseCondition (bi.Condition);
-                                       bi.Evaluate (ce.BoolEvaluate (parentProject));
+                                       bi.Evaluate (parentProject, ce.BoolEvaluate (parentProject));
                                }
                        }
                }               
index 733f3749e359a0e13471d76bc5e5598926c5ae70..3b6d0cf7fb7faea00f99e1e5ca2b353cbe04d71f 100644 (file)
@@ -1,3 +1,13 @@
+2006-12-20  Marek Sieradzki  <marek.sieradzki@gmail.com>
+
+       * Utilities.cs: Added Unescape ().
+
+       * BuildItemGroup.cs, BuildItem.cs: Pass null project to
+       BuildItem.Evaluate () to "evaluate" virtual items added to virtual item
+       groups (at the moment just unescape).
+
+       * Expression.cs (CopyToExpressionList): Unescape strings.
+
 2006-12-19  Marek Sieradzki  <marek.sieradzki@gmail.com>
 
        * Target.cs (ctor): Added ImportedProject argument and removed
index a189c71439be456dd6a7d4f07404f4b3b0bae16b..b5bb1b1d0b936da27060942f55fc14eab6c7af3d 100644 (file)
@@ -97,7 +97,7 @@ namespace Microsoft.Build.BuildEngine {
                        for (int i = 0; i < lists.Count; i++) {
                                foreach (object o in lists [i]) {
                                        if (o is string)
-                                               expressionCollection.Add ((string) o);
+                                               expressionCollection.Add (Utilities.Unescape ((string) o));
                                        else if (o is ItemReference)
                                                expressionCollection.Add ((ItemReference) o);
                                        else if (o is PropertyReference)
index ac2a622bc47fd6cab395f56309e805bd432adbc2..e3bb5888807ed0e3337709ad265f3fe0e716495f 100644 (file)
@@ -64,6 +64,19 @@ namespace Microsoft.Build.BuildEngine {
                        
                        return sb.ToString ();
                }
+               
+               // FIXME: add tests for this
+               internal static string Unescape (string escapedExpression)
+               {
+                       StringBuilder sb = new StringBuilder ();
+                       
+                       int i = 0;
+                       while (i < escapedExpression.Length) {
+                               sb.Append (Uri.HexUnescape (escapedExpression, ref i));
+                       }
+                       
+                       return sb.ToString ();
+               }
        }
 }
 
index 95d0c41d6198242f1bf0dc0926666bd902f23c52..777fe883fa8a18f161408b9613e8b74aa87d4738 100644 (file)
@@ -65,7 +65,6 @@ namespace MonoTests.Microsoft.Build.BuildEngine {
                }
 
                [Test]
-               [Category ("NotWorking")]
                public void TestAddNewItem2 ()
                {
                        Engine engine;
index c4afdeddc62514034e8a8aaf68ff214a35655adc..30d5be6537241bda9fc04c104e9310bfe8f77db0 100644 (file)
@@ -1,3 +1,7 @@
+2006-12-20  Marek Sieradzki  <marek.sieradzki@gmail.com>
+
+       * BuildItemGroupTest.cs: Enabled TestAddNewItem2 ().
+
 2006-12-19  Marek Sieradzki  <marek.sieradzki@gmail.com>
 
        * TargetTest.cs, TargetCollectionTest.cs: Enabled all tests.