Added cvsexportlocal tool, to create an cvs export from a local checked out cvs directory tree.

git-svn-id: trunk@6095 -
This commit is contained in:
vincents 2004-10-01 11:52:58 +00:00
parent e3110a7838
commit b0b5a1c4bb
2 changed files with 132 additions and 0 deletions

1
.gitattributes vendored
View File

@ -1579,6 +1579,7 @@ tools/install/create_lazarus_deb.sh -text svneol=native#application/x-sh
tools/install/create_lazarus_export_tgz.sh -text svneol=native#application/x-sh
tools/install/create_lazarus_rpm.sh -text svneol=native#application/x-sh
tools/install/create_lazarus_tgz_from_local_dir.sh -text svneol=native#application/x-sh
tools/install/cvsexportlocal.pas svneol=native#text/pascal
tools/install/do_nothing.sh -text svneol=native#application/x-sh
tools/install/download_and_build_fpc_rpm.sh -text svneol=native#application/x-sh
tools/install/file_filter.sh -text svneol=native#application/x-sh

View File

@ -0,0 +1,131 @@
program cvsexportlocal;
{$mode objfpc}{$H+}
uses
Classes, SysUtils, FileUtil;
var
InputDir: string;
OutputDir: string;
type
TCvsDirectory = class
private
FDirectories: TStrings;
FDirectory: string;
FFiles: TStrings;
procedure LoadEntries;
public
constructor Create(ADirectory: string);
destructor Destroy; override;
property Files : TStrings read FFiles;
property Directories: TStrings read FDirectories;
end;
{ TCvsDirectory }
constructor TCvsDirectory.Create(ADirectory: string);
begin
FDirectory:= ADirectory;
FFiles:= TStringList.Create;
FDirectories := TStringList.Create;
LoadEntries;
end;
destructor TCvsDirectory.Destroy;
begin
FreeAndNil(FFiles);
FreeAndNil(FDirectories);
end;
procedure TCvsDirectory.LoadEntries;
var
EntriesPath: string;
Entries: TStrings;
i: integer;
Name: string;
function IsDirectoryEntry(i: integer): boolean;
begin
result := (Length(Entries[i])>0) and (Entries[i][1]='D')
end;
function GetNameFromEntry(i: integer): string;
var
FirstSlashPos: integer;
SecondSlashPos: integer;
Entry: string;
begin
Entry := Entries[i];
FirstSlashPos := Pos('/',Entry);
SecondSlashPos := Pos('/',
Copy(Entry,FirstSlashPos+1,Length(Entry)-FirstSlashPos));
Result := Copy(Entry, FirstSlashPos + 1, SecondSlashPos-1);
end;
begin
EntriesPath := AppendPathDelim(FDirectory)+'CVS'+DirectorySeparator+'Entries';
Entries := TStringList.Create;
Entries.LoadFromFile(EntriesPath);
for i := 0 to Entries.Count-1 do begin
Name := GetNameFromEntry(i);
if Length(Name)>0 then
if IsDirectoryEntry(i) then
FDirectories.Add(Name)
else
FFiles.Add(Name);
end;
Entries.Free;
end;
procedure Init;
begin
InputDir := ExpandFileName(ParamStr(1));
OutputDir := ExpandFileName(ParamStr(2));
end;
procedure CopyCvsDirectory(const SourceDir, DestinationDir: string);
var
CvsDirectory: TCvsDirectory;
i: Integer;
procedure CopyCvsFile(const FileName: string);
var
SourceFileName: string;
DestinationFileName: string;
begin
SourceFileName := AppendPathDelim(SourceDir)+FileName;
DestinationFileName := AppendPathDelim(DestinationDir)+FileName;
CopyFile(SourceFileName, DestinationFileName, true);
end;
begin
if DirectoryExists(DestinationDir) then
begin
writeln(format('Output directory %s exists. It will be deleted',
[DestinationDir]));
DeleteDirectory(DestinationDir, false);
end;
ForceDirectory(DestinationDir);
CvsDirectory := TCvsDirectory.Create(SourceDir);
try
for i:= 0 to CvsDirectory.Files.Count-1 do
CopyCvsFile(CvsDirectory.Files[i]);
for i:= 0 to CvsDirectory.Directories.Count-1 do
CopyCvsDirectory(AppendPathDelim(SourceDir)+CvsDirectory.Directories[i],
AppendPathDelim(DestinationDir)+CvsDirectory.Directories[i]);
finally
CvsDirectory.Free;
end;
end;
procedure Done;
begin
end;
begin
Init;
CopyCvsDirectory(InputDir, OutputDir);
Done;
end.