You've already forked lazarus-ccr
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:
@ -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.
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user