Advertisement
Guest User

Untitled

a guest
Jan 16th, 2019
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.86 KB | None | 0 0
  1. unit ugit2;
  2.  
  3. (* Common configuration.
  4.  
  5. This file is included by library units to configure the compiler. It isn't
  6. neccessary to include it in your projects. *)
  7.  
  8. {TODO: Detect MacOS and iOS}
  9. {TODO: Detect Android?}
  10. {TODO: Detect GNU/Pascal?}
  11.  
  12. (* Code to detect Delphi.
  13.  
  14. Seems that old Delphi (i.e: Delphi6) defines DELPHI but newer ones
  15. doesn't (or at least Tokio 10.2 doesn't) so some tweaking should be done.
  16.  
  17. Note that this code was tested with Delphi Tokio 10.2 Starter Edition only.
  18. I've tryed Delphi 6 proffesional and IT DOESN'T WORK AT ALL and I don't see
  19. how to make it run. Theoretically it should work with Delphi 7 (as I've
  20. tryed to keep Cieslak's changes) but I haven't a copy so it isn't tested.
  21.  
  22. Also I've used a table from Embarcadero's Delphi Wiki.
  23. http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Conditional_compilation_(Delphi)
  24. *)
  25. {$IFNDEF DELPHI}
  26. {$IFDEF DCC}
  27. {$DEFINE DELPHI}
  28. {$ENDIF}
  29. {$ENDIF}
  30.  
  31. {$IFNDEF FPC}
  32. {$IFNDEF DELPHI}
  33. {
  34. This version wasn't tested with other compilers than Free Pascal and Delphi.
  35. May be you want to help porting it to other systems and compilers, won't you?
  36. }
  37. {$ERROR ugit2.pas wasn't tested with this compiler. Do you want to help? }
  38. {$ENDIF}
  39. {$ENDIF}
  40.  
  41. { Configure the compiler. }
  42.  
  43. {$IFDEF FPC}
  44. { Free Pascal. }
  45. { Checks platform. }
  46. {$IFDEF UNIX}
  47. {$IF DEFINED(DARWIN) OR DEFINED(QNX) OR DEFINED(BEOS)}
  48. {
  49. This version wasn't tested on those systems.
  50. May be you want to help porting it to other systems and compilers, won't you?
  51. }
  52. {$ERROR ugit2.pas wasn't tested on your Operating System. Do you want to help? }
  53. {$ENDIF}
  54. {$ELSE}
  55. {$IFNDEF WINDOWS}
  56. {$ERROR ugit2.pas wasn't tested on your Operating System. Do you want to help? }
  57. {$ENDIF}
  58. {$ENDIF}
  59. { Sets dialect. }
  60. {$IF NOT DEFINED(FPC_DELPHI)}
  61. {$MODE DELPHI}
  62. {$ENDIF}
  63. {$MACRO ON}
  64. {$LONGSTRINGS ON}
  65. {$PACKRECORDS C}
  66. {$PACKENUM 4}
  67. {$IFNDEF DEBUGMODE}
  68. {$SMARTLINK ON}
  69. {$ELSE}
  70. {$INLINE OFF}
  71. {$ENDIF}
  72. {$ENDIF}
  73.  
  74. {$IFDEF DELPHI}
  75. { Delphi }
  76. { Checks platform }
  77. {$IFDEF CONDITIONALEXPRESSIONS}
  78. {$IF CompilerVersion >= 18.5}
  79. {$DEFINE ISDELPHI2007ANDUP}
  80. {$ENDIF}
  81. {$IF CompilerVersion >= 20.0}
  82. {$DEFINE ISDELPHI2009ANDUP}
  83. {$ENDIF}
  84. {$ENDIF}
  85.  
  86. { Delphi and Free Pascal have different ways to tell they're generating an
  87. executable for Windows. }
  88. {$IFNDEF WINDOWS}
  89. {$IFDEF MSWINDOWS}
  90. {$DEFINE WINDOWS}
  91. {$ENDIF}
  92. {$ENDIF}
  93. { CPU has some issues as well. }
  94. {$IFNDEF CPU64}
  95. {$IFDEF CPU64BITS}
  96. {$DEFINE CPU64}
  97. {$ENDIF}
  98. {$ENDIF}
  99. { Set compiler options. }
  100. {$LONGSTRINGS ON}
  101. {TODO: Next directive works on 32bit, it wasn''t tested on 64bit.}
  102. {$ALIGN 8}
  103. {$MINENUMSIZE 4}
  104. {$ENDIF}
  105.  
  106. interface
  107.  
  108. uses ctypes, MultiLog;
  109.  
  110. (* Defines some constants to build the correct names of the library files. *)
  111. const
  112. {$IFDEF DEBUGMODE}
  113. _DBG_ = '-debug';{<@exclude }
  114. {$ELSE}
  115. _DBG_ = ''; {<@exclude }
  116. {$ENDIF}
  117.  
  118. {$IF DEFINED(LINUX)}
  119. (* @exclude Prefix for libraries. *)
  120. _LG2_LIB_PREFIX_ = 'lib';
  121. (* @exclude Sufix/extension for libraries. *)
  122. _LG2_LIB_EXT_ = '.so';
  123. {$ELSEIF DEFINED(UNIX)}
  124. (* @exclude Prefix for libraries. *)
  125. _LG2_LIB_PREFIX_ = 'lib';
  126. (* @exclude Sufix/extension for libraries. *)
  127. _LG2_LIB_EXT_ = '.so';
  128. {$ELSEIF DEFINED(WINDOWS)}
  129. (* @exclude Prefix for libraries. *)
  130. _LG2_LIB_PREFIX_ = '';
  131. (* @exclude Sufix/extension for libraries. *)
  132. _LG2_LIB_EXT_ = '.dll';
  133. {$ENDIF}
  134.  
  135. (* @exclude Builds main library name. AFAIK it's not needed. *)
  136. LIBGIT2_MAIN_LIB_NAME = _LG2_LIB_PREFIX_+'git2_main'+_DBG_+_LG2_LIB_EXT_;
  137.  
  138. (* @exclude Builds library name. *)
  139. LIBGIT2_LIB_NAME = _LG2_LIB_PREFIX_+'git2'+_DBG_+_LG2_LIB_EXT_;
  140.  
  141. type
  142. (* Generic pointer. *)
  143. LG2_POINTER = POINTER;
  144. (* Signed 8bit integer values. *)
  145. LG2_INT8 = SHORTINT;
  146. (* Unsigned 8bit integer values. *)
  147. LG2_UINT8 = BYTE;
  148. (* Signed 16bit integer values. *)
  149. LG2_INT16 = SMALLINT;
  150. (* Unsigned 16bit integer values. *)
  151. LG2_UINT16 = WORD;
  152. (* Signed 32bit integer values. *)
  153. LG2_INT32 = LONGINT;
  154. (* Unsigned 32bit integer values. *)
  155. LG2_UINT32 = LONGWORD;
  156. (* Signed 64bit integer values. *)
  157. LG2_INT64 = INT64;
  158. {$IFDEF FPC}
  159. (* Unsigned 64bit integer values. *)
  160. LG2_UINT64 = QWORD;
  161. {$ELSE}
  162. {$IFDEF ISDELPHI2007ANDUP}
  163. (* Unsigned 64bit integer values. *)
  164. LG2_UINT64 = UINT64;
  165. {$ELSE}
  166. (* Unsigned 64bit integer values. *)
  167. LG2_UINT64 = INT64;
  168. {$ENDIF}
  169. {$ENDIF}
  170.  
  171. { TODO: Check wich boolean type does it uses. }
  172. (* Boolean result. *)
  173. LG2_BOOL = LONGBOOL;
  174.  
  175. (* Signed 8bit integer.
  176.  
  177. Note that it isn't Pascal's CHAR type! *)
  178. LG2_CHAR = LG2_INT8;
  179. (* Unsigned 8bit integer values. *)
  180. LG2_UCHAR = LG2_UINT8;
  181. (* Signed 16bit integer values. *)
  182. LG2_SHORT = LG2_INT16;
  183. (* Unsigned 16bit integer values. *)
  184. LG2_USHORT = LG2_UINT16;
  185. (* Signed 32bit integer values. *)
  186. LG2_INT = LG2_INT32;
  187. (* Unsigned 32bit integer values. *)
  188. LG2_UINT = LG2_UINT32;
  189. {$IFDEF CPU64}
  190. {$IFDEF WINDOWS}
  191. (* Signed 32/64bit integer values. *)
  192. LG2_LONG = LG2_INT32;
  193. (* Unsigned 32/64bit integer values. *)
  194. LG2_ULONG = LG2_UINT32;
  195. {$ELSE}
  196. (* Signed 32/64bit integer values. *)
  197. LG2_LONG = LG2_INT64;
  198. (* Unsigned 32/64bit integer values. *)
  199. LG2_ULONG = LG2_UINT64;
  200. {$ENDIF}
  201. (* size_t equivalent. *)
  202. LG2_SIZE_T = LG2_UINT64;
  203. (* Fake pointer type. It's needed to pass pointers as integer values in some
  204. methods. *)
  205. LG2_INTPTR_T = LG2_INT64;
  206. (* Fake pointer type. It's needed to pass pointers as integer values in some
  207. methods. *)
  208. LG2_UINTPTR_T = LG2_UINT64;
  209. {$ELSE}
  210. (* Signed 32/64bit integer values. *)
  211. LG2_LONG = LG2_INT32;
  212. (* Unsigned 32/64bit integer values. *)
  213. LG2_ULONG = LG2_UINT32;
  214. (* size_t equivalent. *)
  215. LG2_SIZE_T = LG2_UINT32;
  216. (* Fake pointer type. It's needed to pass pointers as integer values in some
  217. methods. *)
  218. LG2_INTPTR_T = LG2_INT32;
  219. (* Fake pointer type. It's needed to pass pointers as integer values in some
  220. methods. *)
  221. LG2_UINTPTR_T = LG2_UINT32;
  222. {$ENDIF}
  223. (* Another 64bit integer to store sizes. *)
  224. LG2_OFF_T = LG2_UINT;
  225.  
  226. (* Float value. *)
  227. LG2_FLOAT = SINGLE;
  228. (* Double value. *)
  229. LG2_DOUBLE = DOUBLE;
  230. (* Strings. Used in parameters to convert Pascal's @code(STRING) to C's
  231. @code(char * )*)
  232. LG2_STR = ANSISTRING;
  233.  
  234. (* Pointer. *)
  235. LG2_VOIDptr = LG2_POINTER;
  236. (* Pointer to text strings. Used to convert Pascal's @code(STRING) to C
  237. @code(char * ) *)
  238.  
  239. {$IFDEF ISDELPHI2009ANDUP}
  240. LG2_STRptr = PAnsiChar;
  241. {$ELSE}
  242. LG2_STRptr = PCHAR;
  243. {$ENDIF}
  244. (* Pointer to integer. *)
  245. LG2_INTptr = ^LG2_INT;
  246. (* Pointer to float. *)
  247. LG2_FLOATptr = ^LG2_FLOAT;
  248.  
  249. const
  250. GIT_SUCCESS = 0;
  251. GIT_ERROR = -1;
  252.  
  253. type
  254.  
  255. git_buf = record
  256. ptr: ^char;
  257. asize: cuint64;
  258. size: cuint64;
  259. end;
  260.  
  261. git_repository_init_options = record
  262. version: LG2_UINT32;
  263. flags: LG2_UINT32;
  264. mode: LG2_UINT32;
  265. workdir_path: LG2_STR;
  266. description: LG2_STR;
  267. template_path: LG2_STR;
  268. initial_head: LG2_STR;
  269. origin_url: LG2_STR;
  270. end;
  271.  
  272. git_repository_item_t = (
  273. GIT_REPOSITORY_ITEM_GITDIR,
  274. GIT_REPOSITORY_ITEM_WORKDIR,
  275. GIT_REPOSITORY_ITEM_COMMONDIR,
  276. GIT_REPOSITORY_ITEM_INDEX,
  277. GIT_REPOSITORY_ITEM_OBJECTS,
  278. GIT_REPOSITORY_ITEM_REFS,
  279. GIT_REPOSITORY_ITEM_PACKED_REFS,
  280. GIT_REPOSITORY_ITEM_REMOTES,
  281. GIT_REPOSITORY_ITEM_CONFIG,
  282. GIT_REPOSITORY_ITEM_INFO,
  283. GIT_REPOSITORY_ITEM_HOOKS,
  284. GIT_REPOSITORY_ITEM_LOGS,
  285. GIT_REPOSITORY_ITEM_MODULES,
  286. GIT_REPOSITORY_ITEM_WORKTREES
  287. );
  288.  
  289. git_object_t = (
  290. GIT_OBJECT_ANY = -2,
  291. GIT_OBJECT_BAD = -1,
  292. GIT_OBJECT_COMMIT = 1,
  293. GIT_OBJECT_TREE = 2,
  294. GIT_OBJECT_BLOB = 3,
  295. GIT_OBJECT_TAG = 4,
  296. GIT_OBJECT_OFS_DELTA = 6,
  297. GIT_OBJECT_REF_DELTA = 7
  298. );
  299.  
  300. git_repository_state_t = (
  301. GIT_REPOSITORY_STATE_NONE,
  302. GIT_REPOSITORY_STATE_MERGE,
  303. GIT_REPOSITORY_STATE_REVERT,
  304. GIT_REPOSITORY_STATE_REVERT_SEQUENCE,
  305. GIT_REPOSITORY_STATE_CHERRYPICK,
  306. GIT_REPOSITORY_STATE_CHERRYPICK_SEQUENCE,
  307. GIT_REPOSITORY_STATE_BISECT,
  308. GIT_REPOSITORY_STATE_REBASE,
  309. GIT_REPOSITORY_STATE_REBASE_INTERACTIVE,
  310. GIT_REPOSITORY_STATE_REBASE_MERGE,
  311. GIT_REPOSITORY_STATE_APPLY_MAILBOX,
  312. GIT_REPOSITORY_STATE_APPLY_MAILBOX_OR_REBASE
  313. );
  314.  
  315. Pgit_annotated_commit = LG2_POINTER;
  316. Pgit_buf = ^git_buf;
  317. Pgit_commit = LG2_POINTER;
  318. PPgit_commit = ^Pgit_commit;
  319. Pgit_config = LG2_POINTER;
  320. PPgit_config = ^Pgit_config;
  321. Pgit_oid = LG2_POINTER;
  322. Pgit_reference = LG2_POINTER;
  323. PPgit_reference = ^Pgit_reference;
  324. Pgit_repository = LG2_POINTER;
  325. PPgit_repository = ^Pgit_repository;
  326. Pgit_repository_init_options = ^git_repository_init_options;
  327. Pgit_tag = LG2_POINTER;
  328. Pgit_worktree = LG2_POINTER;
  329. Pgit_odb = LG2_POINTER;
  330. PPgit_odb = ^Pgit_odb;
  331. Pgit_refdb = LG2_POINTER;
  332. PPgit_refdb = ^Pgit_refdb;
  333. Pgit_index = LG2_POINTER;
  334. PPgit_index = ^Pgit_index;
  335.  
  336. git_repository_fetchhead_foreach_cb = function(const ref_name: LG2_STR; const remote_url: LG2_STR; const oid: Pgit_oid; is_merge: LG2_UINT; payload: LG2_POINTER): LG2_INT;
  337. git_repository_mergehead_foreach_cb = function(const oid: Pgit_oid; payload: LG2_POINTER): LG2_INT;
  338.  
  339. { global.h }
  340. procedure git_libgit2_init(); cdecl; external LIBGIT2_LIB_NAME;
  341. procedure git_libgit2_shutdown(); cdecl; external LIBGIT2_LIB_NAME;
  342.  
  343. { repository.h }
  344. function git_repository_open(var repo_out: PPgit_repository; const path: LG2_STR): LG2_INT; cdecl; external LIBGIT2_LIB_NAME;
  345. function git_repository_open_from_worktree(var repo_out: PPgit_repository; var wt: Pgit_worktree): LG2_INT; cdecl; external LIBGIT2_LIB_NAME;
  346. function git_repository_wrap_odb(var repo_out: PPgit_repository; var repo_odb: Pgit_odb): LG2_INT; cdecl; external LIBGIT2_LIB_NAME;
  347. function git_repository_discover(var buf_out: Pgit_buf; const start_path: LG2_STR; across_fs: LG2_INT; const ceiling_dirs: LG2_STR): LG2_INT; cdecl; external LIBGIT2_LIB_NAME;
  348. function git_repository_open_ext(var repo_out: PPgit_repository; const path: LG2_STR; flags: LG2_UINT32; const ceiling_dirs: LG2_STR): LG2_INT; cdecl; external LIBGIT2_LIB_NAME;
  349. function git_repository_open_bare(var repo_out: PPgit_repository; const bare_path: LG2_STR): LG2_INT; cdecl; external LIBGIT2_LIB_NAME;
  350. procedure git_repository_free(var repo: Pgit_repository); cdecl; external LIBGIT2_LIB_NAME;
  351. function git_repository_init(var repo_out: PPgit_repository; const path: LG2_STR; is_bare: LG2_BOOL): LG2_INT; cdecl; external LIBGIT2_LIB_NAME;
  352. function git_repository_init_init_options(var opts: Pgit_repository_init_options; version: LG2_UINT32): LG2_INT; cdecl; external LIBGIT2_LIB_NAME;
  353. function git_repository_init_ext(var repo_out: PPgit_repository; const repo_path: LG2_STR; var opts: Pgit_repository_init_options): LG2_INT; cdecl; external LIBGIT2_LIB_NAME;
  354. function git_repository_head(var ref_out: PPgit_reference; repo: Pgit_repository): LG2_INT; cdecl; external LIBGIT2_LIB_NAME;
  355. function git_repository_head_for_worktree(var ref_out: PPgit_reference; repo: Pgit_repository; const name: LG2_STR): LG2_INT; cdecl; external LIBGIT2_LIB_NAME;
  356. function git_repository_head_detached(const repo: Pgit_repository): LG2_INT; cdecl; external LIBGIT2_LIB_NAME;
  357. function git_repository_head_detached_for_worktree(repo: Pgit_repository; const name: LG2_STR): LG2_INT; cdecl; external LIBGIT2_LIB_NAME;
  358. function git_repository_head_unborn(repo: Pgit_repository): LG2_INT; cdecl; external LIBGIT2_LIB_NAME;
  359. function git_repository_is_empty(repo: Pgit_repository): LG2_INT; cdecl; external LIBGIT2_LIB_NAME;
  360. function git_repository_item_path(var buf_out: Pgit_buf; const repo: Pgit_repository; const item: git_repository_item_t): LG2_INT; cdecl; external LIBGIT2_LIB_NAME;
  361. function git_repository_path(const repo: Pgit_repository): LG2_STR; cdecl; external LIBGIT2_LIB_NAME;
  362. function git_repository_workdir(const repo: Pgit_repository): LG2_STR; cdecl; external LIBGIT2_LIB_NAME;
  363. function git_repository_commondir(const repo: Pgit_repository): LG2_STR; cdecl; external LIBGIT2_LIB_NAME;
  364. function git_repository_set_workdir(const repo: Pgit_repository; const workdir: LG2_STR; update_gitlink: LG2_INT): LG2_INT; cdecl; external LIBGIT2_LIB_NAME;
  365. function git_repository_is_bare(const repo: Pgit_repository): LG2_INT; cdecl; external LIBGIT2_LIB_NAME;
  366. function git_repository_is_worktree(const repo: Pgit_repository): LG2_INT; cdecl; external LIBGIT2_LIB_NAME;
  367. function git_repository_config(var config_out: PPgit_config; repo: Pgit_repository): LG2_INT; cdecl; external LIBGIT2_LIB_NAME;
  368. function git_repository_config_snapshot(var config_out: PPgit_config; repo: Pgit_repository): LG2_INT; cdecl; external LIBGIT2_LIB_NAME;
  369. function git_repository_odb(var odb_out: PPgit_odb; repo: Pgit_repository): LG2_INT; cdecl; external LIBGIT2_LIB_NAME;
  370. function git_repository_refdb(var refdb_out: PPgit_refdb; repo: Pgit_repository): LG2_INT; cdecl; external LIBGIT2_LIB_NAME;
  371. function git_repository_index(var index_out: PPgit_index; repo: Pgit_repository): LG2_INT; cdecl; external LIBGIT2_LIB_NAME;
  372. function git_repository_message(var buf_out: Pgit_buf; repo: Pgit_repository): LG2_INT; cdecl; external LIBGIT2_LIB_NAME;
  373. function git_repository_message_remove(repo: Pgit_repository): LG2_INT; cdecl; external LIBGIT2_LIB_NAME;
  374. function git_repository_state_cleanup(repo: Pgit_repository): LG2_INT; cdecl; external LIBGIT2_LIB_NAME;
  375. function git_repository_fetchhead_foreach(repo: Pgit_repository; callback: git_repository_fetchhead_foreach_cb; payload: LG2_POINTER): LG2_INT; cdecl; external LIBGIT2_LIB_NAME;
  376. function git_repository_mergehead_foreach(repo: Pgit_repository; callback: git_repository_mergehead_foreach_cb; payload: LG2_POINTER): LG2_INT; cdecl; external LIBGIT2_LIB_NAME;
  377. function git_repository_hashfile(oid: Pgit_oid; repo: Pgit_repository; const path: LG2_STR; obj_type: git_object_t; const as_path: LG2_STR): LG2_INT; cdecl; external LIBGIT2_LIB_NAME;
  378. function git_repository_set_head(repo: Pgit_repository; refname: LG2_STR): LG2_INT; cdecl; external LIBGIT2_LIB_NAME;
  379. function git_repository_set_head_detached(repo: Pgit_repository; const commitish: Pgit_oid): LG2_INT; cdecl; external LIBGIT2_LIB_NAME;
  380. function git_repository_set_head_detached_from_annotated(repo: Pgit_repository): LG2_INT; cdecl; external LIBGIT2_LIB_NAME;
  381. function git_repository_detach_head(repo: Pgit_repository; const commitish: Pgit_annotated_commit): LG2_INT; cdecl; external LIBGIT2_LIB_NAME;
  382. function git_repository_state(repo: Pgit_repository): LG2_INT; cdecl; external LIBGIT2_LIB_NAME;
  383. function git_repository_set_namespace(repo: Pgit_repository; const nmspace: LG2_STR): LG2_INT; cdecl; external LIBGIT2_LIB_NAME;
  384. function git_repository_get_namespace(repo: Pgit_repository): LG2_STR; cdecl; external LIBGIT2_LIB_NAME;
  385. function git_repository_is_shallow(repo: Pgit_repository): LG2_BOOL; cdecl; external LIBGIT2_LIB_NAME;
  386. function git_repository_ident(name: LG2_STRptr; email: LG2_STRptr; const repo: Pgit_repository): LG2_INT; cdecl; external LIBGIT2_LIB_NAME;
  387. function git_repository_set_ident(repo: Pgit_repository; const name: LG2_STR; const email: LG2_STR): LG2_INT; cdecl; external LIBGIT2_LIB_NAME;
  388.  
  389. { commit.h }
  390. function git_commit_lookup(commit: PPgit_commit; repo: Pgit_repository; const id: Pgit_oid): LG2_INT; cdecl; external LIBGIT2_LIB_NAME;
  391. function git_commit_lookup_prefix(commit: PPgit_commit; repo: Pgit_repository; const id: Pgit_oid; :csize_t): LG2_INT; cdecl; external LIBGIT2_LIB_NAME;
  392.  
  393. type
  394.  
  395. { SDK }
  396.  
  397. TGitRepository = Class(TObject)
  398. Name: string;
  399. Email: string;
  400. Namespace: AnsiString;
  401. private
  402. repo: PPgit_repository;
  403. function GetWorkDir: AnsiString;
  404. function GetCommonDir: AnsiString;
  405. function GetPath: AnsiString;
  406. public
  407. constructor Create(const repository_path: string);
  408. destructor Destroy; override;
  409. { API }
  410. function IsEmpty: Boolean;
  411. property WorkDir: AnsiString read GetWorkDir;
  412. property CommonDir: AnsiString read GetCommonDir;
  413. property Path: AnsiString read GetPath;
  414. end;
  415.  
  416.  
  417. implementation
  418.  
  419. { declarations }
  420.  
  421. constructor TGitRepository.Create(const repository_path: String);
  422. begin
  423. if git_repository_open(repo, PAnsiChar(repository_path)) = GIT_SUCCESS then
  424. begin
  425. // Path := git_repository_path(repo^);
  426. // Workdir := git_repository_workdir(repo^);
  427. // Commondir := git_repository_commondir(repo^);
  428. // git_repository_ident(LG2_STRptr(string(Name)), LG2_STRptr(string(Email)), repo^);
  429. Logger.Send('TGitRepository.Create(open+ident:success): ' + Path);
  430. end
  431. else
  432. begin
  433. Logger.SendError('TGitRepository.Create(open:error): ' + repository_path);
  434. end;
  435. end;
  436.  
  437. destructor TGitRepository.Destroy;
  438. begin
  439. if repo <> nil then
  440. begin
  441. git_repository_free(repo^);
  442. Logger.Send('TGitRepository.Destroy(free:success)');
  443. end;
  444. end;
  445.  
  446. function TGitRepository.GetWorkDir(): AnsiString;
  447. begin
  448. if repo = nil then
  449. begin
  450. end
  451. else
  452. Result := git_repository_workdir(self.repo^);
  453. end;
  454.  
  455. function TGitRepository.GetCommonDir(): AnsiString;
  456. begin
  457. Result := git_repository_commondir(self.repo^);
  458. end;
  459.  
  460. function TGitRepository.GetPath(): AnsiString;
  461. begin
  462. Result := git_repository_path(self.repo^);
  463. end;
  464.  
  465. function TGitRepository.IsEmpty: boolean;
  466. begin
  467. if repo <> nil then
  468. begin
  469. Result := git_repository_is_empty(repo^) = 1;
  470. end
  471. else
  472. Result := false;
  473. end;
  474.  
  475. initialization
  476. { Delphi forces an INITIALIZATION section if FINALIZATION is used. }
  477. ;
  478. { Next code suggested by FPC mailing list user. This should fix some issues
  479. with memory. Removed as it seems to be fixed by Allegro itself. }
  480.  
  481. { $if defined(cpui386) or defined(cpux86_64)}
  482. { SetExceptionMask(GetExceptionMask + [exZeroDivide, exInvalidOp]); }
  483. { $ENDIF}
  484. git_libgit2_init;
  485.  
  486. finalization
  487. git_libgit2_shutdown;
  488.  
  489. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement