unit Git; interface uses Classes, SysUtils, VCS, Backend; type { TBackendGit } TBackendGit = class(TBackend) constructor Create; function IsWorkingCopy(Directory: string): Boolean; override; end; { TGit } TGit = class(TWorkingCopy) protected procedure Execute(Parameters: array of string); public procedure Checkout; override; procedure Update; override; procedure CleanUp; override; procedure Commit(Message: string); override; procedure Move(Source, Dest: string); override; procedure Merge; override; procedure Add(FileName: string); override; procedure GetLog(FileName: string; Log: TLogItems); override; end; { TRepositoryGit } TRepositoryGit = class(TRepository) protected procedure Execute(Parameters: array of string); public procedure Init; override; end; implementation { TRepositoryGit } procedure TRepositoryGit.Execute(Parameters: array of string); begin ExecuteProcess('/usr/bin/git', Parameters); end; procedure TRepositoryGit.Init; begin Execute(['init', Path]); end; { TBackendGit } constructor TBackendGit.Create; begin Name := 'Git'; HomePage := 'https://git-scm.com/'; WorkingCopyClass := TGit; RepositoryClass := TRepositoryGit; end; function TBackendGit.IsWorkingCopy(Directory: string): Boolean; begin Result := DirectoryExists(Directory + DirectorySeparator + '.git'); end; { TGit } procedure TGit.Execute(Parameters: array of string); begin ExecuteProcess('/usr/bin/git', Parameters); end; procedure TGit.Checkout; begin Execute(['clone', RepositoryURL, Path]); end; procedure TGit.Update; begin Execute(['fetch']); end; procedure TGit.CleanUp; begin Execute(['cleanup']); end; procedure TGit.Commit(Message: string); begin Execute(['config', 'user.name "' + UserName + '"']); Execute(['config', 'user.email "' + Email + '"']); Execute(['commit', '-m "' + Message + '"']); end; procedure TGit.Move(Source, Dest: string); begin Execute(['mv', Source, Dest]); end; procedure TGit.Merge; begin Execute(['merge']); end; procedure TGit.Add(FileName: string); begin Execute(['add', FileName]); end; procedure TGit.GetLog(FileName: string; Log: TLogItems); begin end; end.