svn classes: added support for reading property information from xml files from Dmitry

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@1832 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
vsnijders
2011-08-25 10:50:37 +00:00
parent 6f85ed7742
commit 2f3114d122

View File

@ -223,14 +223,23 @@ type
public public
constructor Create; constructor Create;
destructor Destroy; override; destructor Destroy; override;
procedure LoadFromStream(s: TStream); procedure LoadFromStream(s: TStream); virtual;
procedure LoadFromFile(FileName: string); procedure LoadFromFile(FileName: string);
procedure LoadForFiles(FileNames: TStrings); procedure LoadForFiles(FileNames: TStrings); virtual;
function GetFileItem(const s: string): TSvnFileProp; function GetFileItem(const s: string): TSvnFileProp;
property FileItem[index: integer]: TSvnFileProp read GetFile; default; property FileItem[index: integer]: TSvnFileProp read GetFile; default;
property FileCount: integer read GetFileCount; property FileCount: integer read GetFileCount;
end; end;
{ TSvnPropInfoXML }
TSvnPropInfoXML = class(TSvnPropInfo)
public
procedure LoadFromStream(s: TStream); override;
procedure LoadForFiles(FileNames: TStrings); override;
end;
{ TStatusEntry } { TStatusEntry }
TStatusEntry = class TStatusEntry = class
@ -970,5 +979,72 @@ begin
inherited Destroy; inherited Destroy;
end; end;
{ TSvnPropInfoXML }
procedure TSvnPropInfoXML.LoadFromStream(s: TStream);
var
doc : TXMLDocument;
proplist : TDOMNode;
prop : TDomNode;
target : TDOMNode;
fileName : String;
FileProp : TSvnFileProp;
pName : String;
begin
ReadXMLFile(doc, s);
try
proplist := doc.FindNode('properties');
if not Assigned(proplist) then Exit;
target := proplist.FirstChild;
while Assigned(target) do begin
if target.NodeName = 'target' then begin
fileName := DomToSvn(TDomElement(target).GetAttribute('path'));
FileProp := TSvnFileProp.Create(fileName);
prop := target.FirstChild;
while Assigned(prop) do begin
if prop.NodeName = 'property' then begin
pName := DomToSvn(TDomElement(prop).GetAttribute('name'));
FileProp.Properties.Values[pName] := DomToSvn(prop.TextContent);
end;
prop := prop.NextSibling;
end;
FFiles.Add(FileProp.FileName, FileProp);
end;
target := target.NextSibling;
end;
finally
doc.Free;
end;
end;
procedure TSvnPropInfoXML.LoadForFiles(FileNames: TStrings);
var
Output: TMemoryStream;
Files: string;
i: integer;
begin
Output := TMemoryStream.Create;
try
if FileNames.Count>0 then begin
Files := '';
for i := 0 to FileNames.Count-1 do
Files := Files + format(' "%s"', [FileNames[i]]);
ExecuteSvnCommand('proplist --xml -v' + Files, Output);
Output.Position := 0;
end;
LoadFromStream(Output);
for i := 0 to FileNames.Count -1 do begin
if FFiles.FindIndexOf(FileNames[i])<0 then begin
FFiles.Add(FileNames[i], TSvnFileProp.Create(FileNames[i]));
end;
end;
finally
Output.Free;
end;
end;
end. end.