diff --git a/tests/utils/dbdigest.pp b/tests/utils/dbdigest.pp index cee1674cf5..97529b88e8 100644 --- a/tests/utils/dbdigest.pp +++ b/tests/utils/dbdigest.pp @@ -67,6 +67,7 @@ TConfigOpt = ( coPassword, coPort, coLogFile, + coLongLogFile, coOS, coCPU, coCategory, @@ -100,6 +101,7 @@ ConfigStrings : Array [TConfigOpt] of string = ( 'password', 'port', 'logfile', + 'longlogfile', 'os', 'cpu', 'category', @@ -132,7 +134,7 @@ ConfigAddCols : Array [TConfigAddOpt] of string = ( ); ConfigOpts : Array[TConfigOpt] of char - = ('d','h','u','p','P','l','o','c','a','v','t','s','m','C','S','r','V'); + = ('d','h','u','p','P','l','L','o','c','a','v','t','s','m','C','S','r','V'); Var TestOS, @@ -144,6 +146,7 @@ Var UserName, Password, Port, + LongLogFileName, LogFileName, Submitter, Machine, @@ -185,6 +188,7 @@ begin coPassword : Password:=Value; coPort : Port:=Value; coLogFile : LogFileName:=Value; + coLongLogFile : LongLogFileName:=Value; coOS : TestOS:=Value; coCPU : TestCPU:=Value; coCategory : TestCategory:=Value; @@ -376,9 +380,61 @@ begin CleanTestRun(TestRunID); end; -Function GetLog(FN : String) : String; + +var + LongLogFile : Text; +const + UseLongLog : boolean = false; + +Function GetContentsFromLongLog(Line : String) : String; +var + S : String; + IsFirst, IsFound : boolean; +begin + Result:=''; + IsFirst:=true; + IsFound:=false; + While Not(EOF(LongLogFile)) do + begin + ReadLn(LongLogFile,S); + if pos(Line,S)=1 then + begin + IsFound:=true; + while not eof(LongLogFile) do + begin + ReadLn(LongLogFile,S); + { End of file marker } + if eof(LongLogFile) or (pos('>>>>>>>>>>>',S)=1) then + exit; + Result:=Result+S+LineEnding; + end; + end + else if IsFirst then + begin + Verbose(V_Warning,'Line "'+Line+'" not found as next "'+S+'"'); + IsFirst:=false; + end; + end; + if not IsFound then + begin + Verbose(V_Warning,'Line "'+Line+'" not found'); + { Restart to get a chance to find others } + if eof(LongLogFile) then + begin + Close(LongLogFile); + Reset(LongLogFile); + end; + end; +end; + +Function GetLog(Line, FN : String) : String; begin + if UseLongLog then + begin + Result:=GetContentsFromLongLog(Line); + exit; + end; FN:=ChangeFileExt(FN,'.log'); If FileExists(FN) then Result:=GetFileContents(FN) @@ -386,9 +442,14 @@ begin Result:=''; end; -Function GetExecuteLog(FN : String) : String; +Function GetExecuteLog(Line, FN : String) : String; begin + if UseLongLog then + begin + Result:=GetContentsFromLongLog(Line); + exit; + end; FN:=ChangeFileExt(FN,'.elg'); If FileExists(FN) then Result:=GetFileContents(FN) @@ -400,7 +461,7 @@ Procedure Processfile (FN: String); var logfile : text; - line,prevLine : string; + fullline,line,prevLine : string; TS,PrevTS : TTestStatus; ID,PrevID : integer; Testlog : string; @@ -414,11 +475,12 @@ begin {$i-} reset(logfile); if ioresult<>0 then - Verbose(V_Error,'Unable to open log file'+logfilename); + Verbose(V_Error,'Unable to open log file'+FN); {$i+} while not eof(logfile) do begin readln(logfile,line); + fullline:=line; If analyse(line,TS) then begin Verbose(V_NORMAL,'Analysing result for test '+Line); @@ -439,13 +501,13 @@ begin begin If Not (TestOK[TS] or TestSkipped[TS]) then begin - TestLog:=GetExecuteLog(Line); + TestLog:=GetExecuteLog(Fullline,Line); if pos(failed_to_compile,TestLog)=1 then - TestLog:=GetLog(Line); + TestLog:=GetLog(Fullline,Line); end else TestLog:=''; - { AddTestResult can fail for test that contain %recompile + { AddTestResult can fail for test that contain %recompile as the same } if AddTestResult(ID,TestRunID,Ord(TS),TestOK[TS], TestSkipped[TS],TestLog,is_new) <> -1 then @@ -459,17 +521,17 @@ begin begin Verbose(V_Warning,'Test: "'+line+'" already registered'); end; - + end; end - else + else begin Inc(StatusCount[TS]); PrevTS:=TS; PrevID:=RequireTestID(line); PrevLine:=line; end; - + end else begin @@ -516,9 +578,20 @@ begin If LogFileName<>'' then begin ConnectToDatabase(DatabaseName,HostName,UserName,Password,Port); + if LongLogFileName<>'' then + begin +{$I-} + Assign(LongLogFile,LongLogFileName); + Reset(LongLogFile); + If IOResult=0 then + UseLongLog:=true; +{$I+} + end; GetIDs; ProcessFile(LogFileName); UpdateTestRun; + if UseLongLog then + Close(LongLogFile); end else Verbose(V_ERROR,'Missing log file name');