Changeset 13 for trunk/Units
- Timestamp:
- May 30, 2015, 1:02:36 PM (10 years ago)
- Location:
- trunk/Units
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Units/UBackend.pas
r10 r13 10 10 type 11 11 TWorkingCopyClass = class of TWorkingCopy; 12 TRepositoryClass = class of TRepository; 12 13 13 14 { TBackend } … … 15 16 TBackend = class 16 17 Name: string; 18 HomePage: string; 17 19 WorkingCopyClass: TWorkingCopyClass; 20 RepositoryClass: TRepositoryClass; 21 function IsRepository(Directory: string): Boolean; virtual; 18 22 function IsWorkingCopy(Directory: string): Boolean; virtual; 19 23 end; … … 22 26 23 27 { TBackend } 28 29 function TBackend.IsRepository(Directory: string): Boolean; 30 begin 31 Result := False; 32 end; 24 33 25 34 function TBackend.IsWorkingCopy(Directory: string): Boolean; -
trunk/Units/UProject.pas
r9 r13 6 6 7 7 uses 8 Classes, SysUtils, UVCS, UBackend; 8 Classes, SysUtils, UVCS, UBackend, Contnrs, DOM, XMLRead, XMLWrite, UXMLUtils, 9 FileUtil; 9 10 10 11 type … … 22 23 public 23 24 WorkingCopy: TWorkingCopy; 25 Repository: TRepository; 24 26 procedure Open(Directory: string); 25 27 constructor Create; 26 28 destructor Destroy; override; 29 procedure LoadXMLNOde(Node: TDOMNode); 30 procedure SaveXMLNOde(Node: TDOMNode); 27 31 property Backend: TBackend read FBackend write SetBackend; 28 32 property Directory: string read GetDirectory write SetDirectory; … … 30 34 end; 31 35 36 { TProjects } 37 38 TProjects = class(TObjectList) 39 procedure LoadXMLNode(Node: TDOMNode); 40 procedure SaveXMLNode(Node: TDOMNode); 41 end; 42 43 { TProjectGroup } 44 45 TProjectGroup = class 46 FileName: string; 47 Projects: TProjects; 48 constructor Create; 49 destructor Destroy; override; 50 procedure LoadFromFile(FileName: string); 51 procedure SaveToFile(FileName: string); 52 end; 53 32 54 33 55 implementation 34 56 35 uses 36 USubversion; 57 resourcestring 58 SWrongFileFormat = 'Wrong file format'; 59 60 { TProjects } 61 62 procedure TProjects.LoadXMLNode(Node: TDOMNode); 63 var 64 NewProject: TProject; 65 Node2: TDOMNode; 66 begin 67 Node2 := Node.FirstChild; 68 while Assigned(Node2) and (Node2.NodeName = 'Project') do begin 69 NewProject := TProject.Create; 70 NewProject.LoadXMLNode(Node2); 71 Add(NewProject); 72 Node2 := Node2.NextSibling; 73 end; 74 end; 75 76 procedure TProjects.SaveXMLNode(Node: TDOMNode); 77 var 78 I: Integer; 79 NewNode: TDOMNode; 80 begin 81 for I := 0 to Count - 1 do begin; 82 NewNode := Node.OwnerDocument.CreateElement('Project'); 83 Node.AppendChild(NewNode); 84 TProject(Items[I]).SaveXMLNode(NewNode); 85 end; 86 end; 87 88 89 { TProjectGroup } 90 91 constructor TProjectGroup.Create; 92 begin 93 Projects := TProjects.Create; 94 end; 95 96 destructor TProjectGroup.Destroy; 97 begin 98 Projects.Free; 99 inherited Destroy; 100 end; 101 102 procedure TProjectGroup.LoadFromFile(FileName: string); 103 var 104 Doc: TXMLDocument; 105 RootNode: TDOMNode; 106 Node: TDOMNode; 107 Node2: TDOMNode; 108 begin 109 Self.FileName := FileName; 110 ReadXMLFile(Doc, UTF8Decode(FileName)); 111 with Doc do try 112 if Doc.DocumentElement.NodeName <> 'ProjectGroup' then 113 raise Exception.Create(SWrongFileFormat); 114 RootNode := Doc.DocumentElement; 115 with RootNode do begin 116 Node := FindNode('Projects'); 117 if Assigned(Node) then Projects.LoadXMLNode(Node); 118 end; 119 finally 120 Doc.Free; 121 end; 122 end; 123 124 procedure TProjectGroup.SaveToFile(FileName: string); 125 var 126 NewNode: TDOMNode; 127 Doc: TXMLDocument; 128 RootNode: TDOMNode; 129 begin 130 if FileName = '' then Exit; 131 Self.FileName := FileName; 132 Doc := TXMLDocument.Create; 133 with Doc do try 134 RootNode := CreateElement('ProjectGroup'); 135 AppendChild(RootNode); 136 with RootNode do begin 137 NewNode := OwnerDocument.CreateElement('Projects'); 138 AppendChild(NewNode); 139 Projects.SaveXMLNode(NewNode); 140 end; 141 ForceDirectoriesUTF8(ExtractFileDir(FileName)); 142 WriteXMLFile(Doc, UTF8Decode(FileName)); 143 finally 144 Doc.Free; 145 end; 146 end; 37 147 38 148 { TProject } … … 44 154 FreeAndNil(WorkingCopy); 45 155 WorkingCopy := AValue.WorkingCopyClass.Create; 156 FreeAndNil(Repository); 157 Repository := AValue.RepositoryClass.Create; 46 158 end; 47 159 … … 64 176 begin 65 177 WorkingCopy.RepositoryURL := AValue; 178 Repository.Path := AValue; 66 179 end; 67 180 … … 74 187 begin 75 188 WorkingCopy := TWorkingCopy.Create; 189 Repository := TRepository.Create; 76 190 end; 77 191 … … 79 193 begin 80 194 WorkingCopy.Free; 195 Repository.Free; 81 196 inherited Destroy; 82 197 end; 83 198 199 procedure TProject.LoadXMLNOde(Node: TDOMNode); 200 begin 201 RepositoryURL := ReadString(Node, 'RepositoryURL', ''); 202 Directory := ReadString(Node, 'Directory', ''); 203 end; 204 205 procedure TProject.SaveXMLNOde(Node: TDOMNode); 206 begin 207 WriteString(Node, 'RepositoryURL', RepositoryURL); 208 WriteString(Node, 'Directory', Directory); 209 end; 210 84 211 end. 85 212 -
trunk/Units/UVCS.pas
r11 r13 36 36 procedure SetRepositoryURL(AValue: string); 37 37 protected 38 EnvVars: TStringList; 38 39 procedure ExecuteProcess(Command: string; Parameters: array of string); virtual; 39 40 function GetNext(var Text: string; Separator: string): string; 40 41 public 42 UserName: string; 43 Password: string; 44 Email: string; 41 45 ExecutionOutput: TStringList; 42 46 procedure Checkout; virtual; … … 48 52 procedure Refresh; virtual; 49 53 procedure Add(FileName: string); virtual; 54 procedure Remove(FileName: string); virtual; 50 55 procedure GetLog(FileName: string; Log: TLogList); virtual; 51 56 constructor Create; … … 55 60 end; 56 61 62 { TRepository } 63 57 64 TRepository = class 65 protected 66 procedure ExecuteProcess(Command: string; Parameters: array of string); virtual; 67 public 68 ExecutionOutput: TStringList; 58 69 Path: string; 59 end; 60 61 70 procedure Init; virtual; 71 constructor Create; 72 destructor Destroy; override; 73 end; 74 75 76 function URLFromDirectory(DirName: string; Relative: Boolean): string; 62 77 63 78 implementation … … 66 81 UFormConsole; 67 82 68 { TLogItem } 69 70 constructor TLogItem.Create; 71 begin 72 Messages := TStringList.Create; 73 ChangedFiles := TStringList.Create; 74 end; 75 76 destructor TLogItem.Destroy; 77 begin 78 Messages.Free; 79 ChangedFiles.Free; 80 inherited Destroy; 81 end; 82 83 { TWorkingCopy } 84 85 procedure TWorkingCopy.SetPath(AValue: string); 86 begin 87 if FPath = AValue then Exit; 88 FPath := AValue; 89 Refresh; 90 end; 91 92 procedure TWorkingCopy.SetRepositoryURL(AValue: string); 93 begin 94 if FRepositoryURL=AValue then Exit; 95 FRepositoryURL:=AValue; 96 end; 97 98 procedure TWorkingCopy.ExecuteProcess(Command: string; Parameters: array of string); 83 function URLFromDirectory(DirName: string; Relative: Boolean): string; 84 begin 85 Result := DirName; 86 if Relative then Result := GetCurrentDirUTF8 + DirectorySeparator + Result; 87 Result := 'file:///' + StringReplace(Result, DirectorySeparator, '/', [rfReplaceAll]); 88 end; 89 90 { TRepository } 91 92 procedure TRepository.ExecuteProcess(Command: string; 93 Parameters: array of string); 99 94 begin 100 95 FormConsole.Executable := Command; … … 107 102 end; 108 103 104 procedure TRepository.Init; 105 begin 106 107 end; 108 109 constructor TRepository.Create; 110 begin 111 ExecutionOutput := TStringList.Create; 112 Path := ''; 113 end; 114 115 destructor TRepository.Destroy; 116 begin 117 FreeAndNil(ExecutionOutput); 118 inherited Destroy; 119 end; 120 121 { TLogItem } 122 123 constructor TLogItem.Create; 124 begin 125 Messages := TStringList.Create; 126 ChangedFiles := TStringList.Create; 127 end; 128 129 destructor TLogItem.Destroy; 130 begin 131 Messages.Free; 132 ChangedFiles.Free; 133 inherited Destroy; 134 end; 135 136 { TWorkingCopy } 137 138 procedure TWorkingCopy.SetPath(AValue: string); 139 begin 140 if FPath = AValue then Exit; 141 FPath := AValue; 142 Refresh; 143 end; 144 145 procedure TWorkingCopy.SetRepositoryURL(AValue: string); 146 begin 147 if FRepositoryURL=AValue then Exit; 148 FRepositoryURL:=AValue; 149 end; 150 151 procedure TWorkingCopy.ExecuteProcess(Command: string; Parameters: array of string); 152 begin 153 FormConsole.Executable := Command; 154 FormConsole.EnvironmentVariables.Assign(EnvVars); 155 FormConsole.Parameters.Clear; 156 FormConsole.Parameters.AddStrings(Parameters); 157 if DirectoryExistsUTF8(Path) then FormConsole.WorkingDir := Path 158 else FormConsole.WorkingDir := ''; 159 FormConsole.ShowModal; 160 ExecutionOutput.Assign(FormConsole.Log); 161 end; 162 109 163 function TWorkingCopy.GetNext(var Text: string; Separator: string): string; 110 164 begin … … 158 212 end; 159 213 214 procedure TWorkingCopy.Remove(FileName: string); 215 begin 216 217 end; 218 160 219 procedure TWorkingCopy.GetLog(FileName: string; Log: TLogList); 161 220 begin … … 166 225 begin 167 226 ExecutionOutput := TStringList.Create; 227 EnvVars := TStringList.Create; 168 228 FPath := ''; 169 229 FRepositoryURL := ''; … … 172 232 destructor TWorkingCopy.Destroy; 173 233 begin 234 FreeAndNil(EnvVars); 174 235 FreeAndNil(ExecutionOutput); 175 236 inherited Destroy;
Note:
See TracChangeset
for help on using the changeset viewer.