Hi,

Here's a patch for the <if> tasks that allows the conditional of whether a script is being run on a specific version of Windows. I haven't added tests since it calls straight into the .Net OperatingSystem class (which would have to be mocked). This functionality could probably be extended something along the lines of 'windowsVersionAtLeast' , checks for running on Mono, etc.

I needed to do this to do different things depending on whether I'm running on a machine with IIS 5 or 6 (so I needed to check for 'Windows Server 2003')

I use Nant every day so thanks to everyone who's contributed code.

Cheers,

Mike

--
Index: IfTask.cs
===================================================================
RCS file: /cvsroot/nant/nant/src/NAnt.Core/Tasks/IfTask.cs,v
retrieving revision 1.17
diff -u -r1.17 IfTask.cs
--- IfTask.cs 25 May 2003 08:20:25 -0000 1.17
+++ IfTask.cs 3 Jun 2003 02:53:09 -0000
@@ -79,8 +79,29 @@
/// </if>
/// ]]></code>
/// </example>
- ///
- ///
+ /// <example>
+ /// <para>Check running on a specific version of Windows</para>
+ /// <code>
+ /// <![CDATA[
+ /// <target name="myTarget"/>
+ /// <if windowsversion="Windows XP">
+ /// <echo message="Running on Windows XP."/>
+ /// </if>
+ /// ]]></code>
+ /// <para>
+ /// You can check for the following versions:
+ /// <list type="bullet">
+ /// <item>Windows 95</item>
+ /// <item>Windows 98</item>
+ /// <item>Windows Me</item>
+ /// <item>Windows NT 3.51</item>
+ /// <item>Windows NT 4.0</item>
+ /// <item>Windows 2000 (any version)</item>
+ /// <item>Windows XP</item>
+ /// <item>Windows Server 2003</item>
+ /// </list>
+ /// </para>
+ /// </example>
/// <para>
/// Note: For dates you probably want to use <ifnot/>.
/// That way you can say, if these files aren't uptodate, then do this.
@@ -112,6 +133,7 @@
private string _propNameTrue = null;
private string _propNameExists = null;
private string _targetName = null;
+ private string _windowsVersion = null;
private string _uptodateFile = null;
private FileSet _compareFiles = null;


@@ -177,11 +199,21 @@
           set { _targetName = value; }
       }

-        #endregion Public Instance Properties
+        /// <summary>
+        /// Used to test whether running on a specific version of windows.
+        /// </summary>
+        [TaskAttribute("windowsversion")]
+        public string WindowsVersion {
+            get { return _windowsVersion; }
+            set { _windowsVersion = value; }
+        }
+
+        #endregion Public Instance Properties

#region Protected Instance Properties

-        protected virtual bool ConditionsTrue {
+        protected virtual bool ConditionsTrue
+        {
           get {
               bool ret = true;

@@ -191,6 +223,12 @@
                   if (!ret) return false;
               }

+                //check Windows Version
+                if(_windowsVersion != null)
+                {
+                    return checkWindowsVersion();
+                }
+
               //Check for Property existence
               if(_propNameExists != null) {
                   ret = ret && (Properties[_propNameExists] != null);
@@ -231,9 +269,78 @@

#endregion Protected Instance Properties

+ private bool checkWindowsVersion()
+ {
+ // Largely Copied from MSDN Library - ms-help://MS.VSCC.2003/MS.MSDNQTR.2003APR.1033/enu_kbvcsharpnetkb/vcsharpnetkb/304283.htm


+ // Get OperatingSystem information from the system namespace.
+ System.OperatingSystem osInfo = System.Environment.OSVersion;
+ + // Determine the platform.
+ switch(osInfo.Platform)
+ {
+ // Platform is Windows 95, Windows 98,
+ // Windows 98 Second Edition, or Windows Me.
+ case System.PlatformID.Win32Windows:
+ + switch (osInfo.Version.Minor)
+ {
+ case 0:
+ if (_windowsVersion.Trim().ToLower().Equals("windows 95"))
+ return true;
+ break;
+ case 10:
+ if (_windowsVersion.Trim().ToLower().Equals("windows 98"))
+ return true;
+ break;
+ case 90:
+ if (_windowsVersion.Trim().ToLower().Equals("windows me"))
+ return true;
+ break;
+ }
+ break;
+ + // Platform is Windows NT 3.51, Windows NT 4.0, Windows 2000,
+ // or Windows XP.
+ case System.PlatformID.Win32NT:
+
+ switch(osInfo.Version.Major)
+ {
+ case 3:
+ if (_windowsVersion.Trim().ToLower().Equals("windows nt 3.51"))
+ return true;
+ break;
+ case 4:
+ if (_windowsVersion.Trim().ToLower().Equals("windows nt 4.0"))
+ return true;
+ break;
+ case 5:
+ if (osInfo.Version.Minor==0)
+ {
+ if (_windowsVersion.Trim().ToLower().Equals("windows 2000"))
+ return true;
+ }
+ else if (osInfo.Version.Minor == 1)
+ {
+ if (_windowsVersion.Trim().ToLower().Equals("windows xp"))
+ return true;
+ }
+ else if (osInfo.Version.Minor == 2)
+ {
+ if (_windowsVersion.Trim().ToLower().Equals("windows server 2003"))
+ return true;
+ }
+ break;
+ }break;
+ }
+
+ return false;
+ }
+
+
#region Override implementation of TaskContainer


-        protected override void ExecuteTask() {
+        protected override void ExecuteTask()
+        {
           if(ConditionsTrue) {
               base.ExecuteTask();
           }





-------------------------------------------------------
This SF.net email is sponsored by: eBay
Get office equipment for less on eBay!
http://adfarm.mediaplex.com/ad/ck/711-11697-6916-5
_______________________________________________
Nant-developers mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/nant-developers

Reply via email to