Hi all,

I draft one enhancenment to recompile-needed feature in CompilerBase. I'm heading to 
compile mono classes by nant. This is lot of subprojects/namespaces and files and this 
feature is desirable.

1/ Added support for changed .build projects
2/ Bugfix/enhance subprojects recompilation

I'll be glad if you merge this into CVS
Martin

PS: Why ALTask is not derived from CompilerBase? It _IS_ compiler, isn't it?
[ this line should be changed in ALTask becouse of it:
      string fileName = 
Sources.FindMoreRecentLastWriteTime(outputFileInfo.LastWriteTime);
]

Here it is:
-=-=-=-=-=-=-=-=
--- /home/alik/mono/nant/exist/FileSet.cs       Thu Jul 11 19:53:14 2002
+++ FileSet.cs  Tue Oct  8 07:31:18 2002
@@ -29,23 +29,24 @@
 
     public class FileSet : Element {
 
+
+
+       public static bool IsMoreRecentLastWriteTime(string fileName, DateTime 
+targetLastWriteTime) {
+                FileInfo fileInfo = new FileInfo(fileName);
+                if (!fileInfo.Exists) return true;
+                if (fileInfo.LastWriteTime > targetLastWriteTime) return true;
+               return false; 
+       }
+
         /// <summary>Determines if a file has a more recent last write time than the 
given time.</summary>
-        /// <param name="fileNames">A collection of filenames to check last write 
times against.</param>
         /// <param name="targetLastWriteTime">The datetime to compare against.</param>
         /// <returns>The name of the first file that has a last write time greater 
than <c>targetLastWriteTime</c>; otherwise null.</returns>
-        public static string FindMoreRecentLastWriteTime(StringCollection fileNames, 
DateTime targetLastWriteTime) {
-            foreach (string fileName in fileNames) {
-                // only check fully file names that have a full path
-                if (Path.IsPathRooted(fileName)) {
-                    FileInfo fileInfo = new FileInfo(fileName);
-                    if (!fileInfo.Exists) {
-                        return fileName;
-                    }
-                    if (fileInfo.LastWriteTime > targetLastWriteTime) {
+        public string FindMoreRecentLastWriteTime(DateTime targetLastWriteTime) {
+            foreach (string fn in FileNames) {
+                string fileName=Path.Combine(BaseDirectory,fn);
+               if(IsMoreRecentLastWriteTime(fileName,targetLastWriteTime))
                         return fileName;
                     }
-                }
-            }
             return null;
         }
--- /home/alik/mono/nant/exist/Tasks/CompilerBase.cs    Thu Jul 11 19:53:14 2002
+++ CompilerBase.cs     Tue Oct  8 07:39:43 2002
@@ -114,36 +114,41 @@
                 return true;
             }
 
+                   Uri testURI = new Uri(Project.Doc.BaseURI);
+                       if(testURI.IsFile && 
+FileSet.IsMoreRecentLastWriteTime(testURI.LocalPath,outputFileInfo.LastWriteTime)) {
+                Log.WriteLineIf(Verbose, LogPrefix + "Buildfile {0} is out of date, 
+recompiling.", testURI.LocalPath);
+                return true;
+                       }
+
             //Sources Updated?
-            string fileName = FileSet.FindMoreRecentLastWriteTime(Sources.FileNames, 
outputFileInfo.LastWriteTime);
+            string fileName = 
+Sources.FindMoreRecentLastWriteTime(outputFileInfo.LastWriteTime);
             if (fileName != null) {
                 Log.WriteLineIf(Verbose, LogPrefix + "{0} is out of date, 
recompiling.", fileName);
                 return true;
             }
 
             //References Updated?
-            fileName = FileSet.FindMoreRecentLastWriteTime(References.FileNames, 
outputFileInfo.LastWriteTime);
+            fileName = 
+References.FindMoreRecentLastWriteTime(outputFileInfo.LastWriteTime);
             if (fileName != null) {
                 Log.WriteLineIf(Verbose, LogPrefix + "{0} is out of date, 
recompiling.", fileName);
                 return true;
             }
 
             //Modules Updated?
-            fileName = FileSet.FindMoreRecentLastWriteTime(Modules.FileNames, 
outputFileInfo.LastWriteTime);
+            fileName = 
+Modules.FindMoreRecentLastWriteTime(outputFileInfo.LastWriteTime);
             if (fileName != null) {
                 Log.WriteLineIf(Verbose, LogPrefix + "{0} is out of date, 
recompiling.", fileName);
                 return true;
             }
 
             //Resources Updated?
-            fileName = FileSet.FindMoreRecentLastWriteTime(Resources.FileNames, 
outputFileInfo.LastWriteTime);
+            fileName = 
+Resources.FindMoreRecentLastWriteTime(outputFileInfo.LastWriteTime);
             if (fileName != null) {
                 Log.WriteLineIf(Verbose, LogPrefix + "{0} is out of date, 
recompiling.", fileName);
                 return true;
             }
  
             // check the args for /res or /resource options.
-            StringCollection resourceFileNames = new StringCollection();
             foreach (string arg in Args) {
                 if (arg.StartsWith("/res:") || arg.StartsWith("/resource:")) {
                     string path = arg.Substring(arg.IndexOf(':') + 1);
                   
                     int indexOfComma = path.IndexOf(','); 
                     if (indexOfComma != -1) {
                         path = path.Substring(0, indexOfComma);
                     }
-                    resourceFileNames.Add(path);
+                    path=Path.Combine(BaseDirectory,path);
+                    if 
+(FileSet.IsMoreRecentLastWriteTime(path,outputFileInfo.LastWriteTime)) {
+                        Log.WriteLineIf(Verbose, LogPrefix + "{0} is out of date, 
+recompiling.", path);
+                        return true;
                 }
             }
-            fileName = FileSet.FindMoreRecentLastWriteTime(resourceFileNames, 
outputFileInfo.LastWriteTime);
-            if (fileName != null) {
-                Log.WriteLineIf(Verbose, LogPrefix + "{0} is out of date, 
recompiling.", fileName);
-                return true;
             }
 
             // if we made it here then we don't have to recompile


______________________________________________________________________________
Nová vůně HUGO BOSS a další světové kosmetické značky v největší české internetové 
parfumerii.
http://www.email.cz/fann



-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
Nant-developers mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/nant-developers

Reply via email to