unit ugit2;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, LCLIntf, LCLType, DynLibs;
const
{ sys/commit.h }
{ sys/config.h }
GIT_CONFIG_BACKEND_VERSION = 1;
{ sys/diff.h }
GIT_DIFF_PERFDATA_VERSION = 1;
{ sys/filter.h }
GIT_FILTER_CRLF = 'crlf';
GIT_FILTER_IDENT = 'ident';
GIT_FILTER_CRLF_PRIORITY = 0;
GIT_FILTER_IDENT_PRIORITY = 100;
GIT_FILTER_DRIVER_PRIORITY = 200;
GIT_FILTER_VERSION = 1;
{ sys/hashsig.h }
{ sys/index.h }
{ sys/mempack.h }
{ sys/merge.h }
GIT_MERGE_DRIVER_TEXT = 'text';
GIT_MERGE_DRIVER_BINARY = 'binary';
GIT_MERGE_DRIVER_UNION = 'union';
{ sys/odb_backend.h }
{ sys/openssl.h }
{ sys/refdb_backend.h }
{ sys/reflog.h }
{ sys/refs.h }
{ sys/repository.h }
{ sys/stream.h }
{ sys/time.h }
{ sys/transport.h }
{ annotated_commit.h }
{ attr.h }
{ blame.h }
{ blob.h }
{ branch.h }
{ buffer.h }
{ checkout.h }
GIT_BLAME_OPTIONS_VERSION = 1;
{ cherrypick.h }
GIT_CHERRYPICK_OPTIONS_VERSION = 1;
{ clone.h }
{ commit.h }
{ common.h }
{$IFDEF WINDOWS}
GIT_PATH_LIST_SEPARATOR = ';';
{$ELSE}
GIT_PATH_LIST_SEPARATOR = ':';
{$ENDIF}
GIT_PATH_MAX = 4096;
GIT_CLONE_OPTIONS_VERSION = 1;
GIT_OID_HEX_ZERO = '0000000000000000000000000000000000000000';
{ config.h }
{ cred_helpers.h }
{ describe.h }
GIT_DESCRIBE_DEFAULT_MAX_CANDIDATES_TAGS = 10;
GIT_DESCRIBE_DEFAULT_ABBREVIATED_SIZE = 7;
GIT_DESCRIBE_OPTIONS_VERSION = 1;
GIT_DESCRIBE_FORMAT_OPTIONS_VERSION = 1;
{ diff.h }
GIT_DIFF_OPTIONS_VERSION = 1;
GIT_DIFF_HUNK_HEADER_SIZE = 128;
GIT_DIFF_FIND_OPTIONS_VERSION = 1;
GIT_DIFF_FORMAT_EMAIL_OPTIONS_VERSION = 1;
GIT_DIFF_PATCHID_OPTIONS_VERSION = 1;
{ errors.h }
{ filter.h }
{ global.h }
{ graph.h }
{ ignore.h }
{ index.h }
GIT_IDXENTRY_NAMEMASK = $0fff;
GIT_IDXENTRY_STAGEMASK = $3000;
GIT_IDXENTRY_STAGESHIFT = 12;
{ indexer.h }
{ inttypes.h }
{ merge.h }
GIT_MERGE_FILE_INPUT_VERSION = 1;
GIT_MERGE_CONFLICT_MARKER_SIZE = 7;
GIT_MERGE_FILE_OPTIONS_VERSION = 1;
GIT_MERGE_OPTIONS_VERSION = 1;
{ message.h }
{ net.h }
GIT_DEFAULT_PORT = '9418';
{ notes.h }
{ object.h }
{ odb.h }
{ odb_backend.h }
{ oid.h }
GIT_OID_RAWSZ = 20;
GIT_OID_HEXSZ = GIT_OID_RAWSZ * 2;
GIT_OID_MINPREFIXLEN = 4;
{ oidarray.h }
{ pack.h }
{ patch.h }
{ pathspec.h }
{ proxy.h }
GIT_PROXY_OPTIONS_VERSION = 1;
{ rebase.h }
GIT_REBASE_OPTIONS_VERSION = 1;
GIT_REBASE_NO_OPERATION = maxint;
{ refdb.h }
{ reflog.h }
{ refs.h }
{ refspec.h }
{ remote.h }
GIT_REMOTE_CALLBACKS_VERSION = 1;
GIT_FETCH_OPTIONS_VERSION = 1;
GIT_PUSH_OPTIONS_VERSION = 1;
{ repository.h }
GIT_REPOSITORY_INIT_OPTIONS_VERSION = 1;
{ reset.h }
{ revert.h }
GIT_REVERT_OPTIONS_VERSION = 1;
{ revparse.h }
{ revwalk.h }
{ signature.h }
{ stash.h }
GIT_STASH_APPLY_OPTIONS_VERSION = 1;
{ status.h }
GIT_STATUS_OPTIONS_VERSION = 1;
{ stdint.h }
{ strarray.h }
{ submodule.h }
GIT_SUBMODULE_STATUS__IN_FLAGS = $000F;
GIT_SUBMODULE_STATUS__INDEX_FLAGS = $0070;
GIT_SUBMODULE_STATUS__WD_FLAGS = $3F80;
GIT_SUBMODULE_UPDATE_OPTIONS_VERSION = 1;
{ tag.h }
{ trace.h }
{ transaction.h }
{ transport.h }
GIT_TRANSPORT_VERSION = 1;
{ tree.h }
{ types.h }
{ version.h }
{ worktree.h }
GIT_WORKTREE_ADD_OPTIONS_VERSION = 1;
GIT_WORKTREE_PRUNE_OPTIONS_VERSION = 1;
type
git_oid = record
id: array[0..GIT_OID_RAWSZ-1] of Byte;
end;
TGitHashSigOption = (
GIT_HASHSIG_NORMAL = 0,
GIT_HASHSIG_IGNORE_WHITESPACE = 1 Shl 0,
GIT_HASHSIG_SMART_WHITESPACE = 1 Shl 1,
GIT_HASHSIG_ALLOW_SMALL_FILES = 1 Shl 2
);
git_hashsig_option_t = Integer;
TGitTransportFlags = (
GIT_TRANSPORTFLAGS_NONE = 0
);
git_transport_flags_t = Integer;
TGitSmartService = (
GIT_SERVICE_UPLOADPACK_LS = 1,
GIT_SERVICE_UPLOADPACK = 2,
GIT_SERVICE_RECEIVEPACK_LS = 3,
GIT_SERVICE_RECEIVEPACK = 4
);
git_smart_service_t = Integer;
TGitError = (
GITERR_NONE = 0,
GITERR_NOMEMORY,
GITERR_OS,
GITERR_INVALID,
GITERR_REFERENCE,
GITERR_ZLIB,
GITERR_REPOSITORY,
GITERR_CONFIG,
GITERR_REGEX,
GITERR_ODB,
GITERR_INDEX,
GITERR_OBJECT,
GITERR_NET,
GITERR_TAG,
GITERR_TREE,
GITERR_INDEXER,
GITERR_SSL,
GITERR_SUBMODULE,
GITERR_THREAD,
GITERR_STASH,
GITERR_CHECKOUT,
GITERR_FETCHHEAD,
GITERR_MERGE,
GITERR_SSH,
GITERR_FILTER,
GITERR_REVERT,
GITERR_CALLBACK,
GITERR_CHERRYPICK,
GITERR_DESCRIBE,
GITERR_REBASE,
GITERR_FILESYSTEM,
GITERR_PATCH,
GITERR_WORKTREE,
GITERR_SHA1
);
git_error_t = Integer;
TGitErrorCode = (
GIT_OK = 0,
GIT_ERROR = -1,
GIT_ENOTFOUND = -3,
GIT_EEXISTS = -4,
GIT_EAMBIGUOUS = -5,
GIT_EBUFS = -6,
GIT_EUSER = -7,
GIT_EBAREREPO = -8,
GIT_EUNBORNBRANCH = -9,
GIT_EUNMERGED = -10,
GIT_ENONFASTFORWARD = -11,
GIT_EINVALIDSPEC = -12,
GIT_ECONFLICT = -13,
GIT_ELOCKED = -14,
GIT_EMODIFIED = -15,
GIT_EAUTH = -16,
GIT_ECERTIFICATE = -17,
GIT_EAPPLIED = -18,
GIT_EPEEL = -19,
GIT_EEOF = -20,
GIT_EINVALID = -21,
GIT_EUNCOMMITTED = -22,
GIT_EDIRECTORY = -23,
GIT_EMERGECONFLICT = -24,
GIT_PASSTHROUGH = -30,
GIT_ITEROVER = -31,
GIT_RETRY = -32,
GIT_EMISMATCH = -33
);
git_error_code = Integer;
TGitObjectType = (
GIT_OBJ_BAD = -1,
GIT_OBJ__EXT1 = 0,
GIT_OBJ_COMMIT = 1,
GIT_OBJ_TREE = 2,
GIT_OBJ_BLOB = 3,
GIT_OBJ_TAG = 4,
GIT_OBJ__EXT2 = 5,
GIT_OBJ_OFS_DELTA = 6,
GIT_OBJ_REF_DELTA = 7
);
TGitSort = (
GIT_SORT_NONE = 0,
GIT_SORT_TOPOLOGICAL = 1 Shl 0,
GIT_SORT_TIME = 1 Shl 1,
GIT_SORT_REVERSE = 1 Shl 2
);
git_sort_t = Integer;
{ pointers }
Pgit_oid = Pointer;
Pgit_repository = Pointer;
Pgit_tag = Pointer;
implementation
var
libgit2: THandle;
procedure BindFuncs(aBind: Boolean);
begin
end;
function InitLibgit2: Boolean;
begin
if libgit2 = 0 then
begin
libgit2 := DynLibs.LoadLibrary('libgit2.' + SharedSuffix);
if libgit2 <> DynLibs.NilHandle then
BindFuncs(true);
end;
Result := libgit2 > 0;
end;
procedure FreeLibgit2;
begin
if libgit2 <> 0 then
begin
DynLibs.FreeLibrary(libgit2);
libgit2 := 0;
BindFuncs(false);
end;
end;
{ bindings }
initialization
libgit2 := 0;
finalization
FreeLibgit2;
end.