123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- {$mode objfpc}
- {$h+}
- program vers;
- uses Classes,sysutils,process,DOM,xmlread,custapp,IniFiles;
- Type
- { TVersion }
- TVersion = Class(TCollectionItem)
- private
- FAuthor: String;
- FDate: string;
- FLogMessage: String;
- FRevision: Integer;
- Public
- Property Revision : Integer read FRevision;
- Property LogMessage : String Read FLogMessage;
- Property Date : string Read FDate;
- Property Author : String Read FAuthor;
- end;
-
- { TVersions }
- TVersions = Class(TCollection)
- private
- function GetVersion(Index : INteger): TVersion;
- procedure SetVersion(Index : INteger; const AValue: TVersion);
- Protected
- procedure ConvertLogEntry(E : TDomElement);
- public
- Procedure LoadFromXML(Doc : TXMlDocument);
- property Versions[Index : INteger] : TVersion Read GetVersion Write SetVersion; Default;
- end;
- AppError = Class(Exception);
- Resourcestring
- SErrInValidSVNLog = 'INvalid SVN log';
- { TVersions }
- function TVersions.GetVersion(Index : INteger): TVersion;
- begin
- Result:=Items[Index] as Tversion;
- end;
- procedure TVersions.SetVersion(Index : INteger; const AValue: TVersion);
- begin
- Items[Index]:=AValue;
- end;
- procedure TVersions.ConvertLogEntry(E : TDomElement);
- Function GetNodeText(N : TDomNode) : String;
-
- begin
- N:=N.FirstChild;
- If N<>Nil then
- Result:=N.NodeValue;
- end;
- Var
- N : TDomNode;
- V : TVersion;
- begin
- V:=Add as TVersion;
- V.FRevision:=StrToIntDef(E['revision'],-1);
- N:=E.FirstChild;
- While (N<>Nil) do
- begin
- If (N.NodeType=ELEMENT_NODE) then
- begin
- if (N.NodeName='author') then
- V.FAuthor:=GetNodeText(N)
- else If (N.NodeName='date') then
- V.FDate:=GetNodeText(N)
- else If (N.NodeName='msg') then
- V.FLogMessage:=GetNodeText(N);
- end;
- N:=N.NextSibling;
- end;
- end;
- procedure TVersions.LoadFromXML(Doc: TXMlDocument);
- var
- L : TDomNode;
- E : TDomElement;
- begin
- L:=Doc.FirstChild;
- While (L<>Nil) and not ((L.NodeType=ELEMENT_NODE) and (L.NodeName='log')) do
- L:=L.NextSibling;
- if (L=Nil) then
- Raise AppError.Create(SErrInValidSVNLog);
- L:=L.FirstChild;
- While (L<>Nil) do
- begin
- If (L.NodeType=ELEMENT_NODE) and (L.NodeName='logentry') then
- E:=TDomElement(L);
- ConvertLogEntry(E);
- L:=L.NextSibling;
- end;
- end;
- Var
- Doc : TXMLDocument;
- F : TFileStream;
- I : Integer;
- begin
- With TVersions.Create(TVersion) do
- Try
- F:=TFileStream.Create('test.xml',fmOpenRead);
- Try
- ReadXMLFile(Doc,F);
- Writeln('Got ',Count,' revisions');
- LoadFromXml(Doc);
- For I:=0 to count-1 do
- begin
- Writeln('Revision ',I,' : ');
- Writeln('Revision : ',Versions[i].Revision);
- Writeln('Author : ',Versions[i].Author);
- Writeln('Date : ',Versions[i].Date);
- Writeln('Message : ',Versions[i].LogMessage);
- end;
- finally
- F.Free;
- end;
- Finally
- Free;
- end;
- end.
|