fpc/utils/svn2cvs/vers.pp
fpc 4c55f2bc34 + Initial import
git-svn-id: trunk@92 -
2005-05-25 07:57:17 +00:00

135 lines
2.9 KiB
ObjectPascal

{$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.