Hi, 

I had a problem where I merge sourcefiles into one assembly,
while I use them normally in more than one assembly to link
only what I need.

I'm using the ndoc task to document, and hence it's missing
the namespace descriptions, if I do not create a new
namespace.xml for the merged assembly.

Basicly appending all namespace.xml files from the seperated
assemblies into one new would do the job. I would do this
with cat under unix, but I found it nice to have a task
doing this.

There are three attributes:

 * file
 * pipe
 * append

The last two are optional. The first one is the file to cat. 
If this is the only attribute given, it will print it on the
screen. If pip is given, it will create - that means
overwrite, since append defaults to false - the given file 
and insert the contents of file. If append is true the
content is appended where I've reached what I wanted.

I just think I post it here for inclusion in NAnt or
NAnt-contrib.

-sa

-- 
sa at programmers-world dot com
http://www.livingit.de
Bookmarks online: http://www.mobile-bookmarks.info
                  Soon available in english

Life would be so much easier if we could just look at the source code.
// 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

// Sascha Andres ([EMAIL PROTECTED])

using System;
using System.Globalization;
using System.Xml;
using System.IO;

using NAnt.Core.Attributes;
using NAnt.Core.Util;

namespace NAnt.Core.Tasks {
    /// <summary>
    /// A somehow compareable task to 'cat' from a unix/linux system
    /// </summary>
    /// <example>
    ///   <para>Prints a file on the screen</para>
    ///   <code>
    ///     <![CDATA[
    /// <cat file="input.txt" />
    ///     ]]>
    ///   </code>
    ///   <para>Prints a file to an other file. Overwrite is the default!</para>
    ///   <code>
    ///     <![CDATA[
    /// <cat file="input.txt" pipe="output.txt" />
    ///     ]]>
    ///   </code>
    ///   <para>Prints two files to one other file.</para>
    ///   <code>
    ///     <![CDATA[
    /// <cat file="input.txt" pipe="output.txt" />
    /// <cat file="input2.txt" pipe="output.txt" append="true" />
    ///     ]]>
    ///   </code>
    /// </example>
    [TaskName("cat")]
    public class CatTask : Task {
        #region Private Instance Fields

        private string _filein = "";
        private string _fileout = "";
        private string _append = Boolean.FalseString;

        #endregion Private Instance Fields

        #region Public Instance Properties

        /// <summary>
        /// The file to display.
        /// </summary>
        [TaskAttribute("file", Required=true)]
        public string File {
            get { return _filein; }
            set {
                    _filein = value; 
            }
        }
        
        /// <summary>
        /// Write the output to
        /// </summary>
        [TaskAttribute("pipe", Required=false)]
        public string Pipe {
            get { return _fileout; }
            set {
                    _fileout = value; 
            }
        }
        
        /// <summary>
        /// Append to file
        /// </summary>
        [TaskAttribute("append", Required=false)]
        [BooleanValidator()]
        public string Append {
            get { return _append; }
            set {
                    _append = value;
            }
        }

        #endregion Public Instance Properties

        #region Override implementation of Task

        /// <summary>
        /// Outputs the message to the build log.
        /// </summary>
        protected override void ExecuteTask() {
            bool bUseFile = false;
            using (StreamReader sr = new StreamReader(_filein)) {
                StreamWriter sw = null;
                if (_fileout != "") {
                    bUseFile = true;
                    sw = new StreamWriter(_fileout, Convert.ToBoolean(_append));
                }
                while(true) {
                    string strLine = sr.ReadLine();
                    if (strLine == null) {
                        break;
                    }
                    if (!bUseFile) {
                        Log(Level.Info, LogPrefix + strLine);
                    } else {
                        sw.WriteLine(strLine);
                    }
                }
                if (bUseFile) {
                    sw.Flush();
                    sw.Close();
                    sw = null;
                }
            }
        }

        #endregion Override implementation of Task
    }
}

Reply via email to