Sunday, December 7, 2003, 11:23:16 PM, you wrote:

> I've just checked in a p4sync task into nantcontrib. Please grab a 
> nightly and try it out. More p4 tasks to come - add, submit etc.

Works like a charm! I had to tweak the build file (patch attached) and build 
NAntContrib CVS head with .NET 1.0 -- couldn't figure out how to work around build 
errors with .NET 1.1. Once I got it built, though, everything was fine.

I got as far in my own efforts as to build a base class with support for Ant's 
p4.{port|client|user|passwd} properties. I figure it'll be useful in producing 
buildfiles that work on both developer boxes and build machines. Is that level of 
compatibility with Ant's Perforce tasks -- 
http://ant.apache.org/manual/OptionalTasks/perforce.html -- something of interest? Or 
with Ant tasks in general?

I also attached a minimal p4print task. We use it to fetch a clientspec file and feed 
it to 'p4 client -i' so that's the next task I'll work on. (Maybe after flush -- 
another one we use.) Should I send them to nantcontrib-developer?

--
sig://boB
http://foobob.com
  

Attachment: NAntContrib.build.patch
Description: Binary data

// NAnt - A .NET build tool
// Copyright (C) 2001-2002 Gerry Shaw
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
//
// Bob Arnson ([EMAIL PROTECTED])

using System;
using System.Text;
using NAnt.Core;
using NAnt.Core.Util;
using NAnt.Core.Tasks;
using NAnt.Core.Attributes;

namespace NAnt.Contrib.Tasks.Perforce {
    /// <summary>
        /// Fetch a specific file from a Perforce depot without needing a clientspec 
to map it. Wraps the 'p4 print' command.
    /// </summary>
    /// <remarks>
    /// <para>
        /// 
    ///<code>
    ///     <![CDATA[
    ///<p4print file="//depot/foo/mainline/clientspec" outputfile=".\clientspec" />
        ///<p4client input=".\clientspec" />
    ///     ]]>
    ///   </code>
    /// </para>
    /// </remarks>
        /// <todo> fileset? </todo>
    /// <author> <a href="mailto:[EMAIL PROTECTED]">Bob Arnson</a></author>
        [TaskName("p4print")]
    public class P4Print : P4Base {
        
        #region Private Instance Fields
        
        private string _file = null;
        private string _outputFile = null;
        
        #endregion Private Instance Fields
        
        #region Public Instance Properties
        
        /// <summary> 
                /// The depot or local filename (including optional path) of the file 
to fetch; required
        /// </summary>
        [TaskAttribute("file", Required = true)]
        public string File {
            get { return _file; }
            set { _file = StringUtils.ConvertEmptyToNull(value); }
        }       
        
        /// <summary> 
                /// The local filename to write the fetched file to; required
        /// </summary>
        [TaskAttribute("outputfile", Required = true)]
        public string P4OutputFile {
            get { return _outputFile; }
            set { _outputFile = StringUtils.ConvertEmptyToNull(value); }
        }       
        
        #endregion Public Instance Properties
        
        /// <summary>
        /// This is an override used by the base class to get command specific args.
        /// </summary>
        protected override string CommandSpecificArguments {
            get { return getSpecificCommandArguments(); }
        }
        
        #region Override implementation of Task
        
        /// <summary>
        /// local method to build the command string for this particular command
        /// </summary>
        /// <returns></returns>
        protected string getSpecificCommandArguments( ) {
            StringBuilder arguments = new StringBuilder();
            arguments.Append("-s print -q ");
                        arguments.Append(string.Format("-o {0} ", P4OutputFile));
                        arguments.Append(File);
           return arguments.ToString();
        }
        
        #endregion Override implementation of Task
    }
}

Reply via email to