* ResolveAssemblyReference.cs: Log only unique conflict warnings.
authorAnkit Jain <radical@corewars.org>
Tue, 13 Oct 2009 07:17:39 +0000 (07:17 -0000)
committerAnkit Jain <radical@corewars.org>
Tue, 13 Oct 2009 07:17:39 +0000 (07:17 -0000)
svn path=/trunk/mcs/; revision=144001

mcs/class/Microsoft.Build.Tasks/Microsoft.Build.Tasks/ChangeLog
mcs/class/Microsoft.Build.Tasks/Microsoft.Build.Tasks/ResolveAssemblyReference.cs

index 8fe142520774bb602c194558db5e318b96eb2148..870487bc54b978228a7e2c46bef1a24aa08d14b3 100644 (file)
@@ -1,3 +1,7 @@
+2009-10-13  Ankit Jain  <jankit@novell.com>
+
+       * ResolveAssemblyReference.cs: Log only unique conflict warnings.
+
 2009-10-12  Ankit Jain  <jankit@novell.com>
 
        * ResolveAssemblyReference.cs: Remove unnecessary tab in the warning
index 4a334d44337411e83765959978d2a3568b6a2a3f..4749a44b1910e301781a3c86ece62f31f94dacec 100644 (file)
@@ -78,6 +78,7 @@ namespace Microsoft.Build.Tasks {
                List<ITaskItem> tempResolvedFiles;
                List<PrimaryReference> primaryReferences;
                Dictionary<string, string> alreadyScannedAssemblyNames;
+               Dictionary<string, string> conflictWarningsCache;
 
                //FIXME: construct and use a graph of the dependencies, useful across projects
 
@@ -107,6 +108,7 @@ namespace Microsoft.Build.Tasks {
 
                        primaryReferences = new List<PrimaryReference> ();
                        assemblyNameToResolvedRef = new Dictionary<string, ResolvedReference> ();
+                       conflictWarningsCache = new Dictionary<string, string> ();
 
                        ResolveAssemblies ();
                        ResolveAssemblyFiles ();
@@ -135,6 +137,7 @@ namespace Microsoft.Build.Tasks {
                        alreadyScannedAssemblyNames.Clear ();
                        primaryReferences.Clear ();
                        assemblyNameToResolvedRef.Clear ();
+                       conflictWarningsCache.Clear ();
                        dependency_search_paths = null;
 
                        return true;
@@ -479,13 +482,22 @@ namespace Microsoft.Build.Tasks {
                        assembly_resolver.LogSearchMessage ("Choosing '{0}' as it is a primary reference.",
                                        found_ref.AssemblyName.FullName);
 
-                       Log.LogWarning ("Found a conflict between : '{0}' and '{1}'. Using '{0}' reference.",
-                                       found_ref.AssemblyName.FullName,
-                                       key_aname.FullName);
+                       LogConflictWarning (found_ref.AssemblyName.FullName, key_aname.FullName);
 
                        return true;
                }
 
+               // conflict b/w @main and @conflicting, picking @main
+               void LogConflictWarning (string main, string conflicting)
+               {
+                       string key = main + ":" + conflicting;
+                       if (!conflictWarningsCache.ContainsKey (key)) {
+                               Log.LogWarning ("Found a conflict between : '{0}' and '{1}'. Using '{0}' reference.",
+                                               main, conflicting);
+                               conflictWarningsCache [key] = key;
+                       }
+               }
+
                bool IsCopyLocal (ITaskItem item)
                {
                        return Boolean.Parse (item.GetMetadata ("CopyLocal"));