This is the code for reading the log file inside my nant task.

///////////

vbTask.ErrorFile.Refresh();
if (vbTask.ErrorFile.Exists)
{
    string errorOutput = "";

    StreamReader reader = vbTask.ErrorFile.OpenText();

    string fileLine;
    while ((fileLine = reader.ReadLine()) != null)
    {
        fileLine = fileLine.Trim();

        if (fileLine.StartsWith("Compile Error") ||
fileLine.StartsWith("Syntax Error"))
            errorOutput += fileLine + "\n";
    }

    reader.Close();
    File.Delete(vbTask.ErrorFile.FullName);

    // Only output error messages. If there are some, fail the build.
    if (!errorOutput.Equals(String.Empty))
    {
        this.Log(Level.Error, errorOutput);
        throw new Exception("Error compiling COM. Please see log more
information");
    }
}

//////////

The if that checks the line is essentially the errors I have come
across so far :-). As we come across others I will just add to the if
(this isn't meant to be super sexy code, just something that gets the
job done).

I think to convert it to nant it would something like below

//////////////

<property name="vb6.result" value="false"/>
<foreach item="Line" in="mylogfile.log" property="fileLine">
    <property name="fileLine" value="${string::trim(fileLine)}"/>
    <if test="${string::starts-with(fileLine, 'Compile Error') ||
string::starts-with(fileLine, 'Compile Error')}">
        <property name="vb6.result" value="true"/>
        <echo message="${fileLine}" level="Error"/>
    </if>
</foreach>

<fail message="VB6 Build failed" if="${vb6.result == 'true'}"/>
<echo message="VB6 Build succeeded" unless="${vb6.result == 'true'}"/>

//////////////

2009/7/14 Chapa <[email protected]>:
>
> I'll wait for your code. Thanks.
>
> On Jul 13, 11:58 pm, Adam Burton <[email protected]> wrote:
>> On Monday 13 Jul 2009 10:43:46 Chapa wrote:
>>
>>
>>
>> > Hi Adam,
>>
>> > Can you explain more detail the way of your decision. I have the log
>> > file after building. How can I get the error and name of the module?
>> > Thanks.
>>
>> > On Jul 12, 2:51 am, Adam Burton <[email protected]> wrote:
>> > > On Thursday 09 Jul 2009 12:45:04 Chapa wrote:> Hi all.
>>
>> > > > We still have many VB6 modules compiling with the NAnt tool. When some
>> > > > of them is broken in the e-mail (in errors section) we just have the
>> > > > next message:
>> > > > "External Program Failed: C:\Programme\Microsoft Visual Studio
>> > > > \VB98\VB6.EXE (return code was 1)".
>> > > > But it will be great to know which module is broken exactcly. Is it
>> > > > possible?
>> > > > Can anybody help? I will be glad to any advices.
>>
>> > > > P.S. My english is not very well but I hope my problem is clear :)
>>
>> > > Output the VB6 build to a log file, then at the end of your VB6 builds or
>> > > on failures (I am thinking trycatch) look through the file for errors and
>> > > you can output those details with an error echo then fail the build once
>> > > you've completed looking through the fail (or not if you found none).
>> > > That is essentially how I do it. That way I get class name, line numbers
>> > > and failure reason in the ccnet log.
>>
>> The module should be included in the error message (well it will give the
>> filename) along with a line number. I don't have the code in front of me now
>> (but it is not written in NAnt, it is actually a custom nant task that
>> basically produces some temporary project files for us with the dependencies
>> fixed) but I shall look when I get into work tomorrow. I think I just loop
>> through the log files contents and if the line has Error or Warning in it I
>> just echo the line with error or warning set, then for error I also set a 
>> flag
>> so that after looping through the log file I know to throw an exception (or 
>> for
>> a nant scripts case I would call <fail/>).- Hide quoted text -
>>
>> - Show quoted text -

Reply via email to