From 6cbf9543373a7d6ae84eec7bc9357d10aa6b6c1e Mon Sep 17 00:00:00 2001 From: Aleksey Kulikov Date: Mon, 25 Oct 2021 13:43:31 +0300 Subject: [PATCH] feat: add library setup for linux --- .gitignore | 5 +- bin/setup.dart | 100 ++ lib/src/features.dart | 1 + lib/src/util.dart | 86 +- libgit2/headers/git2.h | 73 -- libgit2/headers/git2/annotated_commit.h | 125 -- libgit2/headers/git2/apply.h | 151 --- libgit2/headers/git2/attr.h | 361 ------ libgit2/headers/git2/blame.h | 282 ---- libgit2/headers/git2/blob.h | 298 ----- libgit2/headers/git2/branch.h | 334 ----- libgit2/headers/git2/buffer.h | 134 -- libgit2/headers/git2/cert.h | 172 --- libgit2/headers/git2/checkout.h | 414 ------ libgit2/headers/git2/cherrypick.h | 92 -- libgit2/headers/git2/clone.h | 209 --- libgit2/headers/git2/commit.h | 544 -------- libgit2/headers/git2/common.h | 461 ------- libgit2/headers/git2/config.h | 766 ----------- libgit2/headers/git2/cred_helpers.h | 15 - libgit2/headers/git2/credential.h | 314 ----- libgit2/headers/git2/credential_helpers.h | 52 - libgit2/headers/git2/deprecated.h | 931 -------------- libgit2/headers/git2/describe.h | 189 --- libgit2/headers/git2/diff.h | 1431 --------------------- libgit2/headers/git2/email.h | 127 -- libgit2/headers/git2/errors.h | 164 --- libgit2/headers/git2/filter.h | 271 ---- libgit2/headers/git2/global.h | 44 - libgit2/headers/git2/graph.h | 76 -- libgit2/headers/git2/ignore.h | 78 -- libgit2/headers/git2/index.h | 833 ------------ libgit2/headers/git2/indexer.h | 147 --- libgit2/headers/git2/mailmap.h | 115 -- libgit2/headers/git2/merge.h | 606 --------- libgit2/headers/git2/message.h | 84 -- libgit2/headers/git2/net.h | 54 - libgit2/headers/git2/notes.h | 306 ----- libgit2/headers/git2/object.h | 230 ---- libgit2/headers/git2/odb.h | 573 --------- libgit2/headers/git2/odb_backend.h | 135 -- libgit2/headers/git2/oid.h | 273 ---- libgit2/headers/git2/oidarray.h | 37 - libgit2/headers/git2/pack.h | 251 ---- libgit2/headers/git2/patch.h | 282 ---- libgit2/headers/git2/pathspec.h | 280 ---- libgit2/headers/git2/proxy.h | 98 -- libgit2/headers/git2/rebase.h | 391 ------ libgit2/headers/git2/refdb.h | 68 - libgit2/headers/git2/reflog.h | 170 --- libgit2/headers/git2/refs.h | 771 ----------- libgit2/headers/git2/refspec.h | 121 -- libgit2/headers/git2/remote.h | 1008 --------------- libgit2/headers/git2/repository.h | 949 -------------- libgit2/headers/git2/reset.h | 111 -- libgit2/headers/git2/revert.h | 91 -- libgit2/headers/git2/revparse.h | 113 -- libgit2/headers/git2/revwalk.h | 299 ----- libgit2/headers/git2/signature.h | 103 -- libgit2/headers/git2/stash.h | 260 ---- libgit2/headers/git2/status.h | 443 ------- libgit2/headers/git2/stdint.h | 247 ---- libgit2/headers/git2/strarray.h | 56 - libgit2/headers/git2/submodule.h | 663 ---------- libgit2/headers/git2/sys/alloc.h | 101 -- libgit2/headers/git2/sys/commit.h | 80 -- libgit2/headers/git2/sys/commit_graph.h | 174 --- libgit2/headers/git2/sys/config.h | 130 -- libgit2/headers/git2/sys/cred.h | 15 - libgit2/headers/git2/sys/credential.h | 90 -- libgit2/headers/git2/sys/diff.h | 94 -- libgit2/headers/git2/sys/email.h | 45 - libgit2/headers/git2/sys/filter.h | 353 ----- libgit2/headers/git2/sys/hashsig.h | 106 -- libgit2/headers/git2/sys/index.h | 182 --- libgit2/headers/git2/sys/mempack.h | 87 -- libgit2/headers/git2/sys/merge.h | 182 --- libgit2/headers/git2/sys/midx.h | 74 -- libgit2/headers/git2/sys/odb_backend.h | 175 --- libgit2/headers/git2/sys/openssl.h | 38 - libgit2/headers/git2/sys/path.h | 64 - libgit2/headers/git2/sys/refdb_backend.h | 361 ------ libgit2/headers/git2/sys/reflog.h | 21 - libgit2/headers/git2/sys/refs.h | 49 - libgit2/headers/git2/sys/repository.h | 180 --- libgit2/headers/git2/sys/stream.h | 138 -- libgit2/headers/git2/sys/transport.h | 440 ------- libgit2/headers/git2/tag.h | 382 ------ libgit2/headers/git2/trace.h | 67 - libgit2/headers/git2/transaction.h | 121 -- libgit2/headers/git2/transport.h | 42 - libgit2/headers/git2/tree.h | 474 ------- libgit2/headers/git2/types.h | 371 ------ libgit2/headers/git2/version.h | 18 - libgit2/headers/git2/worktree.h | 256 ---- libgit2/libgit2.so.1.3.0 | Bin 3878080 -> 0 bytes pubspec.yaml | 4 + 97 files changed, 190 insertions(+), 23192 deletions(-) create mode 100644 bin/setup.dart delete mode 100644 libgit2/headers/git2.h delete mode 100644 libgit2/headers/git2/annotated_commit.h delete mode 100644 libgit2/headers/git2/apply.h delete mode 100644 libgit2/headers/git2/attr.h delete mode 100644 libgit2/headers/git2/blame.h delete mode 100644 libgit2/headers/git2/blob.h delete mode 100644 libgit2/headers/git2/branch.h delete mode 100644 libgit2/headers/git2/buffer.h delete mode 100644 libgit2/headers/git2/cert.h delete mode 100644 libgit2/headers/git2/checkout.h delete mode 100644 libgit2/headers/git2/cherrypick.h delete mode 100644 libgit2/headers/git2/clone.h delete mode 100644 libgit2/headers/git2/commit.h delete mode 100644 libgit2/headers/git2/common.h delete mode 100644 libgit2/headers/git2/config.h delete mode 100644 libgit2/headers/git2/cred_helpers.h delete mode 100644 libgit2/headers/git2/credential.h delete mode 100644 libgit2/headers/git2/credential_helpers.h delete mode 100644 libgit2/headers/git2/deprecated.h delete mode 100644 libgit2/headers/git2/describe.h delete mode 100644 libgit2/headers/git2/diff.h delete mode 100644 libgit2/headers/git2/email.h delete mode 100644 libgit2/headers/git2/errors.h delete mode 100644 libgit2/headers/git2/filter.h delete mode 100644 libgit2/headers/git2/global.h delete mode 100644 libgit2/headers/git2/graph.h delete mode 100644 libgit2/headers/git2/ignore.h delete mode 100644 libgit2/headers/git2/index.h delete mode 100644 libgit2/headers/git2/indexer.h delete mode 100644 libgit2/headers/git2/mailmap.h delete mode 100644 libgit2/headers/git2/merge.h delete mode 100644 libgit2/headers/git2/message.h delete mode 100644 libgit2/headers/git2/net.h delete mode 100644 libgit2/headers/git2/notes.h delete mode 100644 libgit2/headers/git2/object.h delete mode 100644 libgit2/headers/git2/odb.h delete mode 100644 libgit2/headers/git2/odb_backend.h delete mode 100644 libgit2/headers/git2/oid.h delete mode 100644 libgit2/headers/git2/oidarray.h delete mode 100644 libgit2/headers/git2/pack.h delete mode 100644 libgit2/headers/git2/patch.h delete mode 100644 libgit2/headers/git2/pathspec.h delete mode 100644 libgit2/headers/git2/proxy.h delete mode 100644 libgit2/headers/git2/rebase.h delete mode 100644 libgit2/headers/git2/refdb.h delete mode 100644 libgit2/headers/git2/reflog.h delete mode 100644 libgit2/headers/git2/refs.h delete mode 100644 libgit2/headers/git2/refspec.h delete mode 100644 libgit2/headers/git2/remote.h delete mode 100644 libgit2/headers/git2/repository.h delete mode 100644 libgit2/headers/git2/reset.h delete mode 100644 libgit2/headers/git2/revert.h delete mode 100644 libgit2/headers/git2/revparse.h delete mode 100644 libgit2/headers/git2/revwalk.h delete mode 100644 libgit2/headers/git2/signature.h delete mode 100644 libgit2/headers/git2/stash.h delete mode 100644 libgit2/headers/git2/status.h delete mode 100644 libgit2/headers/git2/stdint.h delete mode 100644 libgit2/headers/git2/strarray.h delete mode 100644 libgit2/headers/git2/submodule.h delete mode 100644 libgit2/headers/git2/sys/alloc.h delete mode 100644 libgit2/headers/git2/sys/commit.h delete mode 100644 libgit2/headers/git2/sys/commit_graph.h delete mode 100644 libgit2/headers/git2/sys/config.h delete mode 100644 libgit2/headers/git2/sys/cred.h delete mode 100644 libgit2/headers/git2/sys/credential.h delete mode 100644 libgit2/headers/git2/sys/diff.h delete mode 100644 libgit2/headers/git2/sys/email.h delete mode 100644 libgit2/headers/git2/sys/filter.h delete mode 100644 libgit2/headers/git2/sys/hashsig.h delete mode 100644 libgit2/headers/git2/sys/index.h delete mode 100644 libgit2/headers/git2/sys/mempack.h delete mode 100644 libgit2/headers/git2/sys/merge.h delete mode 100644 libgit2/headers/git2/sys/midx.h delete mode 100644 libgit2/headers/git2/sys/odb_backend.h delete mode 100644 libgit2/headers/git2/sys/openssl.h delete mode 100644 libgit2/headers/git2/sys/path.h delete mode 100644 libgit2/headers/git2/sys/refdb_backend.h delete mode 100644 libgit2/headers/git2/sys/reflog.h delete mode 100644 libgit2/headers/git2/sys/refs.h delete mode 100644 libgit2/headers/git2/sys/repository.h delete mode 100644 libgit2/headers/git2/sys/stream.h delete mode 100644 libgit2/headers/git2/sys/transport.h delete mode 100644 libgit2/headers/git2/tag.h delete mode 100644 libgit2/headers/git2/trace.h delete mode 100644 libgit2/headers/git2/transaction.h delete mode 100644 libgit2/headers/git2/transport.h delete mode 100644 libgit2/headers/git2/tree.h delete mode 100644 libgit2/headers/git2/types.h delete mode 100644 libgit2/headers/git2/version.h delete mode 100644 libgit2/headers/git2/worktree.h delete mode 100755 libgit2/libgit2.so.1.3.0 diff --git a/.gitignore b/.gitignore index 0c9f1f9..ae51c77 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,7 @@ pubspec.lock # Coverage -coverage/ \ No newline at end of file +coverage/ + +# libgit2 headers for ffigen +libgit2/ \ No newline at end of file diff --git a/bin/setup.dart b/bin/setup.dart new file mode 100644 index 0000000..b1b316b --- /dev/null +++ b/bin/setup.dart @@ -0,0 +1,100 @@ +import 'dart:io'; + +import 'package:archive/archive.dart'; +import 'package:args/command_runner.dart'; +import 'package:cli_util/cli_logging.dart' show Ansi, Logger; +import 'package:libgit2dart/src/util.dart'; + +bool libgit2IsPresent(String platform) { + final result = File.fromUri( + Directory.current.uri + .resolve('.dart_tool/libgit2/$platform/${getLibName(platform)}'), + ).existsSync(); + return result; +} + +/// Extracts a tar.gz file. +void extract(String fileName, String dir) { + final tarGzFile = File(fileName).readAsBytesSync(); + final archive = GZipDecoder().decodeBytes(tarGzFile, verify: true); + final tarData = TarDecoder().decodeBytes(archive, verify: true); + for (final file in tarData) { + File('$dir${file.name}') + ..createSync(recursive: true) + ..writeAsBytesSync(file.content as List); + } +} + +/// Downloads libgit2 from GitHub releases, extracts and places it in correct +/// directory. +Future download(String platform) async { + final logger = Logger.standard(); + final ansi = Ansi(Ansi.terminalSupportsAnsi); + + if (libgit2IsPresent(platform)) { + if (libgit2Version == getVersionNumber()) { + logger.stdout('${ansi.green}libgit2 for $platform is already available.'); + } else { + logger.stdout( + '${ansi.red}libgit2 for $platform is outdated. Run: \n' + 'flutter pub run libgit2dart:setup clean\n' + 'flutter pub run libgit2dart:setup', + ); + } + } else { + final fileName = '$platform.tar.gz'; + final downloadUrl = '$libUrl$fileName'; + logger.stdout('Downloading libgit2 for $platform'); + logger.stdout(downloadUrl); + + try { + final httpClient = HttpClient(); + final request = await httpClient.getUrl(Uri.parse(downloadUrl)); + final response = await request.close(); + final fileSink = File(fileName).openWrite(); + await response.pipe(fileSink); + await fileSink.flush(); + await fileSink.close(); + httpClient.close(); + } catch (error) { + Exception("Can't download. Check your internet connection."); + } + + logger.stdout('${ansi.yellow}Extracting libgit2 for $platform${ansi.none}'); + Directory('$libDir$platform/').createSync(recursive: true); + extract(fileName, '$libDir$platform/'); + logger.stdout('${ansi.green}Done! Cleaning up...'); + + File(fileName).deleteSync(); + + logger.stdout( + '${ansi.green}Done! libgit2 for $platform is now available!' + '${ansi.none}', + ); + } +} + +class CleanCommand extends Command { + @override + String get description => 'Cleans downloaded libraries.'; + + @override + String get name => 'clean'; + + @override + void run() { + final logger = Logger.standard(); + logger.stdout('cleaning...'); + Directory(libDir).deleteSync(recursive: true); + } +} + +void main(List args) { + final runner = CommandRunner( + 'setup', + 'Downloads the libgit2 library.', + ); + runner.addCommand(CleanCommand()); + + (args.isEmpty) ? download(Platform.operatingSystem) : runner.run(args); +} diff --git a/lib/src/features.dart b/lib/src/features.dart index 2043992..b6db02e 100644 --- a/lib/src/features.dart +++ b/lib/src/features.dart @@ -4,6 +4,7 @@ import 'package:libgit2dart/src/util.dart'; class Features { /// Returns list of compile time options for libgit2. static Set get list { + libgit2.git_libgit2_init(); final featuresInt = libgit2.git_libgit2_features(); return GitFeature.values .where((e) => featuresInt & e.value == e.value) diff --git a/lib/src/util.dart b/lib/src/util.dart index b1fafbb..3e9b91a 100644 --- a/lib/src/util.dart +++ b/lib/src/util.dart @@ -3,13 +3,73 @@ import 'dart:ffi'; import 'dart:io'; +import 'package:cli_util/cli_logging.dart' show Ansi, Logger; +import 'package:ffi/ffi.dart'; import 'package:libgit2dart/src/bindings/libgit2_bindings.dart'; -DynamicLibrary loadLibrary() { - if (Platform.isLinux || Platform.isAndroid || Platform.isFuchsia) { +const tag = 'libs-v1.3.0'; +const libUrl = + 'https://github.com/SkinnyMind/libgit2dart/releases/download/$tag/'; +const libgit2Version = '1.3.0'; +const libDir = '.dart_tool/libgit2/'; + +String getLibName(String platform) { + var ext = 'so'; + + if (Platform.isWindows) { + ext = 'dll'; + } else if (Platform.isMacOS) { + ext = 'dylib'; + } else if (!(Platform.isLinux || Platform.isAndroid)) { + throw Exception('Unsupported platform.'); + } + + return 'libgit2-$libgit2Version.$ext'; +} + +/// Checks if [File]/[Link] exists for an [uri]. +bool _doesFileExist(Uri uri) { + return File.fromUri(uri).existsSync() || Link.fromUri(uri).existsSync(); +} + +String? _resolveLibUri(String name) { + var libUri = Directory.current.uri.resolve(name); + final dartTool = '.dart_tool/libgit2/${Platform.operatingSystem}'; + + // If lib is in Present Working Directory. + if (_doesFileExist(libUri)) { + return libUri.toFilePath(windows: Platform.isWindows); + } + + // If lib is in Present Working Directory's .dart_tool folder. + libUri = Directory.current.uri.resolve('$dartTool/$name'); + if (_doesFileExist(libUri)) { + return libUri.toFilePath(windows: Platform.isWindows); + } + + return null; +} + +DynamicLibrary loadLibrary(String name) { + try { return DynamicLibrary.open( - '${Directory.current.path}/libgit2/libgit2.so.1.3.0', + _resolveLibUri(name) ?? name, ); + } catch (e) { + final logger = Logger.standard(); + final ansi = Ansi(Ansi.terminalSupportsAnsi); + + logger.stderr( + '${ansi.red}Failed to open the library. Make sure that required ' + 'library is in place.${ansi.none}', + ); + logger.stdout( + 'To download the library, please run the following command from the ' + 'root of your project:', + ); + logger.stdout('${ansi.yellow}dart run libgit2dart:setup${ansi.none}'); + logger.stdout(ansi.none); + rethrow; } // if (Platform.isMacOS) { // return DynamicLibrary.open( @@ -19,10 +79,26 @@ DynamicLibrary loadLibrary() { // return DynamicLibrary.open( // '${Directory.current.path}/libgit2/libgit2-1.2.0.dll'); // } - throw Exception('Platform not implemented'); } -final libgit2 = Libgit2(loadLibrary()); +final libgit2 = Libgit2(loadLibrary(getLibName(Platform.operatingSystem))); + +String getVersionNumber() { + libgit2.git_libgit2_init(); + + final major = calloc(); + final minor = calloc(); + final rev = calloc(); + libgit2.git_libgit2_version(major, minor, rev); + + final version = '${major.value}.${minor.value}.${rev.value}'; + + calloc.free(major); + calloc.free(minor); + calloc.free(rev); + + return version; +} bool isValidShaHex(String str) { final hexRegExp = RegExp(r'^[0-9a-fA-F]+$'); diff --git a/libgit2/headers/git2.h b/libgit2/headers/git2.h deleted file mode 100644 index 2961cc3..0000000 --- a/libgit2/headers/git2.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ - -#ifndef INCLUDE_git_git_h__ -#define INCLUDE_git_git_h__ - -#include "git2/annotated_commit.h" -#include "git2/apply.h" -#include "git2/attr.h" -#include "git2/blob.h" -#include "git2/blame.h" -#include "git2/branch.h" -#include "git2/buffer.h" -#include "git2/cert.h" -#include "git2/checkout.h" -#include "git2/cherrypick.h" -#include "git2/clone.h" -#include "git2/commit.h" -#include "git2/common.h" -#include "git2/config.h" -#include "git2/credential.h" -#include "git2/deprecated.h" -#include "git2/describe.h" -#include "git2/diff.h" -#include "git2/email.h" -#include "git2/errors.h" -#include "git2/filter.h" -#include "git2/global.h" -#include "git2/graph.h" -#include "git2/ignore.h" -#include "git2/index.h" -#include "git2/indexer.h" -#include "git2/mailmap.h" -#include "git2/merge.h" -#include "git2/message.h" -#include "git2/net.h" -#include "git2/notes.h" -#include "git2/object.h" -#include "git2/odb.h" -#include "git2/odb_backend.h" -#include "git2/oid.h" -#include "git2/pack.h" -#include "git2/patch.h" -#include "git2/pathspec.h" -#include "git2/proxy.h" -#include "git2/rebase.h" -#include "git2/refdb.h" -#include "git2/reflog.h" -#include "git2/refs.h" -#include "git2/refspec.h" -#include "git2/remote.h" -#include "git2/repository.h" -#include "git2/reset.h" -#include "git2/revert.h" -#include "git2/revparse.h" -#include "git2/revwalk.h" -#include "git2/signature.h" -#include "git2/stash.h" -#include "git2/status.h" -#include "git2/submodule.h" -#include "git2/tag.h" -#include "git2/transport.h" -#include "git2/transaction.h" -#include "git2/tree.h" -#include "git2/types.h" -#include "git2/version.h" -#include "git2/worktree.h" - -#endif diff --git a/libgit2/headers/git2/annotated_commit.h b/libgit2/headers/git2/annotated_commit.h deleted file mode 100644 index 3b7103f..0000000 --- a/libgit2/headers/git2/annotated_commit.h +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_annotated_commit_h__ -#define INCLUDE_git_annotated_commit_h__ - -#include "common.h" -#include "repository.h" -#include "types.h" - -/** - * @file git2/annotated_commit.h - * @brief Git annotated commit routines - * @defgroup git_annotated_commit Git annotated commit routines - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Creates a `git_annotated_commit` from the given reference. - * The resulting git_annotated_commit must be freed with - * `git_annotated_commit_free`. - * - * @param out pointer to store the git_annotated_commit result in - * @param repo repository that contains the given reference - * @param ref reference to use to lookup the git_annotated_commit - * @return 0 on success or error code - */ -GIT_EXTERN(int) git_annotated_commit_from_ref( - git_annotated_commit **out, - git_repository *repo, - const git_reference *ref); - -/** - * Creates a `git_annotated_commit` from the given fetch head data. - * The resulting git_annotated_commit must be freed with - * `git_annotated_commit_free`. - * - * @param out pointer to store the git_annotated_commit result in - * @param repo repository that contains the given commit - * @param branch_name name of the (remote) branch - * @param remote_url url of the remote - * @param id the commit object id of the remote branch - * @return 0 on success or error code - */ -GIT_EXTERN(int) git_annotated_commit_from_fetchhead( - git_annotated_commit **out, - git_repository *repo, - const char *branch_name, - const char *remote_url, - const git_oid *id); - -/** - * Creates a `git_annotated_commit` from the given commit id. - * The resulting git_annotated_commit must be freed with - * `git_annotated_commit_free`. - * - * An annotated commit contains information about how it was - * looked up, which may be useful for functions like merge or - * rebase to provide context to the operation. For example, - * conflict files will include the name of the source or target - * branches being merged. It is therefore preferable to use the - * most specific function (eg `git_annotated_commit_from_ref`) - * instead of this one when that data is known. - * - * @param out pointer to store the git_annotated_commit result in - * @param repo repository that contains the given commit - * @param id the commit object id to lookup - * @return 0 on success or error code - */ -GIT_EXTERN(int) git_annotated_commit_lookup( - git_annotated_commit **out, - git_repository *repo, - const git_oid *id); - -/** - * Creates a `git_annotated_commit` from a revision string. - * - * See `man gitrevisions`, or - * http://git-scm.com/docs/git-rev-parse.html#_specifying_revisions for - * information on the syntax accepted. - * - * @param out pointer to store the git_annotated_commit result in - * @param repo repository that contains the given commit - * @param revspec the extended sha syntax string to use to lookup the commit - * @return 0 on success or error code - */ -GIT_EXTERN(int) git_annotated_commit_from_revspec( - git_annotated_commit **out, - git_repository *repo, - const char *revspec); - -/** - * Gets the commit ID that the given `git_annotated_commit` refers to. - * - * @param commit the given annotated commit - * @return commit id - */ -GIT_EXTERN(const git_oid *) git_annotated_commit_id( - const git_annotated_commit *commit); - -/** - * Get the refname that the given `git_annotated_commit` refers to. - * - * @param commit the given annotated commit - * @return ref name. - */ -GIT_EXTERN(const char *) git_annotated_commit_ref( - const git_annotated_commit *commit); - -/** - * Frees a `git_annotated_commit`. - * - * @param commit annotated commit to free - */ -GIT_EXTERN(void) git_annotated_commit_free( - git_annotated_commit *commit); - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/apply.h b/libgit2/headers/git2/apply.h deleted file mode 100644 index bc637df..0000000 --- a/libgit2/headers/git2/apply.h +++ /dev/null @@ -1,151 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_apply_h__ -#define INCLUDE_git_apply_h__ - -#include "common.h" -#include "types.h" -#include "oid.h" -#include "diff.h" - -/** - * @file git2/apply.h - * @brief Git patch application routines - * @defgroup git_apply Git patch application routines - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * When applying a patch, callback that will be made per delta (file). - * - * When the callback: - * - returns < 0, the apply process will be aborted. - * - returns > 0, the delta will not be applied, but the apply process - * continues - * - returns 0, the delta is applied, and the apply process continues. - * - * @param delta The delta to be applied - * @param payload User-specified payload - */ -typedef int GIT_CALLBACK(git_apply_delta_cb)( - const git_diff_delta *delta, - void *payload); - -/** - * When applying a patch, callback that will be made per hunk. - * - * When the callback: - * - returns < 0, the apply process will be aborted. - * - returns > 0, the hunk will not be applied, but the apply process - * continues - * - returns 0, the hunk is applied, and the apply process continues. - * - * @param hunk The hunk to be applied - * @param payload User-specified payload - */ -typedef int GIT_CALLBACK(git_apply_hunk_cb)( - const git_diff_hunk *hunk, - void *payload); - -/** Flags controlling the behavior of git_apply */ -typedef enum { - /** - * Don't actually make changes, just test that the patch applies. - * This is the equivalent of `git apply --check`. - */ - GIT_APPLY_CHECK = (1 << 0), -} git_apply_flags_t; - -/** - * Apply options structure - * - * Initialize with `GIT_APPLY_OPTIONS_INIT`. Alternatively, you can - * use `git_apply_options_init`. - * - * @see git_apply_to_tree, git_apply - */ -typedef struct { - unsigned int version; /**< The version */ - - /** When applying a patch, callback that will be made per delta (file). */ - git_apply_delta_cb delta_cb; - - /** When applying a patch, callback that will be made per hunk. */ - git_apply_hunk_cb hunk_cb; - - /** Payload passed to both delta_cb & hunk_cb. */ - void *payload; - - /** Bitmask of git_apply_flags_t */ - unsigned int flags; -} git_apply_options; - -#define GIT_APPLY_OPTIONS_VERSION 1 -#define GIT_APPLY_OPTIONS_INIT {GIT_APPLY_OPTIONS_VERSION} - -GIT_EXTERN(int) git_apply_options_init(git_apply_options *opts, unsigned int version); - -/** - * Apply a `git_diff` to a `git_tree`, and return the resulting image - * as an index. - * - * @param out the postimage of the application - * @param repo the repository to apply - * @param preimage the tree to apply the diff to - * @param diff the diff to apply - * @param options the options for the apply (or null for defaults) - * @return 0 or an error code - */ -GIT_EXTERN(int) git_apply_to_tree( - git_index **out, - git_repository *repo, - git_tree *preimage, - git_diff *diff, - const git_apply_options *options); - -/** Possible application locations for git_apply */ -typedef enum { - /** - * Apply the patch to the workdir, leaving the index untouched. - * This is the equivalent of `git apply` with no location argument. - */ - GIT_APPLY_LOCATION_WORKDIR = 0, - - /** - * Apply the patch to the index, leaving the working directory - * untouched. This is the equivalent of `git apply --cached`. - */ - GIT_APPLY_LOCATION_INDEX = 1, - - /** - * Apply the patch to both the working directory and the index. - * This is the equivalent of `git apply --index`. - */ - GIT_APPLY_LOCATION_BOTH = 2, -} git_apply_location_t; - -/** - * Apply a `git_diff` to the given repository, making changes directly - * in the working directory, the index, or both. - * - * @param repo the repository to apply to - * @param diff the diff to apply - * @param location the location to apply (workdir, index or both) - * @param options the options for the apply (or null for defaults) - * @return 0 or an error code - */ -GIT_EXTERN(int) git_apply( - git_repository *repo, - git_diff *diff, - git_apply_location_t location, - const git_apply_options *options); - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/attr.h b/libgit2/headers/git2/attr.h deleted file mode 100644 index 3891a0c..0000000 --- a/libgit2/headers/git2/attr.h +++ /dev/null @@ -1,361 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_attr_h__ -#define INCLUDE_git_attr_h__ - -#include "common.h" -#include "types.h" - -/** - * @file git2/attr.h - * @brief Git attribute management routines - * @defgroup git_attr Git attribute management routines - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * GIT_ATTR_TRUE checks if an attribute is set on. In core git - * parlance, this the value for "Set" attributes. - * - * For example, if the attribute file contains: - * - * *.c foo - * - * Then for file `xyz.c` looking up attribute "foo" gives a value for - * which `GIT_ATTR_TRUE(value)` is true. - */ -#define GIT_ATTR_IS_TRUE(attr) (git_attr_value(attr) == GIT_ATTR_VALUE_TRUE) - -/** - * GIT_ATTR_FALSE checks if an attribute is set off. In core git - * parlance, this is the value for attributes that are "Unset" (not to - * be confused with values that a "Unspecified"). - * - * For example, if the attribute file contains: - * - * *.h -foo - * - * Then for file `zyx.h` looking up attribute "foo" gives a value for - * which `GIT_ATTR_FALSE(value)` is true. - */ -#define GIT_ATTR_IS_FALSE(attr) (git_attr_value(attr) == GIT_ATTR_VALUE_FALSE) - -/** - * GIT_ATTR_UNSPECIFIED checks if an attribute is unspecified. This - * may be due to the attribute not being mentioned at all or because - * the attribute was explicitly set unspecified via the `!` operator. - * - * For example, if the attribute file contains: - * - * *.c foo - * *.h -foo - * onefile.c !foo - * - * Then for `onefile.c` looking up attribute "foo" yields a value with - * `GIT_ATTR_UNSPECIFIED(value)` of true. Also, looking up "foo" on - * file `onefile.rb` or looking up "bar" on any file will all give - * `GIT_ATTR_UNSPECIFIED(value)` of true. - */ -#define GIT_ATTR_IS_UNSPECIFIED(attr) (git_attr_value(attr) == GIT_ATTR_VALUE_UNSPECIFIED) - -/** - * GIT_ATTR_HAS_VALUE checks if an attribute is set to a value (as - * opposed to TRUE, FALSE or UNSPECIFIED). This would be the case if - * for a file with something like: - * - * *.txt eol=lf - * - * Given this, looking up "eol" for `onefile.txt` will give back the - * string "lf" and `GIT_ATTR_SET_TO_VALUE(attr)` will return true. - */ -#define GIT_ATTR_HAS_VALUE(attr) (git_attr_value(attr) == GIT_ATTR_VALUE_STRING) - -/** - * Possible states for an attribute - */ -typedef enum { - GIT_ATTR_VALUE_UNSPECIFIED = 0, /**< The attribute has been left unspecified */ - GIT_ATTR_VALUE_TRUE, /**< The attribute has been set */ - GIT_ATTR_VALUE_FALSE, /**< The attribute has been unset */ - GIT_ATTR_VALUE_STRING, /**< This attribute has a value */ -} git_attr_value_t; - -/** - * Return the value type for a given attribute. - * - * This can be either `TRUE`, `FALSE`, `UNSPECIFIED` (if the attribute - * was not set at all), or `VALUE`, if the attribute was set to an - * actual string. - * - * If the attribute has a `VALUE` string, it can be accessed normally - * as a NULL-terminated C string. - * - * @param attr The attribute - * @return the value type for the attribute - */ -GIT_EXTERN(git_attr_value_t) git_attr_value(const char *attr); - -/** - * Check attribute flags: Reading values from index and working directory. - * - * When checking attributes, it is possible to check attribute files - * in both the working directory (if there is one) and the index (if - * there is one). You can explicitly choose where to check and in - * which order using the following flags. - * - * Core git usually checks the working directory then the index, - * except during a checkout when it checks the index first. It will - * use index only for creating archives or for a bare repo (if an - * index has been specified for the bare repo). - */ -#define GIT_ATTR_CHECK_FILE_THEN_INDEX 0 -#define GIT_ATTR_CHECK_INDEX_THEN_FILE 1 -#define GIT_ATTR_CHECK_INDEX_ONLY 2 - -/** - * Check attribute flags: controlling extended attribute behavior. - * - * Normally, attribute checks include looking in the /etc (or system - * equivalent) directory for a `gitattributes` file. Passing this - * flag will cause attribute checks to ignore that file. - * equivalent) directory for a `gitattributes` file. Passing the - * `GIT_ATTR_CHECK_NO_SYSTEM` flag will cause attribute checks to - * ignore that file. - * - * Passing the `GIT_ATTR_CHECK_INCLUDE_HEAD` flag will use attributes - * from a `.gitattributes` file in the repository at the HEAD revision. - * - * Passing the `GIT_ATTR_CHECK_INCLUDE_COMMIT` flag will use attributes - * from a `.gitattributes` file in a specific commit. - */ -#define GIT_ATTR_CHECK_NO_SYSTEM (1 << 2) -#define GIT_ATTR_CHECK_INCLUDE_HEAD (1 << 3) -#define GIT_ATTR_CHECK_INCLUDE_COMMIT (1 << 4) - -/** -* An options structure for querying attributes. -*/ -typedef struct { - unsigned int version; - - /** A combination of GIT_ATTR_CHECK flags */ - unsigned int flags; - -#ifdef GIT_DEPRECATE_HARD - void *reserved; -#else - git_oid *commit_id; -#endif - - /** - * The commit to load attributes from, when - * `GIT_ATTR_CHECK_INCLUDE_COMMIT` is specified. - */ - git_oid attr_commit_id; -} git_attr_options; - -#define GIT_ATTR_OPTIONS_VERSION 1 -#define GIT_ATTR_OPTIONS_INIT {GIT_ATTR_OPTIONS_VERSION} - -/** - * Look up the value of one git attribute for path. - * - * @param value_out Output of the value of the attribute. Use the GIT_ATTR_... - * macros to test for TRUE, FALSE, UNSPECIFIED, etc. or just - * use the string value for attributes set to a value. You - * should NOT modify or free this value. - * @param repo The repository containing the path. - * @param flags A combination of GIT_ATTR_CHECK... flags. - * @param path The path to check for attributes. Relative paths are - * interpreted relative to the repo root. The file does - * not have to exist, but if it does not, then it will be - * treated as a plain file (not a directory). - * @param name The name of the attribute to look up. - */ -GIT_EXTERN(int) git_attr_get( - const char **value_out, - git_repository *repo, - uint32_t flags, - const char *path, - const char *name); - -/** - * Look up the value of one git attribute for path with extended options. - * - * @param value_out Output of the value of the attribute. Use the GIT_ATTR_... - * macros to test for TRUE, FALSE, UNSPECIFIED, etc. or just - * use the string value for attributes set to a value. You - * should NOT modify or free this value. - * @param repo The repository containing the path. - * @param opts The `git_attr_options` to use when querying these attributes. - * @param path The path to check for attributes. Relative paths are - * interpreted relative to the repo root. The file does - * not have to exist, but if it does not, then it will be - * treated as a plain file (not a directory). - * @param name The name of the attribute to look up. - */ -GIT_EXTERN(int) git_attr_get_ext( - const char **value_out, - git_repository *repo, - git_attr_options *opts, - const char *path, - const char *name); - -/** - * Look up a list of git attributes for path. - * - * Use this if you have a known list of attributes that you want to - * look up in a single call. This is somewhat more efficient than - * calling `git_attr_get()` multiple times. - * - * For example, you might write: - * - * const char *attrs[] = { "crlf", "diff", "foo" }; - * const char **values[3]; - * git_attr_get_many(values, repo, 0, "my/fun/file.c", 3, attrs); - * - * Then you could loop through the 3 values to get the settings for - * the three attributes you asked about. - * - * @param values_out An array of num_attr entries that will have string - * pointers written into it for the values of the attributes. - * You should not modify or free the values that are written - * into this array (although of course, you should free the - * array itself if you allocated it). - * @param repo The repository containing the path. - * @param flags A combination of GIT_ATTR_CHECK... flags. - * @param path The path inside the repo to check attributes. This - * does not have to exist, but if it does not, then - * it will be treated as a plain file (i.e. not a directory). - * @param num_attr The number of attributes being looked up - * @param names An array of num_attr strings containing attribute names. - */ -GIT_EXTERN(int) git_attr_get_many( - const char **values_out, - git_repository *repo, - uint32_t flags, - const char *path, - size_t num_attr, - const char **names); - -/** - * Look up a list of git attributes for path with extended options. - * - * @param values_out An array of num_attr entries that will have string - * pointers written into it for the values of the attributes. - * You should not modify or free the values that are written - * into this array (although of course, you should free the - * array itself if you allocated it). - * @param repo The repository containing the path. - * @param opts The `git_attr_options` to use when querying these attributes. - * @param path The path inside the repo to check attributes. This - * does not have to exist, but if it does not, then - * it will be treated as a plain file (i.e. not a directory). - * @param num_attr The number of attributes being looked up - * @param names An array of num_attr strings containing attribute names. - */ -GIT_EXTERN(int) git_attr_get_many_ext( - const char **values_out, - git_repository *repo, - git_attr_options *opts, - const char *path, - size_t num_attr, - const char **names); - -/** - * The callback used with git_attr_foreach. - * - * This callback will be invoked only once per attribute name, even if there - * are multiple rules for a given file. The highest priority rule will be - * used. - * - * @see git_attr_foreach. - * - * @param name The attribute name. - * @param value The attribute value. May be NULL if the attribute is explicitly - * set to UNSPECIFIED using the '!' sign. - * @param payload A user-specified pointer. - * @return 0 to continue looping, non-zero to stop. This value will be returned - * from git_attr_foreach. - */ -typedef int GIT_CALLBACK(git_attr_foreach_cb)(const char *name, const char *value, void *payload); - -/** - * Loop over all the git attributes for a path. - * - * @param repo The repository containing the path. - * @param flags A combination of GIT_ATTR_CHECK... flags. - * @param path Path inside the repo to check attributes. This does not have - * to exist, but if it does not, then it will be treated as a - * plain file (i.e. not a directory). - * @param callback Function to invoke on each attribute name and value. - * See git_attr_foreach_cb. - * @param payload Passed on as extra parameter to callback function. - * @return 0 on success, non-zero callback return value, or error code - */ -GIT_EXTERN(int) git_attr_foreach( - git_repository *repo, - uint32_t flags, - const char *path, - git_attr_foreach_cb callback, - void *payload); - -/** - * Loop over all the git attributes for a path with extended options. - * - * @param repo The repository containing the path. - * @param opts The `git_attr_options` to use when querying these attributes. - * @param path Path inside the repo to check attributes. This does not have - * to exist, but if it does not, then it will be treated as a - * plain file (i.e. not a directory). - * @param callback Function to invoke on each attribute name and value. - * See git_attr_foreach_cb. - * @param payload Passed on as extra parameter to callback function. - * @return 0 on success, non-zero callback return value, or error code - */ -GIT_EXTERN(int) git_attr_foreach_ext( - git_repository *repo, - git_attr_options *opts, - const char *path, - git_attr_foreach_cb callback, - void *payload); - -/** - * Flush the gitattributes cache. - * - * Call this if you have reason to believe that the attributes files on - * disk no longer match the cached contents of memory. This will cause - * the attributes files to be reloaded the next time that an attribute - * access function is called. - * - * @param repo The repository containing the gitattributes cache - * @return 0 on success, or an error code - */ -GIT_EXTERN(int) git_attr_cache_flush( - git_repository *repo); - -/** - * Add a macro definition. - * - * Macros will automatically be loaded from the top level `.gitattributes` - * file of the repository (plus the build-in "binary" macro). This - * function allows you to add others. For example, to add the default - * macro, you would call: - * - * git_attr_add_macro(repo, "binary", "-diff -crlf"); - */ -GIT_EXTERN(int) git_attr_add_macro( - git_repository *repo, - const char *name, - const char *values); - -/** @} */ -GIT_END_DECL -#endif - diff --git a/libgit2/headers/git2/blame.h b/libgit2/headers/git2/blame.h deleted file mode 100644 index d193ce1..0000000 --- a/libgit2/headers/git2/blame.h +++ /dev/null @@ -1,282 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ - -#ifndef INCLUDE_git_blame_h__ -#define INCLUDE_git_blame_h__ - -#include "common.h" -#include "oid.h" - -/** - * @file git2/blame.h - * @brief Git blame routines - * @defgroup git_blame Git blame routines - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Flags for indicating option behavior for git_blame APIs. - */ -typedef enum { - /** Normal blame, the default */ - GIT_BLAME_NORMAL = 0, - - /** - * Track lines that have moved within a file (like `git blame -M`). - * - * This is not yet implemented and reserved for future use. - */ - GIT_BLAME_TRACK_COPIES_SAME_FILE = (1<<0), - - /** - * Track lines that have moved across files in the same commit - * (like `git blame -C`). - * - * This is not yet implemented and reserved for future use. - */ - GIT_BLAME_TRACK_COPIES_SAME_COMMIT_MOVES = (1<<1), - - /** - * Track lines that have been copied from another file that exists - * in the same commit (like `git blame -CC`). Implies SAME_FILE. - * - * This is not yet implemented and reserved for future use. - */ - GIT_BLAME_TRACK_COPIES_SAME_COMMIT_COPIES = (1<<2), - - /** - * Track lines that have been copied from another file that exists in - * *any* commit (like `git blame -CCC`). Implies SAME_COMMIT_COPIES. - * - * This is not yet implemented and reserved for future use. - */ - GIT_BLAME_TRACK_COPIES_ANY_COMMIT_COPIES = (1<<3), - - /** - * Restrict the search of commits to those reachable following only - * the first parents. - */ - GIT_BLAME_FIRST_PARENT = (1<<4), - - /** - * Use mailmap file to map author and committer names and email - * addresses to canonical real names and email addresses. The - * mailmap will be read from the working directory, or HEAD in a - * bare repository. - */ - GIT_BLAME_USE_MAILMAP = (1<<5), - - /** Ignore whitespace differences */ - GIT_BLAME_IGNORE_WHITESPACE = (1<<6), -} git_blame_flag_t; - -/** - * Blame options structure - * - * Initialize with `GIT_BLAME_OPTIONS_INIT`. Alternatively, you can - * use `git_blame_options_init`. - * - */ -typedef struct git_blame_options { - unsigned int version; - - /** A combination of `git_blame_flag_t` */ - uint32_t flags; - - /** - * The lower bound on the number of alphanumeric characters that - * must be detected as moving/copying within a file for it to - * associate those lines with the parent commit. The default value - * is 20. - * - * This value only takes effect if any of the `GIT_BLAME_TRACK_COPIES_*` - * flags are specified. - */ - uint16_t min_match_characters; - - /** The id of the newest commit to consider. The default is HEAD. */ - git_oid newest_commit; - - /** - * The id of the oldest commit to consider. - * The default is the first commit encountered with a NULL parent. - */ - git_oid oldest_commit; - - /** - * The first line in the file to blame. - * The default is 1 (line numbers start with 1). - */ - size_t min_line; - - /** - * The last line in the file to blame. - * The default is the last line of the file. - */ - size_t max_line; -} git_blame_options; - -#define GIT_BLAME_OPTIONS_VERSION 1 -#define GIT_BLAME_OPTIONS_INIT {GIT_BLAME_OPTIONS_VERSION} - -/** - * Initialize git_blame_options structure - * - * Initializes a `git_blame_options` with default values. Equivalent to creating - * an instance with GIT_BLAME_OPTIONS_INIT. - * - * @param opts The `git_blame_options` struct to initialize. - * @param version The struct version; pass `GIT_BLAME_OPTIONS_VERSION`. - * @return Zero on success; -1 on failure. - */ -GIT_EXTERN(int) git_blame_options_init( - git_blame_options *opts, - unsigned int version); - -/** - * Structure that represents a blame hunk. - */ -typedef struct git_blame_hunk { - /** - * The number of lines in this hunk. - */ - size_t lines_in_hunk; - - /** - * The OID of the commit where this line was last changed. - */ - git_oid final_commit_id; - - /** - * The 1-based line number where this hunk begins, in the final version - * of the file. - */ - size_t final_start_line_number; - - /** - * The author of `final_commit_id`. If `GIT_BLAME_USE_MAILMAP` has been - * specified, it will contain the canonical real name and email address. - */ - git_signature *final_signature; - - /** - * The OID of the commit where this hunk was found. - * This will usually be the same as `final_commit_id`, except when - * `GIT_BLAME_TRACK_COPIES_ANY_COMMIT_COPIES` has been specified. - */ - git_oid orig_commit_id; - - /** - * The path to the file where this hunk originated, as of the commit - * specified by `orig_commit_id`. - */ - const char *orig_path; - - /** - * The 1-based line number where this hunk begins in the file named by - * `orig_path` in the commit specified by `orig_commit_id`. - */ - size_t orig_start_line_number; - - /** - * The author of `orig_commit_id`. If `GIT_BLAME_USE_MAILMAP` has been - * specified, it will contain the canonical real name and email address. - */ - git_signature *orig_signature; - - /** - * The 1 iff the hunk has been tracked to a boundary commit (the root, - * or the commit specified in git_blame_options.oldest_commit) - */ - char boundary; -} git_blame_hunk; - - -/** Opaque structure to hold blame results */ -typedef struct git_blame git_blame; - -/** - * Gets the number of hunks that exist in the blame structure. - */ -GIT_EXTERN(uint32_t) git_blame_get_hunk_count(git_blame *blame); - -/** - * Gets the blame hunk at the given index. - * - * @param blame the blame structure to query - * @param index index of the hunk to retrieve - * @return the hunk at the given index, or NULL on error - */ -GIT_EXTERN(const git_blame_hunk*) git_blame_get_hunk_byindex( - git_blame *blame, - uint32_t index); - -/** - * Gets the hunk that relates to the given line number in the newest commit. - * - * @param blame the blame structure to query - * @param lineno the (1-based) line number to find a hunk for - * @return the hunk that contains the given line, or NULL on error - */ -GIT_EXTERN(const git_blame_hunk*) git_blame_get_hunk_byline( - git_blame *blame, - size_t lineno); - -/** - * Get the blame for a single file. - * - * @param out pointer that will receive the blame object - * @param repo repository whose history is to be walked - * @param path path to file to consider - * @param options options for the blame operation. If NULL, this is treated as - * though GIT_BLAME_OPTIONS_INIT were passed. - * @return 0 on success, or an error code. (use git_error_last for information - * about the error.) - */ -GIT_EXTERN(int) git_blame_file( - git_blame **out, - git_repository *repo, - const char *path, - git_blame_options *options); - - -/** - * Get blame data for a file that has been modified in memory. The `reference` - * parameter is a pre-calculated blame for the in-odb history of the file. This - * means that once a file blame is completed (which can be expensive), updating - * the buffer blame is very fast. - * - * Lines that differ between the buffer and the committed version are marked as - * having a zero OID for their final_commit_id. - * - * @param out pointer that will receive the resulting blame data - * @param reference cached blame from the history of the file (usually the output - * from git_blame_file) - * @param buffer the (possibly) modified contents of the file - * @param buffer_len number of valid bytes in the buffer - * @return 0 on success, or an error code. (use git_error_last for information - * about the error) - */ -GIT_EXTERN(int) git_blame_buffer( - git_blame **out, - git_blame *reference, - const char *buffer, - size_t buffer_len); - -/** - * Free memory allocated by git_blame_file or git_blame_buffer. - * - * @param blame the blame structure to free - */ -GIT_EXTERN(void) git_blame_free(git_blame *blame); - -/** @} */ -GIT_END_DECL -#endif - diff --git a/libgit2/headers/git2/blob.h b/libgit2/headers/git2/blob.h deleted file mode 100644 index 8fc7391..0000000 --- a/libgit2/headers/git2/blob.h +++ /dev/null @@ -1,298 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_blob_h__ -#define INCLUDE_git_blob_h__ - -#include "common.h" -#include "types.h" -#include "oid.h" -#include "object.h" -#include "buffer.h" - -/** - * @file git2/blob.h - * @brief Git blob load and write routines - * @defgroup git_blob Git blob load and write routines - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Lookup a blob object from a repository. - * - * @param blob pointer to the looked up blob - * @param repo the repo to use when locating the blob. - * @param id identity of the blob to locate. - * @return 0 or an error code - */ -GIT_EXTERN(int) git_blob_lookup(git_blob **blob, git_repository *repo, const git_oid *id); - -/** - * Lookup a blob object from a repository, - * given a prefix of its identifier (short id). - * - * @see git_object_lookup_prefix - * - * @param blob pointer to the looked up blob - * @param repo the repo to use when locating the blob. - * @param id identity of the blob to locate. - * @param len the length of the short identifier - * @return 0 or an error code - */ -GIT_EXTERN(int) git_blob_lookup_prefix(git_blob **blob, git_repository *repo, const git_oid *id, size_t len); - -/** - * Close an open blob - * - * This is a wrapper around git_object_free() - * - * IMPORTANT: - * It *is* necessary to call this method when you stop - * using a blob. Failure to do so will cause a memory leak. - * - * @param blob the blob to close - */ -GIT_EXTERN(void) git_blob_free(git_blob *blob); - -/** - * Get the id of a blob. - * - * @param blob a previously loaded blob. - * @return SHA1 hash for this blob. - */ -GIT_EXTERN(const git_oid *) git_blob_id(const git_blob *blob); - -/** - * Get the repository that contains the blob. - * - * @param blob A previously loaded blob. - * @return Repository that contains this blob. - */ -GIT_EXTERN(git_repository *) git_blob_owner(const git_blob *blob); - -/** - * Get a read-only buffer with the raw content of a blob. - * - * A pointer to the raw content of a blob is returned; - * this pointer is owned internally by the object and shall - * not be free'd. The pointer may be invalidated at a later - * time. - * - * @param blob pointer to the blob - * @return the pointer, or NULL on error - */ -GIT_EXTERN(const void *) git_blob_rawcontent(const git_blob *blob); - -/** - * Get the size in bytes of the contents of a blob - * - * @param blob pointer to the blob - * @return size on bytes - */ -GIT_EXTERN(git_object_size_t) git_blob_rawsize(const git_blob *blob); - -/** - * Flags to control the functionality of `git_blob_filter`. - */ -typedef enum { - /** When set, filters will not be applied to binary files. */ - GIT_BLOB_FILTER_CHECK_FOR_BINARY = (1 << 0), - - /** - * When set, filters will not load configuration from the - * system-wide `gitattributes` in `/etc` (or system equivalent). - */ - GIT_BLOB_FILTER_NO_SYSTEM_ATTRIBUTES = (1 << 1), - - /** - * When set, filters will be loaded from a `.gitattributes` file - * in the HEAD commit. - */ - GIT_BLOB_FILTER_ATTRIBUTES_FROM_HEAD = (1 << 2), - - /** - * When set, filters will be loaded from a `.gitattributes` file - * in the specified commit. - */ - GIT_BLOB_FILTER_ATTRIBUTES_FROM_COMMIT = (1 << 3), -} git_blob_filter_flag_t; - -/** - * The options used when applying filter options to a file. - * - * Initialize with `GIT_BLOB_FILTER_OPTIONS_INIT`. Alternatively, you can - * use `git_blob_filter_options_init`. - * - */ -typedef struct { - int version; - - /** Flags to control the filtering process, see `git_blob_filter_flag_t` above */ - uint32_t flags; - -#ifdef GIT_DEPRECATE_HARD - void *reserved; -#else - git_oid *commit_id; -#endif - - /** - * The commit to load attributes from, when - * `GIT_BLOB_FILTER_ATTRIBUTES_FROM_COMMIT` is specified. - */ - git_oid attr_commit_id; -} git_blob_filter_options; - -#define GIT_BLOB_FILTER_OPTIONS_VERSION 1 -#define GIT_BLOB_FILTER_OPTIONS_INIT {GIT_BLOB_FILTER_OPTIONS_VERSION, GIT_BLOB_FILTER_CHECK_FOR_BINARY} - -/** - * Initialize git_blob_filter_options structure - * - * Initializes a `git_blob_filter_options` with default values. Equivalent - * to creating an instance with `GIT_BLOB_FILTER_OPTIONS_INIT`. - * - * @param opts The `git_blob_filter_options` struct to initialize. - * @param version The struct version; pass `GIT_BLOB_FILTER_OPTIONS_VERSION`. - * @return Zero on success; -1 on failure. - */ -GIT_EXTERN(int) git_blob_filter_options_init(git_blob_filter_options *opts, unsigned int version); - -/** - * Get a buffer with the filtered content of a blob. - * - * This applies filters as if the blob was being checked out to the - * working directory under the specified filename. This may apply - * CRLF filtering or other types of changes depending on the file - * attributes set for the blob and the content detected in it. - * - * The output is written into a `git_buf` which the caller must free - * when done (via `git_buf_dispose`). - * - * If no filters need to be applied, then the `out` buffer will just - * be populated with a pointer to the raw content of the blob. In - * that case, be careful to *not* free the blob until done with the - * buffer or copy it into memory you own. - * - * @param out The git_buf to be filled in - * @param blob Pointer to the blob - * @param as_path Path used for file attribute lookups, etc. - * @param opts Options to use for filtering the blob - * @return 0 on success or an error code - */ -GIT_EXTERN(int) git_blob_filter( - git_buf *out, - git_blob *blob, - const char *as_path, - git_blob_filter_options *opts); - -/** - * Read a file from the working folder of a repository - * and write it to the Object Database as a loose blob - * - * @param id return the id of the written blob - * @param repo repository where the blob will be written. - * this repository cannot be bare - * @param relative_path file from which the blob will be created, - * relative to the repository's working dir - * @return 0 or an error code - */ -GIT_EXTERN(int) git_blob_create_from_workdir(git_oid *id, git_repository *repo, const char *relative_path); - -/** - * Read a file from the filesystem and write its content - * to the Object Database as a loose blob - * - * @param id return the id of the written blob - * @param repo repository where the blob will be written. - * this repository can be bare or not - * @param path file from which the blob will be created - * @return 0 or an error code - */ -GIT_EXTERN(int) git_blob_create_from_disk(git_oid *id, git_repository *repo, const char *path); - -/** - * Create a stream to write a new blob into the object db - * - * This function may need to buffer the data on disk and will in - * general not be the right choice if you know the size of the data - * to write. If you have data in memory, use - * `git_blob_create_from_buffer()`. If you do not, but know the size of - * the contents (and don't want/need to perform filtering), use - * `git_odb_open_wstream()`. - * - * Don't close this stream yourself but pass it to - * `git_blob_create_from_stream_commit()` to commit the write to the - * object db and get the object id. - * - * If the `hintpath` parameter is filled, it will be used to determine - * what git filters should be applied to the object before it is written - * to the object database. - * - * @param out the stream into which to write - * @param repo Repository where the blob will be written. - * This repository can be bare or not. - * @param hintpath If not NULL, will be used to select data filters - * to apply onto the content of the blob to be created. - * @return 0 or error code - */ -GIT_EXTERN(int) git_blob_create_from_stream( - git_writestream **out, - git_repository *repo, - const char *hintpath); - -/** - * Close the stream and write the blob to the object db - * - * The stream will be closed and freed. - * - * @param out the id of the new blob - * @param stream the stream to close - * @return 0 or an error code - */ -GIT_EXTERN(int) git_blob_create_from_stream_commit( - git_oid *out, - git_writestream *stream); - -/** - * Write an in-memory buffer to the ODB as a blob - * - * @param id return the id of the written blob - * @param repo repository where the blob will be written - * @param buffer data to be written into the blob - * @param len length of the data - * @return 0 or an error code - */ -GIT_EXTERN(int) git_blob_create_from_buffer( - git_oid *id, git_repository *repo, const void *buffer, size_t len); - -/** - * Determine if the blob content is most certainly binary or not. - * - * The heuristic used to guess if a file is binary is taken from core git: - * Searching for NUL bytes and looking for a reasonable ratio of printable - * to non-printable characters among the first 8000 bytes. - * - * @param blob The blob which content should be analyzed - * @return 1 if the content of the blob is detected - * as binary; 0 otherwise. - */ -GIT_EXTERN(int) git_blob_is_binary(const git_blob *blob); - -/** - * Create an in-memory copy of a blob. The copy must be explicitly - * free'd or it will leak. - * - * @param out Pointer to store the copy of the object - * @param source Original object to copy - */ -GIT_EXTERN(int) git_blob_dup(git_blob **out, git_blob *source); - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/branch.h b/libgit2/headers/git2/branch.h deleted file mode 100644 index 24ea7f7..0000000 --- a/libgit2/headers/git2/branch.h +++ /dev/null @@ -1,334 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_branch_h__ -#define INCLUDE_git_branch_h__ - -#include "common.h" -#include "oid.h" -#include "types.h" - -/** - * @file git2/branch.h - * @brief Git branch parsing routines - * @defgroup git_branch Git branch management - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Create a new branch pointing at a target commit - * - * A new direct reference will be created pointing to - * this target commit. If `force` is true and a reference - * already exists with the given name, it'll be replaced. - * - * The returned reference must be freed by the user. - * - * The branch name will be checked for validity. - * See `git_tag_create()` for rules about valid names. - * - * @param out Pointer where to store the underlying reference. - * - * @param branch_name Name for the branch; this name is - * validated for consistency. It should also not conflict with - * an already existing branch name. - * - * @param target Commit to which this branch should point. This object - * must belong to the given `repo`. - * - * @param force Overwrite existing branch. - * - * @return 0, GIT_EINVALIDSPEC or an error code. - * A proper reference is written in the refs/heads namespace - * pointing to the provided target commit. - */ -GIT_EXTERN(int) git_branch_create( - git_reference **out, - git_repository *repo, - const char *branch_name, - const git_commit *target, - int force); - -/** - * Create a new branch pointing at a target commit - * - * This behaves like `git_branch_create()` but takes an annotated - * commit, which lets you specify which extended sha syntax string was - * specified by a user, allowing for more exact reflog messages. - * - * See the documentation for `git_branch_create()`. - * - * @see git_branch_create - */ -GIT_EXTERN(int) git_branch_create_from_annotated( - git_reference **ref_out, - git_repository *repository, - const char *branch_name, - const git_annotated_commit *commit, - int force); - -/** - * Delete an existing branch reference. - * - * Note that if the deletion succeeds, the reference object will not - * be valid anymore, and should be freed immediately by the user using - * `git_reference_free()`. - * - * @param branch A valid reference representing a branch - * @return 0 on success, or an error code. - */ -GIT_EXTERN(int) git_branch_delete(git_reference *branch); - -/** Iterator type for branches */ -typedef struct git_branch_iterator git_branch_iterator; - -/** - * Create an iterator which loops over the requested branches. - * - * @param out the iterator - * @param repo Repository where to find the branches. - * @param list_flags Filtering flags for the branch - * listing. Valid values are GIT_BRANCH_LOCAL, GIT_BRANCH_REMOTE - * or GIT_BRANCH_ALL. - * - * @return 0 on success or an error code - */ -GIT_EXTERN(int) git_branch_iterator_new( - git_branch_iterator **out, - git_repository *repo, - git_branch_t list_flags); - -/** - * Retrieve the next branch from the iterator - * - * @param out the reference - * @param out_type the type of branch (local or remote-tracking) - * @param iter the branch iterator - * @return 0 on success, GIT_ITEROVER if there are no more branches or an error code. - */ -GIT_EXTERN(int) git_branch_next(git_reference **out, git_branch_t *out_type, git_branch_iterator *iter); - -/** - * Free a branch iterator - * - * @param iter the iterator to free - */ -GIT_EXTERN(void) git_branch_iterator_free(git_branch_iterator *iter); - -/** - * Move/rename an existing local branch reference. - * - * The new branch name will be checked for validity. - * See `git_tag_create()` for rules about valid names. - * - * Note that if the move succeeds, the old reference object will not - + be valid anymore, and should be freed immediately by the user using - + `git_reference_free()`. - * - * @param out New reference object for the updated name. - * - * @param branch Current underlying reference of the branch. - * - * @param new_branch_name Target name of the branch once the move - * is performed; this name is validated for consistency. - * - * @param force Overwrite existing branch. - * - * @return 0 on success, GIT_EINVALIDSPEC or an error code. - */ -GIT_EXTERN(int) git_branch_move( - git_reference **out, - git_reference *branch, - const char *new_branch_name, - int force); - -/** - * Lookup a branch by its name in a repository. - * - * The generated reference must be freed by the user. - * The branch name will be checked for validity. - * - * @see git_tag_create for rules about valid names. - * - * @param out pointer to the looked-up branch reference - * @param repo the repository to look up the branch - * @param branch_name Name of the branch to be looked-up; - * this name is validated for consistency. - * @param branch_type Type of the considered branch. This should - * be valued with either GIT_BRANCH_LOCAL or GIT_BRANCH_REMOTE. - * - * @return 0 on success; GIT_ENOTFOUND when no matching branch - * exists, GIT_EINVALIDSPEC, otherwise an error code. - */ -GIT_EXTERN(int) git_branch_lookup( - git_reference **out, - git_repository *repo, - const char *branch_name, - git_branch_t branch_type); - -/** - * Get the branch name - * - * Given a reference object, this will check that it really is a branch (ie. - * it lives under "refs/heads/" or "refs/remotes/"), and return the branch part - * of it. - * - * @param out Pointer to the abbreviated reference name. - * Owned by ref, do not free. - * - * @param ref A reference object, ideally pointing to a branch - * - * @return 0 on success; GIT_EINVALID if the reference isn't either a local or - * remote branch, otherwise an error code. - */ -GIT_EXTERN(int) git_branch_name( - const char **out, - const git_reference *ref); - -/** - * Get the upstream of a branch - * - * Given a reference, this will return a new reference object corresponding - * to its remote tracking branch. The reference must be a local branch. - * - * @see git_branch_upstream_name for details on the resolution. - * - * @param out Pointer where to store the retrieved reference. - * @param branch Current underlying reference of the branch. - * - * @return 0 on success; GIT_ENOTFOUND when no remote tracking - * reference exists, otherwise an error code. - */ -GIT_EXTERN(int) git_branch_upstream( - git_reference **out, - const git_reference *branch); - -/** - * Set a branch's upstream branch - * - * This will update the configuration to set the branch named `branch_name` as the upstream of `branch`. - * Pass a NULL name to unset the upstream information. - * - * @note the actual tracking reference must have been already created for the - * operation to succeed. - * - * @param branch the branch to configure - * @param branch_name remote-tracking or local branch to set as upstream. - * - * @return 0 on success; GIT_ENOTFOUND if there's no branch named `branch_name` - * or an error code - */ -GIT_EXTERN(int) git_branch_set_upstream( - git_reference *branch, - const char *branch_name); - -/** - * Get the upstream name of a branch - * - * Given a local branch, this will return its remote-tracking branch information, - * as a full reference name, ie. "feature/nice" would become - * "refs/remote/origin/feature/nice", depending on that branch's configuration. - * - * @param out the buffer into which the name will be written. - * @param repo the repository where the branches live. - * @param refname reference name of the local branch. - * - * @return 0 on success, GIT_ENOTFOUND when no remote tracking reference exists, - * or an error code. - */ -GIT_EXTERN(int) git_branch_upstream_name( - git_buf *out, - git_repository *repo, - const char *refname); - -/** - * Determine if HEAD points to the given branch - * - * @param branch A reference to a local branch. - * - * @return 1 if HEAD points at the branch, 0 if it isn't, or a negative value - * as an error code. - */ -GIT_EXTERN(int) git_branch_is_head( - const git_reference *branch); - -/** - * Determine if any HEAD points to the current branch - * - * This will iterate over all known linked repositories (usually in the form of - * worktrees) and report whether any HEAD is pointing at the current branch. - * - * @param branch A reference to a local branch. - * - * @return 1 if branch is checked out, 0 if it isn't, an error code otherwise. - */ -GIT_EXTERN(int) git_branch_is_checked_out( - const git_reference *branch); - -/** - * Find the remote name of a remote-tracking branch - * - * This will return the name of the remote whose fetch refspec is matching - * the given branch. E.g. given a branch "refs/remotes/test/master", it will - * extract the "test" part. If refspecs from multiple remotes match, - * the function will return GIT_EAMBIGUOUS. - * - * @param out The buffer into which the name will be written. - * @param repo The repository where the branch lives. - * @param refname complete name of the remote tracking branch. - * - * @return 0 on success, GIT_ENOTFOUND when no matching remote was found, - * GIT_EAMBIGUOUS when the branch maps to several remotes, - * otherwise an error code. - */ -GIT_EXTERN(int) git_branch_remote_name( - git_buf *out, - git_repository *repo, - const char *refname); - -/** - * Retrieve the upstream remote of a local branch - * - * This will return the currently configured "branch.*.remote" for a given - * branch. This branch must be local. - * - * @param buf the buffer into which to write the name - * @param repo the repository in which to look - * @param refname the full name of the branch - * @return 0 or an error code - */ - GIT_EXTERN(int) git_branch_upstream_remote(git_buf *buf, git_repository *repo, const char *refname); - -/** - * Retrieve the upstream merge of a local branch - * - * This will return the currently configured "branch.*.merge" for a given - * branch. This branch must be local. - * - * @param buf the buffer into which to write the name - * @param repo the repository in which to look - * @param refname the full name of the branch - * @return 0 or an error code - */ - GIT_EXTERN(int) git_branch_upstream_merge(git_buf *buf, git_repository *repo, const char *refname); - -/** - * Determine whether a branch name is valid, meaning that (when prefixed - * with `refs/heads/`) that it is a valid reference name, and that any - * additional branch name restrictions are imposed (eg, it cannot start - * with a `-`). - * - * @param valid output pointer to set with validity of given branch name - * @param name a branch name to test - * @return 0 on success or an error code - */ -GIT_EXTERN(int) git_branch_name_is_valid(int *valid, const char *name); - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/buffer.h b/libgit2/headers/git2/buffer.h deleted file mode 100644 index 926f133..0000000 --- a/libgit2/headers/git2/buffer.h +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_buf_h__ -#define INCLUDE_git_buf_h__ - -#include "common.h" - -/** - * @file git2/buffer.h - * @brief Buffer export structure - * - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * A data buffer for exporting data from libgit2 - * - * Sometimes libgit2 wants to return an allocated data buffer to the - * caller and have the caller take responsibility for freeing that memory. - * This can be awkward if the caller does not have easy access to the same - * allocation functions that libgit2 is using. In those cases, libgit2 - * will fill in a `git_buf` and the caller can use `git_buf_dispose()` to - * release it when they are done. - * - * A `git_buf` may also be used for the caller to pass in a reference to - * a block of memory they hold. In this case, libgit2 will not resize or - * free the memory, but will read from it as needed. - * - * Some APIs may occasionally do something slightly unusual with a buffer, - * such as setting `ptr` to a value that was passed in by the user. In - * those cases, the behavior will be clearly documented by the API. - */ -typedef struct { - /** - * The buffer contents. - * - * `ptr` points to the start of the allocated memory. If it is NULL, - * then the `git_buf` is considered empty and libgit2 will feel free - * to overwrite it with new data. - */ - char *ptr; - - /** - * `asize` holds the known total amount of allocated memory if the `ptr` - * was allocated by libgit2. It may be larger than `size`. If `ptr` - * was not allocated by libgit2 and should not be resized and/or freed, - * then `asize` will be set to zero. - */ - size_t asize; - - /** - * `size` holds the size (in bytes) of the data that is actually used. - */ - size_t size; -} git_buf; - -/** - * Static initializer for git_buf from static buffer - */ -#define GIT_BUF_INIT_CONST(STR,LEN) { (char *)(STR), 0, (size_t)(LEN) } - -/** - * Free the memory referred to by the git_buf. - * - * Note that this does not free the `git_buf` itself, just the memory - * pointed to by `buffer->ptr`. This will not free the memory if it looks - * like it was not allocated internally, but it will clear the buffer back - * to the empty state. - * - * @param buffer The buffer to deallocate - */ -GIT_EXTERN(void) git_buf_dispose(git_buf *buffer); - -/** - * Resize the buffer allocation to make more space. - * - * This will attempt to grow the buffer to accommodate the target size. - * - * If the buffer refers to memory that was not allocated by libgit2 (i.e. - * the `asize` field is zero), then `ptr` will be replaced with a newly - * allocated block of data. Be careful so that memory allocated by the - * caller is not lost. As a special variant, if you pass `target_size` as - * 0 and the memory is not allocated by libgit2, this will allocate a new - * buffer of size `size` and copy the external data into it. - * - * Currently, this will never shrink a buffer, only expand it. - * - * If the allocation fails, this will return an error and the buffer will be - * marked as invalid for future operations, invaliding the contents. - * - * @param buffer The buffer to be resized; may or may not be allocated yet - * @param target_size The desired available size - * @return 0 on success, -1 on allocation failure - */ -GIT_EXTERN(int) git_buf_grow(git_buf *buffer, size_t target_size); - -/** - * Set buffer to a copy of some raw data. - * - * @param buffer The buffer to set - * @param data The data to copy into the buffer - * @param datalen The length of the data to copy into the buffer - * @return 0 on success, -1 on allocation failure - */ -GIT_EXTERN(int) git_buf_set( - git_buf *buffer, const void *data, size_t datalen); - -/** -* Check quickly if buffer looks like it contains binary data -* -* @param buf Buffer to check -* @return 1 if buffer looks like non-text data -*/ -GIT_EXTERN(int) git_buf_is_binary(const git_buf *buf); - -/** -* Check quickly if buffer contains a NUL byte -* -* @param buf Buffer to check -* @return 1 if buffer contains a NUL byte -*/ -GIT_EXTERN(int) git_buf_contains_nul(const git_buf *buf); - -GIT_END_DECL - -/** @} */ - -#endif diff --git a/libgit2/headers/git2/cert.h b/libgit2/headers/git2/cert.h deleted file mode 100644 index 0ed38ff..0000000 --- a/libgit2/headers/git2/cert.h +++ /dev/null @@ -1,172 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_cert_h__ -#define INCLUDE_git_cert_h__ - -#include "common.h" -#include "types.h" - -/** - * @file git2/cert.h - * @brief Git certificate objects - * @defgroup git_cert Certificate objects - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Type of host certificate structure that is passed to the check callback - */ -typedef enum git_cert_t { - /** - * No information about the certificate is available. This may - * happen when using curl. - */ - GIT_CERT_NONE, - /** - * The `data` argument to the callback will be a pointer to - * the DER-encoded data. - */ - GIT_CERT_X509, - /** - * The `data` argument to the callback will be a pointer to a - * `git_cert_hostkey` structure. - */ - GIT_CERT_HOSTKEY_LIBSSH2, - /** - * The `data` argument to the callback will be a pointer to a - * `git_strarray` with `name:content` strings containing - * information about the certificate. This is used when using - * curl. - */ - GIT_CERT_STRARRAY, -} git_cert_t; - -/** - * Parent type for `git_cert_hostkey` and `git_cert_x509`. - */ -struct git_cert { - /** - * Type of certificate. A `GIT_CERT_` value. - */ - git_cert_t cert_type; -}; - -/** - * Callback for the user's custom certificate checks. - * - * @param cert The host certificate - * @param valid Whether the libgit2 checks (OpenSSL or WinHTTP) think - * this certificate is valid - * @param host Hostname of the host libgit2 connected to - * @param payload Payload provided by the caller - * @return 0 to proceed with the connection, < 0 to fail the connection - * or > 0 to indicate that the callback refused to act and that - * the existing validity determination should be honored - */ -typedef int GIT_CALLBACK(git_transport_certificate_check_cb)(git_cert *cert, int valid, const char *host, void *payload); - -/** - * Type of SSH host fingerprint - */ -typedef enum { - /** MD5 is available */ - GIT_CERT_SSH_MD5 = (1 << 0), - /** SHA-1 is available */ - GIT_CERT_SSH_SHA1 = (1 << 1), - /** SHA-256 is available */ - GIT_CERT_SSH_SHA256 = (1 << 2), - /** Raw hostkey is available */ - GIT_CERT_SSH_RAW = (1 << 3), -} git_cert_ssh_t; - -typedef enum { - /** The raw key is of an unknown type. */ - GIT_CERT_SSH_RAW_TYPE_UNKNOWN = 0, - /** The raw key is an RSA key. */ - GIT_CERT_SSH_RAW_TYPE_RSA = 1, - /** The raw key is a DSS key. */ - GIT_CERT_SSH_RAW_TYPE_DSS = 2, - /** The raw key is a ECDSA 256 key. */ - GIT_CERT_SSH_RAW_TYPE_KEY_ECDSA_256 = 3, - /** The raw key is a ECDSA 384 key. */ - GIT_CERT_SSH_RAW_TYPE_KEY_ECDSA_384 = 4, - /** The raw key is a ECDSA 521 key. */ - GIT_CERT_SSH_RAW_TYPE_KEY_ECDSA_521 = 5, - /** The raw key is a ED25519 key. */ - GIT_CERT_SSH_RAW_TYPE_KEY_ED25519 = 6 -} git_cert_ssh_raw_type_t; - -/** - * Hostkey information taken from libssh2 - */ -typedef struct { - git_cert parent; /**< The parent cert */ - - /** - * A bitmask containing the available fields. - */ - git_cert_ssh_t type; - - /** - * Hostkey hash. If `type` has `GIT_CERT_SSH_MD5` set, this will - * have the MD5 hash of the hostkey. - */ - unsigned char hash_md5[16]; - - /** - * Hostkey hash. If `type` has `GIT_CERT_SSH_SHA1` set, this will - * have the SHA-1 hash of the hostkey. - */ - unsigned char hash_sha1[20]; - - /** - * Hostkey hash. If `type` has `GIT_CERT_SSH_SHA256` set, this will - * have the SHA-256 hash of the hostkey. - */ - unsigned char hash_sha256[32]; - - /** - * Raw hostkey type. If `type` has `GIT_CERT_SSH_RAW` set, this will - * have the type of the raw hostkey. - */ - git_cert_ssh_raw_type_t raw_type; - - /** - * Pointer to the raw hostkey. If `type` has `GIT_CERT_SSH_RAW` set, - * this will have the raw contents of the hostkey. - */ - const char *hostkey; - - /** - * Raw hostkey length. If `type` has `GIT_CERT_SSH_RAW` set, this will - * have the length of the raw contents of the hostkey. - */ - size_t hostkey_len; -} git_cert_hostkey; - -/** - * X.509 certificate information - */ -typedef struct { - git_cert parent; /**< The parent cert */ - - /** - * Pointer to the X.509 certificate data - */ - void *data; - - /** - * Length of the memory block pointed to by `data`. - */ - size_t len; -} git_cert_x509; - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/checkout.h b/libgit2/headers/git2/checkout.h deleted file mode 100644 index c7aeee4..0000000 --- a/libgit2/headers/git2/checkout.h +++ /dev/null @@ -1,414 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_checkout_h__ -#define INCLUDE_git_checkout_h__ - -#include "common.h" -#include "types.h" -#include "diff.h" - -/** - * @file git2/checkout.h - * @brief Git checkout routines - * @defgroup git_checkout Git checkout routines - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Checkout behavior flags - * - * In libgit2, checkout is used to update the working directory and index - * to match a target tree. Unlike git checkout, it does not move the HEAD - * commit for you - use `git_repository_set_head` or the like to do that. - * - * Checkout looks at (up to) four things: the "target" tree you want to - * check out, the "baseline" tree of what was checked out previously, the - * working directory for actual files, and the index for staged changes. - * - * You give checkout one of three strategies for update: - * - * - `GIT_CHECKOUT_NONE` is a dry-run strategy that checks for conflicts, - * etc., but doesn't make any actual changes. - * - * - `GIT_CHECKOUT_FORCE` is at the opposite extreme, taking any action to - * make the working directory match the target (including potentially - * discarding modified files). - * - * - `GIT_CHECKOUT_SAFE` is between these two options, it will only make - * modifications that will not lose changes. - * - * | target == baseline | target != baseline | - * ---------------------|-----------------------|----------------------| - * workdir == baseline | no action | create, update, or | - * | | delete file | - * ---------------------|-----------------------|----------------------| - * workdir exists and | no action | conflict (notify | - * is != baseline | notify dirty MODIFIED | and cancel checkout) | - * ---------------------|-----------------------|----------------------| - * workdir missing, | notify dirty DELETED | create file | - * baseline present | | | - * ---------------------|-----------------------|----------------------| - * - * To emulate `git checkout`, use `GIT_CHECKOUT_SAFE` with a checkout - * notification callback (see below) that displays information about dirty - * files. The default behavior will cancel checkout on conflicts. - * - * To emulate `git checkout-index`, use `GIT_CHECKOUT_SAFE` with a - * notification callback that cancels the operation if a dirty-but-existing - * file is found in the working directory. This core git command isn't - * quite "force" but is sensitive about some types of changes. - * - * To emulate `git checkout -f`, use `GIT_CHECKOUT_FORCE`. - * - * - * There are some additional flags to modify the behavior of checkout: - * - * - GIT_CHECKOUT_ALLOW_CONFLICTS makes SAFE mode apply safe file updates - * even if there are conflicts (instead of cancelling the checkout). - * - * - GIT_CHECKOUT_REMOVE_UNTRACKED means remove untracked files (i.e. not - * in target, baseline, or index, and not ignored) from the working dir. - * - * - GIT_CHECKOUT_REMOVE_IGNORED means remove ignored files (that are also - * untracked) from the working directory as well. - * - * - GIT_CHECKOUT_UPDATE_ONLY means to only update the content of files that - * already exist. Files will not be created nor deleted. This just skips - * applying adds, deletes, and typechanges. - * - * - GIT_CHECKOUT_DONT_UPDATE_INDEX prevents checkout from writing the - * updated files' information to the index. - * - * - Normally, checkout will reload the index and git attributes from disk - * before any operations. GIT_CHECKOUT_NO_REFRESH prevents this reload. - * - * - Unmerged index entries are conflicts. GIT_CHECKOUT_SKIP_UNMERGED skips - * files with unmerged index entries instead. GIT_CHECKOUT_USE_OURS and - * GIT_CHECKOUT_USE_THEIRS to proceed with the checkout using either the - * stage 2 ("ours") or stage 3 ("theirs") version of files in the index. - * - * - GIT_CHECKOUT_DONT_OVERWRITE_IGNORED prevents ignored files from being - * overwritten. Normally, files that are ignored in the working directory - * are not considered "precious" and may be overwritten if the checkout - * target contains that file. - * - * - GIT_CHECKOUT_DONT_REMOVE_EXISTING prevents checkout from removing - * files or folders that fold to the same name on case insensitive - * filesystems. This can cause files to retain their existing names - * and write through existing symbolic links. - */ -typedef enum { - GIT_CHECKOUT_NONE = 0, /**< default is a dry run, no actual updates */ - - /** - * Allow safe updates that cannot overwrite uncommitted data. - * If the uncommitted changes don't conflict with the checked out files, - * the checkout will still proceed, leaving the changes intact. - * - * Mutually exclusive with GIT_CHECKOUT_FORCE. - * GIT_CHECKOUT_FORCE takes precedence over GIT_CHECKOUT_SAFE. - */ - GIT_CHECKOUT_SAFE = (1u << 0), - - /** - * Allow all updates to force working directory to look like index. - * - * Mutually exclusive with GIT_CHECKOUT_SAFE. - * GIT_CHECKOUT_FORCE takes precedence over GIT_CHECKOUT_SAFE. - */ - GIT_CHECKOUT_FORCE = (1u << 1), - - - /** Allow checkout to recreate missing files */ - GIT_CHECKOUT_RECREATE_MISSING = (1u << 2), - - /** Allow checkout to make safe updates even if conflicts are found */ - GIT_CHECKOUT_ALLOW_CONFLICTS = (1u << 4), - - /** Remove untracked files not in index (that are not ignored) */ - GIT_CHECKOUT_REMOVE_UNTRACKED = (1u << 5), - - /** Remove ignored files not in index */ - GIT_CHECKOUT_REMOVE_IGNORED = (1u << 6), - - /** Only update existing files, don't create new ones */ - GIT_CHECKOUT_UPDATE_ONLY = (1u << 7), - - /** - * Normally checkout updates index entries as it goes; this stops that. - * Implies `GIT_CHECKOUT_DONT_WRITE_INDEX`. - */ - GIT_CHECKOUT_DONT_UPDATE_INDEX = (1u << 8), - - /** Don't refresh index/config/etc before doing checkout */ - GIT_CHECKOUT_NO_REFRESH = (1u << 9), - - /** Allow checkout to skip unmerged files */ - GIT_CHECKOUT_SKIP_UNMERGED = (1u << 10), - /** For unmerged files, checkout stage 2 from index */ - GIT_CHECKOUT_USE_OURS = (1u << 11), - /** For unmerged files, checkout stage 3 from index */ - GIT_CHECKOUT_USE_THEIRS = (1u << 12), - - /** Treat pathspec as simple list of exact match file paths */ - GIT_CHECKOUT_DISABLE_PATHSPEC_MATCH = (1u << 13), - - /** Ignore directories in use, they will be left empty */ - GIT_CHECKOUT_SKIP_LOCKED_DIRECTORIES = (1u << 18), - - /** Don't overwrite ignored files that exist in the checkout target */ - GIT_CHECKOUT_DONT_OVERWRITE_IGNORED = (1u << 19), - - /** Write normal merge files for conflicts */ - GIT_CHECKOUT_CONFLICT_STYLE_MERGE = (1u << 20), - - /** Include common ancestor data in diff3 format files for conflicts */ - GIT_CHECKOUT_CONFLICT_STYLE_DIFF3 = (1u << 21), - - /** Don't overwrite existing files or folders */ - GIT_CHECKOUT_DONT_REMOVE_EXISTING = (1u << 22), - - /** Normally checkout writes the index upon completion; this prevents that. */ - GIT_CHECKOUT_DONT_WRITE_INDEX = (1u << 23), - - /** - * Show what would be done by a checkout. Stop after sending - * notifications; don't update the working directory or index. - */ - GIT_CHECKOUT_DRY_RUN = (1u << 24), - - /** - * THE FOLLOWING OPTIONS ARE NOT YET IMPLEMENTED - */ - - /** Recursively checkout submodules with same options (NOT IMPLEMENTED) */ - GIT_CHECKOUT_UPDATE_SUBMODULES = (1u << 16), - /** Recursively checkout submodules if HEAD moved in super repo (NOT IMPLEMENTED) */ - GIT_CHECKOUT_UPDATE_SUBMODULES_IF_CHANGED = (1u << 17), - -} git_checkout_strategy_t; - -/** - * Checkout notification flags - * - * Checkout will invoke an options notification callback (`notify_cb`) for - * certain cases - you pick which ones via `notify_flags`: - * - * Returning a non-zero value from this callback will cancel the checkout. - * The non-zero return value will be propagated back and returned by the - * git_checkout_... call. - * - * Notification callbacks are made prior to modifying any files on disk, - * so canceling on any notification will still happen prior to any files - * being modified. - */ -typedef enum { - GIT_CHECKOUT_NOTIFY_NONE = 0, - - /** - * Invokes checkout on conflicting paths. - */ - GIT_CHECKOUT_NOTIFY_CONFLICT = (1u << 0), - - /** - * Notifies about "dirty" files, i.e. those that do not need an update - * but no longer match the baseline. Core git displays these files when - * checkout runs, but won't stop the checkout. - */ - GIT_CHECKOUT_NOTIFY_DIRTY = (1u << 1), - - /** - * Sends notification for any file changed. - */ - GIT_CHECKOUT_NOTIFY_UPDATED = (1u << 2), - - /** - * Notifies about untracked files. - */ - GIT_CHECKOUT_NOTIFY_UNTRACKED = (1u << 3), - - /** - * Notifies about ignored files. - */ - GIT_CHECKOUT_NOTIFY_IGNORED = (1u << 4), - - GIT_CHECKOUT_NOTIFY_ALL = 0x0FFFFu -} git_checkout_notify_t; - -/** Checkout performance-reporting structure */ -typedef struct { - size_t mkdir_calls; - size_t stat_calls; - size_t chmod_calls; -} git_checkout_perfdata; - -/** Checkout notification callback function */ -typedef int GIT_CALLBACK(git_checkout_notify_cb)( - git_checkout_notify_t why, - const char *path, - const git_diff_file *baseline, - const git_diff_file *target, - const git_diff_file *workdir, - void *payload); - -/** Checkout progress notification function */ -typedef void GIT_CALLBACK(git_checkout_progress_cb)( - const char *path, - size_t completed_steps, - size_t total_steps, - void *payload); - -/** Checkout perfdata notification function */ -typedef void GIT_CALLBACK(git_checkout_perfdata_cb)( - const git_checkout_perfdata *perfdata, - void *payload); - -/** - * Checkout options structure - * - * Initialize with `GIT_CHECKOUT_OPTIONS_INIT`. Alternatively, you can - * use `git_checkout_options_init`. - * - */ -typedef struct git_checkout_options { - unsigned int version; /**< The version */ - - unsigned int checkout_strategy; /**< default will be a safe checkout */ - - int disable_filters; /**< don't apply filters like CRLF conversion */ - unsigned int dir_mode; /**< default is 0755 */ - unsigned int file_mode; /**< default is 0644 or 0755 as dictated by blob */ - int file_open_flags; /**< default is O_CREAT | O_TRUNC | O_WRONLY */ - - unsigned int notify_flags; /**< see `git_checkout_notify_t` above */ - - /** - * Optional callback to get notifications on specific file states. - * @see git_checkout_notify_t - */ - git_checkout_notify_cb notify_cb; - - /** Payload passed to notify_cb */ - void *notify_payload; - - /** Optional callback to notify the consumer of checkout progress. */ - git_checkout_progress_cb progress_cb; - - /** Payload passed to progress_cb */ - void *progress_payload; - - /** - * A list of wildmatch patterns or paths. - * - * By default, all paths are processed. If you pass an array of wildmatch - * patterns, those will be used to filter which paths should be taken into - * account. - * - * Use GIT_CHECKOUT_DISABLE_PATHSPEC_MATCH to treat as a simple list. - */ - git_strarray paths; - - /** - * The expected content of the working directory; defaults to HEAD. - * - * If the working directory does not match this baseline information, - * that will produce a checkout conflict. - */ - git_tree *baseline; - - /** - * Like `baseline` above, though expressed as an index. This - * option overrides `baseline`. - */ - git_index *baseline_index; - - const char *target_directory; /**< alternative checkout path to workdir */ - - const char *ancestor_label; /**< the name of the common ancestor side of conflicts */ - const char *our_label; /**< the name of the "our" side of conflicts */ - const char *their_label; /**< the name of the "their" side of conflicts */ - - /** Optional callback to notify the consumer of performance data. */ - git_checkout_perfdata_cb perfdata_cb; - - /** Payload passed to perfdata_cb */ - void *perfdata_payload; -} git_checkout_options; - -#define GIT_CHECKOUT_OPTIONS_VERSION 1 -#define GIT_CHECKOUT_OPTIONS_INIT {GIT_CHECKOUT_OPTIONS_VERSION, GIT_CHECKOUT_SAFE} - -/** - * Initialize git_checkout_options structure - * - * Initializes a `git_checkout_options` with default values. Equivalent to creating - * an instance with GIT_CHECKOUT_OPTIONS_INIT. - * - * @param opts The `git_checkout_options` struct to initialize. - * @param version The struct version; pass `GIT_CHECKOUT_OPTIONS_VERSION`. - * @return Zero on success; -1 on failure. - */ -GIT_EXTERN(int) git_checkout_options_init( - git_checkout_options *opts, - unsigned int version); - -/** - * Updates files in the index and the working tree to match the content of - * the commit pointed at by HEAD. - * - * Note that this is _not_ the correct mechanism used to switch branches; - * do not change your `HEAD` and then call this method, that would leave - * you with checkout conflicts since your working directory would then - * appear to be dirty. Instead, checkout the target of the branch and - * then update `HEAD` using `git_repository_set_head` to point to the - * branch you checked out. - * - * @param repo repository to check out (must be non-bare) - * @param opts specifies checkout options (may be NULL) - * @return 0 on success, GIT_EUNBORNBRANCH if HEAD points to a non - * existing branch, non-zero value returned by `notify_cb`, or - * other error code < 0 (use git_error_last for error details) - */ -GIT_EXTERN(int) git_checkout_head( - git_repository *repo, - const git_checkout_options *opts); - -/** - * Updates files in the working tree to match the content of the index. - * - * @param repo repository into which to check out (must be non-bare) - * @param index index to be checked out (or NULL to use repository index) - * @param opts specifies checkout options (may be NULL) - * @return 0 on success, non-zero return value from `notify_cb`, or error - * code < 0 (use git_error_last for error details) - */ -GIT_EXTERN(int) git_checkout_index( - git_repository *repo, - git_index *index, - const git_checkout_options *opts); - -/** - * Updates files in the index and working tree to match the content of the - * tree pointed at by the treeish. - * - * @param repo repository to check out (must be non-bare) - * @param treeish a commit, tag or tree which content will be used to update - * the working directory (or NULL to use HEAD) - * @param opts specifies checkout options (may be NULL) - * @return 0 on success, non-zero return value from `notify_cb`, or error - * code < 0 (use git_error_last for error details) - */ -GIT_EXTERN(int) git_checkout_tree( - git_repository *repo, - const git_object *treeish, - const git_checkout_options *opts); - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/cherrypick.h b/libgit2/headers/git2/cherrypick.h deleted file mode 100644 index 0e6a252..0000000 --- a/libgit2/headers/git2/cherrypick.h +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_cherrypick_h__ -#define INCLUDE_git_cherrypick_h__ - -#include "common.h" -#include "types.h" -#include "merge.h" - -/** - * @file git2/cherrypick.h - * @brief Git cherry-pick routines - * @defgroup git_cherrypick Git cherry-pick routines - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Cherry-pick options - */ -typedef struct { - unsigned int version; - - /** For merge commits, the "mainline" is treated as the parent. */ - unsigned int mainline; - - git_merge_options merge_opts; /**< Options for the merging */ - git_checkout_options checkout_opts; /**< Options for the checkout */ -} git_cherrypick_options; - -#define GIT_CHERRYPICK_OPTIONS_VERSION 1 -#define GIT_CHERRYPICK_OPTIONS_INIT {GIT_CHERRYPICK_OPTIONS_VERSION, 0, GIT_MERGE_OPTIONS_INIT, GIT_CHECKOUT_OPTIONS_INIT} - -/** - * Initialize git_cherrypick_options structure - * - * Initializes a `git_cherrypick_options` with default values. Equivalent to creating - * an instance with GIT_CHERRYPICK_OPTIONS_INIT. - * - * @param opts The `git_cherrypick_options` struct to initialize. - * @param version The struct version; pass `GIT_CHERRYPICK_OPTIONS_VERSION`. - * @return Zero on success; -1 on failure. - */ -GIT_EXTERN(int) git_cherrypick_options_init( - git_cherrypick_options *opts, - unsigned int version); - -/** - * Cherry-picks the given commit against the given "our" commit, producing an - * index that reflects the result of the cherry-pick. - * - * The returned index must be freed explicitly with `git_index_free`. - * - * @param out pointer to store the index result in - * @param repo the repository that contains the given commits - * @param cherrypick_commit the commit to cherry-pick - * @param our_commit the commit to cherry-pick against (eg, HEAD) - * @param mainline the parent of the `cherrypick_commit`, if it is a merge - * @param merge_options the merge options (or null for defaults) - * @return zero on success, -1 on failure. - */ -GIT_EXTERN(int) git_cherrypick_commit( - git_index **out, - git_repository *repo, - git_commit *cherrypick_commit, - git_commit *our_commit, - unsigned int mainline, - const git_merge_options *merge_options); - -/** - * Cherry-pick the given commit, producing changes in the index and working directory. - * - * @param repo the repository to cherry-pick - * @param commit the commit to cherry-pick - * @param cherrypick_options the cherry-pick options (or null for defaults) - * @return zero on success, -1 on failure. - */ -GIT_EXTERN(int) git_cherrypick( - git_repository *repo, - git_commit *commit, - const git_cherrypick_options *cherrypick_options); - -/** @} */ -GIT_END_DECL - -#endif - diff --git a/libgit2/headers/git2/clone.h b/libgit2/headers/git2/clone.h deleted file mode 100644 index 3c3ea26..0000000 --- a/libgit2/headers/git2/clone.h +++ /dev/null @@ -1,209 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_clone_h__ -#define INCLUDE_git_clone_h__ - -#include "common.h" -#include "types.h" -#include "indexer.h" -#include "checkout.h" -#include "remote.h" -#include "transport.h" - - -/** - * @file git2/clone.h - * @brief Git cloning routines - * @defgroup git_clone Git cloning routines - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Options for bypassing the git-aware transport on clone. Bypassing - * it means that instead of a fetch, libgit2 will copy the object - * database directory instead of figuring out what it needs, which is - * faster. If possible, it will hardlink the files to save space. - */ -typedef enum { - /** - * Auto-detect (default), libgit2 will bypass the git-aware - * transport for local paths, but use a normal fetch for - * `file://` urls. - */ - GIT_CLONE_LOCAL_AUTO, - /** - * Bypass the git-aware transport even for a `file://` url. - */ - GIT_CLONE_LOCAL, - /** - * Do no bypass the git-aware transport - */ - GIT_CLONE_NO_LOCAL, - /** - * Bypass the git-aware transport, but do not try to use - * hardlinks. - */ - GIT_CLONE_LOCAL_NO_LINKS, -} git_clone_local_t; - -/** - * The signature of a function matching git_remote_create, with an additional - * void* as a callback payload. - * - * Callers of git_clone may provide a function matching this signature to override - * the remote creation and customization process during a clone operation. - * - * @param out the resulting remote - * @param repo the repository in which to create the remote - * @param name the remote's name - * @param url the remote's url - * @param payload an opaque payload - * @return 0, GIT_EINVALIDSPEC, GIT_EEXISTS or an error code - */ -typedef int GIT_CALLBACK(git_remote_create_cb)( - git_remote **out, - git_repository *repo, - const char *name, - const char *url, - void *payload); - -/** - * The signature of a function matchin git_repository_init, with an - * aditional void * as callback payload. - * - * Callers of git_clone my provide a function matching this signature - * to override the repository creation and customization process - * during a clone operation. - * - * @param out the resulting repository - * @param path path in which to create the repository - * @param bare whether the repository is bare. This is the value from the clone options - * @param payload payload specified by the options - * @return 0, or a negative value to indicate error - */ -typedef int GIT_CALLBACK(git_repository_create_cb)( - git_repository **out, - const char *path, - int bare, - void *payload); - -/** - * Clone options structure - * - * Initialize with `GIT_CLONE_OPTIONS_INIT`. Alternatively, you can - * use `git_clone_options_init`. - * - */ -typedef struct git_clone_options { - unsigned int version; - - /** - * These options are passed to the checkout step. To disable - * checkout, set the `checkout_strategy` to - * `GIT_CHECKOUT_NONE`. - */ - git_checkout_options checkout_opts; - - /** - * Options which control the fetch, including callbacks. - * - * The callbacks are used for reporting fetch progress, and for acquiring - * credentials in the event they are needed. - */ - git_fetch_options fetch_opts; - - /** - * Set to zero (false) to create a standard repo, or non-zero - * for a bare repo - */ - int bare; - - /** - * Whether to use a fetch or copy the object database. - */ - git_clone_local_t local; - - /** - * The name of the branch to checkout. NULL means use the - * remote's default branch. - */ - const char *checkout_branch; - - /** - * A callback used to create the new repository into which to - * clone. If NULL, the 'bare' field will be used to determine - * whether to create a bare repository. - */ - git_repository_create_cb repository_cb; - - /** - * An opaque payload to pass to the git_repository creation callback. - * This parameter is ignored unless repository_cb is non-NULL. - */ - void *repository_cb_payload; - - /** - * A callback used to create the git_remote, prior to its being - * used to perform the clone operation. See the documentation for - * git_remote_create_cb for details. This parameter may be NULL, - * indicating that git_clone should provide default behavior. - */ - git_remote_create_cb remote_cb; - - /** - * An opaque payload to pass to the git_remote creation callback. - * This parameter is ignored unless remote_cb is non-NULL. - */ - void *remote_cb_payload; -} git_clone_options; - -#define GIT_CLONE_OPTIONS_VERSION 1 -#define GIT_CLONE_OPTIONS_INIT { GIT_CLONE_OPTIONS_VERSION, \ - { GIT_CHECKOUT_OPTIONS_VERSION, GIT_CHECKOUT_SAFE }, \ - GIT_FETCH_OPTIONS_INIT } - -/** - * Initialize git_clone_options structure - * - * Initializes a `git_clone_options` with default values. Equivalent to creating - * an instance with GIT_CLONE_OPTIONS_INIT. - * - * @param opts The `git_clone_options` struct to initialize. - * @param version The struct version; pass `GIT_CLONE_OPTIONS_VERSION`. - * @return Zero on success; -1 on failure. - */ -GIT_EXTERN(int) git_clone_options_init( - git_clone_options *opts, - unsigned int version); - -/** - * Clone a remote repository. - * - * By default this creates its repository and initial remote to match - * git's defaults. You can use the options in the callback to - * customize how these are created. - * - * @param out pointer that will receive the resulting repository object - * @param url the remote repository to clone - * @param local_path local directory to clone to - * @param options configuration options for the clone. If NULL, the - * function works as though GIT_OPTIONS_INIT were passed. - * @return 0 on success, any non-zero return value from a callback - * function, or a negative value to indicate an error (use - * `git_error_last` for a detailed error message) - */ -GIT_EXTERN(int) git_clone( - git_repository **out, - const char *url, - const char *local_path, - const git_clone_options *options); - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/commit.h b/libgit2/headers/git2/commit.h deleted file mode 100644 index 4d74b89..0000000 --- a/libgit2/headers/git2/commit.h +++ /dev/null @@ -1,544 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_commit_h__ -#define INCLUDE_git_commit_h__ - -#include "common.h" -#include "types.h" -#include "oid.h" -#include "object.h" - -/** - * @file git2/commit.h - * @brief Git commit parsing, formatting routines - * @defgroup git_commit Git commit parsing, formatting routines - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Lookup a commit object from a repository. - * - * The returned object should be released with `git_commit_free` when no - * longer needed. - * - * @param commit pointer to the looked up commit - * @param repo the repo to use when locating the commit. - * @param id identity of the commit to locate. If the object is - * an annotated tag it will be peeled back to the commit. - * @return 0 or an error code - */ -GIT_EXTERN(int) git_commit_lookup( - git_commit **commit, git_repository *repo, const git_oid *id); - -/** - * Lookup a commit object from a repository, given a prefix of its - * identifier (short id). - * - * The returned object should be released with `git_commit_free` when no - * longer needed. - * - * @see git_object_lookup_prefix - * - * @param commit pointer to the looked up commit - * @param repo the repo to use when locating the commit. - * @param id identity of the commit to locate. If the object is - * an annotated tag it will be peeled back to the commit. - * @param len the length of the short identifier - * @return 0 or an error code - */ -GIT_EXTERN(int) git_commit_lookup_prefix( - git_commit **commit, git_repository *repo, const git_oid *id, size_t len); - -/** - * Close an open commit - * - * This is a wrapper around git_object_free() - * - * IMPORTANT: - * It *is* necessary to call this method when you stop - * using a commit. Failure to do so will cause a memory leak. - * - * @param commit the commit to close - */ - -GIT_EXTERN(void) git_commit_free(git_commit *commit); - -/** - * Get the id of a commit. - * - * @param commit a previously loaded commit. - * @return object identity for the commit. - */ -GIT_EXTERN(const git_oid *) git_commit_id(const git_commit *commit); - -/** - * Get the repository that contains the commit. - * - * @param commit A previously loaded commit. - * @return Repository that contains this commit. - */ -GIT_EXTERN(git_repository *) git_commit_owner(const git_commit *commit); - -/** - * Get the encoding for the message of a commit, - * as a string representing a standard encoding name. - * - * The encoding may be NULL if the `encoding` header - * in the commit is missing; in that case UTF-8 is assumed. - * - * @param commit a previously loaded commit. - * @return NULL, or the encoding - */ -GIT_EXTERN(const char *) git_commit_message_encoding(const git_commit *commit); - -/** - * Get the full message of a commit. - * - * The returned message will be slightly prettified by removing any - * potential leading newlines. - * - * @param commit a previously loaded commit. - * @return the message of a commit - */ -GIT_EXTERN(const char *) git_commit_message(const git_commit *commit); - -/** - * Get the full raw message of a commit. - * - * @param commit a previously loaded commit. - * @return the raw message of a commit - */ -GIT_EXTERN(const char *) git_commit_message_raw(const git_commit *commit); - -/** - * Get the short "summary" of the git commit message. - * - * The returned message is the summary of the commit, comprising the - * first paragraph of the message with whitespace trimmed and squashed. - * - * @param commit a previously loaded commit. - * @return the summary of a commit or NULL on error - */ -GIT_EXTERN(const char *) git_commit_summary(git_commit *commit); - -/** - * Get the long "body" of the git commit message. - * - * The returned message is the body of the commit, comprising - * everything but the first paragraph of the message. Leading and - * trailing whitespaces are trimmed. - * - * @param commit a previously loaded commit. - * @return the body of a commit or NULL when no the message only - * consists of a summary - */ -GIT_EXTERN(const char *) git_commit_body(git_commit *commit); - -/** - * Get the commit time (i.e. committer time) of a commit. - * - * @param commit a previously loaded commit. - * @return the time of a commit - */ -GIT_EXTERN(git_time_t) git_commit_time(const git_commit *commit); - -/** - * Get the commit timezone offset (i.e. committer's preferred timezone) of a commit. - * - * @param commit a previously loaded commit. - * @return positive or negative timezone offset, in minutes from UTC - */ -GIT_EXTERN(int) git_commit_time_offset(const git_commit *commit); - -/** - * Get the committer of a commit. - * - * @param commit a previously loaded commit. - * @return the committer of a commit - */ -GIT_EXTERN(const git_signature *) git_commit_committer(const git_commit *commit); - -/** - * Get the author of a commit. - * - * @param commit a previously loaded commit. - * @return the author of a commit - */ -GIT_EXTERN(const git_signature *) git_commit_author(const git_commit *commit); - -/** - * Get the committer of a commit, using the mailmap to map names and email - * addresses to canonical real names and email addresses. - * - * Call `git_signature_free` to free the signature. - * - * @param out a pointer to store the resolved signature. - * @param commit a previously loaded commit. - * @param mailmap the mailmap to resolve with. (may be NULL) - * @return 0 or an error code - */ -GIT_EXTERN(int) git_commit_committer_with_mailmap( - git_signature **out, const git_commit *commit, const git_mailmap *mailmap); - -/** - * Get the author of a commit, using the mailmap to map names and email - * addresses to canonical real names and email addresses. - * - * Call `git_signature_free` to free the signature. - * - * @param out a pointer to store the resolved signature. - * @param commit a previously loaded commit. - * @param mailmap the mailmap to resolve with. (may be NULL) - * @return 0 or an error code - */ -GIT_EXTERN(int) git_commit_author_with_mailmap( - git_signature **out, const git_commit *commit, const git_mailmap *mailmap); - -/** - * Get the full raw text of the commit header. - * - * @param commit a previously loaded commit - * @return the header text of the commit - */ -GIT_EXTERN(const char *) git_commit_raw_header(const git_commit *commit); - -/** - * Get the tree pointed to by a commit. - * - * @param tree_out pointer where to store the tree object - * @param commit a previously loaded commit. - * @return 0 or an error code - */ -GIT_EXTERN(int) git_commit_tree(git_tree **tree_out, const git_commit *commit); - -/** - * Get the id of the tree pointed to by a commit. This differs from - * `git_commit_tree` in that no attempts are made to fetch an object - * from the ODB. - * - * @param commit a previously loaded commit. - * @return the id of tree pointed to by commit. - */ -GIT_EXTERN(const git_oid *) git_commit_tree_id(const git_commit *commit); - -/** - * Get the number of parents of this commit - * - * @param commit a previously loaded commit. - * @return integer of count of parents - */ -GIT_EXTERN(unsigned int) git_commit_parentcount(const git_commit *commit); - -/** - * Get the specified parent of the commit. - * - * @param out Pointer where to store the parent commit - * @param commit a previously loaded commit. - * @param n the position of the parent (from 0 to `parentcount`) - * @return 0 or an error code - */ -GIT_EXTERN(int) git_commit_parent( - git_commit **out, - const git_commit *commit, - unsigned int n); - -/** - * Get the oid of a specified parent for a commit. This is different from - * `git_commit_parent`, which will attempt to load the parent commit from - * the ODB. - * - * @param commit a previously loaded commit. - * @param n the position of the parent (from 0 to `parentcount`) - * @return the id of the parent, NULL on error. - */ -GIT_EXTERN(const git_oid *) git_commit_parent_id( - const git_commit *commit, - unsigned int n); - -/** - * Get the commit object that is the th generation ancestor - * of the named commit object, following only the first parents. - * The returned commit has to be freed by the caller. - * - * Passing `0` as the generation number returns another instance of the - * base commit itself. - * - * @param ancestor Pointer where to store the ancestor commit - * @param commit a previously loaded commit. - * @param n the requested generation - * @return 0 on success; GIT_ENOTFOUND if no matching ancestor exists - * or an error code - */ -GIT_EXTERN(int) git_commit_nth_gen_ancestor( - git_commit **ancestor, - const git_commit *commit, - unsigned int n); - -/** - * Get an arbitrary header field - * - * @param out the buffer to fill; existing content will be - * overwritten - * @param commit the commit to look in - * @param field the header field to return - * @return 0 on succeess, GIT_ENOTFOUND if the field does not exist, - * or an error code - */ -GIT_EXTERN(int) git_commit_header_field(git_buf *out, const git_commit *commit, const char *field); - -/** - * Extract the signature from a commit - * - * If the id is not for a commit, the error class will be - * `GIT_ERROR_INVALID`. If the commit does not have a signature, the - * error class will be `GIT_ERROR_OBJECT`. - * - * @param signature the signature block; existing content will be - * overwritten - * @param signed_data signed data; this is the commit contents minus the signature block; - * existing content will be overwritten - * @param repo the repository in which the commit exists - * @param commit_id the commit from which to extract the data - * @param field the name of the header field containing the signature - * block; pass `NULL` to extract the default 'gpgsig' - * @return 0 on success, GIT_ENOTFOUND if the id is not for a commit - * or the commit does not have a signature. - */ -GIT_EXTERN(int) git_commit_extract_signature(git_buf *signature, git_buf *signed_data, git_repository *repo, git_oid *commit_id, const char *field); - -/** - * Create new commit in the repository from a list of `git_object` pointers - * - * The message will **not** be cleaned up automatically. You can do that - * with the `git_message_prettify()` function. - * - * @param id Pointer in which to store the OID of the newly created commit - * - * @param repo Repository where to store the commit - * - * @param update_ref If not NULL, name of the reference that - * will be updated to point to this commit. If the reference - * is not direct, it will be resolved to a direct reference. - * Use "HEAD" to update the HEAD of the current branch and - * make it point to this commit. If the reference doesn't - * exist yet, it will be created. If it does exist, the first - * parent must be the tip of this branch. - * - * @param author Signature with author and author time of commit - * - * @param committer Signature with committer and * commit time of commit - * - * @param message_encoding The encoding for the message in the - * commit, represented with a standard encoding name. - * E.g. "UTF-8". If NULL, no encoding header is written and - * UTF-8 is assumed. - * - * @param message Full message for this commit - * - * @param tree An instance of a `git_tree` object that will - * be used as the tree for the commit. This tree object must - * also be owned by the given `repo`. - * - * @param parent_count Number of parents for this commit - * - * @param parents Array of `parent_count` pointers to `git_commit` - * objects that will be used as the parents for this commit. This - * array may be NULL if `parent_count` is 0 (root commit). All the - * given commits must be owned by the `repo`. - * - * @return 0 or an error code - * The created commit will be written to the Object Database and - * the given reference will be updated to point to it - */ -GIT_EXTERN(int) git_commit_create( - git_oid *id, - git_repository *repo, - const char *update_ref, - const git_signature *author, - const git_signature *committer, - const char *message_encoding, - const char *message, - const git_tree *tree, - size_t parent_count, - const git_commit *parents[]); - -/** - * Create new commit in the repository using a variable argument list. - * - * The message will **not** be cleaned up automatically. You can do that - * with the `git_message_prettify()` function. - * - * The parents for the commit are specified as a variable list of pointers - * to `const git_commit *`. Note that this is a convenience method which may - * not be safe to export for certain languages or compilers - * - * All other parameters remain the same as `git_commit_create()`. - * - * @see git_commit_create - */ -GIT_EXTERN(int) git_commit_create_v( - git_oid *id, - git_repository *repo, - const char *update_ref, - const git_signature *author, - const git_signature *committer, - const char *message_encoding, - const char *message, - const git_tree *tree, - size_t parent_count, - ...); - -/** - * Amend an existing commit by replacing only non-NULL values. - * - * This creates a new commit that is exactly the same as the old commit, - * except that any non-NULL values will be updated. The new commit has - * the same parents as the old commit. - * - * The `update_ref` value works as in the regular `git_commit_create()`, - * updating the ref to point to the newly rewritten commit. If you want - * to amend a commit that is not currently the tip of the branch and then - * rewrite the following commits to reach a ref, pass this as NULL and - * update the rest of the commit chain and ref separately. - * - * Unlike `git_commit_create()`, the `author`, `committer`, `message`, - * `message_encoding`, and `tree` parameters can be NULL in which case this - * will use the values from the original `commit_to_amend`. - * - * All parameters have the same meanings as in `git_commit_create()`. - * - * @see git_commit_create - */ -GIT_EXTERN(int) git_commit_amend( - git_oid *id, - const git_commit *commit_to_amend, - const char *update_ref, - const git_signature *author, - const git_signature *committer, - const char *message_encoding, - const char *message, - const git_tree *tree); - -/** - * Create a commit and write it into a buffer - * - * Create a commit as with `git_commit_create()` but instead of - * writing it to the objectdb, write the contents of the object into a - * buffer. - * - * @param out the buffer into which to write the commit object content - * - * @param repo Repository where the referenced tree and parents live - * - * @param author Signature with author and author time of commit - * - * @param committer Signature with committer and * commit time of commit - * - * @param message_encoding The encoding for the message in the - * commit, represented with a standard encoding name. - * E.g. "UTF-8". If NULL, no encoding header is written and - * UTF-8 is assumed. - * - * @param message Full message for this commit - * - * @param tree An instance of a `git_tree` object that will - * be used as the tree for the commit. This tree object must - * also be owned by the given `repo`. - * - * @param parent_count Number of parents for this commit - * - * @param parents Array of `parent_count` pointers to `git_commit` - * objects that will be used as the parents for this commit. This - * array may be NULL if `parent_count` is 0 (root commit). All the - * given commits must be owned by the `repo`. - * - * @return 0 or an error code - */ -GIT_EXTERN(int) git_commit_create_buffer( - git_buf *out, - git_repository *repo, - const git_signature *author, - const git_signature *committer, - const char *message_encoding, - const char *message, - const git_tree *tree, - size_t parent_count, - const git_commit *parents[]); - -/** - * Create a commit object from the given buffer and signature - * - * Given the unsigned commit object's contents, its signature and the - * header field in which to store the signature, attach the signature - * to the commit and write it into the given repository. - * - * @param out the resulting commit id - * @param commit_content the content of the unsigned commit object - * @param signature the signature to add to the commit. Leave `NULL` - * to create a commit without adding a signature field. - * @param signature_field which header field should contain this - * signature. Leave `NULL` for the default of "gpgsig" - * @return 0 or an error code - */ -GIT_EXTERN(int) git_commit_create_with_signature( - git_oid *out, - git_repository *repo, - const char *commit_content, - const char *signature, - const char *signature_field); - -/** - * Create an in-memory copy of a commit. The copy must be explicitly - * free'd or it will leak. - * - * @param out Pointer to store the copy of the commit - * @param source Original commit to copy - */ -GIT_EXTERN(int) git_commit_dup(git_commit **out, git_commit *source); - -/** - * Commit creation callback: used when a function is going to create - * commits (for example, in `git_rebase_commit`) to allow callers to - * override the commit creation behavior. For example, users may - * wish to sign commits by providing this information to - * `git_commit_create_buffer`, signing that buffer, then calling - * `git_commit_create_with_signature`. The resultant commit id - * should be set in the `out` object id parameter. - * - * @param out pointer that this callback will populate with the object - * id of the commit that is created - * @param author the author name and time of the commit - * @param committer the committer name and time of the commit - * @param message_encoding the encoding of the given message, or NULL - * to assume UTF8 - * @param message the commit message - * @param tree the tree to be committed - * @param parent_count the number of parents for this commit - * @param parents the commit parents - * @param payload the payload pointer in the rebase options - * @return 0 if this callback has created the commit and populated the out - * parameter, GIT_PASSTHROUGH if the callback has not created a - * commit and wants the calling function to create the commit as - * if no callback had been specified, any other value to stop - * and return a failure - */ -typedef int (*git_commit_create_cb)( - git_oid *out, - const git_signature *author, - const git_signature *committer, - const char *message_encoding, - const char *message, - const git_tree *tree, - size_t parent_count, - const git_commit *parents[], - void *payload); - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/common.h b/libgit2/headers/git2/common.h deleted file mode 100644 index 2ee8290..0000000 --- a/libgit2/headers/git2/common.h +++ /dev/null @@ -1,461 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_common_h__ -#define INCLUDE_git_common_h__ - -#include -#include - -#ifdef __cplusplus -# define GIT_BEGIN_DECL extern "C" { -# define GIT_END_DECL } -#else - /** Start declarations in C mode */ -# define GIT_BEGIN_DECL /* empty */ - /** End declarations in C mode */ -# define GIT_END_DECL /* empty */ -#endif - -#if defined(_MSC_VER) && _MSC_VER < 1800 -# include -#elif !defined(__CLANG_INTTYPES_H) -# include -#endif - -#ifdef DOCURIUM -/* - * This is so clang's doc parser acknowledges comments on functions - * with size_t parameters. - */ -typedef size_t size_t; -#endif - -/** Declare a public function exported for application use. */ -#if __GNUC__ >= 4 -# define GIT_EXTERN(type) extern \ - __attribute__((visibility("default"))) \ - type -#elif defined(_MSC_VER) -# define GIT_EXTERN(type) __declspec(dllexport) type __cdecl -#else -# define GIT_EXTERN(type) extern type -#endif - -/** Declare a callback function for application use. */ -#if defined(_MSC_VER) -# define GIT_CALLBACK(name) (__cdecl *name) -#else -# define GIT_CALLBACK(name) (*name) -#endif - -/** Declare a function as deprecated. */ -#if defined(__GNUC__) -# define GIT_DEPRECATED(func) \ - __attribute__((deprecated)) \ - __attribute__((used)) \ - func -#elif defined(_MSC_VER) -# define GIT_DEPRECATED(func) __declspec(deprecated) func -#else -# define GIT_DEPRECATED(func) func -#endif - -/** Declare a function's takes printf style arguments. */ -#ifdef __GNUC__ -# define GIT_FORMAT_PRINTF(a,b) __attribute__((format (printf, a, b))) -#else -# define GIT_FORMAT_PRINTF(a,b) /* empty */ -#endif - -#if (defined(_WIN32)) && !defined(__CYGWIN__) -#define GIT_WIN32 1 -#endif - -#ifdef __amigaos4__ -#include -#endif - -/** - * @file git2/common.h - * @brief Git common platform definitions - * @defgroup git_common Git common platform definitions - * @ingroup Git - * @{ - */ - -GIT_BEGIN_DECL - -/** - * The separator used in path list strings (ie like in the PATH - * environment variable). A semi-colon ";" is used on Windows and - * AmigaOS, and a colon ":" for all other systems. - */ -#if defined(GIT_WIN32) || defined(AMIGA) -#define GIT_PATH_LIST_SEPARATOR ';' -#else -#define GIT_PATH_LIST_SEPARATOR ':' -#endif - -/** - * The maximum length of a valid git path. - */ -#define GIT_PATH_MAX 4096 - -/** - * The string representation of the null object ID. - */ -#define GIT_OID_HEX_ZERO "0000000000000000000000000000000000000000" - -/** - * Return the version of the libgit2 library - * being currently used. - * - * @param major Store the major version number - * @param minor Store the minor version number - * @param rev Store the revision (patch) number - * @return 0 on success or an error code on failure - */ -GIT_EXTERN(int) git_libgit2_version(int *major, int *minor, int *rev); - -/** - * Combinations of these values describe the features with which libgit2 - * was compiled - */ -typedef enum { - /** - * If set, libgit2 was built thread-aware and can be safely used from multiple - * threads. - */ - GIT_FEATURE_THREADS = (1 << 0), - /** - * If set, libgit2 was built with and linked against a TLS implementation. - * Custom TLS streams may still be added by the user to support HTTPS - * regardless of this. - */ - GIT_FEATURE_HTTPS = (1 << 1), - /** - * If set, libgit2 was built with and linked against libssh2. A custom - * transport may still be added by the user to support libssh2 regardless of - * this. - */ - GIT_FEATURE_SSH = (1 << 2), - /** - * If set, libgit2 was built with support for sub-second resolution in file - * modification times. - */ - GIT_FEATURE_NSEC = (1 << 3), -} git_feature_t; - -/** - * Query compile time options for libgit2. - * - * @return A combination of GIT_FEATURE_* values. - * - * - GIT_FEATURE_THREADS - * Libgit2 was compiled with thread support. Note that thread support is - * still to be seen as a 'work in progress' - basic object lookups are - * believed to be threadsafe, but other operations may not be. - * - * - GIT_FEATURE_HTTPS - * Libgit2 supports the https:// protocol. This requires the openssl - * library to be found when compiling libgit2. - * - * - GIT_FEATURE_SSH - * Libgit2 supports the SSH protocol for network operations. This requires - * the libssh2 library to be found when compiling libgit2 - */ -GIT_EXTERN(int) git_libgit2_features(void); - -/** - * Global library options - * - * These are used to select which global option to set or get and are - * used in `git_libgit2_opts()`. - */ -typedef enum { - GIT_OPT_GET_MWINDOW_SIZE, - GIT_OPT_SET_MWINDOW_SIZE, - GIT_OPT_GET_MWINDOW_MAPPED_LIMIT, - GIT_OPT_SET_MWINDOW_MAPPED_LIMIT, - GIT_OPT_GET_SEARCH_PATH, - GIT_OPT_SET_SEARCH_PATH, - GIT_OPT_SET_CACHE_OBJECT_LIMIT, - GIT_OPT_SET_CACHE_MAX_SIZE, - GIT_OPT_ENABLE_CACHING, - GIT_OPT_GET_CACHED_MEMORY, - GIT_OPT_GET_TEMPLATE_PATH, - GIT_OPT_SET_TEMPLATE_PATH, - GIT_OPT_SET_SSL_CERT_LOCATIONS, - GIT_OPT_SET_USER_AGENT, - GIT_OPT_ENABLE_STRICT_OBJECT_CREATION, - GIT_OPT_ENABLE_STRICT_SYMBOLIC_REF_CREATION, - GIT_OPT_SET_SSL_CIPHERS, - GIT_OPT_GET_USER_AGENT, - GIT_OPT_ENABLE_OFS_DELTA, - GIT_OPT_ENABLE_FSYNC_GITDIR, - GIT_OPT_GET_WINDOWS_SHAREMODE, - GIT_OPT_SET_WINDOWS_SHAREMODE, - GIT_OPT_ENABLE_STRICT_HASH_VERIFICATION, - GIT_OPT_SET_ALLOCATOR, - GIT_OPT_ENABLE_UNSAVED_INDEX_SAFETY, - GIT_OPT_GET_PACK_MAX_OBJECTS, - GIT_OPT_SET_PACK_MAX_OBJECTS, - GIT_OPT_DISABLE_PACK_KEEP_FILE_CHECKS, - GIT_OPT_ENABLE_HTTP_EXPECT_CONTINUE, - GIT_OPT_GET_MWINDOW_FILE_LIMIT, - GIT_OPT_SET_MWINDOW_FILE_LIMIT, - GIT_OPT_SET_ODB_PACKED_PRIORITY, - GIT_OPT_SET_ODB_LOOSE_PRIORITY, - GIT_OPT_GET_EXTENSIONS, - GIT_OPT_SET_EXTENSIONS -} git_libgit2_opt_t; - -/** - * Set or query a library global option - * - * Available options: - * - * * opts(GIT_OPT_GET_MWINDOW_SIZE, size_t *): - * - * > Get the maximum mmap window size - * - * * opts(GIT_OPT_SET_MWINDOW_SIZE, size_t): - * - * > Set the maximum mmap window size - * - * * opts(GIT_OPT_GET_MWINDOW_MAPPED_LIMIT, size_t *): - * - * > Get the maximum memory that will be mapped in total by the library - * - * * opts(GIT_OPT_SET_MWINDOW_MAPPED_LIMIT, size_t): - * - * > Set the maximum amount of memory that can be mapped at any time - * > by the library - * - * * opts(GIT_OPT_GET_MWINDOW_FILE_LIMIT, size_t *): - * - * > Get the maximum number of files that will be mapped at any time by the - * > library - * - * * opts(GIT_OPT_SET_MWINDOW_FILE_LIMIT, size_t): - * - * > Set the maximum number of files that can be mapped at any time - * > by the library. The default (0) is unlimited. - * - * * opts(GIT_OPT_GET_SEARCH_PATH, int level, git_buf *buf) - * - * > Get the search path for a given level of config data. "level" must - * > be one of `GIT_CONFIG_LEVEL_SYSTEM`, `GIT_CONFIG_LEVEL_GLOBAL`, - * > `GIT_CONFIG_LEVEL_XDG`, or `GIT_CONFIG_LEVEL_PROGRAMDATA`. - * > The search path is written to the `out` buffer. - * - * * opts(GIT_OPT_SET_SEARCH_PATH, int level, const char *path) - * - * > Set the search path for a level of config data. The search path - * > applied to shared attributes and ignore files, too. - * > - * > - `path` lists directories delimited by GIT_PATH_LIST_SEPARATOR. - * > Pass NULL to reset to the default (generally based on environment - * > variables). Use magic path `$PATH` to include the old value - * > of the path (if you want to prepend or append, for instance). - * > - * > - `level` must be `GIT_CONFIG_LEVEL_SYSTEM`, - * > `GIT_CONFIG_LEVEL_GLOBAL`, `GIT_CONFIG_LEVEL_XDG`, or - * > `GIT_CONFIG_LEVEL_PROGRAMDATA`. - * - * * opts(GIT_OPT_SET_CACHE_OBJECT_LIMIT, git_object_t type, size_t size) - * - * > Set the maximum data size for the given type of object to be - * > considered eligible for caching in memory. Setting to value to - * > zero means that that type of object will not be cached. - * > Defaults to 0 for GIT_OBJECT_BLOB (i.e. won't cache blobs) and 4k - * > for GIT_OBJECT_COMMIT, GIT_OBJECT_TREE, and GIT_OBJECT_TAG. - * - * * opts(GIT_OPT_SET_CACHE_MAX_SIZE, ssize_t max_storage_bytes) - * - * > Set the maximum total data size that will be cached in memory - * > across all repositories before libgit2 starts evicting objects - * > from the cache. This is a soft limit, in that the library might - * > briefly exceed it, but will start aggressively evicting objects - * > from cache when that happens. The default cache size is 256MB. - * - * * opts(GIT_OPT_ENABLE_CACHING, int enabled) - * - * > Enable or disable caching completely. - * > - * > Because caches are repository-specific, disabling the cache - * > cannot immediately clear all cached objects, but each cache will - * > be cleared on the next attempt to update anything in it. - * - * * opts(GIT_OPT_GET_CACHED_MEMORY, ssize_t *current, ssize_t *allowed) - * - * > Get the current bytes in cache and the maximum that would be - * > allowed in the cache. - * - * * opts(GIT_OPT_GET_TEMPLATE_PATH, git_buf *out) - * - * > Get the default template path. - * > The path is written to the `out` buffer. - * - * * opts(GIT_OPT_SET_TEMPLATE_PATH, const char *path) - * - * > Set the default template path. - * > - * > - `path` directory of template. - * - * * opts(GIT_OPT_SET_SSL_CERT_LOCATIONS, const char *file, const char *path) - * - * > Set the SSL certificate-authority locations. - * > - * > - `file` is the location of a file containing several - * > certificates concatenated together. - * > - `path` is the location of a directory holding several - * > certificates, one per file. - * > - * > Either parameter may be `NULL`, but not both. - * - * * opts(GIT_OPT_SET_USER_AGENT, const char *user_agent) - * - * > Set the value of the User-Agent header. This value will be - * > appended to "git/1.0", for compatibility with other git clients. - * > - * > - `user_agent` is the value that will be delivered as the - * > User-Agent header on HTTP requests. - * - * * opts(GIT_OPT_SET_WINDOWS_SHAREMODE, unsigned long value) - * - * > Set the share mode used when opening files on Windows. - * > For more information, see the documentation for CreateFile. - * > The default is: FILE_SHARE_READ | FILE_SHARE_WRITE. This is - * > ignored and unused on non-Windows platforms. - * - * * opts(GIT_OPT_GET_WINDOWS_SHAREMODE, unsigned long *value) - * - * > Get the share mode used when opening files on Windows. - * - * * opts(GIT_OPT_ENABLE_STRICT_OBJECT_CREATION, int enabled) - * - * > Enable strict input validation when creating new objects - * > to ensure that all inputs to the new objects are valid. For - * > example, when this is enabled, the parent(s) and tree inputs - * > will be validated when creating a new commit. This defaults - * > to enabled. - * - * * opts(GIT_OPT_ENABLE_STRICT_SYMBOLIC_REF_CREATION, int enabled) - * - * > Validate the target of a symbolic ref when creating it. For - * > example, `foobar` is not a valid ref, therefore `foobar` is - * > not a valid target for a symbolic ref by default, whereas - * > `refs/heads/foobar` is. Disabling this bypasses validation - * > so that an arbitrary strings such as `foobar` can be used - * > for a symbolic ref target. This defaults to enabled. - * - * * opts(GIT_OPT_SET_SSL_CIPHERS, const char *ciphers) - * - * > Set the SSL ciphers use for HTTPS connections. - * > - * > - `ciphers` is the list of ciphers that are eanbled. - * - * * opts(GIT_OPT_GET_USER_AGENT, git_buf *out) - * - * > Get the value of the User-Agent header. - * > The User-Agent is written to the `out` buffer. - * - * * opts(GIT_OPT_ENABLE_OFS_DELTA, int enabled) - * - * > Enable or disable the use of "offset deltas" when creating packfiles, - * > and the negotiation of them when talking to a remote server. - * > Offset deltas store a delta base location as an offset into the - * > packfile from the current location, which provides a shorter encoding - * > and thus smaller resultant packfiles. - * > Packfiles containing offset deltas can still be read. - * > This defaults to enabled. - * - * * opts(GIT_OPT_ENABLE_FSYNC_GITDIR, int enabled) - * - * > Enable synchronized writes of files in the gitdir using `fsync` - * > (or the platform equivalent) to ensure that new object data - * > is written to permanent storage, not simply cached. This - * > defaults to disabled. - * - * opts(GIT_OPT_ENABLE_STRICT_HASH_VERIFICATION, int enabled) - * - * > Enable strict verification of object hashsums when reading - * > objects from disk. This may impact performance due to an - * > additional checksum calculation on each object. This defaults - * > to enabled. - * - * opts(GIT_OPT_SET_ALLOCATOR, git_allocator *allocator) - * - * > Set the memory allocator to a different memory allocator. This - * > allocator will then be used to make all memory allocations for - * > libgit2 operations. If the given `allocator` is NULL, then the - * > system default will be restored. - * - * opts(GIT_OPT_ENABLE_UNSAVED_INDEX_SAFETY, int enabled) - * - * > Ensure that there are no unsaved changes in the index before - * > beginning any operation that reloads the index from disk (eg, - * > checkout). If there are unsaved changes, the instruction will - * > fail. (Using the FORCE flag to checkout will still overwrite - * > these changes.) - * - * opts(GIT_OPT_GET_PACK_MAX_OBJECTS, size_t *out) - * - * > Get the maximum number of objects libgit2 will allow in a pack - * > file when downloading a pack file from a remote. This can be - * > used to limit maximum memory usage when fetching from an untrusted - * > remote. - * - * opts(GIT_OPT_SET_PACK_MAX_OBJECTS, size_t objects) - * - * > Set the maximum number of objects libgit2 will allow in a pack - * > file when downloading a pack file from a remote. - * - * opts(GIT_OPT_DISABLE_PACK_KEEP_FILE_CHECKS, int enabled) - * > This will cause .keep file existence checks to be skipped when - * > accessing packfiles, which can help performance with remote filesystems. - * - * opts(GIT_OPT_ENABLE_HTTP_EXPECT_CONTINUE, int enabled) - * > When connecting to a server using NTLM or Negotiate - * > authentication, use expect/continue when POSTing data. - * > This option is not available on Windows. - * - * opts(GIT_OPT_SET_ODB_PACKED_PRIORITY, int priority) - * > Override the default priority of the packed ODB backend which - * > is added when default backends are assigned to a repository - * - * opts(GIT_OPT_SET_ODB_LOOSE_PRIORITY, int priority) - * > Override the default priority of the loose ODB backend which - * > is added when default backends are assigned to a repository - * - * opts(GIT_OPT_GET_EXTENSIONS, git_strarray *out) - * > Returns the list of git extensions that are supported. This - * > is the list of built-in extensions supported by libgit2 and - * > custom extensions that have been added with - * > `GIT_OPT_SET_EXTENSIONS`. Extensions that have been negated - * > will not be returned. The returned list should be released - * > with `git_strarray_dispose`. - * - * opts(GIT_OPT_SET_EXTENSIONS, const char **extensions, size_t len) - * > Set that the given git extensions are supported by the caller. - * > Extensions supported by libgit2 may be negated by prefixing - * > them with a `!`. For example: setting extensions to - * > { "!noop", "newext" } indicates that the caller does not want - * > to support repositories with the `noop` extension but does want - * > to support repositories with the `newext` extension. - * - * @param option Option key - * @param ... value to set the option - * @return 0 on success, <0 on failure - */ -GIT_EXTERN(int) git_libgit2_opts(int option, ...); - -/** @} */ -GIT_END_DECL - -#endif diff --git a/libgit2/headers/git2/config.h b/libgit2/headers/git2/config.h deleted file mode 100644 index 7c8e388..0000000 --- a/libgit2/headers/git2/config.h +++ /dev/null @@ -1,766 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_config_h__ -#define INCLUDE_git_config_h__ - -#include "common.h" -#include "types.h" -#include "buffer.h" - -/** - * @file git2/config.h - * @brief Git config management routines - * @defgroup git_config Git config management routines - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Priority level of a config file. - * These priority levels correspond to the natural escalation logic - * (from higher to lower) when searching for config entries in git.git. - * - * git_config_open_default() and git_repository_config() honor those - * priority levels as well. - */ -typedef enum { - /** System-wide on Windows, for compatibility with portable git */ - GIT_CONFIG_LEVEL_PROGRAMDATA = 1, - - /** System-wide configuration file; /etc/gitconfig on Linux systems */ - GIT_CONFIG_LEVEL_SYSTEM = 2, - - /** XDG compatible configuration file; typically ~/.config/git/config */ - GIT_CONFIG_LEVEL_XDG = 3, - - /** User-specific configuration file (also called Global configuration - * file); typically ~/.gitconfig - */ - GIT_CONFIG_LEVEL_GLOBAL = 4, - - /** Repository specific configuration file; $WORK_DIR/.git/config on - * non-bare repos - */ - GIT_CONFIG_LEVEL_LOCAL = 5, - - /** Application specific configuration file; freely defined by applications - */ - GIT_CONFIG_LEVEL_APP = 6, - - /** Represents the highest level available config file (i.e. the most - * specific config file available that actually is loaded) - */ - GIT_CONFIG_HIGHEST_LEVEL = -1, -} git_config_level_t; - -/** - * An entry in a configuration file - */ -typedef struct git_config_entry { - const char *name; /**< Name of the entry (normalised) */ - const char *value; /**< String value of the entry */ - unsigned int include_depth; /**< Depth of includes where this variable was found */ - git_config_level_t level; /**< Which config file this was found in */ - void GIT_CALLBACK(free)(struct git_config_entry *entry); /**< Free function for this entry */ - void *payload; /**< Opaque value for the free function. Do not read or write */ -} git_config_entry; - -/** - * Free a config entry - */ -GIT_EXTERN(void) git_config_entry_free(git_config_entry *); - -/** - * A config enumeration callback - * - * @param entry the entry currently being enumerated - * @param payload a user-specified pointer - */ -typedef int GIT_CALLBACK(git_config_foreach_cb)(const git_config_entry *entry, void *payload); - -/** - * An opaque structure for a configuration iterator - */ -typedef struct git_config_iterator git_config_iterator; - -/** - * Config var type - */ -typedef enum { - GIT_CONFIGMAP_FALSE = 0, - GIT_CONFIGMAP_TRUE = 1, - GIT_CONFIGMAP_INT32, - GIT_CONFIGMAP_STRING -} git_configmap_t; - -/** - * Mapping from config variables to values. - */ -typedef struct { - git_configmap_t type; - const char *str_match; - int map_value; -} git_configmap; - -/** - * Locate the path to the global configuration file - * - * The user or global configuration file is usually - * located in `$HOME/.gitconfig`. - * - * This method will try to guess the full path to that - * file, if the file exists. The returned path - * may be used on any `git_config` call to load the - * global configuration file. - * - * This method will not guess the path to the xdg compatible - * config file (.config/git/config). - * - * @param out Pointer to a user-allocated git_buf in which to store the path - * @return 0 if a global configuration file has been found. Its path will be stored in `out`. - */ -GIT_EXTERN(int) git_config_find_global(git_buf *out); - -/** - * Locate the path to the global xdg compatible configuration file - * - * The xdg compatible configuration file is usually - * located in `$HOME/.config/git/config`. - * - * This method will try to guess the full path to that - * file, if the file exists. The returned path - * may be used on any `git_config` call to load the - * xdg compatible configuration file. - * - * @param out Pointer to a user-allocated git_buf in which to store the path - * @return 0 if a xdg compatible configuration file has been - * found. Its path will be stored in `out`. - */ -GIT_EXTERN(int) git_config_find_xdg(git_buf *out); - -/** - * Locate the path to the system configuration file - * - * If /etc/gitconfig doesn't exist, it will look for - * %PROGRAMFILES%\Git\etc\gitconfig. - * - * @param out Pointer to a user-allocated git_buf in which to store the path - * @return 0 if a system configuration file has been - * found. Its path will be stored in `out`. - */ -GIT_EXTERN(int) git_config_find_system(git_buf *out); - -/** - * Locate the path to the configuration file in ProgramData - * - * Look for the file in %PROGRAMDATA%\Git\config used by portable git. - * - * @param out Pointer to a user-allocated git_buf in which to store the path - * @return 0 if a ProgramData configuration file has been - * found. Its path will be stored in `out`. - */ -GIT_EXTERN(int) git_config_find_programdata(git_buf *out); - -/** - * Open the global, XDG and system configuration files - * - * Utility wrapper that finds the global, XDG and system configuration files - * and opens them into a single prioritized config object that can be - * used when accessing default config data outside a repository. - * - * @param out Pointer to store the config instance - * @return 0 or an error code - */ -GIT_EXTERN(int) git_config_open_default(git_config **out); - -/** - * Allocate a new configuration object - * - * This object is empty, so you have to add a file to it before you - * can do anything with it. - * - * @param out pointer to the new configuration - * @return 0 or an error code - */ -GIT_EXTERN(int) git_config_new(git_config **out); - -/** - * Add an on-disk config file instance to an existing config - * - * The on-disk file pointed at by `path` will be opened and - * parsed; it's expected to be a native Git config file following - * the default Git config syntax (see man git-config). - * - * If the file does not exist, the file will still be added and it - * will be created the first time we write to it. - * - * Note that the configuration object will free the file - * automatically. - * - * Further queries on this config object will access each - * of the config file instances in order (instances with - * a higher priority level will be accessed first). - * - * @param cfg the configuration to add the file to - * @param path path to the configuration file to add - * @param level the priority level of the backend - * @param force replace config file at the given priority level - * @param repo optional repository to allow parsing of - * conditional includes - * @return 0 on success, GIT_EEXISTS when adding more than one file - * for a given priority level (and force_replace set to 0), - * GIT_ENOTFOUND when the file doesn't exist or error code - */ -GIT_EXTERN(int) git_config_add_file_ondisk( - git_config *cfg, - const char *path, - git_config_level_t level, - const git_repository *repo, - int force); - -/** - * Create a new config instance containing a single on-disk file - * - * This method is a simple utility wrapper for the following sequence - * of calls: - * - git_config_new - * - git_config_add_file_ondisk - * - * @param out The configuration instance to create - * @param path Path to the on-disk file to open - * @return 0 on success, or an error code - */ -GIT_EXTERN(int) git_config_open_ondisk(git_config **out, const char *path); - -/** - * Build a single-level focused config object from a multi-level one. - * - * The returned config object can be used to perform get/set/delete operations - * on a single specific level. - * - * Getting several times the same level from the same parent multi-level config - * will return different config instances, but containing the same config_file - * instance. - * - * @param out The configuration instance to create - * @param parent Multi-level config to search for the given level - * @param level Configuration level to search for - * @return 0, GIT_ENOTFOUND if the passed level cannot be found in the - * multi-level parent config, or an error code - */ -GIT_EXTERN(int) git_config_open_level( - git_config **out, - const git_config *parent, - git_config_level_t level); - -/** - * Open the global/XDG configuration file according to git's rules - * - * Git allows you to store your global configuration at - * `$HOME/.gitconfig` or `$XDG_CONFIG_HOME/git/config`. For backwards - * compatibility, the XDG file shouldn't be used unless the use has - * created it explicitly. With this function you'll open the correct - * one to write to. - * - * @param out pointer in which to store the config object - * @param config the config object in which to look - */ -GIT_EXTERN(int) git_config_open_global(git_config **out, git_config *config); - -/** - * Create a snapshot of the configuration - * - * Create a snapshot of the current state of a configuration, which - * allows you to look into a consistent view of the configuration for - * looking up complex values (e.g. a remote, submodule). - * - * The string returned when querying such a config object is valid - * until it is freed. - * - * @param out pointer in which to store the snapshot config object - * @param config configuration to snapshot - * @return 0 or an error code - */ -GIT_EXTERN(int) git_config_snapshot(git_config **out, git_config *config); - -/** - * Free the configuration and its associated memory and files - * - * @param cfg the configuration to free - */ -GIT_EXTERN(void) git_config_free(git_config *cfg); - -/** - * Get the git_config_entry of a config variable. - * - * Free the git_config_entry after use with `git_config_entry_free()`. - * - * @param out pointer to the variable git_config_entry - * @param cfg where to look for the variable - * @param name the variable's name - * @return 0 or an error code - */ -GIT_EXTERN(int) git_config_get_entry( - git_config_entry **out, - const git_config *cfg, - const char *name); - -/** - * Get the value of an integer config variable. - * - * All config files will be looked into, in the order of their - * defined level. A higher level means a higher priority. The - * first occurrence of the variable will be returned here. - * - * @param out pointer to the variable where the value should be stored - * @param cfg where to look for the variable - * @param name the variable's name - * @return 0 or an error code - */ -GIT_EXTERN(int) git_config_get_int32(int32_t *out, const git_config *cfg, const char *name); - -/** - * Get the value of a long integer config variable. - * - * All config files will be looked into, in the order of their - * defined level. A higher level means a higher priority. The - * first occurrence of the variable will be returned here. - * - * @param out pointer to the variable where the value should be stored - * @param cfg where to look for the variable - * @param name the variable's name - * @return 0 or an error code - */ -GIT_EXTERN(int) git_config_get_int64(int64_t *out, const git_config *cfg, const char *name); - -/** - * Get the value of a boolean config variable. - * - * This function uses the usual C convention of 0 being false and - * anything else true. - * - * All config files will be looked into, in the order of their - * defined level. A higher level means a higher priority. The - * first occurrence of the variable will be returned here. - * - * @param out pointer to the variable where the value should be stored - * @param cfg where to look for the variable - * @param name the variable's name - * @return 0 or an error code - */ -GIT_EXTERN(int) git_config_get_bool(int *out, const git_config *cfg, const char *name); - -/** - * Get the value of a path config variable. - * - * A leading '~' will be expanded to the global search path (which - * defaults to the user's home directory but can be overridden via - * `git_libgit2_opts()`. - * - * All config files will be looked into, in the order of their - * defined level. A higher level means a higher priority. The - * first occurrence of the variable will be returned here. - * - * @param out the buffer in which to store the result - * @param cfg where to look for the variable - * @param name the variable's name - * @return 0 or an error code - */ -GIT_EXTERN(int) git_config_get_path(git_buf *out, const git_config *cfg, const char *name); - -/** - * Get the value of a string config variable. - * - * This function can only be used on snapshot config objects. The - * string is owned by the config and should not be freed by the - * user. The pointer will be valid until the config is freed. - * - * All config files will be looked into, in the order of their - * defined level. A higher level means a higher priority. The - * first occurrence of the variable will be returned here. - * - * @param out pointer to the string - * @param cfg where to look for the variable - * @param name the variable's name - * @return 0 or an error code - */ -GIT_EXTERN(int) git_config_get_string(const char **out, const git_config *cfg, const char *name); - -/** - * Get the value of a string config variable. - * - * The value of the config will be copied into the buffer. - * - * All config files will be looked into, in the order of their - * defined level. A higher level means a higher priority. The - * first occurrence of the variable will be returned here. - * - * @param out buffer in which to store the string - * @param cfg where to look for the variable - * @param name the variable's name - * @return 0 or an error code - */ -GIT_EXTERN(int) git_config_get_string_buf(git_buf *out, const git_config *cfg, const char *name); - -/** - * Get each value of a multivar in a foreach callback - * - * The callback will be called on each variable found - * - * The regular expression is applied case-sensitively on the normalized form of - * the variable name: the section and variable parts are lower-cased. The - * subsection is left unchanged. - * - * @param cfg where to look for the variable - * @param name the variable's name - * @param regexp regular expression to filter which variables we're - * interested in. Use NULL to indicate all - * @param callback the function to be called on each value of the variable - * @param payload opaque pointer to pass to the callback - */ -GIT_EXTERN(int) git_config_get_multivar_foreach(const git_config *cfg, const char *name, const char *regexp, git_config_foreach_cb callback, void *payload); - -/** - * Get each value of a multivar - * - * The regular expression is applied case-sensitively on the normalized form of - * the variable name: the section and variable parts are lower-cased. The - * subsection is left unchanged. - * - * @param out pointer to store the iterator - * @param cfg where to look for the variable - * @param name the variable's name - * @param regexp regular expression to filter which variables we're - * interested in. Use NULL to indicate all - */ -GIT_EXTERN(int) git_config_multivar_iterator_new(git_config_iterator **out, const git_config *cfg, const char *name, const char *regexp); - -/** - * Return the current entry and advance the iterator - * - * The pointers returned by this function are valid until the iterator - * is freed. - * - * @param entry pointer to store the entry - * @param iter the iterator - * @return 0 or an error code. GIT_ITEROVER if the iteration has completed - */ -GIT_EXTERN(int) git_config_next(git_config_entry **entry, git_config_iterator *iter); - -/** - * Free a config iterator - * - * @param iter the iterator to free - */ -GIT_EXTERN(void) git_config_iterator_free(git_config_iterator *iter); - -/** - * Set the value of an integer config variable in the config file - * with the highest level (usually the local one). - * - * @param cfg where to look for the variable - * @param name the variable's name - * @param value Integer value for the variable - * @return 0 or an error code - */ -GIT_EXTERN(int) git_config_set_int32(git_config *cfg, const char *name, int32_t value); - -/** - * Set the value of a long integer config variable in the config file - * with the highest level (usually the local one). - * - * @param cfg where to look for the variable - * @param name the variable's name - * @param value Long integer value for the variable - * @return 0 or an error code - */ -GIT_EXTERN(int) git_config_set_int64(git_config *cfg, const char *name, int64_t value); - -/** - * Set the value of a boolean config variable in the config file - * with the highest level (usually the local one). - * - * @param cfg where to look for the variable - * @param name the variable's name - * @param value the value to store - * @return 0 or an error code - */ -GIT_EXTERN(int) git_config_set_bool(git_config *cfg, const char *name, int value); - -/** - * Set the value of a string config variable in the config file - * with the highest level (usually the local one). - * - * A copy of the string is made and the user is free to use it - * afterwards. - * - * @param cfg where to look for the variable - * @param name the variable's name - * @param value the string to store. - * @return 0 or an error code - */ -GIT_EXTERN(int) git_config_set_string(git_config *cfg, const char *name, const char *value); - -/** - * Set a multivar in the local config file. - * - * The regular expression is applied case-sensitively on the value. - * - * @param cfg where to look for the variable - * @param name the variable's name - * @param regexp a regular expression to indicate which values to replace - * @param value the new value. - */ -GIT_EXTERN(int) git_config_set_multivar(git_config *cfg, const char *name, const char *regexp, const char *value); - -/** - * Delete a config variable from the config file - * with the highest level (usually the local one). - * - * @param cfg the configuration - * @param name the variable to delete - */ -GIT_EXTERN(int) git_config_delete_entry(git_config *cfg, const char *name); - -/** - * Deletes one or several entries from a multivar in the local config file. - * - * The regular expression is applied case-sensitively on the value. - * - * @param cfg where to look for the variables - * @param name the variable's name - * @param regexp a regular expression to indicate which values to delete - * - * @return 0 or an error code - */ -GIT_EXTERN(int) git_config_delete_multivar(git_config *cfg, const char *name, const char *regexp); - -/** - * Perform an operation on each config variable. - * - * The callback receives the normalized name and value of each variable - * in the config backend, and the data pointer passed to this function. - * If the callback returns a non-zero value, the function stops iterating - * and returns that value to the caller. - * - * The pointers passed to the callback are only valid as long as the - * iteration is ongoing. - * - * @param cfg where to get the variables from - * @param callback the function to call on each variable - * @param payload the data to pass to the callback - * @return 0 on success, non-zero callback return value, or error code - */ -GIT_EXTERN(int) git_config_foreach( - const git_config *cfg, - git_config_foreach_cb callback, - void *payload); - -/** - * Iterate over all the config variables - * - * Use `git_config_next` to advance the iteration and - * `git_config_iterator_free` when done. - * - * @param out pointer to store the iterator - * @param cfg where to ge the variables from - */ -GIT_EXTERN(int) git_config_iterator_new(git_config_iterator **out, const git_config *cfg); - -/** - * Iterate over all the config variables whose name matches a pattern - * - * Use `git_config_next` to advance the iteration and - * `git_config_iterator_free` when done. - * - * The regular expression is applied case-sensitively on the normalized form of - * the variable name: the section and variable parts are lower-cased. The - * subsection is left unchanged. - * - * @param out pointer to store the iterator - * @param cfg where to ge the variables from - * @param regexp regular expression to match the names - */ -GIT_EXTERN(int) git_config_iterator_glob_new(git_config_iterator **out, const git_config *cfg, const char *regexp); - -/** - * Perform an operation on each config variable matching a regular expression. - * - * This behaves like `git_config_foreach` with an additional filter of a - * regular expression that filters which config keys are passed to the - * callback. - * - * The regular expression is applied case-sensitively on the normalized form of - * the variable name: the section and variable parts are lower-cased. The - * subsection is left unchanged. - * - * The regular expression is applied case-sensitively on the normalized form of - * the variable name: the case-insensitive parts are lower-case. - * - * @param cfg where to get the variables from - * @param regexp regular expression to match against config names - * @param callback the function to call on each variable - * @param payload the data to pass to the callback - * @return 0 or the return value of the callback which didn't return 0 - */ -GIT_EXTERN(int) git_config_foreach_match( - const git_config *cfg, - const char *regexp, - git_config_foreach_cb callback, - void *payload); - -/** - * Query the value of a config variable and return it mapped to - * an integer constant. - * - * This is a helper method to easily map different possible values - * to a variable to integer constants that easily identify them. - * - * A mapping array looks as follows: - * - * git_configmap autocrlf_mapping[] = { - * {GIT_CVAR_FALSE, NULL, GIT_AUTO_CRLF_FALSE}, - * {GIT_CVAR_TRUE, NULL, GIT_AUTO_CRLF_TRUE}, - * {GIT_CVAR_STRING, "input", GIT_AUTO_CRLF_INPUT}, - * {GIT_CVAR_STRING, "default", GIT_AUTO_CRLF_DEFAULT}}; - * - * On any "false" value for the variable (e.g. "false", "FALSE", "no"), the - * mapping will store `GIT_AUTO_CRLF_FALSE` in the `out` parameter. - * - * The same thing applies for any "true" value such as "true", "yes" or "1", storing - * the `GIT_AUTO_CRLF_TRUE` variable. - * - * Otherwise, if the value matches the string "input" (with case insensitive comparison), - * the given constant will be stored in `out`, and likewise for "default". - * - * If not a single match can be made to store in `out`, an error code will be - * returned. - * - * @param out place to store the result of the mapping - * @param cfg config file to get the variables from - * @param name name of the config variable to lookup - * @param maps array of `git_configmap` objects specifying the possible mappings - * @param map_n number of mapping objects in `maps` - * @return 0 on success, error code otherwise - */ -GIT_EXTERN(int) git_config_get_mapped( - int *out, - const git_config *cfg, - const char *name, - const git_configmap *maps, - size_t map_n); - -/** - * Maps a string value to an integer constant - * - * @param out place to store the result of the parsing - * @param maps array of `git_configmap` objects specifying the possible mappings - * @param map_n number of mapping objects in `maps` - * @param value value to parse - */ -GIT_EXTERN(int) git_config_lookup_map_value( - int *out, - const git_configmap *maps, - size_t map_n, - const char *value); - -/** - * Parse a string value as a bool. - * - * Valid values for true are: 'true', 'yes', 'on', 1 or any - * number different from 0 - * Valid values for false are: 'false', 'no', 'off', 0 - * - * @param out place to store the result of the parsing - * @param value value to parse - */ -GIT_EXTERN(int) git_config_parse_bool(int *out, const char *value); - -/** - * Parse a string value as an int32. - * - * An optional value suffix of 'k', 'm', or 'g' will - * cause the value to be multiplied by 1024, 1048576, - * or 1073741824 prior to output. - * - * @param out place to store the result of the parsing - * @param value value to parse - */ -GIT_EXTERN(int) git_config_parse_int32(int32_t *out, const char *value); - -/** - * Parse a string value as an int64. - * - * An optional value suffix of 'k', 'm', or 'g' will - * cause the value to be multiplied by 1024, 1048576, - * or 1073741824 prior to output. - * - * @param out place to store the result of the parsing - * @param value value to parse - */ -GIT_EXTERN(int) git_config_parse_int64(int64_t *out, const char *value); - -/** - * Parse a string value as a path. - * - * A leading '~' will be expanded to the global search path (which - * defaults to the user's home directory but can be overridden via - * `git_libgit2_opts()`. - * - * If the value does not begin with a tilde, the input will be - * returned. - * - * @param out placae to store the result of parsing - * @param value the path to evaluate - */ -GIT_EXTERN(int) git_config_parse_path(git_buf *out, const char *value); - -/** - * Perform an operation on each config variable in a given config backend, - * matching a regular expression. - * - * This behaves like `git_config_foreach_match` except that only config - * entries from the given backend entry are enumerated. - * - * The regular expression is applied case-sensitively on the normalized form of - * the variable name: the section and variable parts are lower-cased. The - * subsection is left unchanged. - * - * @param backend where to get the variables from - * @param regexp regular expression to match against config names (can be NULL) - * @param callback the function to call on each variable - * @param payload the data to pass to the callback - */ -GIT_EXTERN(int) git_config_backend_foreach_match( - git_config_backend *backend, - const char *regexp, - git_config_foreach_cb callback, - void *payload); - - -/** - * Lock the backend with the highest priority - * - * Locking disallows anybody else from writing to that backend. Any - * updates made after locking will not be visible to a reader until - * the file is unlocked. - * - * You can apply the changes by calling `git_transaction_commit()` - * before freeing the transaction. Either of these actions will unlock - * the config. - * - * @param tx the resulting transaction, use this to commit or undo the - * changes - * @param cfg the configuration in which to lock - * @return 0 or an error code - */ -GIT_EXTERN(int) git_config_lock(git_transaction **tx, git_config *cfg); - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/cred_helpers.h b/libgit2/headers/git2/cred_helpers.h deleted file mode 100644 index 3721b6d..0000000 --- a/libgit2/headers/git2/cred_helpers.h +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_cred_helpers_h__ -#define INCLUDE_git_cred_helpers_h__ - -/* These declarations have moved. */ -#ifndef GIT_DEPRECATE_HARD -# include "git2/credential_helpers.h" -#endif - -#endif diff --git a/libgit2/headers/git2/credential.h b/libgit2/headers/git2/credential.h deleted file mode 100644 index 9426a6e..0000000 --- a/libgit2/headers/git2/credential.h +++ /dev/null @@ -1,314 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_credential_h__ -#define INCLUDE_git_credential_h__ - -#include "common.h" - -/** - * @file git2/credential.h - * @brief Git authentication & credential management - * @defgroup git_credential Authentication & credential management - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Supported credential types - * - * This represents the various types of authentication methods supported by - * the library. - */ -typedef enum { - /** - * A vanilla user/password request - * @see git_credential_userpass_plaintext_new - */ - GIT_CREDENTIAL_USERPASS_PLAINTEXT = (1u << 0), - - /** - * An SSH key-based authentication request - * @see git_credential_ssh_key_new - */ - GIT_CREDENTIAL_SSH_KEY = (1u << 1), - - /** - * An SSH key-based authentication request, with a custom signature - * @see git_credential_ssh_custom_new - */ - GIT_CREDENTIAL_SSH_CUSTOM = (1u << 2), - - /** - * An NTLM/Negotiate-based authentication request. - * @see git_credential_default - */ - GIT_CREDENTIAL_DEFAULT = (1u << 3), - - /** - * An SSH interactive authentication request - * @see git_credential_ssh_interactive_new - */ - GIT_CREDENTIAL_SSH_INTERACTIVE = (1u << 4), - - /** - * Username-only authentication request - * - * Used as a pre-authentication step if the underlying transport - * (eg. SSH, with no username in its URL) does not know which username - * to use. - * - * @see git_credential_username_new - */ - GIT_CREDENTIAL_USERNAME = (1u << 5), - - /** - * An SSH key-based authentication request - * - * Allows credentials to be read from memory instead of files. - * Note that because of differences in crypto backend support, it might - * not be functional. - * - * @see git_credential_ssh_key_memory_new - */ - GIT_CREDENTIAL_SSH_MEMORY = (1u << 6), -} git_credential_t; - -/** - * The base structure for all credential types - */ -typedef struct git_credential git_credential; - -typedef struct git_credential_userpass_plaintext git_credential_userpass_plaintext; - -/** Username-only credential information */ -typedef struct git_credential_username git_credential_username; - -/** A key for NTLM/Kerberos "default" credentials */ -typedef struct git_credential git_credential_default; - -/** - * A ssh key from disk - */ -typedef struct git_credential_ssh_key git_credential_ssh_key; - -/** - * Keyboard-interactive based ssh authentication - */ -typedef struct git_credential_ssh_interactive git_credential_ssh_interactive; - -/** - * A key with a custom signature function - */ -typedef struct git_credential_ssh_custom git_credential_ssh_custom; - -/** - * Credential acquisition callback. - * - * This callback is usually involved any time another system might need - * authentication. As such, you are expected to provide a valid - * git_credential object back, depending on allowed_types (a - * git_credential_t bitmask). - * - * Note that most authentication details are your responsibility - this - * callback will be called until the authentication succeeds, or you report - * an error. As such, it's easy to get in a loop if you fail to stop providing - * the same incorrect credentials. - * - * @param out The newly created credential object. - * @param url The resource for which we are demanding a credential. - * @param username_from_url The username that was embedded in a "user\@host" - * remote url, or NULL if not included. - * @param allowed_types A bitmask stating which credential types are OK to return. - * @param payload The payload provided when specifying this callback. - * @return 0 for success, < 0 to indicate an error, > 0 to indicate - * no credential was acquired - */ -typedef int GIT_CALLBACK(git_credential_acquire_cb)( - git_credential **out, - const char *url, - const char *username_from_url, - unsigned int allowed_types, - void *payload); - -/** - * Free a credential. - * - * This is only necessary if you own the object; that is, if you are a - * transport. - * - * @param cred the object to free - */ -GIT_EXTERN(void) git_credential_free(git_credential *cred); - -/** - * Check whether a credential object contains username information. - * - * @param cred object to check - * @return 1 if the credential object has non-NULL username, 0 otherwise - */ -GIT_EXTERN(int) git_credential_has_username(git_credential *cred); - -/** - * Return the username associated with a credential object. - * - * @param cred object to check - * @return the credential username, or NULL if not applicable - */ -GIT_EXTERN(const char *) git_credential_get_username(git_credential *cred); - -/** - * Create a new plain-text username and password credential object. - * The supplied credential parameter will be internally duplicated. - * - * @param out The newly created credential object. - * @param username The username of the credential. - * @param password The password of the credential. - * @return 0 for success or an error code for failure - */ -GIT_EXTERN(int) git_credential_userpass_plaintext_new( - git_credential **out, - const char *username, - const char *password); - -/** - * Create a "default" credential usable for Negotiate mechanisms like NTLM - * or Kerberos authentication. - * - * @param out The newly created credential object. - * @return 0 for success or an error code for failure - */ -GIT_EXTERN(int) git_credential_default_new(git_credential **out); - -/** - * Create a credential to specify a username. - * - * This is used with ssh authentication to query for the username if - * none is specified in the url. - * - * @param out The newly created credential object. - * @param username The username to authenticate with - * @return 0 for success or an error code for failure - */ -GIT_EXTERN(int) git_credential_username_new(git_credential **out, const char *username); - -/** - * Create a new passphrase-protected ssh key credential object. - * The supplied credential parameter will be internally duplicated. - * - * @param out The newly created credential object. - * @param username username to use to authenticate - * @param publickey The path to the public key of the credential. - * @param privatekey The path to the private key of the credential. - * @param passphrase The passphrase of the credential. - * @return 0 for success or an error code for failure - */ -GIT_EXTERN(int) git_credential_ssh_key_new( - git_credential **out, - const char *username, - const char *publickey, - const char *privatekey, - const char *passphrase); - -/** - * Create a new ssh key credential object reading the keys from memory. - * - * @param out The newly created credential object. - * @param username username to use to authenticate. - * @param publickey The public key of the credential. - * @param privatekey The private key of the credential. - * @param passphrase The passphrase of the credential. - * @return 0 for success or an error code for failure - */ -GIT_EXTERN(int) git_credential_ssh_key_memory_new( - git_credential **out, - const char *username, - const char *publickey, - const char *privatekey, - const char *passphrase); - -/* - * If the user hasn't included libssh2.h before git2.h, we need to - * define a few types for the callback signatures. - */ -#ifndef LIBSSH2_VERSION -typedef struct _LIBSSH2_SESSION LIBSSH2_SESSION; -typedef struct _LIBSSH2_USERAUTH_KBDINT_PROMPT LIBSSH2_USERAUTH_KBDINT_PROMPT; -typedef struct _LIBSSH2_USERAUTH_KBDINT_RESPONSE LIBSSH2_USERAUTH_KBDINT_RESPONSE; -#endif - -typedef void GIT_CALLBACK(git_credential_ssh_interactive_cb)( - const char *name, - int name_len, - const char *instruction, int instruction_len, - int num_prompts, const LIBSSH2_USERAUTH_KBDINT_PROMPT *prompts, - LIBSSH2_USERAUTH_KBDINT_RESPONSE *responses, - void **abstract); - - -/** - * Create a new ssh keyboard-interactive based credential object. - * The supplied credential parameter will be internally duplicated. - * - * @param username Username to use to authenticate. - * @param prompt_callback The callback method used for prompts. - * @param payload Additional data to pass to the callback. - * @return 0 for success or an error code for failure. - */ -GIT_EXTERN(int) git_credential_ssh_interactive_new( - git_credential **out, - const char *username, - git_credential_ssh_interactive_cb prompt_callback, - void *payload); - -/** - * Create a new ssh key credential object used for querying an ssh-agent. - * The supplied credential parameter will be internally duplicated. - * - * @param out The newly created credential object. - * @param username username to use to authenticate - * @return 0 for success or an error code for failure - */ -GIT_EXTERN(int) git_credential_ssh_key_from_agent( - git_credential **out, - const char *username); - -typedef int GIT_CALLBACK(git_credential_sign_cb)( - LIBSSH2_SESSION *session, - unsigned char **sig, size_t *sig_len, - const unsigned char *data, size_t data_len, - void **abstract); - -/** - * Create an ssh key credential with a custom signing function. - * - * This lets you use your own function to sign the challenge. - * - * This function and its credential type is provided for completeness - * and wraps `libssh2_userauth_publickey()`, which is undocumented. - * - * The supplied credential parameter will be internally duplicated. - * - * @param out The newly created credential object. - * @param username username to use to authenticate - * @param publickey The bytes of the public key. - * @param publickey_len The length of the public key in bytes. - * @param sign_callback The callback method to sign the data during the challenge. - * @param payload Additional data to pass to the callback. - * @return 0 for success or an error code for failure - */ -GIT_EXTERN(int) git_credential_ssh_custom_new( - git_credential **out, - const char *username, - const char *publickey, - size_t publickey_len, - git_credential_sign_cb sign_callback, - void *payload); - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/credential_helpers.h b/libgit2/headers/git2/credential_helpers.h deleted file mode 100644 index 9a70ecb..0000000 --- a/libgit2/headers/git2/credential_helpers.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_credential_helpers_h__ -#define INCLUDE_git_credential_helpers_h__ - -#include "transport.h" - -/** - * @file git2/credential_helpers.h - * @brief Utility functions for credential management - * @defgroup git_credential_helpers credential management helpers - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Payload for git_credential_userpass_plaintext. - */ -typedef struct git_credential_userpass_payload { - const char *username; - const char *password; -} git_credential_userpass_payload; - - -/** - * Stock callback usable as a git_credential_acquire_cb. This calls - * git_cred_userpass_plaintext_new unless the protocol has not specified - * `GIT_CREDENTIAL_USERPASS_PLAINTEXT` as an allowed type. - * - * @param out The newly created credential object. - * @param url The resource for which we are demanding a credential. - * @param user_from_url The username that was embedded in a "user\@host" - * remote url, or NULL if not included. - * @param allowed_types A bitmask stating which credential types are OK to return. - * @param payload The payload provided when specifying this callback. (This is - * interpreted as a `git_credential_userpass_payload*`.) - */ -GIT_EXTERN(int) git_credential_userpass( - git_credential **out, - const char *url, - const char *user_from_url, - unsigned int allowed_types, - void *payload); - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/deprecated.h b/libgit2/headers/git2/deprecated.h deleted file mode 100644 index 37b9fa0..0000000 --- a/libgit2/headers/git2/deprecated.h +++ /dev/null @@ -1,931 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_deprecated_h__ -#define INCLUDE_git_deprecated_h__ - -#include "attr.h" -#include "config.h" -#include "common.h" -#include "blame.h" -#include "buffer.h" -#include "checkout.h" -#include "cherrypick.h" -#include "clone.h" -#include "describe.h" -#include "diff.h" -#include "errors.h" -#include "filter.h" -#include "index.h" -#include "indexer.h" -#include "merge.h" -#include "object.h" -#include "proxy.h" -#include "refs.h" -#include "rebase.h" -#include "remote.h" -#include "trace.h" -#include "repository.h" -#include "revert.h" -#include "revparse.h" -#include "stash.h" -#include "status.h" -#include "submodule.h" -#include "worktree.h" -#include "credential.h" -#include "credential_helpers.h" - -/* - * Users can avoid deprecated functions by defining `GIT_DEPRECATE_HARD`. - */ -#ifndef GIT_DEPRECATE_HARD - -/* - * The credential structures are now opaque by default, and their - * definition has moved into the `sys/credential.h` header; include - * them here for backward compatibility. - */ -#include "sys/credential.h" - -/** - * @file git2/deprecated.h - * @brief libgit2 deprecated functions and values - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** @name Deprecated Attribute Constants - * - * These enumeration values are retained for backward compatibility. - * The newer versions of these functions should be preferred in all - * new code. - * - * There is no plan to remove these backward compatibility values at - * this time. - */ -/**@{*/ - -#define GIT_ATTR_UNSPECIFIED_T GIT_ATTR_VALUE_UNSPECIFIED -#define GIT_ATTR_TRUE_T GIT_ATTR_VALUE_TRUE -#define GIT_ATTR_FALSE_T GIT_ATTR_VALUE_FALSE -#define GIT_ATTR_VALUE_T GIT_ATTR_VALUE_STRING - -#define GIT_ATTR_TRUE(attr) GIT_ATTR_IS_TRUE(attr) -#define GIT_ATTR_FALSE(attr) GIT_ATTR_IS_FALSE(attr) -#define GIT_ATTR_UNSPECIFIED(attr) GIT_ATTR_IS_UNSPECIFIED(attr) - -typedef git_attr_value_t git_attr_t; - -/**@}*/ - -/** @name Deprecated Blob Functions and Constants - * - * These functions and enumeration values are retained for backward - * compatibility. The newer versions of these functions and values - * should be preferred in all new code. - * - * There is no plan to remove these backward compatibility values at - * this time. - */ -/**@{*/ - -#define GIT_BLOB_FILTER_ATTTRIBUTES_FROM_HEAD GIT_BLOB_FILTER_ATTRIBUTES_FROM_HEAD - -GIT_EXTERN(int) git_blob_create_fromworkdir(git_oid *id, git_repository *repo, const char *relative_path); -GIT_EXTERN(int) git_blob_create_fromdisk(git_oid *id, git_repository *repo, const char *path); -GIT_EXTERN(int) git_blob_create_fromstream( - git_writestream **out, - git_repository *repo, - const char *hintpath); -GIT_EXTERN(int) git_blob_create_fromstream_commit( - git_oid *out, - git_writestream *stream); -GIT_EXTERN(int) git_blob_create_frombuffer( - git_oid *id, git_repository *repo, const void *buffer, size_t len); - -/** Deprecated in favor of `git_blob_filter`. - * - * @deprecated Use git_blob_filter - * @see git_blob_filter - */ -GIT_EXTERN(int) git_blob_filtered_content( - git_buf *out, - git_blob *blob, - const char *as_path, - int check_for_binary_data); - -/**@}*/ - -/** @name Deprecated Filter Functions - * - * These functions are retained for backward compatibility. The - * newer versions of these functions should be preferred in all - * new code. - * - * There is no plan to remove these backward compatibility values at - * this time. - */ -/**@{*/ - -/** Deprecated in favor of `git_filter_list_stream_buffer`. - * - * @deprecated Use git_filter_list_stream_buffer - * @see Use git_filter_list_stream_buffer - */ -GIT_EXTERN(int) git_filter_list_stream_data( - git_filter_list *filters, - git_buf *data, - git_writestream *target); - -/** Deprecated in favor of `git_filter_list_apply_to_buffer`. - * - * @deprecated Use git_filter_list_apply_to_buffer - * @see Use git_filter_list_apply_to_buffer - */ -GIT_EXTERN(int) git_filter_list_apply_to_data( - git_buf *out, - git_filter_list *filters, - git_buf *in); - -/**@}*/ - -/** @name Deprecated Tree Functions - * - * These functions are retained for backward compatibility. The - * newer versions of these functions and values should be preferred - * in all new code. - * - * There is no plan to remove these backward compatibility values at - * this time. - */ -/**@{*/ - -/** - * Write the contents of the tree builder as a tree object. - * This is an alias of `git_treebuilder_write` and is preserved - * for backward compatibility. - * - * This function is deprecated, but there is no plan to remove this - * function at this time. - * - * @deprecated Use git_treebuilder_write - * @see git_treebuilder_write - */ -GIT_EXTERN(int) git_treebuilder_write_with_buffer( - git_oid *oid, git_treebuilder *bld, git_buf *tree); - -/**@}*/ - -/** @name Deprecated Buffer Functions - * - * These functions and enumeration values are retained for backward - * compatibility. The newer versions of these functions should be - * preferred in all new code. - * - * There is no plan to remove these backward compatibility values at - * this time. - */ -/**@{*/ - -/** - * Static initializer for git_buf from static buffer - */ -#define GIT_BUF_INIT_CONST(STR,LEN) { (char *)(STR), 0, (size_t)(LEN) } - -/** - * Resize the buffer allocation to make more space. - * - * This will attempt to grow the buffer to accommodate the target size. - * - * If the buffer refers to memory that was not allocated by libgit2 (i.e. - * the `asize` field is zero), then `ptr` will be replaced with a newly - * allocated block of data. Be careful so that memory allocated by the - * caller is not lost. As a special variant, if you pass `target_size` as - * 0 and the memory is not allocated by libgit2, this will allocate a new - * buffer of size `size` and copy the external data into it. - * - * Currently, this will never shrink a buffer, only expand it. - * - * If the allocation fails, this will return an error and the buffer will be - * marked as invalid for future operations, invaliding the contents. - * - * @param buffer The buffer to be resized; may or may not be allocated yet - * @param target_size The desired available size - * @return 0 on success, -1 on allocation failure - */ -GIT_EXTERN(int) git_buf_grow(git_buf *buffer, size_t target_size); - -/** - * Set buffer to a copy of some raw data. - * - * @param buffer The buffer to set - * @param data The data to copy into the buffer - * @param datalen The length of the data to copy into the buffer - * @return 0 on success, -1 on allocation failure - */ -GIT_EXTERN(int) git_buf_set( - git_buf *buffer, const void *data, size_t datalen); - -/** -* Check quickly if buffer looks like it contains binary data -* -* @param buf Buffer to check -* @return 1 if buffer looks like non-text data -*/ -GIT_EXTERN(int) git_buf_is_binary(const git_buf *buf); - -/** -* Check quickly if buffer contains a NUL byte -* -* @param buf Buffer to check -* @return 1 if buffer contains a NUL byte -*/ -GIT_EXTERN(int) git_buf_contains_nul(const git_buf *buf); - -/** - * Free the memory referred to by the git_buf. This is an alias of - * `git_buf_dispose` and is preserved for backward compatibility. - * - * This function is deprecated, but there is no plan to remove this - * function at this time. - * - * @deprecated Use git_buf_dispose - * @see git_buf_dispose - */ -GIT_EXTERN(void) git_buf_free(git_buf *buffer); - -/**@}*/ - -/** @name Deprecated Commit Definitions - */ -/**@{*/ - -/** - * Provide a commit signature during commit creation. - * - * Callers should instead define a `git_commit_create_cb` that - * generates a commit buffer using `git_commit_create_buffer`, sign - * that buffer and call `git_commit_create_with_signature`. - * - * @deprecated use a `git_commit_create_cb` instead - */ -typedef int (*git_commit_signing_cb)( - git_buf *signature, - git_buf *signature_field, - const char *commit_content, - void *payload); - -/**@}*/ - -/** @name Deprecated Config Functions and Constants - */ -/**@{*/ - -#define GIT_CVAR_FALSE GIT_CONFIGMAP_FALSE -#define GIT_CVAR_TRUE GIT_CONFIGMAP_TRUE -#define GIT_CVAR_INT32 GIT_CONFIGMAP_INT32 -#define GIT_CVAR_STRING GIT_CONFIGMAP_STRING - -typedef git_configmap git_cvar_map; - -/**@}*/ - -/** @name Deprecated Diff Functions and Constants - * - * These functions and enumeration values are retained for backward - * compatibility. The newer versions of these functions and values - * should be preferred in all new code. - * - * There is no plan to remove these backward compatibility values at - * this time. - */ -/**@{*/ - -/** - * Formatting options for diff e-mail generation - */ -typedef enum { - /** Normal patch, the default */ - GIT_DIFF_FORMAT_EMAIL_NONE = 0, - - /** Don't insert "[PATCH]" in the subject header*/ - GIT_DIFF_FORMAT_EMAIL_EXCLUDE_SUBJECT_PATCH_MARKER = (1 << 0), - -} git_diff_format_email_flags_t; - -/** - * Options for controlling the formatting of the generated e-mail. - */ -typedef struct { - unsigned int version; - - /** see `git_diff_format_email_flags_t` above */ - uint32_t flags; - - /** This patch number */ - size_t patch_no; - - /** Total number of patches in this series */ - size_t total_patches; - - /** id to use for the commit */ - const git_oid *id; - - /** Summary of the change */ - const char *summary; - - /** Commit message's body */ - const char *body; - - /** Author of the change */ - const git_signature *author; -} git_diff_format_email_options; - -#define GIT_DIFF_FORMAT_EMAIL_OPTIONS_VERSION 1 -#define GIT_DIFF_FORMAT_EMAIL_OPTIONS_INIT {GIT_DIFF_FORMAT_EMAIL_OPTIONS_VERSION, 0, 1, 1, NULL, NULL, NULL, NULL} - -/** - * Create an e-mail ready patch from a diff. - * - * @deprecated git_email_create_from_diff - * @see git_email_create_from_diff - */ -GIT_EXTERN(int) git_diff_format_email( - git_buf *out, - git_diff *diff, - const git_diff_format_email_options *opts); - -/** - * Create an e-mail ready patch for a commit. - * - * @deprecated git_email_create_from_commit - * @see git_email_create_from_commit - */ -GIT_EXTERN(int) git_diff_commit_as_email( - git_buf *out, - git_repository *repo, - git_commit *commit, - size_t patch_no, - size_t total_patches, - uint32_t flags, - const git_diff_options *diff_opts); - -/** - * Initialize git_diff_format_email_options structure - * - * Initializes a `git_diff_format_email_options` with default values. Equivalent - * to creating an instance with GIT_DIFF_FORMAT_EMAIL_OPTIONS_INIT. - * - * @param opts The `git_blame_options` struct to initialize. - * @param version The struct version; pass `GIT_DIFF_FORMAT_EMAIL_OPTIONS_VERSION`. - * @return Zero on success; -1 on failure. - */ -GIT_EXTERN(int) git_diff_format_email_options_init( - git_diff_format_email_options *opts, - unsigned int version); - -/**@}*/ - -/** @name Deprecated Error Functions and Constants - * - * These functions and enumeration values are retained for backward - * compatibility. The newer versions of these functions and values - * should be preferred in all new code. - * - * There is no plan to remove these backward compatibility values at - * this time. - */ -/**@{*/ - -#define GITERR_NONE GIT_ERROR_NONE -#define GITERR_NOMEMORY GIT_ERROR_NOMEMORY -#define GITERR_OS GIT_ERROR_OS -#define GITERR_INVALID GIT_ERROR_INVALID -#define GITERR_REFERENCE GIT_ERROR_REFERENCE -#define GITERR_ZLIB GIT_ERROR_ZLIB -#define GITERR_REPOSITORY GIT_ERROR_REPOSITORY -#define GITERR_CONFIG GIT_ERROR_CONFIG -#define GITERR_REGEX GIT_ERROR_REGEX -#define GITERR_ODB GIT_ERROR_ODB -#define GITERR_INDEX GIT_ERROR_INDEX -#define GITERR_OBJECT GIT_ERROR_OBJECT -#define GITERR_NET GIT_ERROR_NET -#define GITERR_TAG GIT_ERROR_TAG -#define GITERR_TREE GIT_ERROR_TREE -#define GITERR_INDEXER GIT_ERROR_INDEXER -#define GITERR_SSL GIT_ERROR_SSL -#define GITERR_SUBMODULE GIT_ERROR_SUBMODULE -#define GITERR_THREAD GIT_ERROR_THREAD -#define GITERR_STASH GIT_ERROR_STASH -#define GITERR_CHECKOUT GIT_ERROR_CHECKOUT -#define GITERR_FETCHHEAD GIT_ERROR_FETCHHEAD -#define GITERR_MERGE GIT_ERROR_MERGE -#define GITERR_SSH GIT_ERROR_SSH -#define GITERR_FILTER GIT_ERROR_FILTER -#define GITERR_REVERT GIT_ERROR_REVERT -#define GITERR_CALLBACK GIT_ERROR_CALLBACK -#define GITERR_CHERRYPICK GIT_ERROR_CHERRYPICK -#define GITERR_DESCRIBE GIT_ERROR_DESCRIBE -#define GITERR_REBASE GIT_ERROR_REBASE -#define GITERR_FILESYSTEM GIT_ERROR_FILESYSTEM -#define GITERR_PATCH GIT_ERROR_PATCH -#define GITERR_WORKTREE GIT_ERROR_WORKTREE -#define GITERR_SHA1 GIT_ERROR_SHA1 - -/** - * Return the last `git_error` object that was generated for the - * current thread. This is an alias of `git_error_last` and is - * preserved for backward compatibility. - * - * This function is deprecated, but there is no plan to remove this - * function at this time. - * - * @deprecated Use git_error_last - * @see git_error_last - */ -GIT_EXTERN(const git_error *) giterr_last(void); - -/** - * Clear the last error. This is an alias of `git_error_last` and is - * preserved for backward compatibility. - * - * This function is deprecated, but there is no plan to remove this - * function at this time. - * - * @deprecated Use git_error_clear - * @see git_error_clear - */ -GIT_EXTERN(void) giterr_clear(void); - -/** - * Sets the error message to the given string. This is an alias of - * `git_error_set_str` and is preserved for backward compatibility. - * - * This function is deprecated, but there is no plan to remove this - * function at this time. - * - * @deprecated Use git_error_set_str - * @see git_error_set_str - */ -GIT_EXTERN(void) giterr_set_str(int error_class, const char *string); - -/** - * Indicates that an out-of-memory situation occurred. This is an alias - * of `git_error_set_oom` and is preserved for backward compatibility. - * - * This function is deprecated, but there is no plan to remove this - * function at this time. - * - * @deprecated Use git_error_set_oom - * @see git_error_set_oom - */ -GIT_EXTERN(void) giterr_set_oom(void); - -/**@}*/ - -/** @name Deprecated Index Functions and Constants - * - * These functions and enumeration values are retained for backward - * compatibility. The newer versions of these values should be - * preferred in all new code. - * - * There is no plan to remove these backward compatibility values at - * this time. - */ -/**@{*/ - -#define GIT_IDXENTRY_NAMEMASK GIT_INDEX_ENTRY_NAMEMASK -#define GIT_IDXENTRY_STAGEMASK GIT_INDEX_ENTRY_STAGEMASK -#define GIT_IDXENTRY_STAGESHIFT GIT_INDEX_ENTRY_STAGESHIFT - -/* The git_indxentry_flag_t enum */ -#define GIT_IDXENTRY_EXTENDED GIT_INDEX_ENTRY_EXTENDED -#define GIT_IDXENTRY_VALID GIT_INDEX_ENTRY_VALID - -#define GIT_IDXENTRY_STAGE(E) GIT_INDEX_ENTRY_STAGE(E) -#define GIT_IDXENTRY_STAGE_SET(E,S) GIT_INDEX_ENTRY_STAGE_SET(E,S) - -/* The git_idxentry_extended_flag_t enum */ -#define GIT_IDXENTRY_INTENT_TO_ADD GIT_INDEX_ENTRY_INTENT_TO_ADD -#define GIT_IDXENTRY_SKIP_WORKTREE GIT_INDEX_ENTRY_SKIP_WORKTREE -#define GIT_IDXENTRY_EXTENDED_FLAGS (GIT_INDEX_ENTRY_INTENT_TO_ADD | GIT_INDEX_ENTRY_SKIP_WORKTREE) -#define GIT_IDXENTRY_EXTENDED2 (1 << 15) -#define GIT_IDXENTRY_UPDATE (1 << 0) -#define GIT_IDXENTRY_REMOVE (1 << 1) -#define GIT_IDXENTRY_UPTODATE (1 << 2) -#define GIT_IDXENTRY_ADDED (1 << 3) -#define GIT_IDXENTRY_HASHED (1 << 4) -#define GIT_IDXENTRY_UNHASHED (1 << 5) -#define GIT_IDXENTRY_WT_REMOVE (1 << 6) -#define GIT_IDXENTRY_CONFLICTED (1 << 7) -#define GIT_IDXENTRY_UNPACKED (1 << 8) -#define GIT_IDXENTRY_NEW_SKIP_WORKTREE (1 << 9) - -/* The git_index_capability_t enum */ -#define GIT_INDEXCAP_IGNORE_CASE GIT_INDEX_CAPABILITY_IGNORE_CASE -#define GIT_INDEXCAP_NO_FILEMODE GIT_INDEX_CAPABILITY_NO_FILEMODE -#define GIT_INDEXCAP_NO_SYMLINKS GIT_INDEX_CAPABILITY_NO_SYMLINKS -#define GIT_INDEXCAP_FROM_OWNER GIT_INDEX_CAPABILITY_FROM_OWNER - -GIT_EXTERN(int) git_index_add_frombuffer( - git_index *index, - const git_index_entry *entry, - const void *buffer, size_t len); - -/**@}*/ - -/** @name Deprecated Object Constants - * - * These enumeration values are retained for backward compatibility. The - * newer versions of these values should be preferred in all new code. - * - * There is no plan to remove these backward compatibility values at - * this time. - */ -/**@{*/ - -#define git_otype git_object_t - -#define GIT_OBJ_ANY GIT_OBJECT_ANY -#define GIT_OBJ_BAD GIT_OBJECT_INVALID -#define GIT_OBJ__EXT1 0 -#define GIT_OBJ_COMMIT GIT_OBJECT_COMMIT -#define GIT_OBJ_TREE GIT_OBJECT_TREE -#define GIT_OBJ_BLOB GIT_OBJECT_BLOB -#define GIT_OBJ_TAG GIT_OBJECT_TAG -#define GIT_OBJ__EXT2 5 -#define GIT_OBJ_OFS_DELTA GIT_OBJECT_OFS_DELTA -#define GIT_OBJ_REF_DELTA GIT_OBJECT_REF_DELTA - -/** - * Get the size in bytes for the structure which - * acts as an in-memory representation of any given - * object type. - * - * For all the core types, this would the equivalent - * of calling `sizeof(git_commit)` if the core types - * were not opaque on the external API. - * - * @param type object type to get its size - * @return size in bytes of the object - */ -GIT_EXTERN(size_t) git_object__size(git_object_t type); - -/**@}*/ - -/** @name Deprecated Remote Functions - * - * These functions are retained for backward compatibility. The newer - * versions of these functions should be preferred in all new code. - * - * There is no plan to remove these backward compatibility functions at - * this time. - */ -/**@{*/ - -/** - * Ensure the remote name is well-formed. - * - * @deprecated Use git_remote_name_is_valid - * @param remote_name name to be checked. - * @return 1 if the reference name is acceptable; 0 if it isn't - */ -GIT_EXTERN(int) git_remote_is_valid_name(const char *remote_name); - -/**@}*/ - -/** @name Deprecated Reference Functions and Constants - * - * These functions and enumeration values are retained for backward - * compatibility. The newer versions of these values should be - * preferred in all new code. - * - * There is no plan to remove these backward compatibility values at - * this time. - */ -/**@{*/ - - /** Basic type of any Git reference. */ -#define git_ref_t git_reference_t -#define git_reference_normalize_t git_reference_format_t - -#define GIT_REF_INVALID GIT_REFERENCE_INVALID -#define GIT_REF_OID GIT_REFERENCE_DIRECT -#define GIT_REF_SYMBOLIC GIT_REFERENCE_SYMBOLIC -#define GIT_REF_LISTALL GIT_REFERENCE_ALL - -#define GIT_REF_FORMAT_NORMAL GIT_REFERENCE_FORMAT_NORMAL -#define GIT_REF_FORMAT_ALLOW_ONELEVEL GIT_REFERENCE_FORMAT_ALLOW_ONELEVEL -#define GIT_REF_FORMAT_REFSPEC_PATTERN GIT_REFERENCE_FORMAT_REFSPEC_PATTERN -#define GIT_REF_FORMAT_REFSPEC_SHORTHAND GIT_REFERENCE_FORMAT_REFSPEC_SHORTHAND - -/** - * Ensure the reference name is well-formed. - * - * Valid reference names must follow one of two patterns: - * - * 1. Top-level names must contain only capital letters and underscores, - * and must begin and end with a letter. (e.g. "HEAD", "ORIG_HEAD"). - * 2. Names prefixed with "refs/" can be almost anything. You must avoid - * the characters '~', '^', ':', '\\', '?', '[', and '*', and the - * sequences ".." and "@{" which have special meaning to revparse. - * - * @deprecated Use git_reference_name_is_valid - * @param refname name to be checked. - * @return 1 if the reference name is acceptable; 0 if it isn't - */ -GIT_EXTERN(int) git_reference_is_valid_name(const char *refname); - -GIT_EXTERN(int) git_tag_create_frombuffer( - git_oid *oid, - git_repository *repo, - const char *buffer, - int force); - -/**@}*/ - -/** @name Deprecated Revspec Constants - * - * These enumeration values are retained for backward compatibility. - * The newer versions of these values should be preferred in all new - * code. - * - * There is no plan to remove these backward compatibility values at - * this time. - */ -/**@{*/ - -typedef git_revspec_t git_revparse_mode_t; - -#define GIT_REVPARSE_SINGLE GIT_REVSPEC_SINGLE -#define GIT_REVPARSE_RANGE GIT_REVSPEC_RANGE -#define GIT_REVPARSE_MERGE_BASE GIT_REVSPEC_MERGE_BASE - -/**@}*/ - -/** @name Deprecated Credential Types - * - * These types are retained for backward compatibility. The newer - * versions of these values should be preferred in all new code. - * - * There is no plan to remove these backward compatibility values at - * this time. - */ -/**@{*/ - -typedef git_credential git_cred; -typedef git_credential_userpass_plaintext git_cred_userpass_plaintext; -typedef git_credential_username git_cred_username; -typedef git_credential_default git_cred_default; -typedef git_credential_ssh_key git_cred_ssh_key; -typedef git_credential_ssh_interactive git_cred_ssh_interactive; -typedef git_credential_ssh_custom git_cred_ssh_custom; - -typedef git_credential_acquire_cb git_cred_acquire_cb; -typedef git_credential_sign_cb git_cred_sign_callback; -typedef git_credential_sign_cb git_cred_sign_cb; -typedef git_credential_ssh_interactive_cb git_cred_ssh_interactive_callback; -typedef git_credential_ssh_interactive_cb git_cred_ssh_interactive_cb; - -#define git_credtype_t git_credential_t - -#define GIT_CREDTYPE_USERPASS_PLAINTEXT GIT_CREDENTIAL_USERPASS_PLAINTEXT -#define GIT_CREDTYPE_SSH_KEY GIT_CREDENTIAL_SSH_KEY -#define GIT_CREDTYPE_SSH_CUSTOM GIT_CREDENTIAL_SSH_CUSTOM -#define GIT_CREDTYPE_DEFAULT GIT_CREDENTIAL_DEFAULT -#define GIT_CREDTYPE_SSH_INTERACTIVE GIT_CREDENTIAL_SSH_INTERACTIVE -#define GIT_CREDTYPE_USERNAME GIT_CREDENTIAL_USERNAME -#define GIT_CREDTYPE_SSH_MEMORY GIT_CREDENTIAL_SSH_MEMORY - -GIT_EXTERN(void) git_cred_free(git_credential *cred); -GIT_EXTERN(int) git_cred_has_username(git_credential *cred); -GIT_EXTERN(const char *) git_cred_get_username(git_credential *cred); -GIT_EXTERN(int) git_cred_userpass_plaintext_new( - git_credential **out, - const char *username, - const char *password); -GIT_EXTERN(int) git_cred_default_new(git_credential **out); -GIT_EXTERN(int) git_cred_username_new(git_credential **out, const char *username); -GIT_EXTERN(int) git_cred_ssh_key_new( - git_credential **out, - const char *username, - const char *publickey, - const char *privatekey, - const char *passphrase); -GIT_EXTERN(int) git_cred_ssh_key_memory_new( - git_credential **out, - const char *username, - const char *publickey, - const char *privatekey, - const char *passphrase); -GIT_EXTERN(int) git_cred_ssh_interactive_new( - git_credential **out, - const char *username, - git_credential_ssh_interactive_cb prompt_callback, - void *payload); -GIT_EXTERN(int) git_cred_ssh_key_from_agent( - git_credential **out, - const char *username); -GIT_EXTERN(int) git_cred_ssh_custom_new( - git_credential **out, - const char *username, - const char *publickey, - size_t publickey_len, - git_credential_sign_cb sign_callback, - void *payload); - -/* Deprecated Credential Helper Types */ - -typedef git_credential_userpass_payload git_cred_userpass_payload; - -GIT_EXTERN(int) git_cred_userpass( - git_credential **out, - const char *url, - const char *user_from_url, - unsigned int allowed_types, - void *payload); - -/**@}*/ - -/** @name Deprecated Trace Callback Types - * - * These types are retained for backward compatibility. The newer - * versions of these values should be preferred in all new code. - * - * There is no plan to remove these backward compatibility values at - * this time. - */ -/**@{*/ - -typedef git_trace_cb git_trace_callback; - -/**@}*/ - -/** @name Deprecated Object ID Types - * - * These types are retained for backward compatibility. The newer - * versions of these values should be preferred in all new code. - * - * There is no plan to remove these backward compatibility values at - * this time. - */ -/**@{*/ - -GIT_EXTERN(int) git_oid_iszero(const git_oid *id); - -/**@}*/ - -/** @name Deprecated OID Array Functions - * - * These types are retained for backward compatibility. The newer - * versions of these values should be preferred in all new code. - * - * There is no plan to remove these backward compatibility values at - * this time. - */ -/**@{*/ - -/** - * Free the memory referred to by the git_oidarray. This is an alias of - * `git_oidarray_dispose` and is preserved for backward compatibility. - * - * This function is deprecated, but there is no plan to remove this - * function at this time. - * - * @deprecated Use git_oidarray_dispose - * @see git_oidarray_dispose - */ -GIT_EXTERN(void) git_oidarray_free(git_oidarray *array); - -/**@}*/ - -/** @name Deprecated Transfer Progress Types - * - * These types are retained for backward compatibility. The newer - * versions of these values should be preferred in all new code. - * - * There is no plan to remove these backward compatibility values at - * this time. - */ -/**@{*/ - -/** - * This structure is used to provide callers information about the - * progress of indexing a packfile. - * - * This type is deprecated, but there is no plan to remove this - * type definition at this time. - */ -typedef git_indexer_progress git_transfer_progress; - -/** - * Type definition for progress callbacks during indexing. - * - * This type is deprecated, but there is no plan to remove this - * type definition at this time. - */ -typedef git_indexer_progress_cb git_transfer_progress_cb; - -/** - * Type definition for push transfer progress callbacks. - * - * This type is deprecated, but there is no plan to remove this - * type definition at this time. - */ -typedef git_push_transfer_progress_cb git_push_transfer_progress; - - /** The type of a remote completion event */ -#define git_remote_completion_type git_remote_completion_t - -/** - * Callback for listing the remote heads - */ -typedef int GIT_CALLBACK(git_headlist_cb)(git_remote_head *rhead, void *payload); - -/**@}*/ - -/** @name Deprecated String Array Functions - * - * These types are retained for backward compatibility. The newer - * versions of these values should be preferred in all new code. - * - * There is no plan to remove these backward compatibility values at - * this time. - */ -/**@{*/ - -/** - * Copy a string array object from source to target. - * - * This function is deprecated, but there is no plan to remove this - * function at this time. - * - * @param tgt target - * @param src source - * @return 0 on success, < 0 on allocation failure - */ -GIT_EXTERN(int) git_strarray_copy(git_strarray *tgt, const git_strarray *src); - -/** - * Free the memory referred to by the git_strarray. This is an alias of - * `git_strarray_dispose` and is preserved for backward compatibility. - * - * This function is deprecated, but there is no plan to remove this - * function at this time. - * - * @deprecated Use git_strarray_dispose - * @see git_strarray_dispose - */ -GIT_EXTERN(void) git_strarray_free(git_strarray *array); - -/**@}*/ - -/** @name Deprecated Options Initialization Functions - * - * These functions are retained for backward compatibility. The newer - * versions of these functions should be preferred in all new code. - * - * There is no plan to remove these backward compatibility functions at - * this time. - */ -/**@{*/ - -GIT_EXTERN(int) git_blame_init_options(git_blame_options *opts, unsigned int version); -GIT_EXTERN(int) git_checkout_init_options(git_checkout_options *opts, unsigned int version); -GIT_EXTERN(int) git_cherrypick_init_options(git_cherrypick_options *opts, unsigned int version); -GIT_EXTERN(int) git_clone_init_options(git_clone_options *opts, unsigned int version); -GIT_EXTERN(int) git_describe_init_options(git_describe_options *opts, unsigned int version); -GIT_EXTERN(int) git_describe_init_format_options(git_describe_format_options *opts, unsigned int version); -GIT_EXTERN(int) git_diff_init_options(git_diff_options *opts, unsigned int version); -GIT_EXTERN(int) git_diff_find_init_options(git_diff_find_options *opts, unsigned int version); -GIT_EXTERN(int) git_diff_format_email_init_options(git_diff_format_email_options *opts, unsigned int version); -GIT_EXTERN(int) git_diff_patchid_init_options(git_diff_patchid_options *opts, unsigned int version); -GIT_EXTERN(int) git_fetch_init_options(git_fetch_options *opts, unsigned int version); -GIT_EXTERN(int) git_indexer_init_options(git_indexer_options *opts, unsigned int version); -GIT_EXTERN(int) git_merge_init_options(git_merge_options *opts, unsigned int version); -GIT_EXTERN(int) git_merge_file_init_input(git_merge_file_input *input, unsigned int version); -GIT_EXTERN(int) git_merge_file_init_options(git_merge_file_options *opts, unsigned int version); -GIT_EXTERN(int) git_proxy_init_options(git_proxy_options *opts, unsigned int version); -GIT_EXTERN(int) git_push_init_options(git_push_options *opts, unsigned int version); -GIT_EXTERN(int) git_rebase_init_options(git_rebase_options *opts, unsigned int version); -GIT_EXTERN(int) git_remote_create_init_options(git_remote_create_options *opts, unsigned int version); -GIT_EXTERN(int) git_repository_init_init_options(git_repository_init_options *opts, unsigned int version); -GIT_EXTERN(int) git_revert_init_options(git_revert_options *opts, unsigned int version); -GIT_EXTERN(int) git_stash_apply_init_options(git_stash_apply_options *opts, unsigned int version); -GIT_EXTERN(int) git_status_init_options(git_status_options *opts, unsigned int version); -GIT_EXTERN(int) git_submodule_update_init_options(git_submodule_update_options *opts, unsigned int version); -GIT_EXTERN(int) git_worktree_add_init_options(git_worktree_add_options *opts, unsigned int version); -GIT_EXTERN(int) git_worktree_prune_init_options(git_worktree_prune_options *opts, unsigned int version); - -/**@}*/ - -/** @} */ -GIT_END_DECL - -#endif - -#endif diff --git a/libgit2/headers/git2/describe.h b/libgit2/headers/git2/describe.h deleted file mode 100644 index 1d2ca14..0000000 --- a/libgit2/headers/git2/describe.h +++ /dev/null @@ -1,189 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_describe_h__ -#define INCLUDE_git_describe_h__ - -#include "common.h" -#include "types.h" -#include "buffer.h" - -/** - * @file git2/describe.h - * @brief Git describing routines - * @defgroup git_describe Git describing routines - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Reference lookup strategy - * - * These behave like the --tags and --all options to git-describe, - * namely they say to look for any reference in either refs/tags/ or - * refs/ respectively. - */ -typedef enum { - GIT_DESCRIBE_DEFAULT, - GIT_DESCRIBE_TAGS, - GIT_DESCRIBE_ALL, -} git_describe_strategy_t; - -/** - * Describe options structure - * - * Initialize with `GIT_DESCRIBE_OPTIONS_INIT`. Alternatively, you can - * use `git_describe_options_init`. - * - */ -typedef struct git_describe_options { - unsigned int version; - - unsigned int max_candidates_tags; /**< default: 10 */ - unsigned int describe_strategy; /**< default: GIT_DESCRIBE_DEFAULT */ - const char *pattern; - /** - * When calculating the distance from the matching tag or - * reference, only walk down the first-parent ancestry. - */ - int only_follow_first_parent; - /** - * If no matching tag or reference is found, the describe - * operation would normally fail. If this option is set, it - * will instead fall back to showing the full id of the - * commit. - */ - int show_commit_oid_as_fallback; -} git_describe_options; - -#define GIT_DESCRIBE_DEFAULT_MAX_CANDIDATES_TAGS 10 -#define GIT_DESCRIBE_DEFAULT_ABBREVIATED_SIZE 7 - -#define GIT_DESCRIBE_OPTIONS_VERSION 1 -#define GIT_DESCRIBE_OPTIONS_INIT { \ - GIT_DESCRIBE_OPTIONS_VERSION, \ - GIT_DESCRIBE_DEFAULT_MAX_CANDIDATES_TAGS, \ -} - -/** - * Initialize git_describe_options structure - * - * Initializes a `git_describe_options` with default values. Equivalent to creating - * an instance with GIT_DESCRIBE_OPTIONS_INIT. - * - * @param opts The `git_describe_options` struct to initialize. - * @param version The struct version; pass `GIT_DESCRIBE_OPTIONS_VERSION`. - * @return Zero on success; -1 on failure. - */ -GIT_EXTERN(int) git_describe_options_init(git_describe_options *opts, unsigned int version); - -/** - * Describe format options structure - * - * Initialize with `GIT_DESCRIBE_FORMAT_OPTIONS_INIT`. Alternatively, you can - * use `git_describe_format_options_init`. - * - */ -typedef struct { - unsigned int version; - - /** - * Size of the abbreviated commit id to use. This value is the - * lower bound for the length of the abbreviated string. The - * default is 7. - */ - unsigned int abbreviated_size; - - /** - * Set to use the long format even when a shorter name could be used. - */ - int always_use_long_format; - - /** - * If the workdir is dirty and this is set, this string will - * be appended to the description string. - */ - const char *dirty_suffix; -} git_describe_format_options; - -#define GIT_DESCRIBE_FORMAT_OPTIONS_VERSION 1 -#define GIT_DESCRIBE_FORMAT_OPTIONS_INIT { \ - GIT_DESCRIBE_FORMAT_OPTIONS_VERSION, \ - GIT_DESCRIBE_DEFAULT_ABBREVIATED_SIZE, \ - } - -/** - * Initialize git_describe_format_options structure - * - * Initializes a `git_describe_format_options` with default values. Equivalent to creating - * an instance with GIT_DESCRIBE_FORMAT_OPTIONS_INIT. - * - * @param opts The `git_describe_format_options` struct to initialize. - * @param version The struct version; pass `GIT_DESCRIBE_FORMAT_OPTIONS_VERSION`. - * @return Zero on success; -1 on failure. - */ -GIT_EXTERN(int) git_describe_format_options_init(git_describe_format_options *opts, unsigned int version); - -/** - * A struct that stores the result of a describe operation. - */ -typedef struct git_describe_result git_describe_result; - -/** - * Describe a commit - * - * Perform the describe operation on the given committish object. - * - * @param result pointer to store the result. You must free this once - * you're done with it. - * @param committish a committish to describe - * @param opts the lookup options (or NULL for defaults) - */ -GIT_EXTERN(int) git_describe_commit( - git_describe_result **result, - git_object *committish, - git_describe_options *opts); - -/** - * Describe a commit - * - * Perform the describe operation on the current commit and the - * worktree. After peforming describe on HEAD, a status is run and the - * description is considered to be dirty if there are. - * - * @param out pointer to store the result. You must free this once - * you're done with it. - * @param repo the repository in which to perform the describe - * @param opts the lookup options (or NULL for defaults) - */ -GIT_EXTERN(int) git_describe_workdir( - git_describe_result **out, - git_repository *repo, - git_describe_options *opts); - -/** - * Print the describe result to a buffer - * - * @param out The buffer to store the result - * @param result the result from `git_describe_commit()` or - * `git_describe_workdir()`. - * @param opts the formatting options (or NULL for defaults) - */ -GIT_EXTERN(int) git_describe_format( - git_buf *out, - const git_describe_result *result, - const git_describe_format_options *opts); - -/** - * Free the describe result. - */ -GIT_EXTERN(void) git_describe_result_free(git_describe_result *result); - -/** @} */ -GIT_END_DECL - -#endif diff --git a/libgit2/headers/git2/diff.h b/libgit2/headers/git2/diff.h deleted file mode 100644 index a14c019..0000000 --- a/libgit2/headers/git2/diff.h +++ /dev/null @@ -1,1431 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_diff_h__ -#define INCLUDE_git_diff_h__ - -#include "common.h" -#include "types.h" -#include "oid.h" -#include "tree.h" -#include "refs.h" - -/** - * @file git2/diff.h - * @brief Git tree and file differencing routines. - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Flags for diff options. A combination of these flags can be passed - * in via the `flags` value in the `git_diff_options`. - */ -typedef enum { - /** Normal diff, the default */ - GIT_DIFF_NORMAL = 0, - - /* - * Options controlling which files will be in the diff - */ - - /** Reverse the sides of the diff */ - GIT_DIFF_REVERSE = (1u << 0), - - /** Include ignored files in the diff */ - GIT_DIFF_INCLUDE_IGNORED = (1u << 1), - - /** Even with GIT_DIFF_INCLUDE_IGNORED, an entire ignored directory - * will be marked with only a single entry in the diff; this flag - * adds all files under the directory as IGNORED entries, too. - */ - GIT_DIFF_RECURSE_IGNORED_DIRS = (1u << 2), - - /** Include untracked files in the diff */ - GIT_DIFF_INCLUDE_UNTRACKED = (1u << 3), - - /** Even with GIT_DIFF_INCLUDE_UNTRACKED, an entire untracked - * directory will be marked with only a single entry in the diff - * (a la what core Git does in `git status`); this flag adds *all* - * files under untracked directories as UNTRACKED entries, too. - */ - GIT_DIFF_RECURSE_UNTRACKED_DIRS = (1u << 4), - - /** Include unmodified files in the diff */ - GIT_DIFF_INCLUDE_UNMODIFIED = (1u << 5), - - /** Normally, a type change between files will be converted into a - * DELETED record for the old and an ADDED record for the new; this - * options enabled the generation of TYPECHANGE delta records. - */ - GIT_DIFF_INCLUDE_TYPECHANGE = (1u << 6), - - /** Even with GIT_DIFF_INCLUDE_TYPECHANGE, blob->tree changes still - * generally show as a DELETED blob. This flag tries to correctly - * label blob->tree transitions as TYPECHANGE records with new_file's - * mode set to tree. Note: the tree SHA will not be available. - */ - GIT_DIFF_INCLUDE_TYPECHANGE_TREES = (1u << 7), - - /** Ignore file mode changes */ - GIT_DIFF_IGNORE_FILEMODE = (1u << 8), - - /** Treat all submodules as unmodified */ - GIT_DIFF_IGNORE_SUBMODULES = (1u << 9), - - /** Use case insensitive filename comparisons */ - GIT_DIFF_IGNORE_CASE = (1u << 10), - - /** May be combined with `GIT_DIFF_IGNORE_CASE` to specify that a file - * that has changed case will be returned as an add/delete pair. - */ - GIT_DIFF_INCLUDE_CASECHANGE = (1u << 11), - - /** If the pathspec is set in the diff options, this flags indicates - * that the paths will be treated as literal paths instead of - * fnmatch patterns. Each path in the list must either be a full - * path to a file or a directory. (A trailing slash indicates that - * the path will _only_ match a directory). If a directory is - * specified, all children will be included. - */ - GIT_DIFF_DISABLE_PATHSPEC_MATCH = (1u << 12), - - /** Disable updating of the `binary` flag in delta records. This is - * useful when iterating over a diff if you don't need hunk and data - * callbacks and want to avoid having to load file completely. - */ - GIT_DIFF_SKIP_BINARY_CHECK = (1u << 13), - - /** When diff finds an untracked directory, to match the behavior of - * core Git, it scans the contents for IGNORED and UNTRACKED files. - * If *all* contents are IGNORED, then the directory is IGNORED; if - * any contents are not IGNORED, then the directory is UNTRACKED. - * This is extra work that may not matter in many cases. This flag - * turns off that scan and immediately labels an untracked directory - * as UNTRACKED (changing the behavior to not match core Git). - */ - GIT_DIFF_ENABLE_FAST_UNTRACKED_DIRS = (1u << 14), - - /** When diff finds a file in the working directory with stat - * information different from the index, but the OID ends up being the - * same, write the correct stat information into the index. Note: - * without this flag, diff will always leave the index untouched. - */ - GIT_DIFF_UPDATE_INDEX = (1u << 15), - - /** Include unreadable files in the diff */ - GIT_DIFF_INCLUDE_UNREADABLE = (1u << 16), - - /** Include unreadable files in the diff */ - GIT_DIFF_INCLUDE_UNREADABLE_AS_UNTRACKED = (1u << 17), - - /* - * Options controlling how output will be generated - */ - - /** Use a heuristic that takes indentation and whitespace into account - * which generally can produce better diffs when dealing with ambiguous - * diff hunks. - */ - GIT_DIFF_INDENT_HEURISTIC = (1u << 18), - - /** Ignore blank lines */ - GIT_DIFF_IGNORE_BLANK_LINES = (1u << 19), - - /** Treat all files as text, disabling binary attributes & detection */ - GIT_DIFF_FORCE_TEXT = (1u << 20), - /** Treat all files as binary, disabling text diffs */ - GIT_DIFF_FORCE_BINARY = (1u << 21), - - /** Ignore all whitespace */ - GIT_DIFF_IGNORE_WHITESPACE = (1u << 22), - /** Ignore changes in amount of whitespace */ - GIT_DIFF_IGNORE_WHITESPACE_CHANGE = (1u << 23), - /** Ignore whitespace at end of line */ - GIT_DIFF_IGNORE_WHITESPACE_EOL = (1u << 24), - - /** When generating patch text, include the content of untracked - * files. This automatically turns on GIT_DIFF_INCLUDE_UNTRACKED but - * it does not turn on GIT_DIFF_RECURSE_UNTRACKED_DIRS. Add that - * flag if you want the content of every single UNTRACKED file. - */ - GIT_DIFF_SHOW_UNTRACKED_CONTENT = (1u << 25), - - /** When generating output, include the names of unmodified files if - * they are included in the git_diff. Normally these are skipped in - * the formats that list files (e.g. name-only, name-status, raw). - * Even with this, these will not be included in patch format. - */ - GIT_DIFF_SHOW_UNMODIFIED = (1u << 26), - - /** Use the "patience diff" algorithm */ - GIT_DIFF_PATIENCE = (1u << 28), - /** Take extra time to find minimal diff */ - GIT_DIFF_MINIMAL = (1u << 29), - - /** Include the necessary deflate / delta information so that `git-apply` - * can apply given diff information to binary files. - */ - GIT_DIFF_SHOW_BINARY = (1u << 30), -} git_diff_option_t; - -/** - * The diff object that contains all individual file deltas. - * - * A `diff` represents the cumulative list of differences between two - * snapshots of a repository (possibly filtered by a set of file name - * patterns). - * - * Calculating diffs is generally done in two phases: building a list of - * diffs then traversing it. This makes is easier to share logic across - * the various types of diffs (tree vs tree, workdir vs index, etc.), and - * also allows you to insert optional diff post-processing phases, - * such as rename detection, in between the steps. When you are done with - * a diff object, it must be freed. - * - * This is an opaque structure which will be allocated by one of the diff - * generator functions below (such as `git_diff_tree_to_tree`). You are - * responsible for releasing the object memory when done, using the - * `git_diff_free()` function. - * - */ -typedef struct git_diff git_diff; - -/** - * Flags for the delta object and the file objects on each side. - * - * These flags are used for both the `flags` value of the `git_diff_delta` - * and the flags for the `git_diff_file` objects representing the old and - * new sides of the delta. Values outside of this public range should be - * considered reserved for internal or future use. - */ -typedef enum { - GIT_DIFF_FLAG_BINARY = (1u << 0), /**< file(s) treated as binary data */ - GIT_DIFF_FLAG_NOT_BINARY = (1u << 1), /**< file(s) treated as text data */ - GIT_DIFF_FLAG_VALID_ID = (1u << 2), /**< `id` value is known correct */ - GIT_DIFF_FLAG_EXISTS = (1u << 3), /**< file exists at this side of the delta */ -} git_diff_flag_t; - -/** - * What type of change is described by a git_diff_delta? - * - * `GIT_DELTA_RENAMED` and `GIT_DELTA_COPIED` will only show up if you run - * `git_diff_find_similar()` on the diff object. - * - * `GIT_DELTA_TYPECHANGE` only shows up given `GIT_DIFF_INCLUDE_TYPECHANGE` - * in the option flags (otherwise type changes will be split into ADDED / - * DELETED pairs). - */ -typedef enum { - GIT_DELTA_UNMODIFIED = 0, /**< no changes */ - GIT_DELTA_ADDED = 1, /**< entry does not exist in old version */ - GIT_DELTA_DELETED = 2, /**< entry does not exist in new version */ - GIT_DELTA_MODIFIED = 3, /**< entry content changed between old and new */ - GIT_DELTA_RENAMED = 4, /**< entry was renamed between old and new */ - GIT_DELTA_COPIED = 5, /**< entry was copied from another old entry */ - GIT_DELTA_IGNORED = 6, /**< entry is ignored item in workdir */ - GIT_DELTA_UNTRACKED = 7, /**< entry is untracked item in workdir */ - GIT_DELTA_TYPECHANGE = 8, /**< type of entry changed between old and new */ - GIT_DELTA_UNREADABLE = 9, /**< entry is unreadable */ - GIT_DELTA_CONFLICTED = 10, /**< entry in the index is conflicted */ -} git_delta_t; - -/** - * Description of one side of a delta. - * - * Although this is called a "file", it could represent a file, a symbolic - * link, a submodule commit id, or even a tree (although that only if you - * are tracking type changes or ignored/untracked directories). - */ -typedef struct { - /** - * The `git_oid` of the item. If the entry represents an - * absent side of a diff (e.g. the `old_file` of a `GIT_DELTA_ADDED` delta), - * then the oid will be zeroes. - */ - git_oid id; - - /** - * The NUL-terminated path to the entry relative to the working - * directory of the repository. - */ - const char *path; - - /** - * The size of the entry in bytes. - */ - git_object_size_t size; - - /** - * A combination of the `git_diff_flag_t` types - */ - uint32_t flags; - - /** - * Roughly, the stat() `st_mode` value for the item. This will - * be restricted to one of the `git_filemode_t` values. - */ - uint16_t mode; - - /** - * Represents the known length of the `id` field, when - * converted to a hex string. It is generally `GIT_OID_HEXSZ`, unless this - * delta was created from reading a patch file, in which case it may be - * abbreviated to something reasonable, like 7 characters. - */ - uint16_t id_abbrev; -} git_diff_file; - -/** - * Description of changes to one entry. - * - * A `delta` is a file pair with an old and new revision. The old version - * may be absent if the file was just created and the new version may be - * absent if the file was deleted. A diff is mostly just a list of deltas. - * - * When iterating over a diff, this will be passed to most callbacks and - * you can use the contents to understand exactly what has changed. - * - * The `old_file` represents the "from" side of the diff and the `new_file` - * represents to "to" side of the diff. What those means depend on the - * function that was used to generate the diff and will be documented below. - * You can also use the `GIT_DIFF_REVERSE` flag to flip it around. - * - * Although the two sides of the delta are named "old_file" and "new_file", - * they actually may correspond to entries that represent a file, a symbolic - * link, a submodule commit id, or even a tree (if you are tracking type - * changes or ignored/untracked directories). - * - * Under some circumstances, in the name of efficiency, not all fields will - * be filled in, but we generally try to fill in as much as possible. One - * example is that the "flags" field may not have either the `BINARY` or the - * `NOT_BINARY` flag set to avoid examining file contents if you do not pass - * in hunk and/or line callbacks to the diff foreach iteration function. It - * will just use the git attributes for those files. - * - * The similarity score is zero unless you call `git_diff_find_similar()` - * which does a similarity analysis of files in the diff. Use that - * function to do rename and copy detection, and to split heavily modified - * files in add/delete pairs. After that call, deltas with a status of - * GIT_DELTA_RENAMED or GIT_DELTA_COPIED will have a similarity score - * between 0 and 100 indicating how similar the old and new sides are. - * - * If you ask `git_diff_find_similar` to find heavily modified files to - * break, but to not *actually* break the records, then GIT_DELTA_MODIFIED - * records may have a non-zero similarity score if the self-similarity is - * below the split threshold. To display this value like core Git, invert - * the score (a la `printf("M%03d", 100 - delta->similarity)`). - */ -typedef struct { - git_delta_t status; - uint32_t flags; /**< git_diff_flag_t values */ - uint16_t similarity; /**< for RENAMED and COPIED, value 0-100 */ - uint16_t nfiles; /**< number of files in this delta */ - git_diff_file old_file; - git_diff_file new_file; -} git_diff_delta; - -/** - * Diff notification callback function. - * - * The callback will be called for each file, just before the `git_diff_delta` - * gets inserted into the diff. - * - * When the callback: - * - returns < 0, the diff process will be aborted. - * - returns > 0, the delta will not be inserted into the diff, but the - * diff process continues. - * - returns 0, the delta is inserted into the diff, and the diff process - * continues. - */ -typedef int GIT_CALLBACK(git_diff_notify_cb)( - const git_diff *diff_so_far, - const git_diff_delta *delta_to_add, - const char *matched_pathspec, - void *payload); - -/** - * Diff progress callback. - * - * Called before each file comparison. - * - * @param diff_so_far The diff being generated. - * @param old_path The path to the old file or NULL. - * @param new_path The path to the new file or NULL. - * @return Non-zero to abort the diff. - */ -typedef int GIT_CALLBACK(git_diff_progress_cb)( - const git_diff *diff_so_far, - const char *old_path, - const char *new_path, - void *payload); - -/** - * Structure describing options about how the diff should be executed. - * - * Setting all values of the structure to zero will yield the default - * values. Similarly, passing NULL for the options structure will - * give the defaults. The default values are marked below. - * - */ -typedef struct { - unsigned int version; /**< version for the struct */ - - /** - * A combination of `git_diff_option_t` values above. - * Defaults to GIT_DIFF_NORMAL - */ - uint32_t flags; - - /* options controlling which files are in the diff */ - - /** Overrides the submodule ignore setting for all submodules in the diff. */ - git_submodule_ignore_t ignore_submodules; - - /** - * An array of paths / fnmatch patterns to constrain diff. - * All paths are included by default. - */ - git_strarray pathspec; - - /** - * An optional callback function, notifying the consumer of changes to - * the diff as new deltas are added. - */ - git_diff_notify_cb notify_cb; - - /** - * An optional callback function, notifying the consumer of which files - * are being examined as the diff is generated. - */ - git_diff_progress_cb progress_cb; - - /** The payload to pass to the callback functions. */ - void *payload; - - /* options controlling how to diff text is generated */ - - /** - * The number of unchanged lines that define the boundary of a hunk - * (and to display before and after). Defaults to 3. - */ - uint32_t context_lines; - /** - * The maximum number of unchanged lines between hunk boundaries before - * the hunks will be merged into one. Defaults to 0. - */ - uint32_t interhunk_lines; - - /** - * The abbreviation length to use when formatting object ids. - * Defaults to the value of 'core.abbrev' from the config, or 7 if unset. - */ - uint16_t id_abbrev; - - /** - * A size (in bytes) above which a blob will be marked as binary - * automatically; pass a negative value to disable. - * Defaults to 512MB. - */ - git_off_t max_size; - - /** - * The virtual "directory" prefix for old file names in hunk headers. - * Default is "a". - */ - const char *old_prefix; - - /** - * The virtual "directory" prefix for new file names in hunk headers. - * Defaults to "b". - */ - const char *new_prefix; -} git_diff_options; - -/* The current version of the diff options structure */ -#define GIT_DIFF_OPTIONS_VERSION 1 - -/* Stack initializer for diff options. Alternatively use - * `git_diff_options_init` programmatic initialization. - */ -#define GIT_DIFF_OPTIONS_INIT \ - {GIT_DIFF_OPTIONS_VERSION, 0, GIT_SUBMODULE_IGNORE_UNSPECIFIED, {NULL,0}, NULL, NULL, NULL, 3} - -/** - * Initialize git_diff_options structure - * - * Initializes a `git_diff_options` with default values. Equivalent to creating - * an instance with GIT_DIFF_OPTIONS_INIT. - * - * @param opts The `git_diff_options` struct to initialize. - * @param version The struct version; pass `GIT_DIFF_OPTIONS_VERSION`. - * @return Zero on success; -1 on failure. - */ -GIT_EXTERN(int) git_diff_options_init( - git_diff_options *opts, - unsigned int version); - -/** - * When iterating over a diff, callback that will be made per file. - * - * @param delta A pointer to the delta data for the file - * @param progress Goes from 0 to 1 over the diff - * @param payload User-specified pointer from foreach function - */ -typedef int GIT_CALLBACK(git_diff_file_cb)( - const git_diff_delta *delta, - float progress, - void *payload); - -#define GIT_DIFF_HUNK_HEADER_SIZE 128 - -/** - * When producing a binary diff, the binary data returned will be - * either the deflated full ("literal") contents of the file, or - * the deflated binary delta between the two sides (whichever is - * smaller). - */ -typedef enum { - /** There is no binary delta. */ - GIT_DIFF_BINARY_NONE, - - /** The binary data is the literal contents of the file. */ - GIT_DIFF_BINARY_LITERAL, - - /** The binary data is the delta from one side to the other. */ - GIT_DIFF_BINARY_DELTA, -} git_diff_binary_t; - -/** The contents of one of the files in a binary diff. */ -typedef struct { - /** The type of binary data for this file. */ - git_diff_binary_t type; - - /** The binary data, deflated. */ - const char *data; - - /** The length of the binary data. */ - size_t datalen; - - /** The length of the binary data after inflation. */ - size_t inflatedlen; -} git_diff_binary_file; - -/** - * Structure describing the binary contents of a diff. - * - * A `binary` file / delta is a file (or pair) for which no text diffs - * should be generated. A diff can contain delta entries that are - * binary, but no diff content will be output for those files. There is - * a base heuristic for binary detection and you can further tune the - * behavior with git attributes or diff flags and option settings. - */ -typedef struct { - /** - * Whether there is data in this binary structure or not. - * - * If this is `1`, then this was produced and included binary content. - * If this is `0` then this was generated knowing only that a binary - * file changed but without providing the data, probably from a patch - * that said `Binary files a/file.txt and b/file.txt differ`. - */ - unsigned int contains_data; - git_diff_binary_file old_file; /**< The contents of the old file. */ - git_diff_binary_file new_file; /**< The contents of the new file. */ -} git_diff_binary; - -/** - * When iterating over a diff, callback that will be made for - * binary content within the diff. - */ -typedef int GIT_CALLBACK(git_diff_binary_cb)( - const git_diff_delta *delta, - const git_diff_binary *binary, - void *payload); - -/** - * Structure describing a hunk of a diff. - * - * A `hunk` is a span of modified lines in a delta along with some stable - * surrounding context. You can configure the amount of context and other - * properties of how hunks are generated. Each hunk also comes with a - * header that described where it starts and ends in both the old and new - * versions in the delta. - */ -typedef struct { - int old_start; /**< Starting line number in old_file */ - int old_lines; /**< Number of lines in old_file */ - int new_start; /**< Starting line number in new_file */ - int new_lines; /**< Number of lines in new_file */ - size_t header_len; /**< Number of bytes in header text */ - char header[GIT_DIFF_HUNK_HEADER_SIZE]; /**< Header text, NUL-byte terminated */ -} git_diff_hunk; - -/** - * When iterating over a diff, callback that will be made per hunk. - */ -typedef int GIT_CALLBACK(git_diff_hunk_cb)( - const git_diff_delta *delta, - const git_diff_hunk *hunk, - void *payload); - -/** - * Line origin constants. - * - * These values describe where a line came from and will be passed to - * the git_diff_line_cb when iterating over a diff. There are some - * special origin constants at the end that are used for the text - * output callbacks to demarcate lines that are actually part of - * the file or hunk headers. - */ -typedef enum { - /* These values will be sent to `git_diff_line_cb` along with the line */ - GIT_DIFF_LINE_CONTEXT = ' ', - GIT_DIFF_LINE_ADDITION = '+', - GIT_DIFF_LINE_DELETION = '-', - - GIT_DIFF_LINE_CONTEXT_EOFNL = '=', /**< Both files have no LF at end */ - GIT_DIFF_LINE_ADD_EOFNL = '>', /**< Old has no LF at end, new does */ - GIT_DIFF_LINE_DEL_EOFNL = '<', /**< Old has LF at end, new does not */ - - /* The following values will only be sent to a `git_diff_line_cb` when - * the content of a diff is being formatted through `git_diff_print`. - */ - GIT_DIFF_LINE_FILE_HDR = 'F', - GIT_DIFF_LINE_HUNK_HDR = 'H', - GIT_DIFF_LINE_BINARY = 'B' /**< For "Binary files x and y differ" */ -} git_diff_line_t; - -/** - * Structure describing a line (or data span) of a diff. - * - * A `line` is a range of characters inside a hunk. It could be a context - * line (i.e. in both old and new versions), an added line (i.e. only in - * the new version), or a removed line (i.e. only in the old version). - * Unfortunately, we don't know anything about the encoding of data in the - * file being diffed, so we cannot tell you much about the line content. - * Line data will not be NUL-byte terminated, however, because it will be - * just a span of bytes inside the larger file. - */ -typedef struct { - char origin; /**< A git_diff_line_t value */ - int old_lineno; /**< Line number in old file or -1 for added line */ - int new_lineno; /**< Line number in new file or -1 for deleted line */ - int num_lines; /**< Number of newline characters in content */ - size_t content_len; /**< Number of bytes of data */ - git_off_t content_offset; /**< Offset in the original file to the content */ - const char *content; /**< Pointer to diff text, not NUL-byte terminated */ -} git_diff_line; - -/** - * When iterating over a diff, callback that will be made per text diff - * line. In this context, the provided range will be NULL. - * - * When printing a diff, callback that will be made to output each line - * of text. This uses some extra GIT_DIFF_LINE_... constants for output - * of lines of file and hunk headers. - */ -typedef int GIT_CALLBACK(git_diff_line_cb)( - const git_diff_delta *delta, /**< delta that contains this data */ - const git_diff_hunk *hunk, /**< hunk containing this data */ - const git_diff_line *line, /**< line data */ - void *payload); /**< user reference data */ - -/** - * Flags to control the behavior of diff rename/copy detection. - */ -typedef enum { - /** Obey `diff.renames`. Overridden by any other GIT_DIFF_FIND_... flag. */ - GIT_DIFF_FIND_BY_CONFIG = 0, - - /** Look for renames? (`--find-renames`) */ - GIT_DIFF_FIND_RENAMES = (1u << 0), - - /** Consider old side of MODIFIED for renames? (`--break-rewrites=N`) */ - GIT_DIFF_FIND_RENAMES_FROM_REWRITES = (1u << 1), - - /** Look for copies? (a la `--find-copies`). */ - GIT_DIFF_FIND_COPIES = (1u << 2), - - /** Consider UNMODIFIED as copy sources? (`--find-copies-harder`). - * - * For this to work correctly, use GIT_DIFF_INCLUDE_UNMODIFIED when - * the initial `git_diff` is being generated. - */ - GIT_DIFF_FIND_COPIES_FROM_UNMODIFIED = (1u << 3), - - /** Mark significant rewrites for split (`--break-rewrites=/M`) */ - GIT_DIFF_FIND_REWRITES = (1u << 4), - /** Actually split large rewrites into delete/add pairs */ - GIT_DIFF_BREAK_REWRITES = (1u << 5), - /** Mark rewrites for split and break into delete/add pairs */ - GIT_DIFF_FIND_AND_BREAK_REWRITES = - (GIT_DIFF_FIND_REWRITES | GIT_DIFF_BREAK_REWRITES), - - /** Find renames/copies for UNTRACKED items in working directory. - * - * For this to work correctly, use GIT_DIFF_INCLUDE_UNTRACKED when the - * initial `git_diff` is being generated (and obviously the diff must - * be against the working directory for this to make sense). - */ - GIT_DIFF_FIND_FOR_UNTRACKED = (1u << 6), - - /** Turn on all finding features. */ - GIT_DIFF_FIND_ALL = (0x0ff), - - /** Measure similarity ignoring leading whitespace (default) */ - GIT_DIFF_FIND_IGNORE_LEADING_WHITESPACE = 0, - /** Measure similarity ignoring all whitespace */ - GIT_DIFF_FIND_IGNORE_WHITESPACE = (1u << 12), - /** Measure similarity including all data */ - GIT_DIFF_FIND_DONT_IGNORE_WHITESPACE = (1u << 13), - /** Measure similarity only by comparing SHAs (fast and cheap) */ - GIT_DIFF_FIND_EXACT_MATCH_ONLY = (1u << 14), - - /** Do not break rewrites unless they contribute to a rename. - * - * Normally, GIT_DIFF_FIND_AND_BREAK_REWRITES will measure the self- - * similarity of modified files and split the ones that have changed a - * lot into a DELETE / ADD pair. Then the sides of that pair will be - * considered candidates for rename and copy detection. - * - * If you add this flag in and the split pair is *not* used for an - * actual rename or copy, then the modified record will be restored to - * a regular MODIFIED record instead of being split. - */ - GIT_DIFF_BREAK_REWRITES_FOR_RENAMES_ONLY = (1u << 15), - - /** Remove any UNMODIFIED deltas after find_similar is done. - * - * Using GIT_DIFF_FIND_COPIES_FROM_UNMODIFIED to emulate the - * --find-copies-harder behavior requires building a diff with the - * GIT_DIFF_INCLUDE_UNMODIFIED flag. If you do not want UNMODIFIED - * records in the final result, pass this flag to have them removed. - */ - GIT_DIFF_FIND_REMOVE_UNMODIFIED = (1u << 16), -} git_diff_find_t; - -/** - * Pluggable similarity metric - */ -typedef struct { - int GIT_CALLBACK(file_signature)( - void **out, const git_diff_file *file, - const char *fullpath, void *payload); - int GIT_CALLBACK(buffer_signature)( - void **out, const git_diff_file *file, - const char *buf, size_t buflen, void *payload); - void GIT_CALLBACK(free_signature)(void *sig, void *payload); - int GIT_CALLBACK(similarity)(int *score, void *siga, void *sigb, void *payload); - void *payload; -} git_diff_similarity_metric; - -/** - * Control behavior of rename and copy detection - * - * These options mostly mimic parameters that can be passed to git-diff. - */ -typedef struct { - unsigned int version; - - /** - * Combination of git_diff_find_t values (default GIT_DIFF_FIND_BY_CONFIG). - * NOTE: if you don't explicitly set this, `diff.renames` could be set - * to false, resulting in `git_diff_find_similar` doing nothing. - */ - uint32_t flags; - - /** - * Threshold above which similar files will be considered renames. - * This is equivalent to the -M option. Defaults to 50. - */ - uint16_t rename_threshold; - - /** - * Threshold below which similar files will be eligible to be a rename source. - * This is equivalent to the first part of the -B option. Defaults to 50. - */ - uint16_t rename_from_rewrite_threshold; - - /** - * Threshold above which similar files will be considered copies. - * This is equivalent to the -C option. Defaults to 50. - */ - uint16_t copy_threshold; - - /** - * Treshold below which similar files will be split into a delete/add pair. - * This is equivalent to the last part of the -B option. Defaults to 60. - */ - uint16_t break_rewrite_threshold; - - /** - * Maximum number of matches to consider for a particular file. - * - * This is a little different from the `-l` option from Git because we - * will still process up to this many matches before abandoning the search. - * Defaults to 200. - */ - size_t rename_limit; - - /** - * The `metric` option allows you to plug in a custom similarity metric. - * - * Set it to NULL to use the default internal metric. - * - * The default metric is based on sampling hashes of ranges of data in - * the file, which is a pretty good similarity approximation that should - * work fairly well for both text and binary data while still being - * pretty fast with a fixed memory overhead. - */ - git_diff_similarity_metric *metric; -} git_diff_find_options; - -#define GIT_DIFF_FIND_OPTIONS_VERSION 1 -#define GIT_DIFF_FIND_OPTIONS_INIT {GIT_DIFF_FIND_OPTIONS_VERSION} - -/** - * Initialize git_diff_find_options structure - * - * Initializes a `git_diff_find_options` with default values. Equivalent to creating - * an instance with GIT_DIFF_FIND_OPTIONS_INIT. - * - * @param opts The `git_diff_find_options` struct to initialize. - * @param version The struct version; pass `GIT_DIFF_FIND_OPTIONS_VERSION`. - * @return Zero on success; -1 on failure. - */ -GIT_EXTERN(int) git_diff_find_options_init( - git_diff_find_options *opts, - unsigned int version); - -/** @name Diff Generator Functions - * - * These are the functions you would use to create (or destroy) a - * git_diff from various objects in a repository. - */ -/**@{*/ - -/** - * Deallocate a diff. - * - * @param diff The previously created diff; cannot be used after free. - */ -GIT_EXTERN(void) git_diff_free(git_diff *diff); - -/** - * Create a diff with the difference between two tree objects. - * - * This is equivalent to `git diff ` - * - * The first tree will be used for the "old_file" side of the delta and the - * second tree will be used for the "new_file" side of the delta. You can - * pass NULL to indicate an empty tree, although it is an error to pass - * NULL for both the `old_tree` and `new_tree`. - * - * @param diff Output pointer to a git_diff pointer to be allocated. - * @param repo The repository containing the trees. - * @param old_tree A git_tree object to diff from, or NULL for empty tree. - * @param new_tree A git_tree object to diff to, or NULL for empty tree. - * @param opts Structure with options to influence diff or NULL for defaults. - */ -GIT_EXTERN(int) git_diff_tree_to_tree( - git_diff **diff, - git_repository *repo, - git_tree *old_tree, - git_tree *new_tree, - const git_diff_options *opts); - -/** - * Create a diff between a tree and repository index. - * - * This is equivalent to `git diff --cached ` or if you pass - * the HEAD tree, then like `git diff --cached`. - * - * The tree you pass will be used for the "old_file" side of the delta, and - * the index will be used for the "new_file" side of the delta. - * - * If you pass NULL for the index, then the existing index of the `repo` - * will be used. In this case, the index will be refreshed from disk - * (if it has changed) before the diff is generated. - * - * @param diff Output pointer to a git_diff pointer to be allocated. - * @param repo The repository containing the tree and index. - * @param old_tree A git_tree object to diff from, or NULL for empty tree. - * @param index The index to diff with; repo index used if NULL. - * @param opts Structure with options to influence diff or NULL for defaults. - */ -GIT_EXTERN(int) git_diff_tree_to_index( - git_diff **diff, - git_repository *repo, - git_tree *old_tree, - git_index *index, - const git_diff_options *opts); - -/** - * Create a diff between the repository index and the workdir directory. - * - * This matches the `git diff` command. See the note below on - * `git_diff_tree_to_workdir` for a discussion of the difference between - * `git diff` and `git diff HEAD` and how to emulate a `git diff ` - * using libgit2. - * - * The index will be used for the "old_file" side of the delta, and the - * working directory will be used for the "new_file" side of the delta. - * - * If you pass NULL for the index, then the existing index of the `repo` - * will be used. In this case, the index will be refreshed from disk - * (if it has changed) before the diff is generated. - * - * @param diff Output pointer to a git_diff pointer to be allocated. - * @param repo The repository. - * @param index The index to diff from; repo index used if NULL. - * @param opts Structure with options to influence diff or NULL for defaults. - */ -GIT_EXTERN(int) git_diff_index_to_workdir( - git_diff **diff, - git_repository *repo, - git_index *index, - const git_diff_options *opts); - -/** - * Create a diff between a tree and the working directory. - * - * The tree you provide will be used for the "old_file" side of the delta, - * and the working directory will be used for the "new_file" side. - * - * This is not the same as `git diff ` or `git diff-index - * `. Those commands use information from the index, whereas this - * function strictly returns the differences between the tree and the files - * in the working directory, regardless of the state of the index. Use - * `git_diff_tree_to_workdir_with_index` to emulate those commands. - * - * To see difference between this and `git_diff_tree_to_workdir_with_index`, - * consider the example of a staged file deletion where the file has then - * been put back into the working dir and further modified. The - * tree-to-workdir diff for that file is 'modified', but `git diff` would - * show status 'deleted' since there is a staged delete. - * - * @param diff A pointer to a git_diff pointer that will be allocated. - * @param repo The repository containing the tree. - * @param old_tree A git_tree object to diff from, or NULL for empty tree. - * @param opts Structure with options to influence diff or NULL for defaults. - */ -GIT_EXTERN(int) git_diff_tree_to_workdir( - git_diff **diff, - git_repository *repo, - git_tree *old_tree, - const git_diff_options *opts); - -/** - * Create a diff between a tree and the working directory using index data - * to account for staged deletes, tracked files, etc. - * - * This emulates `git diff ` by diffing the tree to the index and - * the index to the working directory and blending the results into a - * single diff that includes staged deleted, etc. - * - * @param diff A pointer to a git_diff pointer that will be allocated. - * @param repo The repository containing the tree. - * @param old_tree A git_tree object to diff from, or NULL for empty tree. - * @param opts Structure with options to influence diff or NULL for defaults. - */ -GIT_EXTERN(int) git_diff_tree_to_workdir_with_index( - git_diff **diff, - git_repository *repo, - git_tree *old_tree, - const git_diff_options *opts); - -/** - * Create a diff with the difference between two index objects. - * - * The first index will be used for the "old_file" side of the delta and the - * second index will be used for the "new_file" side of the delta. - * - * @param diff Output pointer to a git_diff pointer to be allocated. - * @param repo The repository containing the indexes. - * @param old_index A git_index object to diff from. - * @param new_index A git_index object to diff to. - * @param opts Structure with options to influence diff or NULL for defaults. - */ -GIT_EXTERN(int) git_diff_index_to_index( - git_diff **diff, - git_repository *repo, - git_index *old_index, - git_index *new_index, - const git_diff_options *opts); - -/** - * Merge one diff into another. - * - * This merges items from the "from" list into the "onto" list. The - * resulting diff will have all items that appear in either list. - * If an item appears in both lists, then it will be "merged" to appear - * as if the old version was from the "onto" list and the new version - * is from the "from" list (with the exception that if the item has a - * pending DELETE in the middle, then it will show as deleted). - * - * @param onto Diff to merge into. - * @param from Diff to merge. - */ -GIT_EXTERN(int) git_diff_merge( - git_diff *onto, - const git_diff *from); - -/** - * Transform a diff marking file renames, copies, etc. - * - * This modifies a diff in place, replacing old entries that look - * like renames or copies with new entries reflecting those changes. - * This also will, if requested, break modified files into add/remove - * pairs if the amount of change is above a threshold. - * - * @param diff diff to run detection algorithms on - * @param options Control how detection should be run, NULL for defaults - * @return 0 on success, -1 on failure - */ -GIT_EXTERN(int) git_diff_find_similar( - git_diff *diff, - const git_diff_find_options *options); - -/**@}*/ - - -/** @name Diff Processor Functions - * - * These are the functions you apply to a diff to process it - * or read it in some way. - */ -/**@{*/ - -/** - * Query how many diff records are there in a diff. - * - * @param diff A git_diff generated by one of the above functions - * @return Count of number of deltas in the list - */ -GIT_EXTERN(size_t) git_diff_num_deltas(const git_diff *diff); - -/** - * Query how many diff deltas are there in a diff filtered by type. - * - * This works just like `git_diff_num_deltas()` with an extra parameter - * that is a `git_delta_t` and returns just the count of how many deltas - * match that particular type. - * - * @param diff A git_diff generated by one of the above functions - * @param type A git_delta_t value to filter the count - * @return Count of number of deltas matching delta_t type - */ -GIT_EXTERN(size_t) git_diff_num_deltas_of_type( - const git_diff *diff, git_delta_t type); - -/** - * Return the diff delta for an entry in the diff list. - * - * The `git_diff_delta` pointer points to internal data and you do not - * have to release it when you are done with it. It will go away when - * the * `git_diff` (or any associated `git_patch`) goes away. - * - * Note that the flags on the delta related to whether it has binary - * content or not may not be set if there are no attributes set for the - * file and there has been no reason to load the file data at this point. - * For now, if you need those flags to be up to date, your only option is - * to either use `git_diff_foreach` or create a `git_patch`. - * - * @param diff Diff list object - * @param idx Index into diff list - * @return Pointer to git_diff_delta (or NULL if `idx` out of range) - */ -GIT_EXTERN(const git_diff_delta *) git_diff_get_delta( - const git_diff *diff, size_t idx); - -/** - * Check if deltas are sorted case sensitively or insensitively. - * - * @param diff diff to check - * @return 0 if case sensitive, 1 if case is ignored - */ -GIT_EXTERN(int) git_diff_is_sorted_icase(const git_diff *diff); - -/** - * Loop over all deltas in a diff issuing callbacks. - * - * This will iterate through all of the files described in a diff. You - * should provide a file callback to learn about each file. - * - * The "hunk" and "line" callbacks are optional, and the text diff of the - * files will only be calculated if they are not NULL. Of course, these - * callbacks will not be invoked for binary files on the diff or for - * files whose only changed is a file mode change. - * - * Returning a non-zero value from any of the callbacks will terminate - * the iteration and return the value to the user. - * - * @param diff A git_diff generated by one of the above functions. - * @param file_cb Callback function to make per file in the diff. - * @param binary_cb Optional callback to make for binary files. - * @param hunk_cb Optional callback to make per hunk of text diff. This - * callback is called to describe a range of lines in the - * diff. It will not be issued for binary files. - * @param line_cb Optional callback to make per line of diff text. This - * same callback will be made for context lines, added, and - * removed lines, and even for a deleted trailing newline. - * @param payload Reference pointer that will be passed to your callbacks. - * @return 0 on success, non-zero callback return value, or error code - */ -GIT_EXTERN(int) git_diff_foreach( - git_diff *diff, - git_diff_file_cb file_cb, - git_diff_binary_cb binary_cb, - git_diff_hunk_cb hunk_cb, - git_diff_line_cb line_cb, - void *payload); - -/** - * Look up the single character abbreviation for a delta status code. - * - * When you run `git diff --name-status` it uses single letter codes in - * the output such as 'A' for added, 'D' for deleted, 'M' for modified, - * etc. This function converts a git_delta_t value into these letters for - * your own purposes. GIT_DELTA_UNTRACKED will return a space (i.e. ' '). - * - * @param status The git_delta_t value to look up - * @return The single character label for that code - */ -GIT_EXTERN(char) git_diff_status_char(git_delta_t status); - -/** - * Possible output formats for diff data - */ -typedef enum { - GIT_DIFF_FORMAT_PATCH = 1u, /**< full git diff */ - GIT_DIFF_FORMAT_PATCH_HEADER = 2u, /**< just the file headers of patch */ - GIT_DIFF_FORMAT_RAW = 3u, /**< like git diff --raw */ - GIT_DIFF_FORMAT_NAME_ONLY = 4u, /**< like git diff --name-only */ - GIT_DIFF_FORMAT_NAME_STATUS = 5u, /**< like git diff --name-status */ - GIT_DIFF_FORMAT_PATCH_ID = 6u, /**< git diff as used by git patch-id */ -} git_diff_format_t; - -/** - * Iterate over a diff generating formatted text output. - * - * Returning a non-zero value from the callbacks will terminate the - * iteration and return the non-zero value to the caller. - * - * @param diff A git_diff generated by one of the above functions. - * @param format A git_diff_format_t value to pick the text format. - * @param print_cb Callback to make per line of diff text. - * @param payload Reference pointer that will be passed to your callback. - * @return 0 on success, non-zero callback return value, or error code - */ -GIT_EXTERN(int) git_diff_print( - git_diff *diff, - git_diff_format_t format, - git_diff_line_cb print_cb, - void *payload); - -/** - * Produce the complete formatted text output from a diff into a - * buffer. - * - * @param out A pointer to a user-allocated git_buf that will - * contain the diff text - * @param diff A git_diff generated by one of the above functions. - * @param format A git_diff_format_t value to pick the text format. - * @return 0 on success or error code - */ -GIT_EXTERN(int) git_diff_to_buf( - git_buf *out, - git_diff *diff, - git_diff_format_t format); - -/**@}*/ - - -/* - * Misc - */ - -/** - * Directly run a diff on two blobs. - * - * Compared to a file, a blob lacks some contextual information. As such, - * the `git_diff_file` given to the callback will have some fake data; i.e. - * `mode` will be 0 and `path` will be NULL. - * - * NULL is allowed for either `old_blob` or `new_blob` and will be treated - * as an empty blob, with the `oid` set to NULL in the `git_diff_file` data. - * Passing NULL for both blobs is a noop; no callbacks will be made at all. - * - * We do run a binary content check on the blob content and if either blob - * looks like binary data, the `git_diff_delta` binary attribute will be set - * to 1 and no call to the hunk_cb nor line_cb will be made (unless you pass - * `GIT_DIFF_FORCE_TEXT` of course). - * - * @param old_blob Blob for old side of diff, or NULL for empty blob - * @param old_as_path Treat old blob as if it had this filename; can be NULL - * @param new_blob Blob for new side of diff, or NULL for empty blob - * @param new_as_path Treat new blob as if it had this filename; can be NULL - * @param options Options for diff, or NULL for default options - * @param file_cb Callback for "file"; made once if there is a diff; can be NULL - * @param binary_cb Callback for binary files; can be NULL - * @param hunk_cb Callback for each hunk in diff; can be NULL - * @param line_cb Callback for each line in diff; can be NULL - * @param payload Payload passed to each callback function - * @return 0 on success, non-zero callback return value, or error code - */ -GIT_EXTERN(int) git_diff_blobs( - const git_blob *old_blob, - const char *old_as_path, - const git_blob *new_blob, - const char *new_as_path, - const git_diff_options *options, - git_diff_file_cb file_cb, - git_diff_binary_cb binary_cb, - git_diff_hunk_cb hunk_cb, - git_diff_line_cb line_cb, - void *payload); - -/** - * Directly run a diff between a blob and a buffer. - * - * As with `git_diff_blobs`, comparing a blob and buffer lacks some context, - * so the `git_diff_file` parameters to the callbacks will be faked a la the - * rules for `git_diff_blobs()`. - * - * Passing NULL for `old_blob` will be treated as an empty blob (i.e. the - * `file_cb` will be invoked with GIT_DELTA_ADDED and the diff will be the - * entire content of the buffer added). Passing NULL to the buffer will do - * the reverse, with GIT_DELTA_REMOVED and blob content removed. - * - * @param old_blob Blob for old side of diff, or NULL for empty blob - * @param old_as_path Treat old blob as if it had this filename; can be NULL - * @param buffer Raw data for new side of diff, or NULL for empty - * @param buffer_len Length of raw data for new side of diff - * @param buffer_as_path Treat buffer as if it had this filename; can be NULL - * @param options Options for diff, or NULL for default options - * @param file_cb Callback for "file"; made once if there is a diff; can be NULL - * @param binary_cb Callback for binary files; can be NULL - * @param hunk_cb Callback for each hunk in diff; can be NULL - * @param line_cb Callback for each line in diff; can be NULL - * @param payload Payload passed to each callback function - * @return 0 on success, non-zero callback return value, or error code - */ -GIT_EXTERN(int) git_diff_blob_to_buffer( - const git_blob *old_blob, - const char *old_as_path, - const char *buffer, - size_t buffer_len, - const char *buffer_as_path, - const git_diff_options *options, - git_diff_file_cb file_cb, - git_diff_binary_cb binary_cb, - git_diff_hunk_cb hunk_cb, - git_diff_line_cb line_cb, - void *payload); - -/** - * Directly run a diff between two buffers. - * - * Even more than with `git_diff_blobs`, comparing two buffer lacks - * context, so the `git_diff_file` parameters to the callbacks will be - * faked a la the rules for `git_diff_blobs()`. - * - * @param old_buffer Raw data for old side of diff, or NULL for empty - * @param old_len Length of the raw data for old side of the diff - * @param old_as_path Treat old buffer as if it had this filename; can be NULL - * @param new_buffer Raw data for new side of diff, or NULL for empty - * @param new_len Length of raw data for new side of diff - * @param new_as_path Treat buffer as if it had this filename; can be NULL - * @param options Options for diff, or NULL for default options - * @param file_cb Callback for "file"; made once if there is a diff; can be NULL - * @param binary_cb Callback for binary files; can be NULL - * @param hunk_cb Callback for each hunk in diff; can be NULL - * @param line_cb Callback for each line in diff; can be NULL - * @param payload Payload passed to each callback function - * @return 0 on success, non-zero callback return value, or error code - */ -GIT_EXTERN(int) git_diff_buffers( - const void *old_buffer, - size_t old_len, - const char *old_as_path, - const void *new_buffer, - size_t new_len, - const char *new_as_path, - const git_diff_options *options, - git_diff_file_cb file_cb, - git_diff_binary_cb binary_cb, - git_diff_hunk_cb hunk_cb, - git_diff_line_cb line_cb, - void *payload); - -/** - * Read the contents of a git patch file into a `git_diff` object. - * - * The diff object produced is similar to the one that would be - * produced if you actually produced it computationally by comparing - * two trees, however there may be subtle differences. For example, - * a patch file likely contains abbreviated object IDs, so the - * object IDs in a `git_diff_delta` produced by this function will - * also be abbreviated. - * - * This function will only read patch files created by a git - * implementation, it will not read unified diffs produced by - * the `diff` program, nor any other types of patch files. - * - * @param out A pointer to a git_diff pointer that will be allocated. - * @param content The contents of a patch file - * @param content_len The length of the patch file contents - * @return 0 or an error code - */ -GIT_EXTERN(int) git_diff_from_buffer( - git_diff **out, - const char *content, - size_t content_len); - -/** - * This is an opaque structure which is allocated by `git_diff_get_stats`. - * You are responsible for releasing the object memory when done, using the - * `git_diff_stats_free()` function. - */ -typedef struct git_diff_stats git_diff_stats; - -/** - * Formatting options for diff stats - */ -typedef enum { - /** No stats*/ - GIT_DIFF_STATS_NONE = 0, - - /** Full statistics, equivalent of `--stat` */ - GIT_DIFF_STATS_FULL = (1u << 0), - - /** Short statistics, equivalent of `--shortstat` */ - GIT_DIFF_STATS_SHORT = (1u << 1), - - /** Number statistics, equivalent of `--numstat` */ - GIT_DIFF_STATS_NUMBER = (1u << 2), - - /** Extended header information such as creations, renames and mode changes, equivalent of `--summary` */ - GIT_DIFF_STATS_INCLUDE_SUMMARY = (1u << 3), -} git_diff_stats_format_t; - -/** - * Accumulate diff statistics for all patches. - * - * @param out Structure containg the diff statistics. - * @param diff A git_diff generated by one of the above functions. - * @return 0 on success; non-zero on error - */ -GIT_EXTERN(int) git_diff_get_stats( - git_diff_stats **out, - git_diff *diff); - -/** - * Get the total number of files changed in a diff - * - * @param stats A `git_diff_stats` generated by one of the above functions. - * @return total number of files changed in the diff - */ -GIT_EXTERN(size_t) git_diff_stats_files_changed( - const git_diff_stats *stats); - -/** - * Get the total number of insertions in a diff - * - * @param stats A `git_diff_stats` generated by one of the above functions. - * @return total number of insertions in the diff - */ -GIT_EXTERN(size_t) git_diff_stats_insertions( - const git_diff_stats *stats); - -/** - * Get the total number of deletions in a diff - * - * @param stats A `git_diff_stats` generated by one of the above functions. - * @return total number of deletions in the diff - */ -GIT_EXTERN(size_t) git_diff_stats_deletions( - const git_diff_stats *stats); - -/** - * Print diff statistics to a `git_buf`. - * - * @param out buffer to store the formatted diff statistics in. - * @param stats A `git_diff_stats` generated by one of the above functions. - * @param format Formatting option. - * @param width Target width for output (only affects GIT_DIFF_STATS_FULL) - * @return 0 on success; non-zero on error - */ -GIT_EXTERN(int) git_diff_stats_to_buf( - git_buf *out, - const git_diff_stats *stats, - git_diff_stats_format_t format, - size_t width); - -/** - * Deallocate a `git_diff_stats`. - * - * @param stats The previously created statistics object; - * cannot be used after free. - */ -GIT_EXTERN(void) git_diff_stats_free(git_diff_stats *stats); - -/** - * Patch ID options structure - * - * Initialize with `GIT_PATCHID_OPTIONS_INIT`. Alternatively, you can - * use `git_diff_patchid_options_init`. - * - */ -typedef struct git_diff_patchid_options { - unsigned int version; -} git_diff_patchid_options; - -#define GIT_DIFF_PATCHID_OPTIONS_VERSION 1 -#define GIT_DIFF_PATCHID_OPTIONS_INIT { GIT_DIFF_PATCHID_OPTIONS_VERSION } - -/** - * Initialize git_diff_patchid_options structure - * - * Initializes a `git_diff_patchid_options` with default values. Equivalent to - * creating an instance with `GIT_DIFF_PATCHID_OPTIONS_INIT`. - * - * @param opts The `git_diff_patchid_options` struct to initialize. - * @param version The struct version; pass `GIT_DIFF_PATCHID_OPTIONS_VERSION`. - * @return Zero on success; -1 on failure. - */ -GIT_EXTERN(int) git_diff_patchid_options_init( - git_diff_patchid_options *opts, - unsigned int version); - -/** - * Calculate the patch ID for the given patch. - * - * Calculate a stable patch ID for the given patch by summing the - * hash of the file diffs, ignoring whitespace and line numbers. - * This can be used to derive whether two diffs are the same with - * a high probability. - * - * Currently, this function only calculates stable patch IDs, as - * defined in git-patch-id(1), and should in fact generate the - * same IDs as the upstream git project does. - * - * @param out Pointer where the calculated patch ID should be stored - * @param diff The diff to calculate the ID for - * @param opts Options for how to calculate the patch ID. This is - * intended for future changes, as currently no options are - * available. - * @return 0 on success, an error code otherwise. - */ -GIT_EXTERN(int) git_diff_patchid(git_oid *out, git_diff *diff, git_diff_patchid_options *opts); - -GIT_END_DECL - -/** @} */ - -#endif diff --git a/libgit2/headers/git2/email.h b/libgit2/headers/git2/email.h deleted file mode 100644 index b56be5d..0000000 --- a/libgit2/headers/git2/email.h +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_email_h__ -#define INCLUDE_git_email_h__ - -#include "common.h" - -/** - * @file git2/email.h - * @brief Git email formatting and application routines. - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Formatting options for diff e-mail generation - */ -typedef enum { - /** Normal patch, the default */ - GIT_EMAIL_CREATE_DEFAULT = 0, - - /** Do not include patch numbers in the subject prefix. */ - GIT_EMAIL_CREATE_OMIT_NUMBERS = (1u << 0), - - /** - * Include numbers in the subject prefix even when the - * patch is for a single commit (1/1). - */ - GIT_EMAIL_CREATE_ALWAYS_NUMBER = (1u << 1), - - /** Do not perform rename or similarity detection. */ - GIT_EMAIL_CREATE_NO_RENAMES = (1u << 2), -} git_email_create_flags_t; - -/** - * Options for controlling the formatting of the generated e-mail. - */ -typedef struct { - unsigned int version; - - /** see `git_email_create_flags_t` above */ - uint32_t flags; - - /** Options to use when creating diffs */ - git_diff_options diff_opts; - - /** Options for finding similarities within diffs */ - git_diff_find_options diff_find_opts; - - /** - * The subject prefix, by default "PATCH". If set to an empty - * string ("") then only the patch numbers will be shown in the - * prefix. If the subject_prefix is empty and patch numbers - * are not being shown, the prefix will be omitted entirely. - */ - const char *subject_prefix; - - /** - * The starting patch number; this cannot be 0. By default, - * this is 1. - */ - size_t start_number; - - /** The "re-roll" number. By default, there is no re-roll. */ - size_t reroll_number; -} git_email_create_options; - -/* - * By default, our options include rename detection and binary - * diffs to match `git format-patch`. - */ -#define GIT_EMAIL_CREATE_OPTIONS_VERSION 1 -#define GIT_EMAIL_CREATE_OPTIONS_INIT \ -{ \ - GIT_EMAIL_CREATE_OPTIONS_VERSION, \ - GIT_EMAIL_CREATE_DEFAULT, \ - { GIT_DIFF_OPTIONS_VERSION, GIT_DIFF_SHOW_BINARY, GIT_SUBMODULE_IGNORE_UNSPECIFIED, {NULL,0}, NULL, NULL, NULL, 3 }, \ - GIT_DIFF_FIND_OPTIONS_INIT \ -} - -/** - * Create a diff for a commit in mbox format for sending via email. - * - * @param out buffer to store the e-mail patch in - * @param diff the changes to include in the email - * @param patch_idx the patch index - * @param patch_count the total number of patches that will be included - * @param commit_id the commit id for this change - * @param summary the commit message for this change - * @param body optional text to include above the diffstat - * @param author the person who authored this commit - * @param opts email creation options - */ -GIT_EXTERN(int) git_email_create_from_diff( - git_buf *out, - git_diff *diff, - size_t patch_idx, - size_t patch_count, - const git_oid *commit_id, - const char *summary, - const char *body, - const git_signature *author, - const git_email_create_options *opts); - -/** - * Create a diff for a commit in mbox format for sending via email. - * The commit must not be a merge commit. - * - * @param out buffer to store the e-mail patch in - * @param commit commit to create a patch for - * @param opts email creation options - */ -GIT_EXTERN(int) git_email_create_from_commit( - git_buf *out, - git_commit *commit, - const git_email_create_options *opts); - -GIT_END_DECL - -/** @} */ - -#endif diff --git a/libgit2/headers/git2/errors.h b/libgit2/headers/git2/errors.h deleted file mode 100644 index de51582..0000000 --- a/libgit2/headers/git2/errors.h +++ /dev/null @@ -1,164 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_errors_h__ -#define INCLUDE_git_errors_h__ - -#include "common.h" - -/** - * @file git2/errors.h - * @brief Git error handling routines and variables - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** Generic return codes */ -typedef enum { - GIT_OK = 0, /**< No error */ - - GIT_ERROR = -1, /**< Generic error */ - GIT_ENOTFOUND = -3, /**< Requested object could not be found */ - GIT_EEXISTS = -4, /**< Object exists preventing operation */ - GIT_EAMBIGUOUS = -5, /**< More than one object matches */ - GIT_EBUFS = -6, /**< Output buffer too short to hold data */ - - /** - * GIT_EUSER is a special error that is never generated by libgit2 - * code. You can return it from a callback (e.g to stop an iteration) - * to know that it was generated by the callback and not by libgit2. - */ - GIT_EUSER = -7, - - GIT_EBAREREPO = -8, /**< Operation not allowed on bare repository */ - GIT_EUNBORNBRANCH = -9, /**< HEAD refers to branch with no commits */ - GIT_EUNMERGED = -10, /**< Merge in progress prevented operation */ - GIT_ENONFASTFORWARD = -11, /**< Reference was not fast-forwardable */ - GIT_EINVALIDSPEC = -12, /**< Name/ref spec was not in a valid format */ - GIT_ECONFLICT = -13, /**< Checkout conflicts prevented operation */ - GIT_ELOCKED = -14, /**< Lock file prevented operation */ - GIT_EMODIFIED = -15, /**< Reference value does not match expected */ - GIT_EAUTH = -16, /**< Authentication error */ - GIT_ECERTIFICATE = -17, /**< Server certificate is invalid */ - GIT_EAPPLIED = -18, /**< Patch/merge has already been applied */ - GIT_EPEEL = -19, /**< The requested peel operation is not possible */ - GIT_EEOF = -20, /**< Unexpected EOF */ - GIT_EINVALID = -21, /**< Invalid operation or input */ - GIT_EUNCOMMITTED = -22, /**< Uncommitted changes in index prevented operation */ - GIT_EDIRECTORY = -23, /**< The operation is not valid for a directory */ - GIT_EMERGECONFLICT = -24, /**< A merge conflict exists and cannot continue */ - - GIT_PASSTHROUGH = -30, /**< A user-configured callback refused to act */ - GIT_ITEROVER = -31, /**< Signals end of iteration with iterator */ - GIT_RETRY = -32, /**< Internal only */ - GIT_EMISMATCH = -33, /**< Hashsum mismatch in object */ - GIT_EINDEXDIRTY = -34, /**< Unsaved changes in the index would be overwritten */ - GIT_EAPPLYFAIL = -35, /**< Patch application failed */ -} git_error_code; - -/** - * Structure to store extra details of the last error that occurred. - * - * This is kept on a per-thread basis if GIT_THREADS was defined when the - * library was build, otherwise one is kept globally for the library - */ -typedef struct { - char *message; - int klass; -} git_error; - -/** Error classes */ -typedef enum { - GIT_ERROR_NONE = 0, - GIT_ERROR_NOMEMORY, - GIT_ERROR_OS, - GIT_ERROR_INVALID, - GIT_ERROR_REFERENCE, - GIT_ERROR_ZLIB, - GIT_ERROR_REPOSITORY, - GIT_ERROR_CONFIG, - GIT_ERROR_REGEX, - GIT_ERROR_ODB, - GIT_ERROR_INDEX, - GIT_ERROR_OBJECT, - GIT_ERROR_NET, - GIT_ERROR_TAG, - GIT_ERROR_TREE, - GIT_ERROR_INDEXER, - GIT_ERROR_SSL, - GIT_ERROR_SUBMODULE, - GIT_ERROR_THREAD, - GIT_ERROR_STASH, - GIT_ERROR_CHECKOUT, - GIT_ERROR_FETCHHEAD, - GIT_ERROR_MERGE, - GIT_ERROR_SSH, - GIT_ERROR_FILTER, - GIT_ERROR_REVERT, - GIT_ERROR_CALLBACK, - GIT_ERROR_CHERRYPICK, - GIT_ERROR_DESCRIBE, - GIT_ERROR_REBASE, - GIT_ERROR_FILESYSTEM, - GIT_ERROR_PATCH, - GIT_ERROR_WORKTREE, - GIT_ERROR_SHA1, - GIT_ERROR_HTTP, - GIT_ERROR_INTERNAL -} git_error_t; - -/** - * Return the last `git_error` object that was generated for the - * current thread. - * - * The default behaviour of this function is to return NULL if no previous error has occurred. - * However, libgit2's error strings are not cleared aggressively, so a prior - * (unrelated) error may be returned. This can be avoided by only calling - * this function if the prior call to a libgit2 API returned an error. - * - * @return A git_error object. - */ -GIT_EXTERN(const git_error *) git_error_last(void); - -/** - * Clear the last library error that occurred for this thread. - */ -GIT_EXTERN(void) git_error_clear(void); - -/** - * Set the error message string for this thread. - * - * This function is public so that custom ODB backends and the like can - * relay an error message through libgit2. Most regular users of libgit2 - * will never need to call this function -- actually, calling it in most - * circumstances (for example, calling from within a callback function) - * will just end up having the value overwritten by libgit2 internals. - * - * This error message is stored in thread-local storage and only applies - * to the particular thread that this libgit2 call is made from. - * - * @param error_class One of the `git_error_t` enum above describing the - * general subsystem that is responsible for the error. - * @param string The formatted error message to keep - * @return 0 on success or -1 on failure - */ -GIT_EXTERN(int) git_error_set_str(int error_class, const char *string); - -/** - * Set the error message to a special value for memory allocation failure. - * - * The normal `git_error_set_str()` function attempts to `strdup()` the - * string that is passed in. This is not a good idea when the error in - * question is a memory allocation failure. That circumstance has a - * special setter function that sets the error string to a known and - * statically allocated internal value. - */ -GIT_EXTERN(void) git_error_set_oom(void); - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/filter.h b/libgit2/headers/git2/filter.h deleted file mode 100644 index 0465e5b..0000000 --- a/libgit2/headers/git2/filter.h +++ /dev/null @@ -1,271 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_filter_h__ -#define INCLUDE_git_filter_h__ - -#include "common.h" -#include "types.h" -#include "oid.h" -#include "buffer.h" - -/** - * @file git2/filter.h - * @brief Git filter APIs - * - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Filters are applied in one of two directions: smudging - which is - * exporting a file from the Git object database to the working directory, - * and cleaning - which is importing a file from the working directory to - * the Git object database. These values control which direction of - * change is being applied. - */ -typedef enum { - GIT_FILTER_TO_WORKTREE = 0, - GIT_FILTER_SMUDGE = GIT_FILTER_TO_WORKTREE, - GIT_FILTER_TO_ODB = 1, - GIT_FILTER_CLEAN = GIT_FILTER_TO_ODB, -} git_filter_mode_t; - -/** - * Filter option flags. - */ -typedef enum { - GIT_FILTER_DEFAULT = 0u, - - /** Don't error for `safecrlf` violations, allow them to continue. */ - GIT_FILTER_ALLOW_UNSAFE = (1u << 0), - - /** Don't load `/etc/gitattributes` (or the system equivalent) */ - GIT_FILTER_NO_SYSTEM_ATTRIBUTES = (1u << 1), - - /** Load attributes from `.gitattributes` in the root of HEAD */ - GIT_FILTER_ATTRIBUTES_FROM_HEAD = (1u << 2), - - /** - * Load attributes from `.gitattributes` in a given commit. - * This can only be specified in a `git_filter_options`. - */ - GIT_FILTER_ATTRIBUTES_FROM_COMMIT = (1u << 3), -} git_filter_flag_t; - -/** - * Filtering options - */ -typedef struct { - unsigned int version; - - /** See `git_filter_flag_t` above */ - uint32_t flags; - -#ifdef GIT_DEPRECATE_HARD - void *reserved; -#else - git_oid *commit_id; -#endif - - /** - * The commit to load attributes from, when - * `GIT_FILTER_ATTRIBUTES_FROM_COMMIT` is specified. - */ - git_oid attr_commit_id; -} git_filter_options; - - #define GIT_FILTER_OPTIONS_VERSION 1 - #define GIT_FILTER_OPTIONS_INIT {GIT_FILTER_OPTIONS_VERSION} - -/** - * A filter that can transform file data - * - * This represents a filter that can be used to transform or even replace - * file data. Libgit2 includes one built in filter and it is possible to - * write your own (see git2/sys/filter.h for information on that). - * - * The two builtin filters are: - * - * * "crlf" which uses the complex rules with the "text", "eol", and - * "crlf" file attributes to decide how to convert between LF and CRLF - * line endings - * * "ident" which replaces "$Id$" in a blob with "$Id: $" upon - * checkout and replaced "$Id: $" with "$Id$" on checkin. - */ -typedef struct git_filter git_filter; - -/** - * List of filters to be applied - * - * This represents a list of filters to be applied to a file / blob. You - * can build the list with one call, apply it with another, and dispose it - * with a third. In typical usage, there are not many occasions where a - * git_filter_list is needed directly since the library will generally - * handle conversions for you, but it can be convenient to be able to - * build and apply the list sometimes. - */ -typedef struct git_filter_list git_filter_list; - -/** - * Load the filter list for a given path. - * - * This will return 0 (success) but set the output git_filter_list to NULL - * if no filters are requested for the given file. - * - * @param filters Output newly created git_filter_list (or NULL) - * @param repo Repository object that contains `path` - * @param blob The blob to which the filter will be applied (if known) - * @param path Relative path of the file to be filtered - * @param mode Filtering direction (WT->ODB or ODB->WT) - * @param flags Combination of `git_filter_flag_t` flags - * @return 0 on success (which could still return NULL if no filters are - * needed for the requested file), <0 on error - */ -GIT_EXTERN(int) git_filter_list_load( - git_filter_list **filters, - git_repository *repo, - git_blob *blob, /* can be NULL */ - const char *path, - git_filter_mode_t mode, - uint32_t flags); - -/** - * Load the filter list for a given path. - * - * This will return 0 (success) but set the output git_filter_list to NULL - * if no filters are requested for the given file. - * - * @param filters Output newly created git_filter_list (or NULL) - * @param repo Repository object that contains `path` - * @param blob The blob to which the filter will be applied (if known) - * @param path Relative path of the file to be filtered - * @param mode Filtering direction (WT->ODB or ODB->WT) - * @param opts The `git_filter_options` to use when loading filters - * @return 0 on success (which could still return NULL if no filters are - * needed for the requested file), <0 on error - */ -GIT_EXTERN(int) git_filter_list_load_ext( - git_filter_list **filters, - git_repository *repo, - git_blob *blob, - const char *path, - git_filter_mode_t mode, - git_filter_options *opts); - -/** - * Query the filter list to see if a given filter (by name) will run. - * The built-in filters "crlf" and "ident" can be queried, otherwise this - * is the name of the filter specified by the filter attribute. - * - * This will return 0 if the given filter is not in the list, or 1 if - * the filter will be applied. - * - * @param filters A loaded git_filter_list (or NULL) - * @param name The name of the filter to query - * @return 1 if the filter is in the list, 0 otherwise - */ -GIT_EXTERN(int) git_filter_list_contains( - git_filter_list *filters, - const char *name); - -/** - * Apply filter list to a data buffer. - * - * @param out Buffer to store the result of the filtering - * @param filters A loaded git_filter_list (or NULL) - * @param in Buffer containing the data to filter - * @param in_len The length of the input buffer - * @return 0 on success, an error code otherwise - */ -GIT_EXTERN(int) git_filter_list_apply_to_buffer( - git_buf *out, - git_filter_list *filters, - const char *in, - size_t in_len); - -/** - * Apply a filter list to the contents of a file on disk - * - * @param out buffer into which to store the filtered file - * @param filters the list of filters to apply - * @param repo the repository in which to perform the filtering - * @param path the path of the file to filter, a relative path will be - * taken as relative to the workdir - */ -GIT_EXTERN(int) git_filter_list_apply_to_file( - git_buf *out, - git_filter_list *filters, - git_repository *repo, - const char *path); - -/** - * Apply a filter list to the contents of a blob - * - * @param out buffer into which to store the filtered file - * @param filters the list of filters to apply - * @param blob the blob to filter - */ -GIT_EXTERN(int) git_filter_list_apply_to_blob( - git_buf *out, - git_filter_list *filters, - git_blob *blob); - -/** - * Apply a filter list to an arbitrary buffer as a stream - * - * @param filters the list of filters to apply - * @param buffer the buffer to filter - * @param len the size of the buffer - * @param target the stream into which the data will be written - */ -GIT_EXTERN(int) git_filter_list_stream_buffer( - git_filter_list *filters, - const char *buffer, - size_t len, - git_writestream *target); - -/** - * Apply a filter list to a file as a stream - * - * @param filters the list of filters to apply - * @param repo the repository in which to perform the filtering - * @param path the path of the file to filter, a relative path will be - * taken as relative to the workdir - * @param target the stream into which the data will be written - */ -GIT_EXTERN(int) git_filter_list_stream_file( - git_filter_list *filters, - git_repository *repo, - const char *path, - git_writestream *target); - -/** - * Apply a filter list to a blob as a stream - * - * @param filters the list of filters to apply - * @param blob the blob to filter - * @param target the stream into which the data will be written - */ -GIT_EXTERN(int) git_filter_list_stream_blob( - git_filter_list *filters, - git_blob *blob, - git_writestream *target); - -/** - * Free a git_filter_list - * - * @param filters A git_filter_list created by `git_filter_list_load` - */ -GIT_EXTERN(void) git_filter_list_free(git_filter_list *filters); - - -GIT_END_DECL - -/** @} */ - -#endif diff --git a/libgit2/headers/git2/global.h b/libgit2/headers/git2/global.h deleted file mode 100644 index 2a87e10..0000000 --- a/libgit2/headers/git2/global.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_global_h__ -#define INCLUDE_git_global_h__ - -#include "common.h" - -GIT_BEGIN_DECL - -/** - * Init the global state - * - * This function must be called before any other libgit2 function in - * order to set up global state and threading. - * - * This function may be called multiple times - it will return the number - * of times the initialization has been called (including this one) that have - * not subsequently been shutdown. - * - * @return the number of initializations of the library, or an error code. - */ -GIT_EXTERN(int) git_libgit2_init(void); - -/** - * Shutdown the global state - * - * Clean up the global state and threading context after calling it as - * many times as `git_libgit2_init()` was called - it will return the - * number of remainining initializations that have not been shutdown - * (after this one). - * - * @return the number of remaining initializations of the library, or an - * error code. - */ -GIT_EXTERN(int) git_libgit2_shutdown(void); - -/** @} */ -GIT_END_DECL -#endif - diff --git a/libgit2/headers/git2/graph.h b/libgit2/headers/git2/graph.h deleted file mode 100644 index 712ae47..0000000 --- a/libgit2/headers/git2/graph.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_graph_h__ -#define INCLUDE_git_graph_h__ - -#include "common.h" -#include "types.h" -#include "oid.h" - -/** - * @file git2/graph.h - * @brief Git graph traversal routines - * @defgroup git_revwalk Git graph traversal routines - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Count the number of unique commits between two commit objects - * - * There is no need for branches containing the commits to have any - * upstream relationship, but it helps to think of one as a branch and - * the other as its upstream, the `ahead` and `behind` values will be - * what git would report for the branches. - * - * @param ahead number of unique from commits in `upstream` - * @param behind number of unique from commits in `local` - * @param repo the repository where the commits exist - * @param local the commit for local - * @param upstream the commit for upstream - */ -GIT_EXTERN(int) git_graph_ahead_behind(size_t *ahead, size_t *behind, git_repository *repo, const git_oid *local, const git_oid *upstream); - - -/** - * Determine if a commit is the descendant of another commit. - * - * Note that a commit is not considered a descendant of itself, in contrast - * to `git merge-base --is-ancestor`. - * - * @param repo the repository where the commits exist - * @param commit a previously loaded commit - * @param ancestor a potential ancestor commit - * @return 1 if the given commit is a descendant of the potential ancestor, - * 0 if not, error code otherwise. - */ -GIT_EXTERN(int) git_graph_descendant_of( - git_repository *repo, - const git_oid *commit, - const git_oid *ancestor); - -/** - * Determine if a commit is reachable from any of a list of commits by - * following parent edges. - * - * @param repo the repository where the commits exist - * @param commit a previously loaded commit - * @param length the number of commits in the provided `descendant_array` - * @param descendant_array oids of the commits - * @return 1 if the given commit is an ancestor of any of the given potential - * descendants, 0 if not, error code otherwise. - */ -GIT_EXTERN(int) git_graph_reachable_from_any( - git_repository *repo, - const git_oid *commit, - const git_oid descendant_array[], - size_t length); - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/ignore.h b/libgit2/headers/git2/ignore.h deleted file mode 100644 index f5143f3..0000000 --- a/libgit2/headers/git2/ignore.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_ignore_h__ -#define INCLUDE_git_ignore_h__ - -#include "common.h" -#include "types.h" - -GIT_BEGIN_DECL - -/** - * Add ignore rules for a repository. - * - * Excludesfile rules (i.e. .gitignore rules) are generally read from - * .gitignore files in the repository tree or from a shared system file - * only if a "core.excludesfile" config value is set. The library also - * keeps a set of per-repository internal ignores that can be configured - * in-memory and will not persist. This function allows you to add to - * that internal rules list. - * - * Example usage: - * - * error = git_ignore_add_rule(myrepo, "*.c\ndir/\nFile with space\n"); - * - * This would add three rules to the ignores. - * - * @param repo The repository to add ignore rules to. - * @param rules Text of rules, a la the contents of a .gitignore file. - * It is okay to have multiple rules in the text; if so, - * each rule should be terminated with a newline. - * @return 0 on success - */ -GIT_EXTERN(int) git_ignore_add_rule( - git_repository *repo, - const char *rules); - -/** - * Clear ignore rules that were explicitly added. - * - * Resets to the default internal ignore rules. This will not turn off - * rules in .gitignore files that actually exist in the filesystem. - * - * The default internal ignores ignore ".", ".." and ".git" entries. - * - * @param repo The repository to remove ignore rules from. - * @return 0 on success - */ -GIT_EXTERN(int) git_ignore_clear_internal_rules( - git_repository *repo); - -/** - * Test if the ignore rules apply to a given path. - * - * This function checks the ignore rules to see if they would apply to the - * given file. This indicates if the file would be ignored regardless of - * whether the file is already in the index or committed to the repository. - * - * One way to think of this is if you were to do "git check-ignore --no-index" - * on the given file, would it be shown or not? - * - * @param ignored boolean returning 0 if the file is not ignored, 1 if it is - * @param repo a repository object - * @param path the file to check ignores for, relative to the repo's workdir. - * @return 0 if ignore rules could be processed for the file (regardless - * of whether it exists or not), or an error < 0 if they could not. - */ -GIT_EXTERN(int) git_ignore_path_is_ignored( - int *ignored, - git_repository *repo, - const char *path); - -GIT_END_DECL - -#endif diff --git a/libgit2/headers/git2/index.h b/libgit2/headers/git2/index.h deleted file mode 100644 index 532a520..0000000 --- a/libgit2/headers/git2/index.h +++ /dev/null @@ -1,833 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_index_h__ -#define INCLUDE_git_index_h__ - -#include "common.h" -#include "indexer.h" -#include "types.h" -#include "oid.h" -#include "strarray.h" - -/** - * @file git2/index.h - * @brief Git index parsing and manipulation routines - * @defgroup git_index Git index parsing and manipulation routines - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** Time structure used in a git index entry */ -typedef struct { - int32_t seconds; - /* nsec should not be stored as time_t compatible */ - uint32_t nanoseconds; -} git_index_time; - -/** - * In-memory representation of a file entry in the index. - * - * This is a public structure that represents a file entry in the index. - * The meaning of the fields corresponds to core Git's documentation (in - * "Documentation/technical/index-format.txt"). - * - * The `flags` field consists of a number of bit fields which can be - * accessed via the first set of `GIT_INDEX_ENTRY_...` bitmasks below. - * These flags are all read from and persisted to disk. - * - * The `flags_extended` field also has a number of bit fields which can be - * accessed via the later `GIT_INDEX_ENTRY_...` bitmasks below. Some of - * these flags are read from and written to disk, but some are set aside - * for in-memory only reference. - * - * Note that the time and size fields are truncated to 32 bits. This - * is enough to detect changes, which is enough for the index to - * function as a cache, but it should not be taken as an authoritative - * source for that data. - */ -typedef struct git_index_entry { - git_index_time ctime; - git_index_time mtime; - - uint32_t dev; - uint32_t ino; - uint32_t mode; - uint32_t uid; - uint32_t gid; - uint32_t file_size; - - git_oid id; - - uint16_t flags; - uint16_t flags_extended; - - const char *path; -} git_index_entry; - -/** - * Bitmasks for on-disk fields of `git_index_entry`'s `flags` - * - * These bitmasks match the four fields in the `git_index_entry` `flags` - * value both in memory and on disk. You can use them to interpret the - * data in the `flags`. - */ - -#define GIT_INDEX_ENTRY_NAMEMASK (0x0fff) -#define GIT_INDEX_ENTRY_STAGEMASK (0x3000) -#define GIT_INDEX_ENTRY_STAGESHIFT 12 - -/** - * Flags for index entries - */ -typedef enum { - GIT_INDEX_ENTRY_EXTENDED = (0x4000), - GIT_INDEX_ENTRY_VALID = (0x8000), -} git_index_entry_flag_t; - -#define GIT_INDEX_ENTRY_STAGE(E) \ - (((E)->flags & GIT_INDEX_ENTRY_STAGEMASK) >> GIT_INDEX_ENTRY_STAGESHIFT) - -#define GIT_INDEX_ENTRY_STAGE_SET(E,S) do { \ - (E)->flags = ((E)->flags & ~GIT_INDEX_ENTRY_STAGEMASK) | \ - (((S) & 0x03) << GIT_INDEX_ENTRY_STAGESHIFT); } while (0) - -/** - * Bitmasks for on-disk fields of `git_index_entry`'s `flags_extended` - * - * In memory, the `flags_extended` fields are divided into two parts: the - * fields that are read from and written to disk, and other fields that - * in-memory only and used by libgit2. Only the flags in - * `GIT_INDEX_ENTRY_EXTENDED_FLAGS` will get saved on-disk. - * - * Thee first three bitmasks match the three fields in the - * `git_index_entry` `flags_extended` value that belong on disk. You - * can use them to interpret the data in the `flags_extended`. - * - * The rest of the bitmasks match the other fields in the `git_index_entry` - * `flags_extended` value that are only used in-memory by libgit2. - * You can use them to interpret the data in the `flags_extended`. - * - */ -typedef enum { - GIT_INDEX_ENTRY_INTENT_TO_ADD = (1 << 13), - GIT_INDEX_ENTRY_SKIP_WORKTREE = (1 << 14), - - GIT_INDEX_ENTRY_EXTENDED_FLAGS = (GIT_INDEX_ENTRY_INTENT_TO_ADD | GIT_INDEX_ENTRY_SKIP_WORKTREE), - - GIT_INDEX_ENTRY_UPTODATE = (1 << 2), -} git_index_entry_extended_flag_t; - -/** Capabilities of system that affect index actions. */ -typedef enum { - GIT_INDEX_CAPABILITY_IGNORE_CASE = 1, - GIT_INDEX_CAPABILITY_NO_FILEMODE = 2, - GIT_INDEX_CAPABILITY_NO_SYMLINKS = 4, - GIT_INDEX_CAPABILITY_FROM_OWNER = -1, -} git_index_capability_t; - - -/** Callback for APIs that add/remove/update files matching pathspec */ -typedef int GIT_CALLBACK(git_index_matched_path_cb)( - const char *path, const char *matched_pathspec, void *payload); - -/** Flags for APIs that add files matching pathspec */ -typedef enum { - GIT_INDEX_ADD_DEFAULT = 0, - GIT_INDEX_ADD_FORCE = (1u << 0), - GIT_INDEX_ADD_DISABLE_PATHSPEC_MATCH = (1u << 1), - GIT_INDEX_ADD_CHECK_PATHSPEC = (1u << 2), -} git_index_add_option_t; - -/** Git index stage states */ -typedef enum { - /** - * Match any index stage. - * - * Some index APIs take a stage to match; pass this value to match - * any entry matching the path regardless of stage. - */ - GIT_INDEX_STAGE_ANY = -1, - - /** A normal staged file in the index. */ - GIT_INDEX_STAGE_NORMAL = 0, - - /** The ancestor side of a conflict. */ - GIT_INDEX_STAGE_ANCESTOR = 1, - - /** The "ours" side of a conflict. */ - GIT_INDEX_STAGE_OURS = 2, - - /** The "theirs" side of a conflict. */ - GIT_INDEX_STAGE_THEIRS = 3, -} git_index_stage_t; - -/** - * Create a new bare Git index object as a memory representation - * of the Git index file in 'index_path', without a repository - * to back it. - * - * Since there is no ODB or working directory behind this index, - * any Index methods which rely on these (e.g. index_add_bypath) - * will fail with the GIT_ERROR error code. - * - * If you need to access the index of an actual repository, - * use the `git_repository_index` wrapper. - * - * The index must be freed once it's no longer in use. - * - * @param out the pointer for the new index - * @param index_path the path to the index file in disk - * @return 0 or an error code - */ -GIT_EXTERN(int) git_index_open(git_index **out, const char *index_path); - -/** - * Create an in-memory index object. - * - * This index object cannot be read/written to the filesystem, - * but may be used to perform in-memory index operations. - * - * The index must be freed once it's no longer in use. - * - * @param out the pointer for the new index - * @return 0 or an error code - */ -GIT_EXTERN(int) git_index_new(git_index **out); - -/** - * Free an existing index object. - * - * @param index an existing index object - */ -GIT_EXTERN(void) git_index_free(git_index *index); - -/** - * Get the repository this index relates to - * - * @param index The index - * @return A pointer to the repository - */ -GIT_EXTERN(git_repository *) git_index_owner(const git_index *index); - -/** - * Read index capabilities flags. - * - * @param index An existing index object - * @return A combination of GIT_INDEX_CAPABILITY values - */ -GIT_EXTERN(int) git_index_caps(const git_index *index); - -/** - * Set index capabilities flags. - * - * If you pass `GIT_INDEX_CAPABILITY_FROM_OWNER` for the caps, then - * capabilities will be read from the config of the owner object, - * looking at `core.ignorecase`, `core.filemode`, `core.symlinks`. - * - * @param index An existing index object - * @param caps A combination of GIT_INDEX_CAPABILITY values - * @return 0 on success, -1 on failure - */ -GIT_EXTERN(int) git_index_set_caps(git_index *index, int caps); - -/** - * Get index on-disk version. - * - * Valid return values are 2, 3, or 4. If 3 is returned, an index - * with version 2 may be written instead, if the extension data in - * version 3 is not necessary. - * - * @param index An existing index object - * @return the index version - */ -GIT_EXTERN(unsigned int) git_index_version(git_index *index); - -/** - * Set index on-disk version. - * - * Valid values are 2, 3, or 4. If 2 is given, git_index_write may - * write an index with version 3 instead, if necessary to accurately - * represent the index. - * - * @param index An existing index object - * @param version The new version number - * @return 0 on success, -1 on failure - */ -GIT_EXTERN(int) git_index_set_version(git_index *index, unsigned int version); - -/** - * Update the contents of an existing index object in memory by reading - * from the hard disk. - * - * If `force` is true, this performs a "hard" read that discards in-memory - * changes and always reloads the on-disk index data. If there is no - * on-disk version, the index will be cleared. - * - * If `force` is false, this does a "soft" read that reloads the index - * data from disk only if it has changed since the last time it was - * loaded. Purely in-memory index data will be untouched. Be aware: if - * there are changes on disk, unwritten in-memory changes are discarded. - * - * @param index an existing index object - * @param force if true, always reload, vs. only read if file has changed - * @return 0 or an error code - */ -GIT_EXTERN(int) git_index_read(git_index *index, int force); - -/** - * Write an existing index object from memory back to disk - * using an atomic file lock. - * - * @param index an existing index object - * @return 0 or an error code - */ -GIT_EXTERN(int) git_index_write(git_index *index); - -/** - * Get the full path to the index file on disk. - * - * @param index an existing index object - * @return path to index file or NULL for in-memory index - */ -GIT_EXTERN(const char *) git_index_path(const git_index *index); - -/** - * Get the checksum of the index - * - * This checksum is the SHA-1 hash over the index file (except the - * last 20 bytes which are the checksum itself). In cases where the - * index does not exist on-disk, it will be zeroed out. - * - * @param index an existing index object - * @return a pointer to the checksum of the index - */ -GIT_EXTERN(const git_oid *) git_index_checksum(git_index *index); - -/** - * Read a tree into the index file with stats - * - * The current index contents will be replaced by the specified tree. - * - * @param index an existing index object - * @param tree tree to read - * @return 0 or an error code - */ -GIT_EXTERN(int) git_index_read_tree(git_index *index, const git_tree *tree); - -/** - * Write the index as a tree - * - * This method will scan the index and write a representation - * of its current state back to disk; it recursively creates - * tree objects for each of the subtrees stored in the index, - * but only returns the OID of the root tree. This is the OID - * that can be used e.g. to create a commit. - * - * The index instance cannot be bare, and needs to be associated - * to an existing repository. - * - * The index must not contain any file in conflict. - * - * @param out Pointer where to store the OID of the written tree - * @param index Index to write - * @return 0 on success, GIT_EUNMERGED when the index is not clean - * or an error code - */ -GIT_EXTERN(int) git_index_write_tree(git_oid *out, git_index *index); - -/** - * Write the index as a tree to the given repository - * - * This method will do the same as `git_index_write_tree`, but - * letting the user choose the repository where the tree will - * be written. - * - * The index must not contain any file in conflict. - * - * @param out Pointer where to store OID of the written tree - * @param index Index to write - * @param repo Repository where to write the tree - * @return 0 on success, GIT_EUNMERGED when the index is not clean - * or an error code - */ -GIT_EXTERN(int) git_index_write_tree_to(git_oid *out, git_index *index, git_repository *repo); - -/**@}*/ - -/** @name Raw Index Entry Functions - * - * These functions work on index entries, and allow for raw manipulation - * of the entries. - */ -/**@{*/ - -/* Index entry manipulation */ - -/** - * Get the count of entries currently in the index - * - * @param index an existing index object - * @return integer of count of current entries - */ -GIT_EXTERN(size_t) git_index_entrycount(const git_index *index); - -/** - * Clear the contents (all the entries) of an index object. - * - * This clears the index object in memory; changes must be explicitly - * written to disk for them to take effect persistently. - * - * @param index an existing index object - * @return 0 on success, error code < 0 on failure - */ -GIT_EXTERN(int) git_index_clear(git_index *index); - -/** - * Get a pointer to one of the entries in the index - * - * The entry is not modifiable and should not be freed. Because the - * `git_index_entry` struct is a publicly defined struct, you should - * be able to make your own permanent copy of the data if necessary. - * - * @param index an existing index object - * @param n the position of the entry - * @return a pointer to the entry; NULL if out of bounds - */ -GIT_EXTERN(const git_index_entry *) git_index_get_byindex( - git_index *index, size_t n); - -/** - * Get a pointer to one of the entries in the index - * - * The entry is not modifiable and should not be freed. Because the - * `git_index_entry` struct is a publicly defined struct, you should - * be able to make your own permanent copy of the data if necessary. - * - * @param index an existing index object - * @param path path to search - * @param stage stage to search - * @return a pointer to the entry; NULL if it was not found - */ -GIT_EXTERN(const git_index_entry *) git_index_get_bypath( - git_index *index, const char *path, int stage); - -/** - * Remove an entry from the index - * - * @param index an existing index object - * @param path path to search - * @param stage stage to search - * @return 0 or an error code - */ -GIT_EXTERN(int) git_index_remove(git_index *index, const char *path, int stage); - -/** - * Remove all entries from the index under a given directory - * - * @param index an existing index object - * @param dir container directory path - * @param stage stage to search - * @return 0 or an error code - */ -GIT_EXTERN(int) git_index_remove_directory( - git_index *index, const char *dir, int stage); - -/** - * Add or update an index entry from an in-memory struct - * - * If a previous index entry exists that has the same path and stage - * as the given 'source_entry', it will be replaced. Otherwise, the - * 'source_entry' will be added. - * - * A full copy (including the 'path' string) of the given - * 'source_entry' will be inserted on the index. - * - * @param index an existing index object - * @param source_entry new entry object - * @return 0 or an error code - */ -GIT_EXTERN(int) git_index_add(git_index *index, const git_index_entry *source_entry); - -/** - * Return the stage number from a git index entry - * - * This entry is calculated from the entry's flag attribute like this: - * - * (entry->flags & GIT_INDEX_ENTRY_STAGEMASK) >> GIT_INDEX_ENTRY_STAGESHIFT - * - * @param entry The entry - * @return the stage number - */ -GIT_EXTERN(int) git_index_entry_stage(const git_index_entry *entry); - -/** - * Return whether the given index entry is a conflict (has a high stage - * entry). This is simply shorthand for `git_index_entry_stage > 0`. - * - * @param entry The entry - * @return 1 if the entry is a conflict entry, 0 otherwise - */ -GIT_EXTERN(int) git_index_entry_is_conflict(const git_index_entry *entry); - -/**@}*/ - -/** @name Index Entry Iteration Functions - * - * These functions provide an iterator for index entries. - */ -/**@{*/ - -/** - * Create an iterator that will return every entry contained in the - * index at the time of creation. Entries are returned in order, - * sorted by path. This iterator is backed by a snapshot that allows - * callers to modify the index while iterating without affecting the - * iterator. - * - * @param iterator_out The newly created iterator - * @param index The index to iterate - */ -GIT_EXTERN(int) git_index_iterator_new( - git_index_iterator **iterator_out, - git_index *index); - -/** - * Return the next index entry in-order from the iterator. - * - * @param out Pointer to store the index entry in - * @param iterator The iterator - * @return 0, GIT_ITEROVER on iteration completion or an error code - */ -GIT_EXTERN(int) git_index_iterator_next( - const git_index_entry **out, - git_index_iterator *iterator); - -/** - * Free the index iterator - * - * @param iterator The iterator to free - */ -GIT_EXTERN(void) git_index_iterator_free(git_index_iterator *iterator); - -/**@}*/ - -/** @name Workdir Index Entry Functions - * - * These functions work on index entries specifically in the working - * directory (ie, stage 0). - */ -/**@{*/ - -/** - * Add or update an index entry from a file on disk - * - * The file `path` must be relative to the repository's - * working folder and must be readable. - * - * This method will fail in bare index instances. - * - * This forces the file to be added to the index, not looking - * at gitignore rules. Those rules can be evaluated through - * the git_status APIs (in status.h) before calling this. - * - * If this file currently is the result of a merge conflict, this - * file will no longer be marked as conflicting. The data about - * the conflict will be moved to the "resolve undo" (REUC) section. - * - * @param index an existing index object - * @param path filename to add - * @return 0 or an error code - */ -GIT_EXTERN(int) git_index_add_bypath(git_index *index, const char *path); - -/** - * Add or update an index entry from a buffer in memory - * - * This method will create a blob in the repository that owns the - * index and then add the index entry to the index. The `path` of the - * entry represents the position of the blob relative to the - * repository's root folder. - * - * If a previous index entry exists that has the same path as the - * given 'entry', it will be replaced. Otherwise, the 'entry' will be - * added. - * - * This forces the file to be added to the index, not looking - * at gitignore rules. Those rules can be evaluated through - * the git_status APIs (in status.h) before calling this. - * - * If this file currently is the result of a merge conflict, this - * file will no longer be marked as conflicting. The data about - * the conflict will be moved to the "resolve undo" (REUC) section. - * - * @param index an existing index object - * @param entry filename to add - * @param buffer data to be written into the blob - * @param len length of the data - * @return 0 or an error code - */ -GIT_EXTERN(int) git_index_add_from_buffer( - git_index *index, - const git_index_entry *entry, - const void *buffer, size_t len); - -/** - * Remove an index entry corresponding to a file on disk - * - * The file `path` must be relative to the repository's - * working folder. It may exist. - * - * If this file currently is the result of a merge conflict, this - * file will no longer be marked as conflicting. The data about - * the conflict will be moved to the "resolve undo" (REUC) section. - * - * @param index an existing index object - * @param path filename to remove - * @return 0 or an error code - */ -GIT_EXTERN(int) git_index_remove_bypath(git_index *index, const char *path); - -/** - * Add or update index entries matching files in the working directory. - * - * This method will fail in bare index instances. - * - * The `pathspec` is a list of file names or shell glob patterns that will - * be matched against files in the repository's working directory. Each - * file that matches will be added to the index (either updating an - * existing entry or adding a new entry). You can disable glob expansion - * and force exact matching with the `GIT_INDEX_ADD_DISABLE_PATHSPEC_MATCH` - * flag. - * - * Files that are ignored will be skipped (unlike `git_index_add_bypath`). - * If a file is already tracked in the index, then it *will* be updated - * even if it is ignored. Pass the `GIT_INDEX_ADD_FORCE` flag to skip - * the checking of ignore rules. - * - * To emulate `git add -A` and generate an error if the pathspec contains - * the exact path of an ignored file (when not using FORCE), add the - * `GIT_INDEX_ADD_CHECK_PATHSPEC` flag. This checks that each entry - * in the `pathspec` that is an exact match to a filename on disk is - * either not ignored or already in the index. If this check fails, the - * function will return GIT_EINVALIDSPEC. - * - * To emulate `git add -A` with the "dry-run" option, just use a callback - * function that always returns a positive value. See below for details. - * - * If any files are currently the result of a merge conflict, those files - * will no longer be marked as conflicting. The data about the conflicts - * will be moved to the "resolve undo" (REUC) section. - * - * If you provide a callback function, it will be invoked on each matching - * item in the working directory immediately *before* it is added to / - * updated in the index. Returning zero will add the item to the index, - * greater than zero will skip the item, and less than zero will abort the - * scan and return that value to the caller. - * - * @param index an existing index object - * @param pathspec array of path patterns - * @param flags combination of git_index_add_option_t flags - * @param callback notification callback for each added/updated path (also - * gets index of matching pathspec entry); can be NULL; - * return 0 to add, >0 to skip, <0 to abort scan. - * @param payload payload passed through to callback function - * @return 0 on success, negative callback return value, or error code - */ -GIT_EXTERN(int) git_index_add_all( - git_index *index, - const git_strarray *pathspec, - unsigned int flags, - git_index_matched_path_cb callback, - void *payload); - -/** - * Remove all matching index entries. - * - * If you provide a callback function, it will be invoked on each matching - * item in the index immediately *before* it is removed. Return 0 to - * remove the item, > 0 to skip the item, and < 0 to abort the scan. - * - * @param index An existing index object - * @param pathspec array of path patterns - * @param callback notification callback for each removed path (also - * gets index of matching pathspec entry); can be NULL; - * return 0 to add, >0 to skip, <0 to abort scan. - * @param payload payload passed through to callback function - * @return 0 on success, negative callback return value, or error code - */ -GIT_EXTERN(int) git_index_remove_all( - git_index *index, - const git_strarray *pathspec, - git_index_matched_path_cb callback, - void *payload); - -/** - * Update all index entries to match the working directory - * - * This method will fail in bare index instances. - * - * This scans the existing index entries and synchronizes them with the - * working directory, deleting them if the corresponding working directory - * file no longer exists otherwise updating the information (including - * adding the latest version of file to the ODB if needed). - * - * If you provide a callback function, it will be invoked on each matching - * item in the index immediately *before* it is updated (either refreshed - * or removed depending on working directory state). Return 0 to proceed - * with updating the item, > 0 to skip the item, and < 0 to abort the scan. - * - * @param index An existing index object - * @param pathspec array of path patterns - * @param callback notification callback for each updated path (also - * gets index of matching pathspec entry); can be NULL; - * return 0 to add, >0 to skip, <0 to abort scan. - * @param payload payload passed through to callback function - * @return 0 on success, negative callback return value, or error code - */ -GIT_EXTERN(int) git_index_update_all( - git_index *index, - const git_strarray *pathspec, - git_index_matched_path_cb callback, - void *payload); - -/** - * Find the first position of any entries which point to given - * path in the Git index. - * - * @param at_pos the address to which the position of the index entry is written (optional) - * @param index an existing index object - * @param path path to search - * @return 0 or an error code - */ -GIT_EXTERN(int) git_index_find(size_t *at_pos, git_index *index, const char *path); - -/** - * Find the first position of any entries matching a prefix. To find the first position - * of a path inside a given folder, suffix the prefix with a '/'. - * - * @param at_pos the address to which the position of the index entry is written (optional) - * @param index an existing index object - * @param prefix the prefix to search for - * @return 0 or an error code - */ -GIT_EXTERN(int) git_index_find_prefix(size_t *at_pos, git_index *index, const char *prefix); - -/**@}*/ - -/** @name Conflict Index Entry Functions - * - * These functions work on conflict index entries specifically (ie, stages 1-3) - */ -/**@{*/ - -/** - * Add or update index entries to represent a conflict. Any staged - * entries that exist at the given paths will be removed. - * - * The entries are the entries from the tree included in the merge. Any - * entry may be null to indicate that that file was not present in the - * trees during the merge. For example, ancestor_entry may be NULL to - * indicate that a file was added in both branches and must be resolved. - * - * @param index an existing index object - * @param ancestor_entry the entry data for the ancestor of the conflict - * @param our_entry the entry data for our side of the merge conflict - * @param their_entry the entry data for their side of the merge conflict - * @return 0 or an error code - */ -GIT_EXTERN(int) git_index_conflict_add( - git_index *index, - const git_index_entry *ancestor_entry, - const git_index_entry *our_entry, - const git_index_entry *their_entry); - -/** - * Get the index entries that represent a conflict of a single file. - * - * The entries are not modifiable and should not be freed. Because the - * `git_index_entry` struct is a publicly defined struct, you should - * be able to make your own permanent copy of the data if necessary. - * - * @param ancestor_out Pointer to store the ancestor entry - * @param our_out Pointer to store the our entry - * @param their_out Pointer to store the their entry - * @param index an existing index object - * @param path path to search - * @return 0 or an error code - */ -GIT_EXTERN(int) git_index_conflict_get( - const git_index_entry **ancestor_out, - const git_index_entry **our_out, - const git_index_entry **their_out, - git_index *index, - const char *path); - -/** - * Removes the index entries that represent a conflict of a single file. - * - * @param index an existing index object - * @param path path to remove conflicts for - * @return 0 or an error code - */ -GIT_EXTERN(int) git_index_conflict_remove(git_index *index, const char *path); - -/** - * Remove all conflicts in the index (entries with a stage greater than 0). - * - * @param index an existing index object - * @return 0 or an error code - */ -GIT_EXTERN(int) git_index_conflict_cleanup(git_index *index); - -/** - * Determine if the index contains entries representing file conflicts. - * - * @return 1 if at least one conflict is found, 0 otherwise. - */ -GIT_EXTERN(int) git_index_has_conflicts(const git_index *index); - -/** - * Create an iterator for the conflicts in the index. - * - * The index must not be modified while iterating; the results are undefined. - * - * @param iterator_out The newly created conflict iterator - * @param index The index to scan - * @return 0 or an error code - */ -GIT_EXTERN(int) git_index_conflict_iterator_new( - git_index_conflict_iterator **iterator_out, - git_index *index); - -/** - * Returns the current conflict (ancestor, ours and theirs entry) and - * advance the iterator internally to the next value. - * - * @param ancestor_out Pointer to store the ancestor side of the conflict - * @param our_out Pointer to store our side of the conflict - * @param their_out Pointer to store their side of the conflict - * @return 0 (no error), GIT_ITEROVER (iteration is done) or an error code - * (negative value) - */ -GIT_EXTERN(int) git_index_conflict_next( - const git_index_entry **ancestor_out, - const git_index_entry **our_out, - const git_index_entry **their_out, - git_index_conflict_iterator *iterator); - -/** - * Frees a `git_index_conflict_iterator`. - * - * @param iterator pointer to the iterator - */ -GIT_EXTERN(void) git_index_conflict_iterator_free( - git_index_conflict_iterator *iterator); - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/indexer.h b/libgit2/headers/git2/indexer.h deleted file mode 100644 index a434d24..0000000 --- a/libgit2/headers/git2/indexer.h +++ /dev/null @@ -1,147 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef _INCLUDE_git_indexer_h__ -#define _INCLUDE_git_indexer_h__ - -#include "common.h" -#include "types.h" -#include "oid.h" - -GIT_BEGIN_DECL - -/** A git indexer object */ -typedef struct git_indexer git_indexer; - -/** - * This structure is used to provide callers information about the - * progress of indexing a packfile, either directly or part of a - * fetch or clone that downloads a packfile. - */ -typedef struct git_indexer_progress { - /** number of objects in the packfile being indexed */ - unsigned int total_objects; - - /** received objects that have been hashed */ - unsigned int indexed_objects; - - /** received_objects: objects which have been downloaded */ - unsigned int received_objects; - - /** - * locally-available objects that have been injected in order - * to fix a thin pack - */ - unsigned int local_objects; - - /** number of deltas in the packfile being indexed */ - unsigned int total_deltas; - - /** received deltas that have been indexed */ - unsigned int indexed_deltas; - - /** size of the packfile received up to now */ - size_t received_bytes; -} git_indexer_progress; - -/** - * Type for progress callbacks during indexing. Return a value less - * than zero to cancel the indexing or download. - * - * @param stats Structure containing information about the state of the transfer - * @param payload Payload provided by caller - */ -typedef int GIT_CALLBACK(git_indexer_progress_cb)(const git_indexer_progress *stats, void *payload); - -/** - * Options for indexer configuration - */ -typedef struct git_indexer_options { - unsigned int version; - - /** progress_cb function to call with progress information */ - git_indexer_progress_cb progress_cb; - - /** progress_cb_payload payload for the progress callback */ - void *progress_cb_payload; - - /** Do connectivity checks for the received pack */ - unsigned char verify; -} git_indexer_options; - -#define GIT_INDEXER_OPTIONS_VERSION 1 -#define GIT_INDEXER_OPTIONS_INIT { GIT_INDEXER_OPTIONS_VERSION } - -/** - * Initializes a `git_indexer_options` with default values. Equivalent to - * creating an instance with GIT_INDEXER_OPTIONS_INIT. - * - * @param opts the `git_indexer_options` struct to initialize. - * @param version Version of struct; pass `GIT_INDEXER_OPTIONS_VERSION` - * @return Zero on success; -1 on failure. - */ -GIT_EXTERN(int) git_indexer_options_init( - git_indexer_options *opts, - unsigned int version); - -/** - * Create a new indexer instance - * - * @param out where to store the indexer instance - * @param path to the directory where the packfile should be stored - * @param mode permissions to use creating packfile or 0 for defaults - * @param odb object database from which to read base objects when - * fixing thin packs. Pass NULL if no thin pack is expected (an error - * will be returned if there are bases missing) - * @param opts Optional structure containing additional options. See - * `git_indexer_options` above. - */ -GIT_EXTERN(int) git_indexer_new( - git_indexer **out, - const char *path, - unsigned int mode, - git_odb *odb, - git_indexer_options *opts); - -/** - * Add data to the indexer - * - * @param idx the indexer - * @param data the data to add - * @param size the size of the data in bytes - * @param stats stat storage - */ -GIT_EXTERN(int) git_indexer_append(git_indexer *idx, const void *data, size_t size, git_indexer_progress *stats); - -/** - * Finalize the pack and index - * - * Resolve any pending deltas and write out the index file - * - * @param idx the indexer - */ -GIT_EXTERN(int) git_indexer_commit(git_indexer *idx, git_indexer_progress *stats); - -/** - * Get the packfile's hash - * - * A packfile's name is derived from the sorted hashing of all object - * names. This is only correct after the index has been finalized. - * - * @param idx the indexer instance - */ -GIT_EXTERN(const git_oid *) git_indexer_hash(const git_indexer *idx); - -/** - * Free the indexer and its resources - * - * @param idx the indexer to free - */ -GIT_EXTERN(void) git_indexer_free(git_indexer *idx); - -GIT_END_DECL - -#endif diff --git a/libgit2/headers/git2/mailmap.h b/libgit2/headers/git2/mailmap.h deleted file mode 100644 index 7c3f60f..0000000 --- a/libgit2/headers/git2/mailmap.h +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_mailmap_h__ -#define INCLUDE_git_mailmap_h__ - -#include "common.h" -#include "types.h" -#include "buffer.h" - -/** - * @file git2/mailmap.h - * @brief Mailmap parsing routines - * @defgroup git_mailmap Git mailmap routines - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Allocate a new mailmap object. - * - * This object is empty, so you'll have to add a mailmap file before you can do - * anything with it. The mailmap must be freed with 'git_mailmap_free'. - * - * @param out pointer to store the new mailmap - * @return 0 on success, or an error code - */ -GIT_EXTERN(int) git_mailmap_new(git_mailmap **out); - -/** - * Free the mailmap and its associated memory. - * - * @param mm the mailmap to free - */ -GIT_EXTERN(void) git_mailmap_free(git_mailmap *mm); - -/** - * Add a single entry to the given mailmap object. If the entry already exists, - * it will be replaced with the new entry. - * - * @param mm mailmap to add the entry to - * @param real_name the real name to use, or NULL - * @param real_email the real email to use, or NULL - * @param replace_name the name to replace, or NULL - * @param replace_email the email to replace - * @return 0 on success, or an error code - */ -GIT_EXTERN(int) git_mailmap_add_entry( - git_mailmap *mm, const char *real_name, const char *real_email, - const char *replace_name, const char *replace_email); - -/** - * Create a new mailmap instance containing a single mailmap file - * - * @param out pointer to store the new mailmap - * @param buf buffer to parse the mailmap from - * @param len the length of the input buffer - * @return 0 on success, or an error code - */ -GIT_EXTERN(int) git_mailmap_from_buffer( - git_mailmap **out, const char *buf, size_t len); - -/** - * Create a new mailmap instance from a repository, loading mailmap files based - * on the repository's configuration. - * - * Mailmaps are loaded in the following order: - * 1. '.mailmap' in the root of the repository's working directory, if present. - * 2. The blob object identified by the 'mailmap.blob' config entry, if set. - * [NOTE: 'mailmap.blob' defaults to 'HEAD:.mailmap' in bare repositories] - * 3. The path in the 'mailmap.file' config entry, if set. - * - * @param out pointer to store the new mailmap - * @param repo repository to load mailmap information from - * @return 0 on success, or an error code - */ -GIT_EXTERN(int) git_mailmap_from_repository( - git_mailmap **out, git_repository *repo); - -/** - * Resolve a name and email to the corresponding real name and email. - * - * The lifetime of the strings are tied to `mm`, `name`, and `email` parameters. - * - * @param real_name pointer to store the real name - * @param real_email pointer to store the real email - * @param mm the mailmap to perform a lookup with (may be NULL) - * @param name the name to look up - * @param email the email to look up - * @return 0 on success, or an error code - */ -GIT_EXTERN(int) git_mailmap_resolve( - const char **real_name, const char **real_email, - const git_mailmap *mm, const char *name, const char *email); - -/** - * Resolve a signature to use real names and emails with a mailmap. - * - * Call `git_signature_free()` to free the data. - * - * @param out new signature - * @param mm mailmap to resolve with - * @param sig signature to resolve - * @return 0 or an error code - */ -GIT_EXTERN(int) git_mailmap_resolve_signature( - git_signature **out, const git_mailmap *mm, const git_signature *sig); - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/merge.h b/libgit2/headers/git2/merge.h deleted file mode 100644 index fc27c9d..0000000 --- a/libgit2/headers/git2/merge.h +++ /dev/null @@ -1,606 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_merge_h__ -#define INCLUDE_git_merge_h__ - -#include "common.h" -#include "types.h" -#include "oid.h" -#include "oidarray.h" -#include "checkout.h" -#include "index.h" -#include "annotated_commit.h" - -/** - * @file git2/merge.h - * @brief Git merge routines - * @defgroup git_merge Git merge routines - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * The file inputs to `git_merge_file`. Callers should populate the - * `git_merge_file_input` structure with descriptions of the files in - * each side of the conflict for use in producing the merge file. - */ -typedef struct { - unsigned int version; - - /** Pointer to the contents of the file. */ - const char *ptr; - - /** Size of the contents pointed to in `ptr`. */ - size_t size; - - /** File name of the conflicted file, or `NULL` to not merge the path. */ - const char *path; - - /** File mode of the conflicted file, or `0` to not merge the mode. */ - unsigned int mode; -} git_merge_file_input; - -#define GIT_MERGE_FILE_INPUT_VERSION 1 -#define GIT_MERGE_FILE_INPUT_INIT {GIT_MERGE_FILE_INPUT_VERSION} - -/** - * Initializes a `git_merge_file_input` with default values. Equivalent to - * creating an instance with GIT_MERGE_FILE_INPUT_INIT. - * - * @param opts the `git_merge_file_input` instance to initialize. - * @param version the version of the struct; you should pass - * `GIT_MERGE_FILE_INPUT_VERSION` here. - * @return Zero on success; -1 on failure. - */ -GIT_EXTERN(int) git_merge_file_input_init( - git_merge_file_input *opts, - unsigned int version); - -/** - * Flags for `git_merge` options. A combination of these flags can be - * passed in via the `flags` value in the `git_merge_options`. - */ -typedef enum { - /** - * Detect renames that occur between the common ancestor and the "ours" - * side or the common ancestor and the "theirs" side. This will enable - * the ability to merge between a modified and renamed file. - */ - GIT_MERGE_FIND_RENAMES = (1 << 0), - - /** - * If a conflict occurs, exit immediately instead of attempting to - * continue resolving conflicts. The merge operation will fail with - * GIT_EMERGECONFLICT and no index will be returned. - */ - GIT_MERGE_FAIL_ON_CONFLICT = (1 << 1), - - /** - * Do not write the REUC extension on the generated index - */ - GIT_MERGE_SKIP_REUC = (1 << 2), - - /** - * If the commits being merged have multiple merge bases, do not build - * a recursive merge base (by merging the multiple merge bases), - * instead simply use the first base. This flag provides a similar - * merge base to `git-merge-resolve`. - */ - GIT_MERGE_NO_RECURSIVE = (1 << 3), -} git_merge_flag_t; - -/** - * Merge file favor options for `git_merge_options` instruct the file-level - * merging functionality how to deal with conflicting regions of the files. - */ -typedef enum { - /** - * When a region of a file is changed in both branches, a conflict - * will be recorded in the index so that `git_checkout` can produce - * a merge file with conflict markers in the working directory. - * This is the default. - */ - GIT_MERGE_FILE_FAVOR_NORMAL = 0, - - /** - * When a region of a file is changed in both branches, the file - * created in the index will contain the "ours" side of any conflicting - * region. The index will not record a conflict. - */ - GIT_MERGE_FILE_FAVOR_OURS = 1, - - /** - * When a region of a file is changed in both branches, the file - * created in the index will contain the "theirs" side of any conflicting - * region. The index will not record a conflict. - */ - GIT_MERGE_FILE_FAVOR_THEIRS = 2, - - /** - * When a region of a file is changed in both branches, the file - * created in the index will contain each unique line from each side, - * which has the result of combining both files. The index will not - * record a conflict. - */ - GIT_MERGE_FILE_FAVOR_UNION = 3, -} git_merge_file_favor_t; - -/** - * File merging flags - */ -typedef enum { - /** Defaults */ - GIT_MERGE_FILE_DEFAULT = 0, - - /** Create standard conflicted merge files */ - GIT_MERGE_FILE_STYLE_MERGE = (1 << 0), - - /** Create diff3-style files */ - GIT_MERGE_FILE_STYLE_DIFF3 = (1 << 1), - - /** Condense non-alphanumeric regions for simplified diff file */ - GIT_MERGE_FILE_SIMPLIFY_ALNUM = (1 << 2), - - /** Ignore all whitespace */ - GIT_MERGE_FILE_IGNORE_WHITESPACE = (1 << 3), - - /** Ignore changes in amount of whitespace */ - GIT_MERGE_FILE_IGNORE_WHITESPACE_CHANGE = (1 << 4), - - /** Ignore whitespace at end of line */ - GIT_MERGE_FILE_IGNORE_WHITESPACE_EOL = (1 << 5), - - /** Use the "patience diff" algorithm */ - GIT_MERGE_FILE_DIFF_PATIENCE = (1 << 6), - - /** Take extra time to find minimal diff */ - GIT_MERGE_FILE_DIFF_MINIMAL = (1 << 7), -} git_merge_file_flag_t; - -#define GIT_MERGE_CONFLICT_MARKER_SIZE 7 - -/** - * Options for merging a file - */ -typedef struct { - unsigned int version; - - /** - * Label for the ancestor file side of the conflict which will be prepended - * to labels in diff3-format merge files. - */ - const char *ancestor_label; - - /** - * Label for our file side of the conflict which will be prepended - * to labels in merge files. - */ - const char *our_label; - - /** - * Label for their file side of the conflict which will be prepended - * to labels in merge files. - */ - const char *their_label; - - /** The file to favor in region conflicts. */ - git_merge_file_favor_t favor; - - /** see `git_merge_file_flag_t` above */ - uint32_t flags; - - /** The size of conflict markers (eg, "<<<<<<<"). Default is - * GIT_MERGE_CONFLICT_MARKER_SIZE. */ - unsigned short marker_size; -} git_merge_file_options; - -#define GIT_MERGE_FILE_OPTIONS_VERSION 1 -#define GIT_MERGE_FILE_OPTIONS_INIT {GIT_MERGE_FILE_OPTIONS_VERSION} - -/** - * Initialize git_merge_file_options structure - * - * Initializes a `git_merge_file_options` with default values. Equivalent to - * creating an instance with `GIT_MERGE_FILE_OPTIONS_INIT`. - * - * @param opts The `git_merge_file_options` struct to initialize. - * @param version The struct version; pass `GIT_MERGE_FILE_OPTIONS_VERSION`. - * @return Zero on success; -1 on failure. - */ -GIT_EXTERN(int) git_merge_file_options_init(git_merge_file_options *opts, unsigned int version); - -/** - * Information about file-level merging - */ -typedef struct { - /** - * True if the output was automerged, false if the output contains - * conflict markers. - */ - unsigned int automergeable; - - /** - * The path that the resultant merge file should use, or NULL if a - * filename conflict would occur. - */ - const char *path; - - /** The mode that the resultant merge file should use. */ - unsigned int mode; - - /** The contents of the merge. */ - const char *ptr; - - /** The length of the merge contents. */ - size_t len; -} git_merge_file_result; - -/** - * Merging options - */ -typedef struct { - unsigned int version; - - /** See `git_merge_flag_t` above */ - uint32_t flags; - - /** - * Similarity to consider a file renamed (default 50). If - * `GIT_MERGE_FIND_RENAMES` is enabled, added files will be compared - * with deleted files to determine their similarity. Files that are - * more similar than the rename threshold (percentage-wise) will be - * treated as a rename. - */ - unsigned int rename_threshold; - - /** - * Maximum similarity sources to examine for renames (default 200). - * If the number of rename candidates (add / delete pairs) is greater - * than this value, inexact rename detection is aborted. - * - * This setting overrides the `merge.renameLimit` configuration value. - */ - unsigned int target_limit; - - /** Pluggable similarity metric; pass NULL to use internal metric */ - git_diff_similarity_metric *metric; - - /** - * Maximum number of times to merge common ancestors to build a - * virtual merge base when faced with criss-cross merges. When this - * limit is reached, the next ancestor will simply be used instead of - * attempting to merge it. The default is unlimited. - */ - unsigned int recursion_limit; - - /** - * Default merge driver to be used when both sides of a merge have - * changed. The default is the `text` driver. - */ - const char *default_driver; - - /** - * Flags for handling conflicting content, to be used with the standard - * (`text`) merge driver. - */ - git_merge_file_favor_t file_favor; - - /** see `git_merge_file_flag_t` above */ - uint32_t file_flags; -} git_merge_options; - -#define GIT_MERGE_OPTIONS_VERSION 1 -#define GIT_MERGE_OPTIONS_INIT { \ - GIT_MERGE_OPTIONS_VERSION, GIT_MERGE_FIND_RENAMES } - -/** - * Initialize git_merge_options structure - * - * Initializes a `git_merge_options` with default values. Equivalent to - * creating an instance with `GIT_MERGE_OPTIONS_INIT`. - * - * @param opts The `git_merge_options` struct to initialize. - * @param version The struct version; pass `GIT_MERGE_OPTIONS_VERSION`. - * @return Zero on success; -1 on failure. - */ -GIT_EXTERN(int) git_merge_options_init(git_merge_options *opts, unsigned int version); - -/** - * The results of `git_merge_analysis` indicate the merge opportunities. - */ -typedef enum { - /** No merge is possible. (Unused.) */ - GIT_MERGE_ANALYSIS_NONE = 0, - - /** - * A "normal" merge; both HEAD and the given merge input have diverged - * from their common ancestor. The divergent commits must be merged. - */ - GIT_MERGE_ANALYSIS_NORMAL = (1 << 0), - - /** - * All given merge inputs are reachable from HEAD, meaning the - * repository is up-to-date and no merge needs to be performed. - */ - GIT_MERGE_ANALYSIS_UP_TO_DATE = (1 << 1), - - /** - * The given merge input is a fast-forward from HEAD and no merge - * needs to be performed. Instead, the client can check out the - * given merge input. - */ - GIT_MERGE_ANALYSIS_FASTFORWARD = (1 << 2), - - /** - * The HEAD of the current repository is "unborn" and does not point to - * a valid commit. No merge can be performed, but the caller may wish - * to simply set HEAD to the target commit(s). - */ - GIT_MERGE_ANALYSIS_UNBORN = (1 << 3), -} git_merge_analysis_t; - -/** - * The user's stated preference for merges. - */ -typedef enum { - /** - * No configuration was found that suggests a preferred behavior for - * merge. - */ - GIT_MERGE_PREFERENCE_NONE = 0, - - /** - * There is a `merge.ff=false` configuration setting, suggesting that - * the user does not want to allow a fast-forward merge. - */ - GIT_MERGE_PREFERENCE_NO_FASTFORWARD = (1 << 0), - - /** - * There is a `merge.ff=only` configuration setting, suggesting that - * the user only wants fast-forward merges. - */ - GIT_MERGE_PREFERENCE_FASTFORWARD_ONLY = (1 << 1), -} git_merge_preference_t; - -/** - * Analyzes the given branch(es) and determines the opportunities for - * merging them into the HEAD of the repository. - * - * @param analysis_out analysis enumeration that the result is written into - * @param repo the repository to merge - * @param their_heads the heads to merge into - * @param their_heads_len the number of heads to merge - * @return 0 on success or error code - */ -GIT_EXTERN(int) git_merge_analysis( - git_merge_analysis_t *analysis_out, - git_merge_preference_t *preference_out, - git_repository *repo, - const git_annotated_commit **their_heads, - size_t their_heads_len); - -/** - * Analyzes the given branch(es) and determines the opportunities for - * merging them into a reference. - * - * @param analysis_out analysis enumeration that the result is written into - * @param repo the repository to merge - * @param our_ref the reference to perform the analysis from - * @param their_heads the heads to merge into - * @param their_heads_len the number of heads to merge - * @return 0 on success or error code - */ -GIT_EXTERN(int) git_merge_analysis_for_ref( - git_merge_analysis_t *analysis_out, - git_merge_preference_t *preference_out, - git_repository *repo, - git_reference *our_ref, - const git_annotated_commit **their_heads, - size_t their_heads_len); - -/** - * Find a merge base between two commits - * - * @param out the OID of a merge base between 'one' and 'two' - * @param repo the repository where the commits exist - * @param one one of the commits - * @param two the other commit - * @return 0 on success, GIT_ENOTFOUND if not found or error code - */ -GIT_EXTERN(int) git_merge_base( - git_oid *out, - git_repository *repo, - const git_oid *one, - const git_oid *two); - -/** - * Find merge bases between two commits - * - * @param out array in which to store the resulting ids - * @param repo the repository where the commits exist - * @param one one of the commits - * @param two the other commit - * @return 0 on success, GIT_ENOTFOUND if not found or error code - */ -GIT_EXTERN(int) git_merge_bases( - git_oidarray *out, - git_repository *repo, - const git_oid *one, - const git_oid *two); - -/** - * Find a merge base given a list of commits - * - * @param out the OID of a merge base considering all the commits - * @param repo the repository where the commits exist - * @param length The number of commits in the provided `input_array` - * @param input_array oids of the commits - * @return Zero on success; GIT_ENOTFOUND or -1 on failure. - */ -GIT_EXTERN(int) git_merge_base_many( - git_oid *out, - git_repository *repo, - size_t length, - const git_oid input_array[]); - -/** - * Find all merge bases given a list of commits - * - * @param out array in which to store the resulting ids - * @param repo the repository where the commits exist - * @param length The number of commits in the provided `input_array` - * @param input_array oids of the commits - * @return Zero on success; GIT_ENOTFOUND or -1 on failure. - */ -GIT_EXTERN(int) git_merge_bases_many( - git_oidarray *out, - git_repository *repo, - size_t length, - const git_oid input_array[]); - -/** - * Find a merge base in preparation for an octopus merge - * - * @param out the OID of a merge base considering all the commits - * @param repo the repository where the commits exist - * @param length The number of commits in the provided `input_array` - * @param input_array oids of the commits - * @return Zero on success; GIT_ENOTFOUND or -1 on failure. - */ -GIT_EXTERN(int) git_merge_base_octopus( - git_oid *out, - git_repository *repo, - size_t length, - const git_oid input_array[]); - -/** - * Merge two files as they exist in the in-memory data structures, using - * the given common ancestor as the baseline, producing a - * `git_merge_file_result` that reflects the merge result. The - * `git_merge_file_result` must be freed with `git_merge_file_result_free`. - * - * Note that this function does not reference a repository and any - * configuration must be passed as `git_merge_file_options`. - * - * @param out The git_merge_file_result to be filled in - * @param ancestor The contents of the ancestor file - * @param ours The contents of the file in "our" side - * @param theirs The contents of the file in "their" side - * @param opts The merge file options or `NULL` for defaults - * @return 0 on success or error code - */ -GIT_EXTERN(int) git_merge_file( - git_merge_file_result *out, - const git_merge_file_input *ancestor, - const git_merge_file_input *ours, - const git_merge_file_input *theirs, - const git_merge_file_options *opts); - -/** - * Merge two files as they exist in the index, using the given common - * ancestor as the baseline, producing a `git_merge_file_result` that - * reflects the merge result. The `git_merge_file_result` must be freed with - * `git_merge_file_result_free`. - * - * @param out The git_merge_file_result to be filled in - * @param repo The repository - * @param ancestor The index entry for the ancestor file (stage level 1) - * @param ours The index entry for our file (stage level 2) - * @param theirs The index entry for their file (stage level 3) - * @param opts The merge file options or NULL - * @return 0 on success or error code - */ -GIT_EXTERN(int) git_merge_file_from_index( - git_merge_file_result *out, - git_repository *repo, - const git_index_entry *ancestor, - const git_index_entry *ours, - const git_index_entry *theirs, - const git_merge_file_options *opts); - -/** - * Frees a `git_merge_file_result`. - * - * @param result The result to free or `NULL` - */ -GIT_EXTERN(void) git_merge_file_result_free(git_merge_file_result *result); - -/** - * Merge two trees, producing a `git_index` that reflects the result of - * the merge. The index may be written as-is to the working directory - * or checked out. If the index is to be converted to a tree, the caller - * should resolve any conflicts that arose as part of the merge. - * - * The returned index must be freed explicitly with `git_index_free`. - * - * @param out pointer to store the index result in - * @param repo repository that contains the given trees - * @param ancestor_tree the common ancestor between the trees (or null if none) - * @param our_tree the tree that reflects the destination tree - * @param their_tree the tree to merge in to `our_tree` - * @param opts the merge tree options (or null for defaults) - * @return 0 on success or error code - */ -GIT_EXTERN(int) git_merge_trees( - git_index **out, - git_repository *repo, - const git_tree *ancestor_tree, - const git_tree *our_tree, - const git_tree *their_tree, - const git_merge_options *opts); - -/** - * Merge two commits, producing a `git_index` that reflects the result of - * the merge. The index may be written as-is to the working directory - * or checked out. If the index is to be converted to a tree, the caller - * should resolve any conflicts that arose as part of the merge. - * - * The returned index must be freed explicitly with `git_index_free`. - * - * @param out pointer to store the index result in - * @param repo repository that contains the given trees - * @param our_commit the commit that reflects the destination tree - * @param their_commit the commit to merge in to `our_commit` - * @param opts the merge tree options (or null for defaults) - * @return 0 on success or error code - */ -GIT_EXTERN(int) git_merge_commits( - git_index **out, - git_repository *repo, - const git_commit *our_commit, - const git_commit *their_commit, - const git_merge_options *opts); - -/** - * Merges the given commit(s) into HEAD, writing the results into the working - * directory. Any changes are staged for commit and any conflicts are written - * to the index. Callers should inspect the repository's index after this - * completes, resolve any conflicts and prepare a commit. - * - * For compatibility with git, the repository is put into a merging - * state. Once the commit is done (or if the uses wishes to abort), - * you should clear this state by calling - * `git_repository_state_cleanup()`. - * - * @param repo the repository to merge - * @param their_heads the heads to merge into - * @param their_heads_len the number of heads to merge - * @param merge_opts merge options - * @param checkout_opts checkout options - * @return 0 on success or error code - */ -GIT_EXTERN(int) git_merge( - git_repository *repo, - const git_annotated_commit **their_heads, - size_t their_heads_len, - const git_merge_options *merge_opts, - const git_checkout_options *checkout_opts); - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/message.h b/libgit2/headers/git2/message.h deleted file mode 100644 index 42ca3e5..0000000 --- a/libgit2/headers/git2/message.h +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_message_h__ -#define INCLUDE_git_message_h__ - -#include "common.h" -#include "buffer.h" - -/** - * @file git2/message.h - * @brief Git message management routines - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Clean up excess whitespace and make sure there is a trailing newline in the message. - * - * Optionally, it can remove lines which start with the comment character. - * - * @param out The user-allocated git_buf which will be filled with the - * cleaned up message. - * - * @param message The message to be prettified. - * - * @param strip_comments Non-zero to remove comment lines, 0 to leave them in. - * - * @param comment_char Comment character. Lines starting with this character - * are considered to be comments and removed if `strip_comments` is non-zero. - * - * @return 0 or an error code. - */ -GIT_EXTERN(int) git_message_prettify(git_buf *out, const char *message, int strip_comments, char comment_char); - -/** - * Represents a single git message trailer. - */ -typedef struct { - const char *key; - const char *value; -} git_message_trailer; - -/** - * Represents an array of git message trailers. - * - * Struct members under the private comment are private, subject to change - * and should not be used by callers. - */ -typedef struct { - git_message_trailer *trailers; - size_t count; - - /* private */ - char *_trailer_block; -} git_message_trailer_array; - -/** - * Parse trailers out of a message, filling the array pointed to by +arr+. - * - * Trailers are key/value pairs in the last paragraph of a message, not - * including any patches or conflicts that may be present. - * - * @param arr A pre-allocated git_message_trailer_array struct to be filled in - * with any trailers found during parsing. - * @param message The message to be parsed - * @return 0 on success, or non-zero on error. - */ -GIT_EXTERN(int) git_message_trailers(git_message_trailer_array *arr, const char *message); - -/** - * Clean's up any allocated memory in the git_message_trailer_array filled by - * a call to git_message_trailers. - */ -GIT_EXTERN(void) git_message_trailer_array_free(git_message_trailer_array *arr); - -/** @} */ -GIT_END_DECL - -#endif /* INCLUDE_git_message_h__ */ diff --git a/libgit2/headers/git2/net.h b/libgit2/headers/git2/net.h deleted file mode 100644 index 8103eaf..0000000 --- a/libgit2/headers/git2/net.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_net_h__ -#define INCLUDE_git_net_h__ - -#include "common.h" -#include "oid.h" -#include "types.h" - -/** - * @file git2/net.h - * @brief Git networking declarations - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -#define GIT_DEFAULT_PORT "9418" - -/** - * Direction of the connection. - * - * We need this because we need to know whether we should call - * git-upload-pack or git-receive-pack on the remote end when get_refs - * gets called. - */ -typedef enum { - GIT_DIRECTION_FETCH = 0, - GIT_DIRECTION_PUSH = 1 -} git_direction; - -/** - * Description of a reference advertised by a remote server, given out - * on `ls` calls. - */ -struct git_remote_head { - int local; /* available locally */ - git_oid oid; - git_oid loid; - char *name; - /** - * If the server send a symref mapping for this ref, this will - * point to the target. - */ - char *symref_target; -}; - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/notes.h b/libgit2/headers/git2/notes.h deleted file mode 100644 index c135881..0000000 --- a/libgit2/headers/git2/notes.h +++ /dev/null @@ -1,306 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_note_h__ -#define INCLUDE_git_note_h__ - -#include "oid.h" - -/** - * @file git2/notes.h - * @brief Git notes management routines - * @defgroup git_note Git notes management routines - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Callback for git_note_foreach. - * - * Receives: - * - blob_id: Oid of the blob containing the message - * - annotated_object_id: Oid of the git object being annotated - * - payload: Payload data passed to `git_note_foreach` - */ -typedef int GIT_CALLBACK(git_note_foreach_cb)( - const git_oid *blob_id, const git_oid *annotated_object_id, void *payload); - -/** - * note iterator - */ -typedef struct git_iterator git_note_iterator; - -/** - * Creates a new iterator for notes - * - * The iterator must be freed manually by the user. - * - * @param out pointer to the iterator - * @param repo repository where to look up the note - * @param notes_ref canonical name of the reference to use (optional); defaults to - * "refs/notes/commits" - * - * @return 0 or an error code - */ -GIT_EXTERN(int) git_note_iterator_new( - git_note_iterator **out, - git_repository *repo, - const char *notes_ref); - -/** - * Creates a new iterator for notes from a commit - * - * The iterator must be freed manually by the user. - * - * @param out pointer to the iterator - * @param notes_commit a pointer to the notes commit object - * - * @return 0 or an error code - */ -GIT_EXTERN(int) git_note_commit_iterator_new( - git_note_iterator **out, - git_commit *notes_commit); - -/** - * Frees an git_note_iterator - * - * @param it pointer to the iterator - */ -GIT_EXTERN(void) git_note_iterator_free(git_note_iterator *it); - -/** - * Return the current item (note_id and annotated_id) and advance the iterator - * internally to the next value - * - * @param note_id id of blob containing the message - * @param annotated_id id of the git object being annotated - * @param it pointer to the iterator - * - * @return 0 (no error), GIT_ITEROVER (iteration is done) or an error code - * (negative value) - */ -GIT_EXTERN(int) git_note_next( - git_oid *note_id, - git_oid *annotated_id, - git_note_iterator *it); - - -/** - * Read the note for an object - * - * The note must be freed manually by the user. - * - * @param out pointer to the read note; NULL in case of error - * @param repo repository where to look up the note - * @param notes_ref canonical name of the reference to use (optional); defaults to - * "refs/notes/commits" - * @param oid OID of the git object to read the note from - * - * @return 0 or an error code - */ -GIT_EXTERN(int) git_note_read( - git_note **out, - git_repository *repo, - const char *notes_ref, - const git_oid *oid); - - -/** - * Read the note for an object from a note commit - * - * The note must be freed manually by the user. - * - * @param out pointer to the read note; NULL in case of error - * @param repo repository where to look up the note - * @param notes_commit a pointer to the notes commit object - * @param oid OID of the git object to read the note from - * - * @return 0 or an error code - */ -GIT_EXTERN(int) git_note_commit_read( - git_note **out, - git_repository *repo, - git_commit *notes_commit, - const git_oid *oid); - -/** - * Get the note author - * - * @param note the note - * @return the author - */ -GIT_EXTERN(const git_signature *) git_note_author(const git_note *note); - -/** - * Get the note committer - * - * @param note the note - * @return the committer - */ -GIT_EXTERN(const git_signature *) git_note_committer(const git_note *note); - - -/** - * Get the note message - * - * @param note the note - * @return the note message - */ -GIT_EXTERN(const char *) git_note_message(const git_note *note); - - -/** - * Get the note object's id - * - * @param note the note - * @return the note object's id - */ -GIT_EXTERN(const git_oid *) git_note_id(const git_note *note); - -/** - * Add a note for an object - * - * @param out pointer to store the OID (optional); NULL in case of error - * @param repo repository where to store the note - * @param notes_ref canonical name of the reference to use (optional); - * defaults to "refs/notes/commits" - * @param author signature of the notes commit author - * @param committer signature of the notes commit committer - * @param oid OID of the git object to decorate - * @param note Content of the note to add for object oid - * @param force Overwrite existing note - * - * @return 0 or an error code - */ -GIT_EXTERN(int) git_note_create( - git_oid *out, - git_repository *repo, - const char *notes_ref, - const git_signature *author, - const git_signature *committer, - const git_oid *oid, - const char *note, - int force); - -/** - * Add a note for an object from a commit - * - * This function will create a notes commit for a given object, - * the commit is a dangling commit, no reference is created. - * - * @param notes_commit_out pointer to store the commit (optional); - * NULL in case of error - * @param notes_blob_out a point to the id of a note blob (optional) - * @param repo repository where the note will live - * @param parent Pointer to parent note - * or NULL if this shall start a new notes tree - * @param author signature of the notes commit author - * @param committer signature of the notes commit committer - * @param oid OID of the git object to decorate - * @param note Content of the note to add for object oid - * @param allow_note_overwrite Overwrite existing note - * - * @return 0 or an error code - */ -GIT_EXTERN(int) git_note_commit_create( - git_oid *notes_commit_out, - git_oid *notes_blob_out, - git_repository *repo, - git_commit *parent, - const git_signature *author, - const git_signature *committer, - const git_oid *oid, - const char *note, - int allow_note_overwrite); - -/** - * Remove the note for an object - * - * @param repo repository where the note lives - * @param notes_ref canonical name of the reference to use (optional); - * defaults to "refs/notes/commits" - * @param author signature of the notes commit author - * @param committer signature of the notes commit committer - * @param oid OID of the git object to remove the note from - * - * @return 0 or an error code - */ -GIT_EXTERN(int) git_note_remove( - git_repository *repo, - const char *notes_ref, - const git_signature *author, - const git_signature *committer, - const git_oid *oid); - -/** - * Remove the note for an object - * - * @param notes_commit_out pointer to store the new notes commit (optional); - * NULL in case of error. - * When removing a note a new tree containing all notes - * sans the note to be removed is created and a new commit - * pointing to that tree is also created. - * In the case where the resulting tree is an empty tree - * a new commit pointing to this empty tree will be returned. - * @param repo repository where the note lives - * @param notes_commit a pointer to the notes commit object - * @param author signature of the notes commit author - * @param committer signature of the notes commit committer - * @param oid OID of the git object to remove the note from - * - * @return 0 or an error code - */ -GIT_EXTERN(int) git_note_commit_remove( - git_oid *notes_commit_out, - git_repository *repo, - git_commit *notes_commit, - const git_signature *author, - const git_signature *committer, - const git_oid *oid); - -/** - * Free a git_note object - * - * @param note git_note object - */ -GIT_EXTERN(void) git_note_free(git_note *note); - -/** - * Get the default notes reference for a repository - * - * @param out buffer in which to store the name of the default notes reference - * @param repo The Git repository - * - * @return 0 or an error code - */ -GIT_EXTERN(int) git_note_default_ref(git_buf *out, git_repository *repo); - -/** - * Loop over all the notes within a specified namespace - * and issue a callback for each one. - * - * @param repo Repository where to find the notes. - * - * @param notes_ref Reference to read from (optional); defaults to - * "refs/notes/commits". - * - * @param note_cb Callback to invoke per found annotation. Return non-zero - * to stop looping. - * - * @param payload Extra parameter to callback function. - * - * @return 0 on success, non-zero callback return value, or error code - */ -GIT_EXTERN(int) git_note_foreach( - git_repository *repo, - const char *notes_ref, - git_note_foreach_cb note_cb, - void *payload); - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/object.h b/libgit2/headers/git2/object.h deleted file mode 100644 index 984dbb7..0000000 --- a/libgit2/headers/git2/object.h +++ /dev/null @@ -1,230 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_object_h__ -#define INCLUDE_git_object_h__ - -#include "common.h" -#include "types.h" -#include "oid.h" -#include "buffer.h" - -/** - * @file git2/object.h - * @brief Git revision object management routines - * @defgroup git_object Git revision object management routines - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -#define GIT_OBJECT_SIZE_MAX UINT64_MAX - -/** - * Lookup a reference to one of the objects in a repository. - * - * The generated reference is owned by the repository and - * should be closed with the `git_object_free` method - * instead of free'd manually. - * - * The 'type' parameter must match the type of the object - * in the odb; the method will fail otherwise. - * The special value 'GIT_OBJECT_ANY' may be passed to let - * the method guess the object's type. - * - * @param object pointer to the looked-up object - * @param repo the repository to look up the object - * @param id the unique identifier for the object - * @param type the type of the object - * @return 0 or an error code - */ -GIT_EXTERN(int) git_object_lookup( - git_object **object, - git_repository *repo, - const git_oid *id, - git_object_t type); - -/** - * Lookup a reference to one of the objects in a repository, - * given a prefix of its identifier (short id). - * - * The object obtained will be so that its identifier - * matches the first 'len' hexadecimal characters - * (packets of 4 bits) of the given 'id'. - * 'len' must be at least GIT_OID_MINPREFIXLEN, and - * long enough to identify a unique object matching - * the prefix; otherwise the method will fail. - * - * The generated reference is owned by the repository and - * should be closed with the `git_object_free` method - * instead of free'd manually. - * - * The 'type' parameter must match the type of the object - * in the odb; the method will fail otherwise. - * The special value 'GIT_OBJECT_ANY' may be passed to let - * the method guess the object's type. - * - * @param object_out pointer where to store the looked-up object - * @param repo the repository to look up the object - * @param id a short identifier for the object - * @param len the length of the short identifier - * @param type the type of the object - * @return 0 or an error code - */ -GIT_EXTERN(int) git_object_lookup_prefix( - git_object **object_out, - git_repository *repo, - const git_oid *id, - size_t len, - git_object_t type); - - -/** - * Lookup an object that represents a tree entry. - * - * @param out buffer that receives a pointer to the object (which must be freed - * by the caller) - * @param treeish root object that can be peeled to a tree - * @param path relative path from the root object to the desired object - * @param type type of object desired - * @return 0 on success, or an error code - */ -GIT_EXTERN(int) git_object_lookup_bypath( - git_object **out, - const git_object *treeish, - const char *path, - git_object_t type); - -/** - * Get the id (SHA1) of a repository object - * - * @param obj the repository object - * @return the SHA1 id - */ -GIT_EXTERN(const git_oid *) git_object_id(const git_object *obj); - -/** - * Get a short abbreviated OID string for the object - * - * This starts at the "core.abbrev" length (default 7 characters) and - * iteratively extends to a longer string if that length is ambiguous. - * The result will be unambiguous (at least until new objects are added to - * the repository). - * - * @param out Buffer to write string into - * @param obj The object to get an ID for - * @return 0 on success, <0 for error - */ -GIT_EXTERN(int) git_object_short_id(git_buf *out, const git_object *obj); - -/** - * Get the object type of an object - * - * @param obj the repository object - * @return the object's type - */ -GIT_EXTERN(git_object_t) git_object_type(const git_object *obj); - -/** - * Get the repository that owns this object - * - * Freeing or calling `git_repository_close` on the - * returned pointer will invalidate the actual object. - * - * Any other operation may be run on the repository without - * affecting the object. - * - * @param obj the object - * @return the repository who owns this object - */ -GIT_EXTERN(git_repository *) git_object_owner(const git_object *obj); - -/** - * Close an open object - * - * This method instructs the library to close an existing - * object; note that git_objects are owned and cached by the repository - * so the object may or may not be freed after this library call, - * depending on how aggressive is the caching mechanism used - * by the repository. - * - * IMPORTANT: - * It *is* necessary to call this method when you stop using - * an object. Failure to do so will cause a memory leak. - * - * @param object the object to close - */ -GIT_EXTERN(void) git_object_free(git_object *object); - -/** - * Convert an object type to its string representation. - * - * The result is a pointer to a string in static memory and - * should not be free()'ed. - * - * @param type object type to convert. - * @return the corresponding string representation. - */ -GIT_EXTERN(const char *) git_object_type2string(git_object_t type); - -/** - * Convert a string object type representation to it's git_object_t. - * - * @param str the string to convert. - * @return the corresponding git_object_t. - */ -GIT_EXTERN(git_object_t) git_object_string2type(const char *str); - -/** - * Determine if the given git_object_t is a valid loose object type. - * - * @param type object type to test. - * @return true if the type represents a valid loose object type, - * false otherwise. - */ -GIT_EXTERN(int) git_object_typeisloose(git_object_t type); - -/** - * Recursively peel an object until an object of the specified type is met. - * - * If the query cannot be satisfied due to the object model, - * GIT_EINVALIDSPEC will be returned (e.g. trying to peel a blob to a - * tree). - * - * If you pass `GIT_OBJECT_ANY` as the target type, then the object will - * be peeled until the type changes. A tag will be peeled until the - * referenced object is no longer a tag, and a commit will be peeled - * to a tree. Any other object type will return GIT_EINVALIDSPEC. - * - * If peeling a tag we discover an object which cannot be peeled to - * the target type due to the object model, GIT_EPEEL will be - * returned. - * - * You must free the returned object. - * - * @param peeled Pointer to the peeled git_object - * @param object The object to be processed - * @param target_type The type of the requested object (a GIT_OBJECT_ value) - * @return 0 on success, GIT_EINVALIDSPEC, GIT_EPEEL, or an error code - */ -GIT_EXTERN(int) git_object_peel( - git_object **peeled, - const git_object *object, - git_object_t target_type); - -/** - * Create an in-memory copy of a Git object. The copy must be - * explicitly free'd or it will leak. - * - * @param dest Pointer to store the copy of the object - * @param source Original object to copy - */ -GIT_EXTERN(int) git_object_dup(git_object **dest, git_object *source); - -/** @} */ -GIT_END_DECL - -#endif diff --git a/libgit2/headers/git2/odb.h b/libgit2/headers/git2/odb.h deleted file mode 100644 index dd48455..0000000 --- a/libgit2/headers/git2/odb.h +++ /dev/null @@ -1,573 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_odb_h__ -#define INCLUDE_git_odb_h__ - -#include "common.h" -#include "types.h" -#include "oid.h" -#include "oidarray.h" -#include "indexer.h" - -/** - * @file git2/odb.h - * @brief Git object database routines - * @defgroup git_odb Git object database routines - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Function type for callbacks from git_odb_foreach. - */ -typedef int GIT_CALLBACK(git_odb_foreach_cb)(const git_oid *id, void *payload); - -/** - * Create a new object database with no backends. - * - * Before the ODB can be used for read/writing, a custom database - * backend must be manually added using `git_odb_add_backend()` - * - * @param out location to store the database pointer, if opened. - * Set to NULL if the open failed. - * @return 0 or an error code - */ -GIT_EXTERN(int) git_odb_new(git_odb **out); - -/** - * Create a new object database and automatically add - * the two default backends: - * - * - git_odb_backend_loose: read and write loose object files - * from disk, assuming `objects_dir` as the Objects folder - * - * - git_odb_backend_pack: read objects from packfiles, - * assuming `objects_dir` as the Objects folder which - * contains a 'pack/' folder with the corresponding data - * - * @param out location to store the database pointer, if opened. - * Set to NULL if the open failed. - * @param objects_dir path of the backends' "objects" directory. - * @return 0 or an error code - */ -GIT_EXTERN(int) git_odb_open(git_odb **out, const char *objects_dir); - -/** - * Add an on-disk alternate to an existing Object DB. - * - * Note that the added path must point to an `objects`, not - * to a full repository, to use it as an alternate store. - * - * Alternate backends are always checked for objects *after* - * all the main backends have been exhausted. - * - * Writing is disabled on alternate backends. - * - * @param odb database to add the backend to - * @param path path to the objects folder for the alternate - * @return 0 on success, error code otherwise - */ -GIT_EXTERN(int) git_odb_add_disk_alternate(git_odb *odb, const char *path); - -/** - * Close an open object database. - * - * @param db database pointer to close. If NULL no action is taken. - */ -GIT_EXTERN(void) git_odb_free(git_odb *db); - -/** - * Read an object from the database. - * - * This method queries all available ODB backends - * trying to read the given OID. - * - * The returned object is reference counted and - * internally cached, so it should be closed - * by the user once it's no longer in use. - * - * @param out pointer where to store the read object - * @param db database to search for the object in. - * @param id identity of the object to read. - * @return 0 if the object was read, GIT_ENOTFOUND if the object is - * not in the database. - */ -GIT_EXTERN(int) git_odb_read(git_odb_object **out, git_odb *db, const git_oid *id); - -/** - * Read an object from the database, given a prefix - * of its identifier. - * - * This method queries all available ODB backends - * trying to match the 'len' first hexadecimal - * characters of the 'short_id'. - * The remaining (GIT_OID_HEXSZ-len)*4 bits of - * 'short_id' must be 0s. - * 'len' must be at least GIT_OID_MINPREFIXLEN, - * and the prefix must be long enough to identify - * a unique object in all the backends; the - * method will fail otherwise. - * - * The returned object is reference counted and - * internally cached, so it should be closed - * by the user once it's no longer in use. - * - * @param out pointer where to store the read object - * @param db database to search for the object in. - * @param short_id a prefix of the id of the object to read. - * @param len the length of the prefix - * @return 0 if the object was read, GIT_ENOTFOUND if the object is not in the - * database. GIT_EAMBIGUOUS if the prefix is ambiguous - * (several objects match the prefix) - */ -GIT_EXTERN(int) git_odb_read_prefix(git_odb_object **out, git_odb *db, const git_oid *short_id, size_t len); - -/** - * Read the header of an object from the database, without - * reading its full contents. - * - * The header includes the length and the type of an object. - * - * Note that most backends do not support reading only the header - * of an object, so the whole object will be read and then the - * header will be returned. - * - * @param len_out pointer where to store the length - * @param type_out pointer where to store the type - * @param db database to search for the object in. - * @param id identity of the object to read. - * @return 0 if the object was read, GIT_ENOTFOUND if the object is not - * in the database. - */ -GIT_EXTERN(int) git_odb_read_header(size_t *len_out, git_object_t *type_out, git_odb *db, const git_oid *id); - -/** - * Determine if the given object can be found in the object database. - * - * @param db database to be searched for the given object. - * @param id the object to search for. - * @return 1 if the object was found, 0 otherwise - */ -GIT_EXTERN(int) git_odb_exists(git_odb *db, const git_oid *id); - -/** - * Determine if an object can be found in the object database by an - * abbreviated object ID. - * - * @param out The full OID of the found object if just one is found. - * @param db The database to be searched for the given object. - * @param short_id A prefix of the id of the object to read. - * @param len The length of the prefix. - * @return 0 if found, GIT_ENOTFOUND if not found, GIT_EAMBIGUOUS if multiple - * matches were found, other value < 0 if there was a read error. - */ -GIT_EXTERN(int) git_odb_exists_prefix( - git_oid *out, git_odb *db, const git_oid *short_id, size_t len); - -/** - * The information about object IDs to query in `git_odb_expand_ids`, - * which will be populated upon return. - */ -typedef struct git_odb_expand_id { - /** The object ID to expand */ - git_oid id; - - /** - * The length of the object ID (in nibbles, or packets of 4 bits; the - * number of hex characters) - * */ - unsigned short length; - - /** - * The (optional) type of the object to search for; leave as `0` or set - * to `GIT_OBJECT_ANY` to query for any object matching the ID. - */ - git_object_t type; -} git_odb_expand_id; - -/** - * Determine if one or more objects can be found in the object database - * by their abbreviated object ID and type. The given array will be - * updated in place: for each abbreviated ID that is unique in the - * database, and of the given type (if specified), the full object ID, - * object ID length (`GIT_OID_HEXSZ`) and type will be written back to - * the array. For IDs that are not found (or are ambiguous), the - * array entry will be zeroed. - * - * Note that since this function operates on multiple objects, the - * underlying database will not be asked to be reloaded if an object is - * not found (which is unlike other object database operations.) - * - * @param db The database to be searched for the given objects. - * @param ids An array of short object IDs to search for - * @param count The length of the `ids` array - * @return 0 on success or an error code on failure - */ -GIT_EXTERN(int) git_odb_expand_ids( - git_odb *db, - git_odb_expand_id *ids, - size_t count); - -/** - * Refresh the object database to load newly added files. - * - * If the object databases have changed on disk while the library - * is running, this function will force a reload of the underlying - * indexes. - * - * Use this function when you're confident that an external - * application has tampered with the ODB. - * - * NOTE that it is not necessary to call this function at all. The - * library will automatically attempt to refresh the ODB - * when a lookup fails, to see if the looked up object exists - * on disk but hasn't been loaded yet. - * - * @param db database to refresh - * @return 0 on success, error code otherwise - */ -GIT_EXTERN(int) git_odb_refresh(struct git_odb *db); - -/** - * List all objects available in the database - * - * The callback will be called for each object available in the - * database. Note that the objects are likely to be returned in the index - * order, which would make accessing the objects in that order inefficient. - * Return a non-zero value from the callback to stop looping. - * - * @param db database to use - * @param cb the callback to call for each object - * @param payload data to pass to the callback - * @return 0 on success, non-zero callback return value, or error code - */ -GIT_EXTERN(int) git_odb_foreach(git_odb *db, git_odb_foreach_cb cb, void *payload); - -/** - * Write an object directly into the ODB - * - * This method writes a full object straight into the ODB. - * For most cases, it is preferred to write objects through a write - * stream, which is both faster and less memory intensive, specially - * for big objects. - * - * This method is provided for compatibility with custom backends - * which are not able to support streaming writes - * - * @param out pointer to store the OID result of the write - * @param odb object database where to store the object - * @param data buffer with the data to store - * @param len size of the buffer - * @param type type of the data to store - * @return 0 or an error code - */ -GIT_EXTERN(int) git_odb_write(git_oid *out, git_odb *odb, const void *data, size_t len, git_object_t type); - -/** - * Open a stream to write an object into the ODB - * - * The type and final length of the object must be specified - * when opening the stream. - * - * The returned stream will be of type `GIT_STREAM_WRONLY`, and it - * won't be effective until `git_odb_stream_finalize_write` is called - * and returns without an error - * - * The stream must always be freed when done with `git_odb_stream_free` or - * will leak memory. - * - * @see git_odb_stream - * - * @param out pointer where to store the stream - * @param db object database where the stream will write - * @param size final size of the object that will be written - * @param type type of the object that will be written - * @return 0 if the stream was created; error code otherwise - */ -GIT_EXTERN(int) git_odb_open_wstream(git_odb_stream **out, git_odb *db, git_object_size_t size, git_object_t type); - -/** - * Write to an odb stream - * - * This method will fail if the total number of received bytes exceeds the - * size declared with `git_odb_open_wstream()` - * - * @param stream the stream - * @param buffer the data to write - * @param len the buffer's length - * @return 0 if the write succeeded, error code otherwise - */ -GIT_EXTERN(int) git_odb_stream_write(git_odb_stream *stream, const char *buffer, size_t len); - -/** - * Finish writing to an odb stream - * - * The object will take its final name and will be available to the - * odb. - * - * This method will fail if the total number of received bytes - * differs from the size declared with `git_odb_open_wstream()` - * - * @param out pointer to store the resulting object's id - * @param stream the stream - * @return 0 on success, an error code otherwise - */ -GIT_EXTERN(int) git_odb_stream_finalize_write(git_oid *out, git_odb_stream *stream); - -/** - * Read from an odb stream - * - * Most backends don't implement streaming reads - */ -GIT_EXTERN(int) git_odb_stream_read(git_odb_stream *stream, char *buffer, size_t len); - -/** - * Free an odb stream - * - * @param stream the stream to free - */ -GIT_EXTERN(void) git_odb_stream_free(git_odb_stream *stream); - -/** - * Open a stream to read an object from the ODB - * - * Note that most backends do *not* support streaming reads - * because they store their objects as compressed/delta'ed blobs. - * - * It's recommended to use `git_odb_read` instead, which is - * assured to work on all backends. - * - * The returned stream will be of type `GIT_STREAM_RDONLY` and - * will have the following methods: - * - * - stream->read: read `n` bytes from the stream - * - stream->free: free the stream - * - * The stream must always be free'd or will leak memory. - * - * @see git_odb_stream - * - * @param out pointer where to store the stream - * @param len pointer where to store the length of the object - * @param type pointer where to store the type of the object - * @param db object database where the stream will read from - * @param oid oid of the object the stream will read from - * @return 0 if the stream was created, error code otherwise - */ -GIT_EXTERN(int) git_odb_open_rstream( - git_odb_stream **out, - size_t *len, - git_object_t *type, - git_odb *db, - const git_oid *oid); - -/** - * Open a stream for writing a pack file to the ODB. - * - * If the ODB layer understands pack files, then the given - * packfile will likely be streamed directly to disk (and a - * corresponding index created). If the ODB layer does not - * understand pack files, the objects will be stored in whatever - * format the ODB layer uses. - * - * @see git_odb_writepack - * - * @param out pointer to the writepack functions - * @param db object database where the stream will read from - * @param progress_cb function to call with progress information. - * Be aware that this is called inline with network and indexing operations, - * so performance may be affected. - * @param progress_payload payload for the progress callback - */ -GIT_EXTERN(int) git_odb_write_pack( - git_odb_writepack **out, - git_odb *db, - git_indexer_progress_cb progress_cb, - void *progress_payload); - -/** - * Write a `multi-pack-index` file from all the `.pack` files in the ODB. - * - * If the ODB layer understands pack files, then this will create a file called - * `multi-pack-index` next to the `.pack` and `.idx` files, which will contain - * an index of all objects stored in `.pack` files. This will allow for - * O(log n) lookup for n objects (regardless of how many packfiles there - * exist). - * - * @param db object database where the `multi-pack-index` file will be written. - */ -GIT_EXTERN(int) git_odb_write_multi_pack_index( - git_odb *db); - -/** - * Determine the object-ID (sha1 hash) of a data buffer - * - * The resulting SHA-1 OID will be the identifier for the data - * buffer as if the data buffer it were to written to the ODB. - * - * @param out the resulting object-ID. - * @param data data to hash - * @param len size of the data - * @param type of the data to hash - * @return 0 or an error code - */ -GIT_EXTERN(int) git_odb_hash(git_oid *out, const void *data, size_t len, git_object_t type); - -/** - * Read a file from disk and fill a git_oid with the object id - * that the file would have if it were written to the Object - * Database as an object of the given type (w/o applying filters). - * Similar functionality to git.git's `git hash-object` without - * the `-w` flag, however, with the --no-filters flag. - * If you need filters, see git_repository_hashfile. - * - * @param out oid structure the result is written into. - * @param path file to read and determine object id for - * @param type the type of the object that will be hashed - * @return 0 or an error code - */ -GIT_EXTERN(int) git_odb_hashfile(git_oid *out, const char *path, git_object_t type); - -/** - * Create a copy of an odb_object - * - * The returned copy must be manually freed with `git_odb_object_free`. - * Note that because of an implementation detail, the returned copy will be - * the same pointer as `source`: the object is internally refcounted, so the - * copy still needs to be freed twice. - * - * @param dest pointer where to store the copy - * @param source object to copy - * @return 0 or an error code - */ -GIT_EXTERN(int) git_odb_object_dup(git_odb_object **dest, git_odb_object *source); - -/** - * Close an ODB object - * - * This method must always be called once a `git_odb_object` is no - * longer needed, otherwise memory will leak. - * - * @param object object to close - */ -GIT_EXTERN(void) git_odb_object_free(git_odb_object *object); - -/** - * Return the OID of an ODB object - * - * This is the OID from which the object was read from - * - * @param object the object - * @return a pointer to the OID - */ -GIT_EXTERN(const git_oid *) git_odb_object_id(git_odb_object *object); - -/** - * Return the data of an ODB object - * - * This is the uncompressed, raw data as read from the ODB, - * without the leading header. - * - * This pointer is owned by the object and shall not be free'd. - * - * @param object the object - * @return a pointer to the data - */ -GIT_EXTERN(const void *) git_odb_object_data(git_odb_object *object); - -/** - * Return the size of an ODB object - * - * This is the real size of the `data` buffer, not the - * actual size of the object. - * - * @param object the object - * @return the size - */ -GIT_EXTERN(size_t) git_odb_object_size(git_odb_object *object); - -/** - * Return the type of an ODB object - * - * @param object the object - * @return the type - */ -GIT_EXTERN(git_object_t) git_odb_object_type(git_odb_object *object); - -/** - * Add a custom backend to an existing Object DB - * - * The backends are checked in relative ordering, based on the - * value of the `priority` parameter. - * - * Read for more information. - * - * @param odb database to add the backend to - * @param backend pointer to a git_odb_backend instance - * @param priority Value for ordering the backends queue - * @return 0 on success, error code otherwise - */ -GIT_EXTERN(int) git_odb_add_backend(git_odb *odb, git_odb_backend *backend, int priority); - -/** - * Add a custom backend to an existing Object DB; this - * backend will work as an alternate. - * - * Alternate backends are always checked for objects *after* - * all the main backends have been exhausted. - * - * The backends are checked in relative ordering, based on the - * value of the `priority` parameter. - * - * Writing is disabled on alternate backends. - * - * Read for more information. - * - * @param odb database to add the backend to - * @param backend pointer to a git_odb_backend instance - * @param priority Value for ordering the backends queue - * @return 0 on success, error code otherwise - */ -GIT_EXTERN(int) git_odb_add_alternate(git_odb *odb, git_odb_backend *backend, int priority); - -/** - * Get the number of ODB backend objects - * - * @param odb object database - * @return number of backends in the ODB - */ -GIT_EXTERN(size_t) git_odb_num_backends(git_odb *odb); - -/** - * Lookup an ODB backend object by index - * - * @param out output pointer to ODB backend at pos - * @param odb object database - * @param pos index into object database backend list - * @return 0 on success, GIT_ENOTFOUND if pos is invalid, other errors < 0 - */ -GIT_EXTERN(int) git_odb_get_backend(git_odb_backend **out, git_odb *odb, size_t pos); - -/** - * Set the git commit-graph for the ODB. - * - * After a successfull call, the ownership of the cgraph parameter will be - * transferred to libgit2, and the caller should not free it. - * - * The commit-graph can also be unset by explicitly passing NULL as the cgraph - * parameter. - * - * @param odb object database - * @param cgraph the git commit-graph - * @return 0 on success; error code otherwise - */ -GIT_EXTERN(int) git_odb_set_commit_graph(git_odb *odb, git_commit_graph *cgraph); - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/odb_backend.h b/libgit2/headers/git2/odb_backend.h deleted file mode 100644 index c593bac..0000000 --- a/libgit2/headers/git2/odb_backend.h +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_odb_backend_h__ -#define INCLUDE_git_odb_backend_h__ - -#include "common.h" -#include "types.h" -#include "indexer.h" - -/** - * @file git2/backend.h - * @brief Git custom backend functions - * @defgroup git_odb Git object database routines - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/* - * Constructors for in-box ODB backends. - */ - -/** - * Create a backend for the packfiles. - * - * @param out location to store the odb backend pointer - * @param objects_dir the Git repository's objects directory - * - * @return 0 or an error code - */ -GIT_EXTERN(int) git_odb_backend_pack(git_odb_backend **out, const char *objects_dir); - -/** - * Create a backend for loose objects - * - * @param out location to store the odb backend pointer - * @param objects_dir the Git repository's objects directory - * @param compression_level zlib compression level to use - * @param do_fsync whether to do an fsync() after writing - * @param dir_mode permissions to use creating a directory or 0 for defaults - * @param file_mode permissions to use creating a file or 0 for defaults - * - * @return 0 or an error code - */ -GIT_EXTERN(int) git_odb_backend_loose( - git_odb_backend **out, - const char *objects_dir, - int compression_level, - int do_fsync, - unsigned int dir_mode, - unsigned int file_mode); - -/** - * Create a backend out of a single packfile - * - * This can be useful for inspecting the contents of a single - * packfile. - * - * @param out location to store the odb backend pointer - * @param index_file path to the packfile's .idx file - * - * @return 0 or an error code - */ -GIT_EXTERN(int) git_odb_backend_one_pack(git_odb_backend **out, const char *index_file); - -/** Streaming mode */ -typedef enum { - GIT_STREAM_RDONLY = (1 << 1), - GIT_STREAM_WRONLY = (1 << 2), - GIT_STREAM_RW = (GIT_STREAM_RDONLY | GIT_STREAM_WRONLY), -} git_odb_stream_t; - -/** - * A stream to read/write from a backend. - * - * This represents a stream of data being written to or read from a - * backend. When writing, the frontend functions take care of - * calculating the object's id and all `finalize_write` needs to do is - * store the object with the id it is passed. - */ -struct git_odb_stream { - git_odb_backend *backend; - unsigned int mode; - void *hash_ctx; - - git_object_size_t declared_size; - git_object_size_t received_bytes; - - /** - * Write at most `len` bytes into `buffer` and advance the stream. - */ - int GIT_CALLBACK(read)(git_odb_stream *stream, char *buffer, size_t len); - - /** - * Write `len` bytes from `buffer` into the stream. - */ - int GIT_CALLBACK(write)(git_odb_stream *stream, const char *buffer, size_t len); - - /** - * Store the contents of the stream as an object with the id - * specified in `oid`. - * - * This method might not be invoked if: - * - an error occurs earlier with the `write` callback, - * - the object referred to by `oid` already exists in any backend, or - * - the final number of received bytes differs from the size declared - * with `git_odb_open_wstream()` - */ - int GIT_CALLBACK(finalize_write)(git_odb_stream *stream, const git_oid *oid); - - /** - * Free the stream's memory. - * - * This method might be called without a call to `finalize_write` if - * an error occurs or if the object is already present in the ODB. - */ - void GIT_CALLBACK(free)(git_odb_stream *stream); -}; - -/** A stream to write a pack file to the ODB */ -struct git_odb_writepack { - git_odb_backend *backend; - - int GIT_CALLBACK(append)(git_odb_writepack *writepack, const void *data, size_t size, git_indexer_progress *stats); - int GIT_CALLBACK(commit)(git_odb_writepack *writepack, git_indexer_progress *stats); - void GIT_CALLBACK(free)(git_odb_writepack *writepack); -}; - -GIT_END_DECL - -#endif diff --git a/libgit2/headers/git2/oid.h b/libgit2/headers/git2/oid.h deleted file mode 100644 index 549df4e..0000000 --- a/libgit2/headers/git2/oid.h +++ /dev/null @@ -1,273 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_oid_h__ -#define INCLUDE_git_oid_h__ - -#include "common.h" -#include "types.h" - -/** - * @file git2/oid.h - * @brief Git object id routines - * @defgroup git_oid Git object id routines - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** Size (in bytes) of a raw/binary oid */ -#define GIT_OID_RAWSZ 20 - -/** Size (in bytes) of a hex formatted oid */ -#define GIT_OID_HEXSZ (GIT_OID_RAWSZ * 2) - -/** Minimum length (in number of hex characters, - * i.e. packets of 4 bits) of an oid prefix */ -#define GIT_OID_MINPREFIXLEN 4 - -/** Unique identity of any object (commit, tree, blob, tag). */ -typedef struct git_oid { - /** raw binary formatted id */ - unsigned char id[GIT_OID_RAWSZ]; -} git_oid; - -/** - * Parse a hex formatted object id into a git_oid. - * - * @param out oid structure the result is written into. - * @param str input hex string; must be pointing at the start of - * the hex sequence and have at least the number of bytes - * needed for an oid encoded in hex (40 bytes). - * @return 0 or an error code - */ -GIT_EXTERN(int) git_oid_fromstr(git_oid *out, const char *str); - -/** - * Parse a hex formatted null-terminated string into a git_oid. - * - * @param out oid structure the result is written into. - * @param str input hex string; must be null-terminated. - * @return 0 or an error code - */ -GIT_EXTERN(int) git_oid_fromstrp(git_oid *out, const char *str); - -/** - * Parse N characters of a hex formatted object id into a git_oid. - * - * If N is odd, the last byte's high nibble will be read in and the - * low nibble set to zero. - * - * @param out oid structure the result is written into. - * @param str input hex string of at least size `length` - * @param length length of the input string - * @return 0 or an error code - */ -GIT_EXTERN(int) git_oid_fromstrn(git_oid *out, const char *str, size_t length); - -/** - * Copy an already raw oid into a git_oid structure. - * - * @param out oid structure the result is written into. - * @param raw the raw input bytes to be copied. - * @return 0 on success or error code - */ -GIT_EXTERN(int) git_oid_fromraw(git_oid *out, const unsigned char *raw); - -/** - * Format a git_oid into a hex string. - * - * @param out output hex string; must be pointing at the start of - * the hex sequence and have at least the number of bytes - * needed for an oid encoded in hex (40 bytes). Only the - * oid digits are written; a '\\0' terminator must be added - * by the caller if it is required. - * @param id oid structure to format. - * @return 0 on success or error code - */ -GIT_EXTERN(int) git_oid_fmt(char *out, const git_oid *id); - -/** - * Format a git_oid into a partial hex string. - * - * @param out output hex string; you say how many bytes to write. - * If the number of bytes is > GIT_OID_HEXSZ, extra bytes - * will be zeroed; if not, a '\0' terminator is NOT added. - * @param n number of characters to write into out string - * @param id oid structure to format. - * @return 0 on success or error code - */ -GIT_EXTERN(int) git_oid_nfmt(char *out, size_t n, const git_oid *id); - -/** - * Format a git_oid into a loose-object path string. - * - * The resulting string is "aa/...", where "aa" is the first two - * hex digits of the oid and "..." is the remaining 38 digits. - * - * @param out output hex string; must be pointing at the start of - * the hex sequence and have at least the number of bytes - * needed for an oid encoded in hex (41 bytes). Only the - * oid digits are written; a '\\0' terminator must be added - * by the caller if it is required. - * @param id oid structure to format. - * @return 0 on success, non-zero callback return value, or error code - */ -GIT_EXTERN(int) git_oid_pathfmt(char *out, const git_oid *id); - -/** - * Format a git_oid into a statically allocated c-string. - * - * The c-string is owned by the library and should not be freed - * by the user. If libgit2 is built with thread support, the string - * will be stored in TLS (i.e. one buffer per thread) to allow for - * concurrent calls of the function. - * - * @param oid The oid structure to format - * @return the c-string - */ -GIT_EXTERN(char *) git_oid_tostr_s(const git_oid *oid); - -/** - * Format a git_oid into a buffer as a hex format c-string. - * - * If the buffer is smaller than GIT_OID_HEXSZ+1, then the resulting - * oid c-string will be truncated to n-1 characters (but will still be - * NUL-byte terminated). - * - * If there are any input parameter errors (out == NULL, n == 0, oid == - * NULL), then a pointer to an empty string is returned, so that the - * return value can always be printed. - * - * @param out the buffer into which the oid string is output. - * @param n the size of the out buffer. - * @param id the oid structure to format. - * @return the out buffer pointer, assuming no input parameter - * errors, otherwise a pointer to an empty string. - */ -GIT_EXTERN(char *) git_oid_tostr(char *out, size_t n, const git_oid *id); - -/** - * Copy an oid from one structure to another. - * - * @param out oid structure the result is written into. - * @param src oid structure to copy from. - * @return 0 on success or error code - */ -GIT_EXTERN(int) git_oid_cpy(git_oid *out, const git_oid *src); - -/** - * Compare two oid structures. - * - * @param a first oid structure. - * @param b second oid structure. - * @return <0, 0, >0 if a < b, a == b, a > b. - */ -GIT_EXTERN(int) git_oid_cmp(const git_oid *a, const git_oid *b); - -/** - * Compare two oid structures for equality - * - * @param a first oid structure. - * @param b second oid structure. - * @return true if equal, false otherwise - */ -GIT_EXTERN(int) git_oid_equal(const git_oid *a, const git_oid *b); - -/** - * Compare the first 'len' hexadecimal characters (packets of 4 bits) - * of two oid structures. - * - * @param a first oid structure. - * @param b second oid structure. - * @param len the number of hex chars to compare - * @return 0 in case of a match - */ -GIT_EXTERN(int) git_oid_ncmp(const git_oid *a, const git_oid *b, size_t len); - -/** - * Check if an oid equals an hex formatted object id. - * - * @param id oid structure. - * @param str input hex string of an object id. - * @return 0 in case of a match, -1 otherwise. - */ -GIT_EXTERN(int) git_oid_streq(const git_oid *id, const char *str); - -/** - * Compare an oid to an hex formatted object id. - * - * @param id oid structure. - * @param str input hex string of an object id. - * @return -1 if str is not valid, <0 if id sorts before str, - * 0 if id matches str, >0 if id sorts after str. - */ -GIT_EXTERN(int) git_oid_strcmp(const git_oid *id, const char *str); - -/** - * Check is an oid is all zeros. - * - * @return 1 if all zeros, 0 otherwise. - */ -GIT_EXTERN(int) git_oid_is_zero(const git_oid *id); - -/** - * OID Shortener object - */ -typedef struct git_oid_shorten git_oid_shorten; - -/** - * Create a new OID shortener. - * - * The OID shortener is used to process a list of OIDs - * in text form and return the shortest length that would - * uniquely identify all of them. - * - * E.g. look at the result of `git log --abbrev`. - * - * @param min_length The minimal length for all identifiers, - * which will be used even if shorter OIDs would still - * be unique. - * @return a `git_oid_shorten` instance, NULL if OOM - */ -GIT_EXTERN(git_oid_shorten *) git_oid_shorten_new(size_t min_length); - -/** - * Add a new OID to set of shortened OIDs and calculate - * the minimal length to uniquely identify all the OIDs in - * the set. - * - * The OID is expected to be a 40-char hexadecimal string. - * The OID is owned by the user and will not be modified - * or freed. - * - * For performance reasons, there is a hard-limit of how many - * OIDs can be added to a single set (around ~32000, assuming - * a mostly randomized distribution), which should be enough - * for any kind of program, and keeps the algorithm fast and - * memory-efficient. - * - * Attempting to add more than those OIDs will result in a - * GIT_ERROR_INVALID error - * - * @param os a `git_oid_shorten` instance - * @param text_id an OID in text form - * @return the minimal length to uniquely identify all OIDs - * added so far to the set; or an error code (<0) if an - * error occurs. - */ -GIT_EXTERN(int) git_oid_shorten_add(git_oid_shorten *os, const char *text_id); - -/** - * Free an OID shortener instance - * - * @param os a `git_oid_shorten` instance - */ -GIT_EXTERN(void) git_oid_shorten_free(git_oid_shorten *os); - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/oidarray.h b/libgit2/headers/git2/oidarray.h deleted file mode 100644 index 94fc58d..0000000 --- a/libgit2/headers/git2/oidarray.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_oidarray_h__ -#define INCLUDE_git_oidarray_h__ - -#include "common.h" -#include "oid.h" - -GIT_BEGIN_DECL - -/** Array of object ids */ -typedef struct git_oidarray { - git_oid *ids; - size_t count; -} git_oidarray; - -/** - * Free the object IDs contained in an oid_array. This method should - * be called on `git_oidarray` objects that were provided by the - * library. Not doing so will result in a memory leak. - * - * This does not free the `git_oidarray` itself, since the library will - * never allocate that object directly itself. - * - * @param array git_oidarray from which to free oid data - */ -GIT_EXTERN(void) git_oidarray_dispose(git_oidarray *array); - -/** @} */ -GIT_END_DECL - -#endif - diff --git a/libgit2/headers/git2/pack.h b/libgit2/headers/git2/pack.h deleted file mode 100644 index 3b9beb6..0000000 --- a/libgit2/headers/git2/pack.h +++ /dev/null @@ -1,251 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_pack_h__ -#define INCLUDE_git_pack_h__ - -#include "common.h" -#include "oid.h" -#include "indexer.h" - -/** - * @file git2/pack.h - * @brief Git pack management routines - * - * Packing objects - * --------------- - * - * Creation of packfiles requires two steps: - * - * - First, insert all the objects you want to put into the packfile - * using `git_packbuilder_insert` and `git_packbuilder_insert_tree`. - * It's important to add the objects in recency order ("in the order - * that they are 'reachable' from head"). - * - * "ANY order will give you a working pack, ... [but it is] the thing - * that gives packs good locality. It keeps the objects close to the - * head (whether they are old or new, but they are _reachable_ from the - * head) at the head of the pack. So packs actually have absolutely - * _wonderful_ IO patterns." - Linus Torvalds - * git.git/Documentation/technical/pack-heuristics.txt - * - * - Second, use `git_packbuilder_write` or `git_packbuilder_foreach` to - * write the resulting packfile. - * - * libgit2 will take care of the delta ordering and generation. - * `git_packbuilder_set_threads` can be used to adjust the number of - * threads used for the process. - * - * See tests/pack/packbuilder.c for an example. - * - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Stages that are reported by the packbuilder progress callback. - */ -typedef enum { - GIT_PACKBUILDER_ADDING_OBJECTS = 0, - GIT_PACKBUILDER_DELTAFICATION = 1, -} git_packbuilder_stage_t; - -/** - * Initialize a new packbuilder - * - * @param out The new packbuilder object - * @param repo The repository - * - * @return 0 or an error code - */ -GIT_EXTERN(int) git_packbuilder_new(git_packbuilder **out, git_repository *repo); - -/** - * Set number of threads to spawn - * - * By default, libgit2 won't spawn any threads at all; - * when set to 0, libgit2 will autodetect the number of - * CPUs. - * - * @param pb The packbuilder - * @param n Number of threads to spawn - * @return number of actual threads to be used - */ -GIT_EXTERN(unsigned int) git_packbuilder_set_threads(git_packbuilder *pb, unsigned int n); - -/** - * Insert a single object - * - * For an optimal pack it's mandatory to insert objects in recency order, - * commits followed by trees and blobs. - * - * @param pb The packbuilder - * @param id The oid of the commit - * @param name The name; might be NULL - * - * @return 0 or an error code - */ -GIT_EXTERN(int) git_packbuilder_insert(git_packbuilder *pb, const git_oid *id, const char *name); - -/** - * Insert a root tree object - * - * This will add the tree as well as all referenced trees and blobs. - * - * @param pb The packbuilder - * @param id The oid of the root tree - * - * @return 0 or an error code - */ -GIT_EXTERN(int) git_packbuilder_insert_tree(git_packbuilder *pb, const git_oid *id); - -/** - * Insert a commit object - * - * This will add a commit as well as the completed referenced tree. - * - * @param pb The packbuilder - * @param id The oid of the commit - * - * @return 0 or an error code - */ -GIT_EXTERN(int) git_packbuilder_insert_commit(git_packbuilder *pb, const git_oid *id); - -/** - * Insert objects as given by the walk - * - * Those commits and all objects they reference will be inserted into - * the packbuilder. - * - * @param pb the packbuilder - * @param walk the revwalk to use to fill the packbuilder - * - * @return 0 or an error code - */ -GIT_EXTERN(int) git_packbuilder_insert_walk(git_packbuilder *pb, git_revwalk *walk); - -/** - * Recursively insert an object and its referenced objects - * - * Insert the object as well as any object it references. - * - * @param pb the packbuilder - * @param id the id of the root object to insert - * @param name optional name for the object - * @return 0 or an error code - */ -GIT_EXTERN(int) git_packbuilder_insert_recur(git_packbuilder *pb, const git_oid *id, const char *name); - -/** - * Write the contents of the packfile to an in-memory buffer - * - * The contents of the buffer will become a valid packfile, even though there - * will be no attached index - * - * @param buf Buffer where to write the packfile - * @param pb The packbuilder - */ -GIT_EXTERN(int) git_packbuilder_write_buf(git_buf *buf, git_packbuilder *pb); - -/** - * Write the new pack and corresponding index file to path. - * - * @param pb The packbuilder - * @param path Path to the directory where the packfile and index should be stored, or NULL for default location - * @param mode permissions to use creating a packfile or 0 for defaults - * @param progress_cb function to call with progress information from the indexer (optional) - * @param progress_cb_payload payload for the progress callback (optional) - * - * @return 0 or an error code - */ -GIT_EXTERN(int) git_packbuilder_write( - git_packbuilder *pb, - const char *path, - unsigned int mode, - git_indexer_progress_cb progress_cb, - void *progress_cb_payload); - -/** -* Get the packfile's hash -* -* A packfile's name is derived from the sorted hashing of all object -* names. This is only correct after the packfile has been written. -* -* @param pb The packbuilder object -*/ -GIT_EXTERN(const git_oid *) git_packbuilder_hash(git_packbuilder *pb); - -/** - * Callback used to iterate over packed objects - * - * @see git_packbuilder_foreach - * - * @param buf A pointer to the object's data - * @param size The size of the underlying object - * @param payload Payload passed to git_packbuilder_foreach - * @return non-zero to terminate the iteration - */ -typedef int GIT_CALLBACK(git_packbuilder_foreach_cb)(void *buf, size_t size, void *payload); - -/** - * Create the new pack and pass each object to the callback - * - * @param pb the packbuilder - * @param cb the callback to call with each packed object's buffer - * @param payload the callback's data - * @return 0 or an error code - */ -GIT_EXTERN(int) git_packbuilder_foreach(git_packbuilder *pb, git_packbuilder_foreach_cb cb, void *payload); - -/** - * Get the total number of objects the packbuilder will write out - * - * @param pb the packbuilder - * @return the number of objects in the packfile - */ -GIT_EXTERN(size_t) git_packbuilder_object_count(git_packbuilder *pb); - -/** - * Get the number of objects the packbuilder has already written out - * - * @param pb the packbuilder - * @return the number of objects which have already been written - */ -GIT_EXTERN(size_t) git_packbuilder_written(git_packbuilder *pb); - -/** Packbuilder progress notification function */ -typedef int GIT_CALLBACK(git_packbuilder_progress)( - int stage, - uint32_t current, - uint32_t total, - void *payload); - -/** - * Set the callbacks for a packbuilder - * - * @param pb The packbuilder object - * @param progress_cb Function to call with progress information during - * pack building. Be aware that this is called inline with pack building - * operations, so performance may be affected. - * @param progress_cb_payload Payload for progress callback. - * @return 0 or an error code - */ -GIT_EXTERN(int) git_packbuilder_set_callbacks( - git_packbuilder *pb, - git_packbuilder_progress progress_cb, - void *progress_cb_payload); - -/** - * Free the packbuilder and all associated data - * - * @param pb The packbuilder - */ -GIT_EXTERN(void) git_packbuilder_free(git_packbuilder *pb); - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/patch.h b/libgit2/headers/git2/patch.h deleted file mode 100644 index fde9659..0000000 --- a/libgit2/headers/git2/patch.h +++ /dev/null @@ -1,282 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_patch_h__ -#define INCLUDE_git_patch_h__ - -#include "common.h" -#include "types.h" -#include "oid.h" -#include "diff.h" - -/** - * @file git2/patch.h - * @brief Patch handling routines. - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * The diff patch is used to store all the text diffs for a delta. - * - * You can easily loop over the content of patches and get information about - * them. - */ -typedef struct git_patch git_patch; - -/** - * Get the repository associated with this patch. May be NULL. - * - * @param patch the patch - * @return a pointer to the repository - */ -GIT_EXTERN(git_repository *) git_patch_owner(const git_patch *patch); - -/** - * Return a patch for an entry in the diff list. - * - * The `git_patch` is a newly created object contains the text diffs - * for the delta. You have to call `git_patch_free()` when you are - * done with it. You can use the patch object to loop over all the hunks - * and lines in the diff of the one delta. - * - * For an unchanged file or a binary file, no `git_patch` will be - * created, the output will be set to NULL, and the `binary` flag will be - * set true in the `git_diff_delta` structure. - * - * It is okay to pass NULL for either of the output parameters; if you pass - * NULL for the `git_patch`, then the text diff will not be calculated. - * - * @param out Output parameter for the delta patch object - * @param diff Diff list object - * @param idx Index into diff list - * @return 0 on success, other value < 0 on error - */ -GIT_EXTERN(int) git_patch_from_diff( - git_patch **out, git_diff *diff, size_t idx); - -/** - * Directly generate a patch from the difference between two blobs. - * - * This is just like `git_diff_blobs()` except it generates a patch object - * for the difference instead of directly making callbacks. You can use the - * standard `git_patch` accessor functions to read the patch data, and - * you must call `git_patch_free()` on the patch when done. - * - * @param out The generated patch; NULL on error - * @param old_blob Blob for old side of diff, or NULL for empty blob - * @param old_as_path Treat old blob as if it had this filename; can be NULL - * @param new_blob Blob for new side of diff, or NULL for empty blob - * @param new_as_path Treat new blob as if it had this filename; can be NULL - * @param opts Options for diff, or NULL for default options - * @return 0 on success or error code < 0 - */ -GIT_EXTERN(int) git_patch_from_blobs( - git_patch **out, - const git_blob *old_blob, - const char *old_as_path, - const git_blob *new_blob, - const char *new_as_path, - const git_diff_options *opts); - -/** - * Directly generate a patch from the difference between a blob and a buffer. - * - * This is just like `git_diff_blob_to_buffer()` except it generates a patch - * object for the difference instead of directly making callbacks. You can - * use the standard `git_patch` accessor functions to read the patch - * data, and you must call `git_patch_free()` on the patch when done. - * - * @param out The generated patch; NULL on error - * @param old_blob Blob for old side of diff, or NULL for empty blob - * @param old_as_path Treat old blob as if it had this filename; can be NULL - * @param buffer Raw data for new side of diff, or NULL for empty - * @param buffer_len Length of raw data for new side of diff - * @param buffer_as_path Treat buffer as if it had this filename; can be NULL - * @param opts Options for diff, or NULL for default options - * @return 0 on success or error code < 0 - */ -GIT_EXTERN(int) git_patch_from_blob_and_buffer( - git_patch **out, - const git_blob *old_blob, - const char *old_as_path, - const void *buffer, - size_t buffer_len, - const char *buffer_as_path, - const git_diff_options *opts); - -/** - * Directly generate a patch from the difference between two buffers. - * - * This is just like `git_diff_buffers()` except it generates a patch - * object for the difference instead of directly making callbacks. You can - * use the standard `git_patch` accessor functions to read the patch - * data, and you must call `git_patch_free()` on the patch when done. - * - * @param out The generated patch; NULL on error - * @param old_buffer Raw data for old side of diff, or NULL for empty - * @param old_len Length of the raw data for old side of the diff - * @param old_as_path Treat old buffer as if it had this filename; can be NULL - * @param new_buffer Raw data for new side of diff, or NULL for empty - * @param new_len Length of raw data for new side of diff - * @param new_as_path Treat buffer as if it had this filename; can be NULL - * @param opts Options for diff, or NULL for default options - * @return 0 on success or error code < 0 - */ -GIT_EXTERN(int) git_patch_from_buffers( - git_patch **out, - const void *old_buffer, - size_t old_len, - const char *old_as_path, - const void *new_buffer, - size_t new_len, - const char *new_as_path, - const git_diff_options *opts); - -/** - * Free a git_patch object. - */ -GIT_EXTERN(void) git_patch_free(git_patch *patch); - -/** - * Get the delta associated with a patch. This delta points to internal - * data and you do not have to release it when you are done with it. - */ -GIT_EXTERN(const git_diff_delta *) git_patch_get_delta(const git_patch *patch); - -/** - * Get the number of hunks in a patch - */ -GIT_EXTERN(size_t) git_patch_num_hunks(const git_patch *patch); - -/** - * Get line counts of each type in a patch. - * - * This helps imitate a diff --numstat type of output. For that purpose, - * you only need the `total_additions` and `total_deletions` values, but we - * include the `total_context` line count in case you want the total number - * of lines of diff output that will be generated. - * - * All outputs are optional. Pass NULL if you don't need a particular count. - * - * @param total_context Count of context lines in output, can be NULL. - * @param total_additions Count of addition lines in output, can be NULL. - * @param total_deletions Count of deletion lines in output, can be NULL. - * @param patch The git_patch object - * @return 0 on success, <0 on error - */ -GIT_EXTERN(int) git_patch_line_stats( - size_t *total_context, - size_t *total_additions, - size_t *total_deletions, - const git_patch *patch); - -/** - * Get the information about a hunk in a patch - * - * Given a patch and a hunk index into the patch, this returns detailed - * information about that hunk. Any of the output pointers can be passed - * as NULL if you don't care about that particular piece of information. - * - * @param out Output pointer to git_diff_hunk of hunk - * @param lines_in_hunk Output count of total lines in this hunk - * @param patch Input pointer to patch object - * @param hunk_idx Input index of hunk to get information about - * @return 0 on success, GIT_ENOTFOUND if hunk_idx out of range, <0 on error - */ -GIT_EXTERN(int) git_patch_get_hunk( - const git_diff_hunk **out, - size_t *lines_in_hunk, - git_patch *patch, - size_t hunk_idx); - -/** - * Get the number of lines in a hunk. - * - * @param patch The git_patch object - * @param hunk_idx Index of the hunk - * @return Number of lines in hunk or GIT_ENOTFOUND if invalid hunk index - */ -GIT_EXTERN(int) git_patch_num_lines_in_hunk( - const git_patch *patch, - size_t hunk_idx); - -/** - * Get data about a line in a hunk of a patch. - * - * Given a patch, a hunk index, and a line index in the hunk, this - * will return a lot of details about that line. If you pass a hunk - * index larger than the number of hunks or a line index larger than - * the number of lines in the hunk, this will return -1. - * - * @param out The git_diff_line data for this line - * @param patch The patch to look in - * @param hunk_idx The index of the hunk - * @param line_of_hunk The index of the line in the hunk - * @return 0 on success, <0 on failure - */ -GIT_EXTERN(int) git_patch_get_line_in_hunk( - const git_diff_line **out, - git_patch *patch, - size_t hunk_idx, - size_t line_of_hunk); - -/** - * Look up size of patch diff data in bytes - * - * This returns the raw size of the patch data. This only includes the - * actual data from the lines of the diff, not the file or hunk headers. - * - * If you pass `include_context` as true (non-zero), this will be the size - * of all of the diff output; if you pass it as false (zero), this will - * only include the actual changed lines (as if `context_lines` was 0). - * - * @param patch A git_patch representing changes to one file - * @param include_context Include context lines in size if non-zero - * @param include_hunk_headers Include hunk header lines if non-zero - * @param include_file_headers Include file header lines if non-zero - * @return The number of bytes of data - */ -GIT_EXTERN(size_t) git_patch_size( - git_patch *patch, - int include_context, - int include_hunk_headers, - int include_file_headers); - -/** - * Serialize the patch to text via callback. - * - * Returning a non-zero value from the callback will terminate the iteration - * and return that value to the caller. - * - * @param patch A git_patch representing changes to one file - * @param print_cb Callback function to output lines of the patch. Will be - * called for file headers, hunk headers, and diff lines. - * @param payload Reference pointer that will be passed to your callbacks. - * @return 0 on success, non-zero callback return value, or error code - */ -GIT_EXTERN(int) git_patch_print( - git_patch *patch, - git_diff_line_cb print_cb, - void *payload); - -/** - * Get the content of a patch as a single diff text. - * - * @param out The git_buf to be filled in - * @param patch A git_patch representing changes to one file - * @return 0 on success, <0 on failure. - */ -GIT_EXTERN(int) git_patch_to_buf( - git_buf *out, - git_patch *patch); - -GIT_END_DECL - -/**@}*/ - -#endif diff --git a/libgit2/headers/git2/pathspec.h b/libgit2/headers/git2/pathspec.h deleted file mode 100644 index 3299657..0000000 --- a/libgit2/headers/git2/pathspec.h +++ /dev/null @@ -1,280 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_pathspec_h__ -#define INCLUDE_git_pathspec_h__ - -#include "common.h" -#include "types.h" -#include "strarray.h" -#include "diff.h" - -GIT_BEGIN_DECL - -/** - * Compiled pathspec - */ -typedef struct git_pathspec git_pathspec; - -/** - * List of filenames matching a pathspec - */ -typedef struct git_pathspec_match_list git_pathspec_match_list; - -/** - * Options controlling how pathspec match should be executed - */ -typedef enum { - GIT_PATHSPEC_DEFAULT = 0, - - /** - * GIT_PATHSPEC_IGNORE_CASE forces match to ignore case; otherwise - * match will use native case sensitivity of platform filesystem - */ - GIT_PATHSPEC_IGNORE_CASE = (1u << 0), - - /** - * GIT_PATHSPEC_USE_CASE forces case sensitive match; otherwise - * match will use native case sensitivity of platform filesystem - */ - GIT_PATHSPEC_USE_CASE = (1u << 1), - - /** - * GIT_PATHSPEC_NO_GLOB disables glob patterns and just uses simple - * string comparison for matching - */ - GIT_PATHSPEC_NO_GLOB = (1u << 2), - - /** - * GIT_PATHSPEC_NO_MATCH_ERROR means the match functions return error - * code GIT_ENOTFOUND if no matches are found; otherwise no matches is - * still success (return 0) but `git_pathspec_match_list_entrycount` - * will indicate 0 matches. - */ - GIT_PATHSPEC_NO_MATCH_ERROR = (1u << 3), - - /** - * GIT_PATHSPEC_FIND_FAILURES means that the `git_pathspec_match_list` - * should track which patterns matched which files so that at the end of - * the match we can identify patterns that did not match any files. - */ - GIT_PATHSPEC_FIND_FAILURES = (1u << 4), - - /** - * GIT_PATHSPEC_FAILURES_ONLY means that the `git_pathspec_match_list` - * does not need to keep the actual matching filenames. Use this to - * just test if there were any matches at all or in combination with - * GIT_PATHSPEC_FIND_FAILURES to validate a pathspec. - */ - GIT_PATHSPEC_FAILURES_ONLY = (1u << 5), -} git_pathspec_flag_t; - -/** - * Compile a pathspec - * - * @param out Output of the compiled pathspec - * @param pathspec A git_strarray of the paths to match - * @return 0 on success, <0 on failure - */ -GIT_EXTERN(int) git_pathspec_new( - git_pathspec **out, const git_strarray *pathspec); - -/** - * Free a pathspec - * - * @param ps The compiled pathspec - */ -GIT_EXTERN(void) git_pathspec_free(git_pathspec *ps); - -/** - * Try to match a path against a pathspec - * - * Unlike most of the other pathspec matching functions, this will not - * fall back on the native case-sensitivity for your platform. You must - * explicitly pass flags to control case sensitivity or else this will - * fall back on being case sensitive. - * - * @param ps The compiled pathspec - * @param flags Combination of git_pathspec_flag_t options to control match - * @param path The pathname to attempt to match - * @return 1 is path matches spec, 0 if it does not - */ -GIT_EXTERN(int) git_pathspec_matches_path( - const git_pathspec *ps, uint32_t flags, const char *path); - -/** - * Match a pathspec against the working directory of a repository. - * - * This matches the pathspec against the current files in the working - * directory of the repository. It is an error to invoke this on a bare - * repo. This handles git ignores (i.e. ignored files will not be - * considered to match the `pathspec` unless the file is tracked in the - * index). - * - * If `out` is not NULL, this returns a `git_patchspec_match_list`. That - * contains the list of all matched filenames (unless you pass the - * `GIT_PATHSPEC_FAILURES_ONLY` flag) and may also contain the list of - * pathspecs with no match (if you used the `GIT_PATHSPEC_FIND_FAILURES` - * flag). You must call `git_pathspec_match_list_free()` on this object. - * - * @param out Output list of matches; pass NULL to just get return value - * @param repo The repository in which to match; bare repo is an error - * @param flags Combination of git_pathspec_flag_t options to control match - * @param ps Pathspec to be matched - * @return 0 on success, -1 on error, GIT_ENOTFOUND if no matches and - * the GIT_PATHSPEC_NO_MATCH_ERROR flag was given - */ -GIT_EXTERN(int) git_pathspec_match_workdir( - git_pathspec_match_list **out, - git_repository *repo, - uint32_t flags, - git_pathspec *ps); - -/** - * Match a pathspec against entries in an index. - * - * This matches the pathspec against the files in the repository index. - * - * NOTE: At the moment, the case sensitivity of this match is controlled - * by the current case-sensitivity of the index object itself and the - * USE_CASE and IGNORE_CASE flags will have no effect. This behavior will - * be corrected in a future release. - * - * If `out` is not NULL, this returns a `git_patchspec_match_list`. That - * contains the list of all matched filenames (unless you pass the - * `GIT_PATHSPEC_FAILURES_ONLY` flag) and may also contain the list of - * pathspecs with no match (if you used the `GIT_PATHSPEC_FIND_FAILURES` - * flag). You must call `git_pathspec_match_list_free()` on this object. - * - * @param out Output list of matches; pass NULL to just get return value - * @param index The index to match against - * @param flags Combination of git_pathspec_flag_t options to control match - * @param ps Pathspec to be matched - * @return 0 on success, -1 on error, GIT_ENOTFOUND if no matches and - * the GIT_PATHSPEC_NO_MATCH_ERROR flag is used - */ -GIT_EXTERN(int) git_pathspec_match_index( - git_pathspec_match_list **out, - git_index *index, - uint32_t flags, - git_pathspec *ps); - -/** - * Match a pathspec against files in a tree. - * - * This matches the pathspec against the files in the given tree. - * - * If `out` is not NULL, this returns a `git_patchspec_match_list`. That - * contains the list of all matched filenames (unless you pass the - * `GIT_PATHSPEC_FAILURES_ONLY` flag) and may also contain the list of - * pathspecs with no match (if you used the `GIT_PATHSPEC_FIND_FAILURES` - * flag). You must call `git_pathspec_match_list_free()` on this object. - * - * @param out Output list of matches; pass NULL to just get return value - * @param tree The root-level tree to match against - * @param flags Combination of git_pathspec_flag_t options to control match - * @param ps Pathspec to be matched - * @return 0 on success, -1 on error, GIT_ENOTFOUND if no matches and - * the GIT_PATHSPEC_NO_MATCH_ERROR flag is used - */ -GIT_EXTERN(int) git_pathspec_match_tree( - git_pathspec_match_list **out, - git_tree *tree, - uint32_t flags, - git_pathspec *ps); - -/** - * Match a pathspec against files in a diff list. - * - * This matches the pathspec against the files in the given diff list. - * - * If `out` is not NULL, this returns a `git_patchspec_match_list`. That - * contains the list of all matched filenames (unless you pass the - * `GIT_PATHSPEC_FAILURES_ONLY` flag) and may also contain the list of - * pathspecs with no match (if you used the `GIT_PATHSPEC_FIND_FAILURES` - * flag). You must call `git_pathspec_match_list_free()` on this object. - * - * @param out Output list of matches; pass NULL to just get return value - * @param diff A generated diff list - * @param flags Combination of git_pathspec_flag_t options to control match - * @param ps Pathspec to be matched - * @return 0 on success, -1 on error, GIT_ENOTFOUND if no matches and - * the GIT_PATHSPEC_NO_MATCH_ERROR flag is used - */ -GIT_EXTERN(int) git_pathspec_match_diff( - git_pathspec_match_list **out, - git_diff *diff, - uint32_t flags, - git_pathspec *ps); - -/** - * Free memory associates with a git_pathspec_match_list - * - * @param m The git_pathspec_match_list to be freed - */ -GIT_EXTERN(void) git_pathspec_match_list_free(git_pathspec_match_list *m); - -/** - * Get the number of items in a match list. - * - * @param m The git_pathspec_match_list object - * @return Number of items in match list - */ -GIT_EXTERN(size_t) git_pathspec_match_list_entrycount( - const git_pathspec_match_list *m); - -/** - * Get a matching filename by position. - * - * This routine cannot be used if the match list was generated by - * `git_pathspec_match_diff`. If so, it will always return NULL. - * - * @param m The git_pathspec_match_list object - * @param pos The index into the list - * @return The filename of the match - */ -GIT_EXTERN(const char *) git_pathspec_match_list_entry( - const git_pathspec_match_list *m, size_t pos); - -/** - * Get a matching diff delta by position. - * - * This routine can only be used if the match list was generated by - * `git_pathspec_match_diff`. Otherwise it will always return NULL. - * - * @param m The git_pathspec_match_list object - * @param pos The index into the list - * @return The filename of the match - */ -GIT_EXTERN(const git_diff_delta *) git_pathspec_match_list_diff_entry( - const git_pathspec_match_list *m, size_t pos); - -/** - * Get the number of pathspec items that did not match. - * - * This will be zero unless you passed GIT_PATHSPEC_FIND_FAILURES when - * generating the git_pathspec_match_list. - * - * @param m The git_pathspec_match_list object - * @return Number of items in original pathspec that had no matches - */ -GIT_EXTERN(size_t) git_pathspec_match_list_failed_entrycount( - const git_pathspec_match_list *m); - -/** - * Get an original pathspec string that had no matches. - * - * This will be return NULL for positions out of range. - * - * @param m The git_pathspec_match_list object - * @param pos The index into the failed items - * @return The pathspec pattern that didn't match anything - */ -GIT_EXTERN(const char *) git_pathspec_match_list_failed_entry( - const git_pathspec_match_list *m, size_t pos); - -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/proxy.h b/libgit2/headers/git2/proxy.h deleted file mode 100644 index 653425d..0000000 --- a/libgit2/headers/git2/proxy.h +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_proxy_h__ -#define INCLUDE_git_proxy_h__ - -#include "common.h" - -#include "cert.h" -#include "credential.h" - -GIT_BEGIN_DECL - -/** - * The type of proxy to use. - */ -typedef enum { - /** - * Do not attempt to connect through a proxy - * - * If built against libcurl, it itself may attempt to connect - * to a proxy if the environment variables specify it. - */ - GIT_PROXY_NONE, - /** - * Try to auto-detect the proxy from the git configuration. - */ - GIT_PROXY_AUTO, - /** - * Connect via the URL given in the options - */ - GIT_PROXY_SPECIFIED, -} git_proxy_t; - -/** - * Options for connecting through a proxy - * - * Note that not all types may be supported, depending on the platform - * and compilation options. - */ -typedef struct { - unsigned int version; - - /** - * The type of proxy to use, by URL, auto-detect. - */ - git_proxy_t type; - - /** - * The URL of the proxy. - */ - const char *url; - - /** - * This will be called if the remote host requires - * authentication in order to connect to it. - * - * Returning GIT_PASSTHROUGH will make libgit2 behave as - * though this field isn't set. - */ - git_credential_acquire_cb credentials; - - /** - * If cert verification fails, this will be called to let the - * user make the final decision of whether to allow the - * connection to proceed. Returns 0 to allow the connection - * or a negative value to indicate an error. - */ - git_transport_certificate_check_cb certificate_check; - - /** - * Payload to be provided to the credentials and certificate - * check callbacks. - */ - void *payload; -} git_proxy_options; - -#define GIT_PROXY_OPTIONS_VERSION 1 -#define GIT_PROXY_OPTIONS_INIT {GIT_PROXY_OPTIONS_VERSION} - -/** - * Initialize git_proxy_options structure - * - * Initializes a `git_proxy_options` with default values. Equivalent to - * creating an instance with `GIT_PROXY_OPTIONS_INIT`. - * - * @param opts The `git_proxy_options` struct to initialize. - * @param version The struct version; pass `GIT_PROXY_OPTIONS_VERSION`. - * @return Zero on success; -1 on failure. - */ -GIT_EXTERN(int) git_proxy_options_init(git_proxy_options *opts, unsigned int version); - -GIT_END_DECL - -#endif diff --git a/libgit2/headers/git2/rebase.h b/libgit2/headers/git2/rebase.h deleted file mode 100644 index 11e452c..0000000 --- a/libgit2/headers/git2/rebase.h +++ /dev/null @@ -1,391 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_rebase_h__ -#define INCLUDE_git_rebase_h__ - -#include "common.h" -#include "types.h" -#include "oid.h" -#include "annotated_commit.h" -#include "merge.h" -#include "checkout.h" -#include "commit.h" - -/** - * @file git2/rebase.h - * @brief Git rebase routines - * @defgroup git_rebase Git merge routines - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Rebase options - * - * Use to tell the rebase machinery how to operate. - */ -typedef struct { - unsigned int version; - - /** - * Used by `git_rebase_init`, this will instruct other clients working - * on this rebase that you want a quiet rebase experience, which they - * may choose to provide in an application-specific manner. This has no - * effect upon libgit2 directly, but is provided for interoperability - * between Git tools. - */ - int quiet; - - /** - * Used by `git_rebase_init`, this will begin an in-memory rebase, - * which will allow callers to step through the rebase operations and - * commit the rebased changes, but will not rewind HEAD or update the - * repository to be in a rebasing state. This will not interfere with - * the working directory (if there is one). - */ - int inmemory; - - /** - * Used by `git_rebase_finish`, this is the name of the notes reference - * used to rewrite notes for rebased commits when finishing the rebase; - * if NULL, the contents of the configuration option `notes.rewriteRef` - * is examined, unless the configuration option `notes.rewrite.rebase` - * is set to false. If `notes.rewriteRef` is also NULL, notes will - * not be rewritten. - */ - const char *rewrite_notes_ref; - - /** - * Options to control how trees are merged during `git_rebase_next`. - */ - git_merge_options merge_options; - - /** - * Options to control how files are written during `git_rebase_init`, - * `git_rebase_next` and `git_rebase_abort`. Note that a minimum - * strategy of `GIT_CHECKOUT_SAFE` is defaulted in `init` and `next`, - * and a minimum strategy of `GIT_CHECKOUT_FORCE` is defaulted in - * `abort` to match git semantics. - */ - git_checkout_options checkout_options; - - /** - * Optional callback that allows users to override commit - * creation in `git_rebase_commit`. If specified, users can - * create their own commit and provide the commit ID, which - * may be useful for signing commits or otherwise customizing - * the commit creation. - * - * If this callback returns `GIT_PASSTHROUGH`, then - * `git_rebase_commit` will continue to create the commit. - */ - git_commit_create_cb commit_create_cb; - -#ifdef GIT_DEPRECATE_HARD - void *reserved; -#else - /** - * If provided, this will be called with the commit content, allowing - * a signature to be added to the rebase commit. Can be skipped with - * GIT_PASSTHROUGH. If GIT_PASSTHROUGH is returned, a commit will be made - * without a signature. - * - * This field is only used when performing git_rebase_commit. - * - * This callback is not invoked if a `git_commit_create_cb` is - * specified. - * - * This callback is deprecated; users should provide a - * creation callback as `commit_create_cb` that produces a - * commit buffer, signs it, and commits it. - */ - int (*signing_cb)(git_buf *, git_buf *, const char *, void *); -#endif - - /** - * This will be passed to each of the callbacks in this struct - * as the last parameter. - */ - void *payload; -} git_rebase_options; - -/** - * Type of rebase operation in-progress after calling `git_rebase_next`. - */ -typedef enum { - /** - * The given commit is to be cherry-picked. The client should commit - * the changes and continue if there are no conflicts. - */ - GIT_REBASE_OPERATION_PICK = 0, - - /** - * The given commit is to be cherry-picked, but the client should prompt - * the user to provide an updated commit message. - */ - GIT_REBASE_OPERATION_REWORD, - - /** - * The given commit is to be cherry-picked, but the client should stop - * to allow the user to edit the changes before committing them. - */ - GIT_REBASE_OPERATION_EDIT, - - /** - * The given commit is to be squashed into the previous commit. The - * commit message will be merged with the previous message. - */ - GIT_REBASE_OPERATION_SQUASH, - - /** - * The given commit is to be squashed into the previous commit. The - * commit message from this commit will be discarded. - */ - GIT_REBASE_OPERATION_FIXUP, - - /** - * No commit will be cherry-picked. The client should run the given - * command and (if successful) continue. - */ - GIT_REBASE_OPERATION_EXEC, -} git_rebase_operation_t; - -#define GIT_REBASE_OPTIONS_VERSION 1 -#define GIT_REBASE_OPTIONS_INIT \ - { GIT_REBASE_OPTIONS_VERSION, 0, 0, NULL, GIT_MERGE_OPTIONS_INIT, \ - GIT_CHECKOUT_OPTIONS_INIT, NULL, NULL } - -/** Indicates that a rebase operation is not (yet) in progress. */ -#define GIT_REBASE_NO_OPERATION SIZE_MAX - -/** - * A rebase operation - * - * Describes a single instruction/operation to be performed during the - * rebase. - */ -typedef struct { - /** The type of rebase operation. */ - git_rebase_operation_t type; - - /** - * The commit ID being cherry-picked. This will be populated for - * all operations except those of type `GIT_REBASE_OPERATION_EXEC`. - */ - const git_oid id; - - /** - * The executable the user has requested be run. This will only - * be populated for operations of type `GIT_REBASE_OPERATION_EXEC`. - */ - const char *exec; -} git_rebase_operation; - -/** - * Initialize git_rebase_options structure - * - * Initializes a `git_rebase_options` with default values. Equivalent to - * creating an instance with `GIT_REBASE_OPTIONS_INIT`. - * - * @param opts The `git_rebase_options` struct to initialize. - * @param version The struct version; pass `GIT_REBASE_OPTIONS_VERSION`. - * @return Zero on success; -1 on failure. - */ -GIT_EXTERN(int) git_rebase_options_init( - git_rebase_options *opts, - unsigned int version); - -/** - * Initializes a rebase operation to rebase the changes in `branch` - * relative to `upstream` onto another branch. To begin the rebase - * process, call `git_rebase_next`. When you have finished with this - * object, call `git_rebase_free`. - * - * @param out Pointer to store the rebase object - * @param repo The repository to perform the rebase - * @param branch The terminal commit to rebase, or NULL to rebase the - * current branch - * @param upstream The commit to begin rebasing from, or NULL to rebase all - * reachable commits - * @param onto The branch to rebase onto, or NULL to rebase onto the given - * upstream - * @param opts Options to specify how rebase is performed, or NULL - * @return Zero on success; -1 on failure. - */ -GIT_EXTERN(int) git_rebase_init( - git_rebase **out, - git_repository *repo, - const git_annotated_commit *branch, - const git_annotated_commit *upstream, - const git_annotated_commit *onto, - const git_rebase_options *opts); - -/** - * Opens an existing rebase that was previously started by either an - * invocation of `git_rebase_init` or by another client. - * - * @param out Pointer to store the rebase object - * @param repo The repository that has a rebase in-progress - * @param opts Options to specify how rebase is performed - * @return Zero on success; -1 on failure. - */ -GIT_EXTERN(int) git_rebase_open( - git_rebase **out, - git_repository *repo, - const git_rebase_options *opts); - -/** - * Gets the original `HEAD` ref name for merge rebases. - * - * @return The original `HEAD` ref name - */ -GIT_EXTERN(const char *) git_rebase_orig_head_name(git_rebase *rebase); - -/** - * Gets the original `HEAD` id for merge rebases. - * - * @return The original `HEAD` id - */ -GIT_EXTERN(const git_oid *) git_rebase_orig_head_id(git_rebase *rebase); - -/** - * Gets the `onto` ref name for merge rebases. - * - * @return The `onto` ref name - */ -GIT_EXTERN(const char *) git_rebase_onto_name(git_rebase *rebase); - -/** - * Gets the `onto` id for merge rebases. - * - * @return The `onto` id - */ -GIT_EXTERN(const git_oid *) git_rebase_onto_id(git_rebase *rebase); - -/** - * Gets the count of rebase operations that are to be applied. - * - * @param rebase The in-progress rebase - * @return The number of rebase operations in total - */ -GIT_EXTERN(size_t) git_rebase_operation_entrycount(git_rebase *rebase); - -/** - * Gets the index of the rebase operation that is currently being applied. - * If the first operation has not yet been applied (because you have - * called `init` but not yet `next`) then this returns - * `GIT_REBASE_NO_OPERATION`. - * - * @param rebase The in-progress rebase - * @return The index of the rebase operation currently being applied. - */ -GIT_EXTERN(size_t) git_rebase_operation_current(git_rebase *rebase); - -/** - * Gets the rebase operation specified by the given index. - * - * @param rebase The in-progress rebase - * @param idx The index of the rebase operation to retrieve - * @return The rebase operation or NULL if `idx` was out of bounds - */ -GIT_EXTERN(git_rebase_operation *) git_rebase_operation_byindex( - git_rebase *rebase, - size_t idx); - -/** - * Performs the next rebase operation and returns the information about it. - * If the operation is one that applies a patch (which is any operation except - * GIT_REBASE_OPERATION_EXEC) then the patch will be applied and the index and - * working directory will be updated with the changes. If there are conflicts, - * you will need to address those before committing the changes. - * - * @param operation Pointer to store the rebase operation that is to be performed next - * @param rebase The rebase in progress - * @return Zero on success; -1 on failure. - */ -GIT_EXTERN(int) git_rebase_next( - git_rebase_operation **operation, - git_rebase *rebase); - -/** - * Gets the index produced by the last operation, which is the result - * of `git_rebase_next` and which will be committed by the next - * invocation of `git_rebase_commit`. This is useful for resolving - * conflicts in an in-memory rebase before committing them. You must - * call `git_index_free` when you are finished with this. - * - * This is only applicable for in-memory rebases; for rebases within - * a working directory, the changes were applied to the repository's - * index. - */ -GIT_EXTERN(int) git_rebase_inmemory_index( - git_index **index, - git_rebase *rebase); - -/** - * Commits the current patch. You must have resolved any conflicts that - * were introduced during the patch application from the `git_rebase_next` - * invocation. - * - * @param id Pointer in which to store the OID of the newly created commit - * @param rebase The rebase that is in-progress - * @param author The author of the updated commit, or NULL to keep the - * author from the original commit - * @param committer The committer of the rebase - * @param message_encoding The encoding for the message in the commit, - * represented with a standard encoding name. If message is NULL, - * this should also be NULL, and the encoding from the original - * commit will be maintained. If message is specified, this may be - * NULL to indicate that "UTF-8" is to be used. - * @param message The message for this commit, or NULL to use the message - * from the original commit. - * @return Zero on success, GIT_EUNMERGED if there are unmerged changes in - * the index, GIT_EAPPLIED if the current commit has already - * been applied to the upstream and there is nothing to commit, - * -1 on failure. - */ -GIT_EXTERN(int) git_rebase_commit( - git_oid *id, - git_rebase *rebase, - const git_signature *author, - const git_signature *committer, - const char *message_encoding, - const char *message); - -/** - * Aborts a rebase that is currently in progress, resetting the repository - * and working directory to their state before rebase began. - * - * @param rebase The rebase that is in-progress - * @return Zero on success; GIT_ENOTFOUND if a rebase is not in progress, - * -1 on other errors. - */ -GIT_EXTERN(int) git_rebase_abort(git_rebase *rebase); - -/** - * Finishes a rebase that is currently in progress once all patches have - * been applied. - * - * @param rebase The rebase that is in-progress - * @param signature The identity that is finishing the rebase (optional) - * @return Zero on success; -1 on error - */ -GIT_EXTERN(int) git_rebase_finish( - git_rebase *rebase, - const git_signature *signature); - -/** - * Frees the `git_rebase` object. - * - * @param rebase The rebase object - */ -GIT_EXTERN(void) git_rebase_free(git_rebase *rebase); - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/refdb.h b/libgit2/headers/git2/refdb.h deleted file mode 100644 index a315876..0000000 --- a/libgit2/headers/git2/refdb.h +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_refdb_h__ -#define INCLUDE_git_refdb_h__ - -#include "common.h" -#include "types.h" -#include "oid.h" -#include "refs.h" - -/** - * @file git2/refdb.h - * @brief Git custom refs backend functions - * @defgroup git_refdb Git custom refs backend API - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Create a new reference database with no backends. - * - * Before the Ref DB can be used for read/writing, a custom database - * backend must be manually set using `git_refdb_set_backend()` - * - * @param out location to store the database pointer, if opened. - * Set to NULL if the open failed. - * @param repo the repository - * @return 0 or an error code - */ -GIT_EXTERN(int) git_refdb_new(git_refdb **out, git_repository *repo); - -/** - * Create a new reference database and automatically add - * the default backends: - * - * - git_refdb_dir: read and write loose and packed refs - * from disk, assuming the repository dir as the folder - * - * @param out location to store the database pointer, if opened. - * Set to NULL if the open failed. - * @param repo the repository - * @return 0 or an error code - */ -GIT_EXTERN(int) git_refdb_open(git_refdb **out, git_repository *repo); - -/** - * Suggests that the given refdb compress or optimize its references. - * This mechanism is implementation specific. For on-disk reference - * databases, for example, this may pack all loose references. - */ -GIT_EXTERN(int) git_refdb_compress(git_refdb *refdb); - -/** - * Close an open reference database. - * - * @param refdb reference database pointer or NULL - */ -GIT_EXTERN(void) git_refdb_free(git_refdb *refdb); - -/** @} */ -GIT_END_DECL - -#endif diff --git a/libgit2/headers/git2/reflog.h b/libgit2/headers/git2/reflog.h deleted file mode 100644 index c949a28..0000000 --- a/libgit2/headers/git2/reflog.h +++ /dev/null @@ -1,170 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_reflog_h__ -#define INCLUDE_git_reflog_h__ - -#include "common.h" -#include "types.h" -#include "oid.h" - -/** - * @file git2/reflog.h - * @brief Git reflog management routines - * @defgroup git_reflog Git reflog management routines - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Read the reflog for the given reference - * - * If there is no reflog file for the given - * reference yet, an empty reflog object will - * be returned. - * - * The reflog must be freed manually by using - * git_reflog_free(). - * - * @param out pointer to reflog - * @param repo the repostiory - * @param name reference to look up - * @return 0 or an error code - */ -GIT_EXTERN(int) git_reflog_read(git_reflog **out, git_repository *repo, const char *name); - -/** - * Write an existing in-memory reflog object back to disk - * using an atomic file lock. - * - * @param reflog an existing reflog object - * @return 0 or an error code - */ -GIT_EXTERN(int) git_reflog_write(git_reflog *reflog); - -/** - * Add a new entry to the in-memory reflog. - * - * `msg` is optional and can be NULL. - * - * @param reflog an existing reflog object - * @param id the OID the reference is now pointing to - * @param committer the signature of the committer - * @param msg the reflog message - * @return 0 or an error code - */ -GIT_EXTERN(int) git_reflog_append(git_reflog *reflog, const git_oid *id, const git_signature *committer, const char *msg); - -/** - * Rename a reflog - * - * The reflog to be renamed is expected to already exist - * - * The new name will be checked for validity. - * See `git_reference_create_symbolic()` for rules about valid names. - * - * @param repo the repository - * @param old_name the old name of the reference - * @param name the new name of the reference - * @return 0 on success, GIT_EINVALIDSPEC or an error code - */ -GIT_EXTERN(int) git_reflog_rename(git_repository *repo, const char *old_name, const char *name); - -/** - * Delete the reflog for the given reference - * - * @param repo the repository - * @param name the reflog to delete - * @return 0 or an error code - */ -GIT_EXTERN(int) git_reflog_delete(git_repository *repo, const char *name); - -/** - * Get the number of log entries in a reflog - * - * @param reflog the previously loaded reflog - * @return the number of log entries - */ -GIT_EXTERN(size_t) git_reflog_entrycount(git_reflog *reflog); - -/** - * Lookup an entry by its index - * - * Requesting the reflog entry with an index of 0 (zero) will - * return the most recently created entry. - * - * @param reflog a previously loaded reflog - * @param idx the position of the entry to lookup. Should be greater than or - * equal to 0 (zero) and less than `git_reflog_entrycount()`. - * @return the entry; NULL if not found - */ -GIT_EXTERN(const git_reflog_entry *) git_reflog_entry_byindex(const git_reflog *reflog, size_t idx); - -/** - * Remove an entry from the reflog by its index - * - * To ensure there's no gap in the log history, set `rewrite_previous_entry` - * param value to 1. When deleting entry `n`, member old_oid of entry `n-1` - * (if any) will be updated with the value of member new_oid of entry `n+1`. - * - * @param reflog a previously loaded reflog. - * - * @param idx the position of the entry to remove. Should be greater than or - * equal to 0 (zero) and less than `git_reflog_entrycount()`. - * - * @param rewrite_previous_entry 1 to rewrite the history; 0 otherwise. - * - * @return 0 on success, GIT_ENOTFOUND if the entry doesn't exist - * or an error code. - */ -GIT_EXTERN(int) git_reflog_drop( - git_reflog *reflog, - size_t idx, - int rewrite_previous_entry); - -/** - * Get the old oid - * - * @param entry a reflog entry - * @return the old oid - */ -GIT_EXTERN(const git_oid *) git_reflog_entry_id_old(const git_reflog_entry *entry); - -/** - * Get the new oid - * - * @param entry a reflog entry - * @return the new oid at this time - */ -GIT_EXTERN(const git_oid *) git_reflog_entry_id_new(const git_reflog_entry *entry); - -/** - * Get the committer of this entry - * - * @param entry a reflog entry - * @return the committer - */ -GIT_EXTERN(const git_signature *) git_reflog_entry_committer(const git_reflog_entry *entry); - -/** - * Get the log message - * - * @param entry a reflog entry - * @return the log msg - */ -GIT_EXTERN(const char *) git_reflog_entry_message(const git_reflog_entry *entry); - -/** - * Free the reflog - * - * @param reflog reflog to free - */ -GIT_EXTERN(void) git_reflog_free(git_reflog *reflog); - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/refs.h b/libgit2/headers/git2/refs.h deleted file mode 100644 index 7ebb209..0000000 --- a/libgit2/headers/git2/refs.h +++ /dev/null @@ -1,771 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_refs_h__ -#define INCLUDE_git_refs_h__ - -#include "common.h" -#include "types.h" -#include "oid.h" -#include "strarray.h" - -/** - * @file git2/refs.h - * @brief Git reference management routines - * @defgroup git_reference Git reference management routines - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Lookup a reference by name in a repository. - * - * The returned reference must be freed by the user. - * - * The name will be checked for validity. - * See `git_reference_symbolic_create()` for rules about valid names. - * - * @param out pointer to the looked-up reference - * @param repo the repository to look up the reference - * @param name the long name for the reference (e.g. HEAD, refs/heads/master, refs/tags/v0.1.0, ...) - * @return 0 on success, GIT_ENOTFOUND, GIT_EINVALIDSPEC or an error code. - */ -GIT_EXTERN(int) git_reference_lookup(git_reference **out, git_repository *repo, const char *name); - -/** - * Lookup a reference by name and resolve immediately to OID. - * - * This function provides a quick way to resolve a reference name straight - * through to the object id that it refers to. This avoids having to - * allocate or free any `git_reference` objects for simple situations. - * - * The name will be checked for validity. - * See `git_reference_symbolic_create()` for rules about valid names. - * - * @param out Pointer to oid to be filled in - * @param repo The repository in which to look up the reference - * @param name The long name for the reference (e.g. HEAD, refs/heads/master, refs/tags/v0.1.0, ...) - * @return 0 on success, GIT_ENOTFOUND, GIT_EINVALIDSPEC or an error code. - */ -GIT_EXTERN(int) git_reference_name_to_id( - git_oid *out, git_repository *repo, const char *name); - -/** - * Lookup a reference by DWIMing its short name - * - * Apply the git precendence rules to the given shorthand to determine - * which reference the user is referring to. - * - * @param out pointer in which to store the reference - * @param repo the repository in which to look - * @param shorthand the short name for the reference - * @return 0 or an error code - */ -GIT_EXTERN(int) git_reference_dwim(git_reference **out, git_repository *repo, const char *shorthand); - -/** - * Conditionally create a new symbolic reference. - * - * A symbolic reference is a reference name that refers to another - * reference name. If the other name moves, the symbolic name will move, - * too. As a simple example, the "HEAD" reference might refer to - * "refs/heads/master" while on the "master" branch of a repository. - * - * The symbolic reference will be created in the repository and written to - * the disk. The generated reference object must be freed by the user. - * - * Valid reference names must follow one of two patterns: - * - * 1. Top-level names must contain only capital letters and underscores, - * and must begin and end with a letter. (e.g. "HEAD", "ORIG_HEAD"). - * 2. Names prefixed with "refs/" can be almost anything. You must avoid - * the characters '~', '^', ':', '\\', '?', '[', and '*', and the - * sequences ".." and "@{" which have special meaning to revparse. - * - * This function will return an error if a reference already exists with the - * given name unless `force` is true, in which case it will be overwritten. - * - * The message for the reflog will be ignored if the reference does - * not belong in the standard set (HEAD, branches and remote-tracking - * branches) and it does not have a reflog. - * - * It will return GIT_EMODIFIED if the reference's value at the time - * of updating does not match the one passed through `current_value` - * (i.e. if the ref has changed since the user read it). - * - * If `current_value` is all zeros, this function will return GIT_EMODIFIED - * if the ref already exists. - * - * @param out Pointer to the newly created reference - * @param repo Repository where that reference will live - * @param name The name of the reference - * @param target The target of the reference - * @param force Overwrite existing references - * @param current_value The expected value of the reference when updating - * @param log_message The one line long message to be appended to the reflog - * @return 0 on success, GIT_EEXISTS, GIT_EINVALIDSPEC, GIT_EMODIFIED or an error code - */ -GIT_EXTERN(int) git_reference_symbolic_create_matching(git_reference **out, git_repository *repo, const char *name, const char *target, int force, const char *current_value, const char *log_message); - -/** - * Create a new symbolic reference. - * - * A symbolic reference is a reference name that refers to another - * reference name. If the other name moves, the symbolic name will move, - * too. As a simple example, the "HEAD" reference might refer to - * "refs/heads/master" while on the "master" branch of a repository. - * - * The symbolic reference will be created in the repository and written to - * the disk. The generated reference object must be freed by the user. - * - * Valid reference names must follow one of two patterns: - * - * 1. Top-level names must contain only capital letters and underscores, - * and must begin and end with a letter. (e.g. "HEAD", "ORIG_HEAD"). - * 2. Names prefixed with "refs/" can be almost anything. You must avoid - * the characters '~', '^', ':', '\\', '?', '[', and '*', and the - * sequences ".." and "@{" which have special meaning to revparse. - * - * This function will return an error if a reference already exists with the - * given name unless `force` is true, in which case it will be overwritten. - * - * The message for the reflog will be ignored if the reference does - * not belong in the standard set (HEAD, branches and remote-tracking - * branches) and it does not have a reflog. - * - * @param out Pointer to the newly created reference - * @param repo Repository where that reference will live - * @param name The name of the reference - * @param target The target of the reference - * @param force Overwrite existing references - * @param log_message The one line long message to be appended to the reflog - * @return 0 on success, GIT_EEXISTS, GIT_EINVALIDSPEC or an error code - */ -GIT_EXTERN(int) git_reference_symbolic_create(git_reference **out, git_repository *repo, const char *name, const char *target, int force, const char *log_message); - -/** - * Create a new direct reference. - * - * A direct reference (also called an object id reference) refers directly - * to a specific object id (a.k.a. OID or SHA) in the repository. The id - * permanently refers to the object (although the reference itself can be - * moved). For example, in libgit2 the direct ref "refs/tags/v0.17.0" - * refers to OID 5b9fac39d8a76b9139667c26a63e6b3f204b3977. - * - * The direct reference will be created in the repository and written to - * the disk. The generated reference object must be freed by the user. - * - * Valid reference names must follow one of two patterns: - * - * 1. Top-level names must contain only capital letters and underscores, - * and must begin and end with a letter. (e.g. "HEAD", "ORIG_HEAD"). - * 2. Names prefixed with "refs/" can be almost anything. You must avoid - * the characters '~', '^', ':', '\\', '?', '[', and '*', and the - * sequences ".." and "@{" which have special meaning to revparse. - * - * This function will return an error if a reference already exists with the - * given name unless `force` is true, in which case it will be overwritten. - * - * The message for the reflog will be ignored if the reference does - * not belong in the standard set (HEAD, branches and remote-tracking - * branches) and it does not have a reflog. - * - * @param out Pointer to the newly created reference - * @param repo Repository where that reference will live - * @param name The name of the reference - * @param id The object id pointed to by the reference. - * @param force Overwrite existing references - * @param log_message The one line long message to be appended to the reflog - * @return 0 on success, GIT_EEXISTS, GIT_EINVALIDSPEC or an error code - */ -GIT_EXTERN(int) git_reference_create(git_reference **out, git_repository *repo, const char *name, const git_oid *id, int force, const char *log_message); - -/** - * Conditionally create new direct reference - * - * A direct reference (also called an object id reference) refers directly - * to a specific object id (a.k.a. OID or SHA) in the repository. The id - * permanently refers to the object (although the reference itself can be - * moved). For example, in libgit2 the direct ref "refs/tags/v0.17.0" - * refers to OID 5b9fac39d8a76b9139667c26a63e6b3f204b3977. - * - * The direct reference will be created in the repository and written to - * the disk. The generated reference object must be freed by the user. - * - * Valid reference names must follow one of two patterns: - * - * 1. Top-level names must contain only capital letters and underscores, - * and must begin and end with a letter. (e.g. "HEAD", "ORIG_HEAD"). - * 2. Names prefixed with "refs/" can be almost anything. You must avoid - * the characters '~', '^', ':', '\\', '?', '[', and '*', and the - * sequences ".." and "@{" which have special meaning to revparse. - * - * This function will return an error if a reference already exists with the - * given name unless `force` is true, in which case it will be overwritten. - * - * The message for the reflog will be ignored if the reference does - * not belong in the standard set (HEAD, branches and remote-tracking - * branches) and it does not have a reflog. - * - * It will return GIT_EMODIFIED if the reference's value at the time - * of updating does not match the one passed through `current_id` - * (i.e. if the ref has changed since the user read it). - * - * @param out Pointer to the newly created reference - * @param repo Repository where that reference will live - * @param name The name of the reference - * @param id The object id pointed to by the reference. - * @param force Overwrite existing references - * @param current_id The expected value of the reference at the time of update - * @param log_message The one line long message to be appended to the reflog - * @return 0 on success, GIT_EMODIFIED if the value of the reference - * has changed, GIT_EEXISTS, GIT_EINVALIDSPEC or an error code - */ -GIT_EXTERN(int) git_reference_create_matching(git_reference **out, git_repository *repo, const char *name, const git_oid *id, int force, const git_oid *current_id, const char *log_message); - -/** - * Get the OID pointed to by a direct reference. - * - * Only available if the reference is direct (i.e. an object id reference, - * not a symbolic one). - * - * To find the OID of a symbolic ref, call `git_reference_resolve()` and - * then this function (or maybe use `git_reference_name_to_id()` to - * directly resolve a reference name all the way through to an OID). - * - * @param ref The reference - * @return a pointer to the oid if available, NULL otherwise - */ -GIT_EXTERN(const git_oid *) git_reference_target(const git_reference *ref); - -/** - * Return the peeled OID target of this reference. - * - * This peeled OID only applies to direct references that point to - * a hard Tag object: it is the result of peeling such Tag. - * - * @param ref The reference - * @return a pointer to the oid if available, NULL otherwise - */ -GIT_EXTERN(const git_oid *) git_reference_target_peel(const git_reference *ref); - -/** - * Get full name to the reference pointed to by a symbolic reference. - * - * Only available if the reference is symbolic. - * - * @param ref The reference - * @return a pointer to the name if available, NULL otherwise - */ -GIT_EXTERN(const char *) git_reference_symbolic_target(const git_reference *ref); - -/** - * Get the type of a reference. - * - * Either direct (GIT_REFERENCE_DIRECT) or symbolic (GIT_REFERENCE_SYMBOLIC) - * - * @param ref The reference - * @return the type - */ -GIT_EXTERN(git_reference_t) git_reference_type(const git_reference *ref); - -/** - * Get the full name of a reference. - * - * See `git_reference_symbolic_create()` for rules about valid names. - * - * @param ref The reference - * @return the full name for the ref - */ -GIT_EXTERN(const char *) git_reference_name(const git_reference *ref); - -/** - * Resolve a symbolic reference to a direct reference. - * - * This method iteratively peels a symbolic reference until it resolves to - * a direct reference to an OID. - * - * The peeled reference is returned in the `resolved_ref` argument, and - * must be freed manually once it's no longer needed. - * - * If a direct reference is passed as an argument, a copy of that - * reference is returned. This copy must be manually freed too. - * - * @param out Pointer to the peeled reference - * @param ref The reference - * @return 0 or an error code - */ -GIT_EXTERN(int) git_reference_resolve(git_reference **out, const git_reference *ref); - -/** - * Get the repository where a reference resides. - * - * @param ref The reference - * @return a pointer to the repo - */ -GIT_EXTERN(git_repository *) git_reference_owner(const git_reference *ref); - -/** - * Create a new reference with the same name as the given reference but a - * different symbolic target. The reference must be a symbolic reference, - * otherwise this will fail. - * - * The new reference will be written to disk, overwriting the given reference. - * - * The target name will be checked for validity. - * See `git_reference_symbolic_create()` for rules about valid names. - * - * The message for the reflog will be ignored if the reference does - * not belong in the standard set (HEAD, branches and remote-tracking - * branches) and it does not have a reflog. - * - * @param out Pointer to the newly created reference - * @param ref The reference - * @param target The new target for the reference - * @param log_message The one line long message to be appended to the reflog - * @return 0 on success, GIT_EINVALIDSPEC or an error code - */ -GIT_EXTERN(int) git_reference_symbolic_set_target( - git_reference **out, - git_reference *ref, - const char *target, - const char *log_message); - -/** - * Conditionally create a new reference with the same name as the given reference but a - * different OID target. The reference must be a direct reference, otherwise - * this will fail. - * - * The new reference will be written to disk, overwriting the given reference. - * - * @param out Pointer to the newly created reference - * @param ref The reference - * @param id The new target OID for the reference - * @param log_message The one line long message to be appended to the reflog - * @return 0 on success, GIT_EMODIFIED if the value of the reference - * has changed since it was read, or an error code - */ -GIT_EXTERN(int) git_reference_set_target( - git_reference **out, - git_reference *ref, - const git_oid *id, - const char *log_message); - -/** - * Rename an existing reference. - * - * This method works for both direct and symbolic references. - * - * The new name will be checked for validity. - * See `git_reference_symbolic_create()` for rules about valid names. - * - * If the `force` flag is not enabled, and there's already - * a reference with the given name, the renaming will fail. - * - * IMPORTANT: - * The user needs to write a proper reflog entry if the - * reflog is enabled for the repository. We only rename - * the reflog if it exists. - * - * @param ref The reference to rename - * @param new_name The new name for the reference - * @param force Overwrite an existing reference - * @param log_message The one line long message to be appended to the reflog - * @return 0 on success, GIT_EINVALIDSPEC, GIT_EEXISTS or an error code - * - */ -GIT_EXTERN(int) git_reference_rename( - git_reference **new_ref, - git_reference *ref, - const char *new_name, - int force, - const char *log_message); - -/** - * Delete an existing reference. - * - * This method works for both direct and symbolic references. The reference - * will be immediately removed on disk but the memory will not be freed. - * Callers must call `git_reference_free`. - * - * This function will return an error if the reference has changed - * from the time it was looked up. - * - * @param ref The reference to remove - * @return 0, GIT_EMODIFIED or an error code - */ -GIT_EXTERN(int) git_reference_delete(git_reference *ref); - -/** - * Delete an existing reference by name - * - * This method removes the named reference from the repository without - * looking at its old value. - * - * @param name The reference to remove - * @return 0 or an error code - */ -GIT_EXTERN(int) git_reference_remove(git_repository *repo, const char *name); - -/** - * Fill a list with all the references that can be found in a repository. - * - * The string array will be filled with the names of all references; these - * values are owned by the user and should be free'd manually when no - * longer needed, using `git_strarray_free()`. - * - * @param array Pointer to a git_strarray structure where - * the reference names will be stored - * @param repo Repository where to find the refs - * @return 0 or an error code - */ -GIT_EXTERN(int) git_reference_list(git_strarray *array, git_repository *repo); - -/** - * Callback used to iterate over references - * - * @see git_reference_foreach - * - * @param reference The reference object - * @param payload Payload passed to git_reference_foreach - * @return non-zero to terminate the iteration - */ -typedef int GIT_CALLBACK(git_reference_foreach_cb)(git_reference *reference, void *payload); - -/** - * Callback used to iterate over reference names - * - * @see git_reference_foreach_name - * - * @param name The reference name - * @param payload Payload passed to git_reference_foreach_name - * @return non-zero to terminate the iteration - */ -typedef int GIT_CALLBACK(git_reference_foreach_name_cb)(const char *name, void *payload); - -/** - * Perform a callback on each reference in the repository. - * - * The `callback` function will be called for each reference in the - * repository, receiving the reference object and the `payload` value - * passed to this method. Returning a non-zero value from the callback - * will terminate the iteration. - * - * Note that the callback function is responsible to call `git_reference_free` - * on each reference passed to it. - * - * @param repo Repository where to find the refs - * @param callback Function which will be called for every listed ref - * @param payload Additional data to pass to the callback - * @return 0 on success, non-zero callback return value, or error code - */ -GIT_EXTERN(int) git_reference_foreach( - git_repository *repo, - git_reference_foreach_cb callback, - void *payload); - -/** - * Perform a callback on the fully-qualified name of each reference. - * - * The `callback` function will be called for each reference in the - * repository, receiving the name of the reference and the `payload` value - * passed to this method. Returning a non-zero value from the callback - * will terminate the iteration. - * - * @param repo Repository where to find the refs - * @param callback Function which will be called for every listed ref name - * @param payload Additional data to pass to the callback - * @return 0 on success, non-zero callback return value, or error code - */ -GIT_EXTERN(int) git_reference_foreach_name( - git_repository *repo, - git_reference_foreach_name_cb callback, - void *payload); - -/** - * Create a copy of an existing reference. - * - * Call `git_reference_free` to free the data. - * - * @param dest pointer where to store the copy - * @param source object to copy - * @return 0 or an error code - */ -GIT_EXTERN(int) git_reference_dup(git_reference **dest, git_reference *source); - -/** - * Free the given reference. - * - * @param ref git_reference - */ -GIT_EXTERN(void) git_reference_free(git_reference *ref); - -/** - * Compare two references. - * - * @param ref1 The first git_reference - * @param ref2 The second git_reference - * @return 0 if the same, else a stable but meaningless ordering. - */ -GIT_EXTERN(int) git_reference_cmp( - const git_reference *ref1, - const git_reference *ref2); - -/** - * Create an iterator for the repo's references - * - * @param out pointer in which to store the iterator - * @param repo the repository - * @return 0 or an error code - */ -GIT_EXTERN(int) git_reference_iterator_new( - git_reference_iterator **out, - git_repository *repo); - -/** - * Create an iterator for the repo's references that match the - * specified glob - * - * @param out pointer in which to store the iterator - * @param repo the repository - * @param glob the glob to match against the reference names - * @return 0 or an error code - */ -GIT_EXTERN(int) git_reference_iterator_glob_new( - git_reference_iterator **out, - git_repository *repo, - const char *glob); - -/** - * Get the next reference - * - * @param out pointer in which to store the reference - * @param iter the iterator - * @return 0, GIT_ITEROVER if there are no more; or an error code - */ -GIT_EXTERN(int) git_reference_next(git_reference **out, git_reference_iterator *iter); - -/** - * Get the next reference's name - * - * This function is provided for convenience in case only the names - * are interesting as it avoids the allocation of the `git_reference` - * object which `git_reference_next()` needs. - * - * @param out pointer in which to store the string - * @param iter the iterator - * @return 0, GIT_ITEROVER if there are no more; or an error code - */ -GIT_EXTERN(int) git_reference_next_name(const char **out, git_reference_iterator *iter); - -/** - * Free the iterator and its associated resources - * - * @param iter the iterator to free - */ -GIT_EXTERN(void) git_reference_iterator_free(git_reference_iterator *iter); - -/** - * Perform a callback on each reference in the repository whose name - * matches the given pattern. - * - * This function acts like `git_reference_foreach()` with an additional - * pattern match being applied to the reference name before issuing the - * callback function. See that function for more information. - * - * The pattern is matched using fnmatch or "glob" style where a '*' matches - * any sequence of letters, a '?' matches any letter, and square brackets - * can be used to define character ranges (such as "[0-9]" for digits). - * - * @param repo Repository where to find the refs - * @param glob Pattern to match (fnmatch-style) against reference name. - * @param callback Function which will be called for every listed ref - * @param payload Additional data to pass to the callback - * @return 0 on success, GIT_EUSER on non-zero callback, or error code - */ -GIT_EXTERN(int) git_reference_foreach_glob( - git_repository *repo, - const char *glob, - git_reference_foreach_name_cb callback, - void *payload); - -/** - * Check if a reflog exists for the specified reference. - * - * @param repo the repository - * @param refname the reference's name - * @return 0 when no reflog can be found, 1 when it exists; - * otherwise an error code. - */ -GIT_EXTERN(int) git_reference_has_log(git_repository *repo, const char *refname); - -/** - * Ensure there is a reflog for a particular reference. - * - * Make sure that successive updates to the reference will append to - * its log. - * - * @param repo the repository - * @param refname the reference's name - * @return 0 or an error code. - */ -GIT_EXTERN(int) git_reference_ensure_log(git_repository *repo, const char *refname); - -/** - * Check if a reference is a local branch. - * - * @param ref A git reference - * - * @return 1 when the reference lives in the refs/heads - * namespace; 0 otherwise. - */ -GIT_EXTERN(int) git_reference_is_branch(const git_reference *ref); - -/** - * Check if a reference is a remote tracking branch - * - * @param ref A git reference - * - * @return 1 when the reference lives in the refs/remotes - * namespace; 0 otherwise. - */ -GIT_EXTERN(int) git_reference_is_remote(const git_reference *ref); - -/** - * Check if a reference is a tag - * - * @param ref A git reference - * - * @return 1 when the reference lives in the refs/tags - * namespace; 0 otherwise. - */ -GIT_EXTERN(int) git_reference_is_tag(const git_reference *ref); - -/** - * Check if a reference is a note - * - * @param ref A git reference - * - * @return 1 when the reference lives in the refs/notes - * namespace; 0 otherwise. - */ -GIT_EXTERN(int) git_reference_is_note(const git_reference *ref); - -/** - * Normalization options for reference lookup - */ -typedef enum { - /** - * No particular normalization. - */ - GIT_REFERENCE_FORMAT_NORMAL = 0u, - - /** - * Control whether one-level refnames are accepted - * (i.e., refnames that do not contain multiple /-separated - * components). Those are expected to be written only using - * uppercase letters and underscore (FETCH_HEAD, ...) - */ - GIT_REFERENCE_FORMAT_ALLOW_ONELEVEL = (1u << 0), - - /** - * Interpret the provided name as a reference pattern for a - * refspec (as used with remote repositories). If this option - * is enabled, the name is allowed to contain a single * () - * in place of a one full pathname component - * (e.g., foo//bar but not foo/bar). - */ - GIT_REFERENCE_FORMAT_REFSPEC_PATTERN = (1u << 1), - - /** - * Interpret the name as part of a refspec in shorthand form - * so the `ONELEVEL` naming rules aren't enforced and 'master' - * becomes a valid name. - */ - GIT_REFERENCE_FORMAT_REFSPEC_SHORTHAND = (1u << 2), -} git_reference_format_t; - -/** - * Normalize reference name and check validity. - * - * This will normalize the reference name by removing any leading slash - * '/' characters and collapsing runs of adjacent slashes between name - * components into a single slash. - * - * Once normalized, if the reference name is valid, it will be returned in - * the user allocated buffer. - * - * See `git_reference_symbolic_create()` for rules about valid names. - * - * @param buffer_out User allocated buffer to store normalized name - * @param buffer_size Size of buffer_out - * @param name Reference name to be checked. - * @param flags Flags to constrain name validation rules - see the - * GIT_REFERENCE_FORMAT constants above. - * @return 0 on success, GIT_EBUFS if buffer is too small, GIT_EINVALIDSPEC - * or an error code. - */ -GIT_EXTERN(int) git_reference_normalize_name( - char *buffer_out, - size_t buffer_size, - const char *name, - unsigned int flags); - -/** - * Recursively peel reference until object of the specified type is found. - * - * The retrieved `peeled` object is owned by the repository - * and should be closed with the `git_object_free` method. - * - * If you pass `GIT_OBJECT_ANY` as the target type, then the object - * will be peeled until a non-tag object is met. - * - * @param out Pointer to the peeled git_object - * @param ref The reference to be processed - * @param type The type of the requested object (GIT_OBJECT_COMMIT, - * GIT_OBJECT_TAG, GIT_OBJECT_TREE, GIT_OBJECT_BLOB or GIT_OBJECT_ANY). - * @return 0 on success, GIT_EAMBIGUOUS, GIT_ENOTFOUND or an error code - */ -GIT_EXTERN(int) git_reference_peel( - git_object **out, - const git_reference *ref, - git_object_t type); - -/** - * Ensure the reference name is well-formed. - * - * Valid reference names must follow one of two patterns: - * - * 1. Top-level names must contain only capital letters and underscores, - * and must begin and end with a letter. (e.g. "HEAD", "ORIG_HEAD"). - * 2. Names prefixed with "refs/" can be almost anything. You must avoid - * the characters '~', '^', ':', '\\', '?', '[', and '*', and the - * sequences ".." and "@{" which have special meaning to revparse. - * - * @param valid output pointer to set with validity of given reference name - * @param refname name to be checked. - * @return 0 on success or an error code - */ -GIT_EXTERN(int) git_reference_name_is_valid(int *valid, const char *refname); - -/** - * Get the reference's short name - * - * This will transform the reference name into a name "human-readable" - * version. If no shortname is appropriate, it will return the full - * name. - * - * The memory is owned by the reference and must not be freed. - * - * @param ref a reference - * @return the human-readable version of the name - */ -GIT_EXTERN(const char *) git_reference_shorthand(const git_reference *ref); - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/refspec.h b/libgit2/headers/git2/refspec.h deleted file mode 100644 index eaf7747..0000000 --- a/libgit2/headers/git2/refspec.h +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_refspec_h__ -#define INCLUDE_git_refspec_h__ - -#include "common.h" -#include "types.h" -#include "net.h" -#include "buffer.h" - -/** - * @file git2/refspec.h - * @brief Git refspec attributes - * @defgroup git_refspec Git refspec attributes - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Parse a given refspec string - * - * @param refspec a pointer to hold the refspec handle - * @param input the refspec string - * @param is_fetch is this a refspec for a fetch - * @return 0 if the refspec string could be parsed, -1 otherwise - */ -GIT_EXTERN(int) git_refspec_parse(git_refspec **refspec, const char *input, int is_fetch); - -/** - * Free a refspec object which has been created by git_refspec_parse - * - * @param refspec the refspec object - */ -GIT_EXTERN(void) git_refspec_free(git_refspec *refspec); - -/** - * Get the source specifier - * - * @param refspec the refspec - * @return the refspec's source specifier - */ -GIT_EXTERN(const char *) git_refspec_src(const git_refspec *refspec); - -/** - * Get the destination specifier - * - * @param refspec the refspec - * @return the refspec's destination specifier - */ -GIT_EXTERN(const char *) git_refspec_dst(const git_refspec *refspec); - -/** - * Get the refspec's string - * - * @param refspec the refspec - * @returns the refspec's original string - */ -GIT_EXTERN(const char *) git_refspec_string(const git_refspec *refspec); - -/** - * Get the force update setting - * - * @param refspec the refspec - * @return 1 if force update has been set, 0 otherwise - */ -GIT_EXTERN(int) git_refspec_force(const git_refspec *refspec); - -/** - * Get the refspec's direction. - * - * @param spec refspec - * @return GIT_DIRECTION_FETCH or GIT_DIRECTION_PUSH - */ -GIT_EXTERN(git_direction) git_refspec_direction(const git_refspec *spec); - -/** - * Check if a refspec's source descriptor matches a reference - * - * @param refspec the refspec - * @param refname the name of the reference to check - * @return 1 if the refspec matches, 0 otherwise - */ -GIT_EXTERN(int) git_refspec_src_matches(const git_refspec *refspec, const char *refname); - -/** - * Check if a refspec's destination descriptor matches a reference - * - * @param refspec the refspec - * @param refname the name of the reference to check - * @return 1 if the refspec matches, 0 otherwise - */ -GIT_EXTERN(int) git_refspec_dst_matches(const git_refspec *refspec, const char *refname); - -/** - * Transform a reference to its target following the refspec's rules - * - * @param out where to store the target name - * @param spec the refspec - * @param name the name of the reference to transform - * @return 0, GIT_EBUFS or another error - */ -GIT_EXTERN(int) git_refspec_transform(git_buf *out, const git_refspec *spec, const char *name); - -/** - * Transform a target reference to its source reference following the refspec's rules - * - * @param out where to store the source reference name - * @param spec the refspec - * @param name the name of the reference to transform - * @return 0, GIT_EBUFS or another error - */ -GIT_EXTERN(int) git_refspec_rtransform(git_buf *out, const git_refspec *spec, const char *name); - -GIT_END_DECL - -#endif diff --git a/libgit2/headers/git2/remote.h b/libgit2/headers/git2/remote.h deleted file mode 100644 index 4d57eaa..0000000 --- a/libgit2/headers/git2/remote.h +++ /dev/null @@ -1,1008 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_remote_h__ -#define INCLUDE_git_remote_h__ - -#include "common.h" -#include "repository.h" -#include "refspec.h" -#include "net.h" -#include "indexer.h" -#include "strarray.h" -#include "transport.h" -#include "pack.h" -#include "proxy.h" - -/** - * @file git2/remote.h - * @brief Git remote management functions - * @defgroup git_remote remote management functions - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Add a remote with the default fetch refspec to the repository's configuration. - * - * @param out the resulting remote - * @param repo the repository in which to create the remote - * @param name the remote's name - * @param url the remote's url - * @return 0, GIT_EINVALIDSPEC, GIT_EEXISTS or an error code - */ -GIT_EXTERN(int) git_remote_create( - git_remote **out, - git_repository *repo, - const char *name, - const char *url); - -/** - * Remote creation options flags - */ -typedef enum { - /** Ignore the repository apply.insteadOf configuration */ - GIT_REMOTE_CREATE_SKIP_INSTEADOF = (1 << 0), - - /** Don't build a fetchspec from the name if none is set */ - GIT_REMOTE_CREATE_SKIP_DEFAULT_FETCHSPEC = (1 << 1), -} git_remote_create_flags; - -/** - * Remote creation options structure - * - * Initialize with `GIT_REMOTE_CREATE_OPTIONS_INIT`. Alternatively, you can - * use `git_remote_create_options_init`. - * - */ -typedef struct git_remote_create_options { - unsigned int version; - - /** - * The repository that should own the remote. - * Setting this to NULL results in a detached remote. - */ - git_repository *repository; - - /** - * The remote's name. - * Setting this to NULL results in an in-memory/anonymous remote. - */ - const char *name; - - /** The fetchspec the remote should use. */ - const char *fetchspec; - - /** Additional flags for the remote. See git_remote_create_flags. */ - unsigned int flags; -} git_remote_create_options; - -#define GIT_REMOTE_CREATE_OPTIONS_VERSION 1 -#define GIT_REMOTE_CREATE_OPTIONS_INIT {GIT_REMOTE_CREATE_OPTIONS_VERSION} - -/** - * Initialize git_remote_create_options structure - * - * Initializes a `git_remote_create_options` with default values. Equivalent to - * creating an instance with `GIT_REMOTE_CREATE_OPTIONS_INIT`. - * - * @param opts The `git_remote_create_options` struct to initialize. - * @param version The struct version; pass `GIT_REMOTE_CREATE_OPTIONS_VERSION`. - * @return Zero on success; -1 on failure. - */ -GIT_EXTERN(int) git_remote_create_options_init( - git_remote_create_options *opts, - unsigned int version); - -/** - * Create a remote, with options. - * - * This function allows more fine-grained control over the remote creation. - * - * Passing NULL as the opts argument will result in a detached remote. - * - * @param out the resulting remote - * @param url the remote's url - * @param opts the remote creation options - * @return 0, GIT_EINVALIDSPEC, GIT_EEXISTS or an error code - */ -GIT_EXTERN(int) git_remote_create_with_opts( - git_remote **out, - const char *url, - const git_remote_create_options *opts); - -/** - * Add a remote with the provided fetch refspec (or default if NULL) to the repository's - * configuration. - * - * @param out the resulting remote - * @param repo the repository in which to create the remote - * @param name the remote's name - * @param url the remote's url - * @param fetch the remote fetch value - * @return 0, GIT_EINVALIDSPEC, GIT_EEXISTS or an error code - */ -GIT_EXTERN(int) git_remote_create_with_fetchspec( - git_remote **out, - git_repository *repo, - const char *name, - const char *url, - const char *fetch); - -/** - * Create an anonymous remote - * - * Create a remote with the given url in-memory. You can use this when - * you have a URL instead of a remote's name. - * - * @param out pointer to the new remote objects - * @param repo the associated repository - * @param url the remote repository's URL - * @return 0 or an error code - */ -GIT_EXTERN(int) git_remote_create_anonymous( - git_remote **out, - git_repository *repo, - const char *url); - -/** - * Create a remote without a connected local repo - * - * Create a remote with the given url in-memory. You can use this when - * you have a URL instead of a remote's name. - * - * Contrasted with git_remote_create_anonymous, a detached remote - * will not consider any repo configuration values (such as insteadof url - * substitutions). - * - * @param out pointer to the new remote objects - * @param url the remote repository's URL - * @return 0 or an error code - */ -GIT_EXTERN(int) git_remote_create_detached( - git_remote **out, - const char *url); - -/** - * Get the information for a particular remote - * - * The name will be checked for validity. - * See `git_tag_create()` for rules about valid names. - * - * @param out pointer to the new remote object - * @param repo the associated repository - * @param name the remote's name - * @return 0, GIT_ENOTFOUND, GIT_EINVALIDSPEC or an error code - */ -GIT_EXTERN(int) git_remote_lookup(git_remote **out, git_repository *repo, const char *name); - -/** - * Create a copy of an existing remote. All internal strings are also - * duplicated. Callbacks are not duplicated. - * - * Call `git_remote_free` to free the data. - * - * @param dest pointer where to store the copy - * @param source object to copy - * @return 0 or an error code - */ -GIT_EXTERN(int) git_remote_dup(git_remote **dest, git_remote *source); - -/** - * Get the remote's repository - * - * @param remote the remote - * @return a pointer to the repository - */ -GIT_EXTERN(git_repository *) git_remote_owner(const git_remote *remote); - -/** - * Get the remote's name - * - * @param remote the remote - * @return a pointer to the name or NULL for in-memory remotes - */ -GIT_EXTERN(const char *) git_remote_name(const git_remote *remote); - -/** - * Get the remote's url - * - * If url.*.insteadOf has been configured for this URL, it will - * return the modified URL. If `git_remote_set_instance_pushurl` - * has been called for this remote, then that URL will be returned. - * - * @param remote the remote - * @return a pointer to the url - */ -GIT_EXTERN(const char *) git_remote_url(const git_remote *remote); - -/** - * Get the remote's url for pushing. - * - * If url.*.pushInsteadOf has been configured for this URL, it - * will return the modified URL. If `git_remote_set_instance_pushurl` - * has been called for this remote, then that URL will be returned. - * - * @param remote the remote - * @return a pointer to the url or NULL if no special url for pushing is set - */ -GIT_EXTERN(const char *) git_remote_pushurl(const git_remote *remote); - -/** - * Set the remote's url in the configuration - * - * Remote objects already in memory will not be affected. This assumes - * the common case of a single-url remote and will otherwise return an error. - * - * @param repo the repository in which to perform the change - * @param remote the remote's name - * @param url the url to set - * @return 0 or an error value - */ -GIT_EXTERN(int) git_remote_set_url(git_repository *repo, const char *remote, const char *url); - -/** - * Set the remote's url for pushing in the configuration. - * - * Remote objects already in memory will not be affected. This assumes - * the common case of a single-url remote and will otherwise return an error. - * - * - * @param repo the repository in which to perform the change - * @param remote the remote's name - * @param url the url to set - * @return 0, or an error code - */ -GIT_EXTERN(int) git_remote_set_pushurl(git_repository *repo, const char *remote, const char *url); - -/** - * Set the url for this particular url instance. The URL in the - * configuration will be ignored, and will not be changed. - * - * @param remote the remote's name - * @param url the url to set - * @return 0 or an error value - */ -GIT_EXTERN(int) git_remote_set_instance_url(git_remote *remote, const char *url); - -/** - * Set the push url for this particular url instance. The URL in the - * configuration will be ignored, and will not be changed. - * - * @param remote the remote's name - * @param url the url to set - * @return 0 or an error value - */ -GIT_EXTERN(int) git_remote_set_instance_pushurl(git_remote *remote, const char *url); - -/** - * Add a fetch refspec to the remote's configuration - * - * Add the given refspec to the fetch list in the configuration. No - * loaded remote instances will be affected. - * - * @param repo the repository in which to change the configuration - * @param remote the name of the remote to change - * @param refspec the new fetch refspec - * @return 0, GIT_EINVALIDSPEC if refspec is invalid or an error value - */ -GIT_EXTERN(int) git_remote_add_fetch(git_repository *repo, const char *remote, const char *refspec); - -/** - * Get the remote's list of fetch refspecs - * - * The memory is owned by the user and should be freed with - * `git_strarray_free`. - * - * @param array pointer to the array in which to store the strings - * @param remote the remote to query - */ -GIT_EXTERN(int) git_remote_get_fetch_refspecs(git_strarray *array, const git_remote *remote); - -/** - * Add a push refspec to the remote's configuration - * - * Add the given refspec to the push list in the configuration. No - * loaded remote instances will be affected. - * - * @param repo the repository in which to change the configuration - * @param remote the name of the remote to change - * @param refspec the new push refspec - * @return 0, GIT_EINVALIDSPEC if refspec is invalid or an error value - */ -GIT_EXTERN(int) git_remote_add_push(git_repository *repo, const char *remote, const char *refspec); - -/** - * Get the remote's list of push refspecs - * - * The memory is owned by the user and should be freed with - * `git_strarray_free`. - * - * @param array pointer to the array in which to store the strings - * @param remote the remote to query - */ -GIT_EXTERN(int) git_remote_get_push_refspecs(git_strarray *array, const git_remote *remote); - -/** - * Get the number of refspecs for a remote - * - * @param remote the remote - * @return the amount of refspecs configured in this remote - */ -GIT_EXTERN(size_t) git_remote_refspec_count(const git_remote *remote); - -/** - * Get a refspec from the remote - * - * @param remote the remote to query - * @param n the refspec to get - * @return the nth refspec - */ -GIT_EXTERN(const git_refspec *)git_remote_get_refspec(const git_remote *remote, size_t n); - -/** - * Open a connection to a remote - * - * The transport is selected based on the URL. The direction argument - * is due to a limitation of the git protocol (over TCP or SSH) which - * starts up a specific binary which can only do the one or the other. - * - * @param remote the remote to connect to - * @param direction GIT_DIRECTION_FETCH if you want to fetch or - * GIT_DIRECTION_PUSH if you want to push - * @param callbacks the callbacks to use for this connection - * @param proxy_opts proxy settings - * @param custom_headers extra HTTP headers to use in this connection - * @return 0 or an error code - */ -GIT_EXTERN(int) git_remote_connect(git_remote *remote, git_direction direction, const git_remote_callbacks *callbacks, const git_proxy_options *proxy_opts, const git_strarray *custom_headers); - -/** - * Get the remote repository's reference advertisement list - * - * Get the list of references with which the server responds to a new - * connection. - * - * The remote (or more exactly its transport) must have connected to - * the remote repository. This list is available as soon as the - * connection to the remote is initiated and it remains available - * after disconnecting. - * - * The memory belongs to the remote. The pointer will be valid as long - * as a new connection is not initiated, but it is recommended that - * you make a copy in order to make use of the data. - * - * @param out pointer to the array - * @param size the number of remote heads - * @param remote the remote - * @return 0 on success, or an error code - */ -GIT_EXTERN(int) git_remote_ls(const git_remote_head ***out, size_t *size, git_remote *remote); - -/** - * Check whether the remote is connected - * - * Check whether the remote's underlying transport is connected to the - * remote host. - * - * @param remote the remote - * @return 1 if it's connected, 0 otherwise. - */ -GIT_EXTERN(int) git_remote_connected(const git_remote *remote); - -/** - * Cancel the operation - * - * At certain points in its operation, the network code checks whether - * the operation has been cancelled and if so stops the operation. - * - * @param remote the remote - * @return 0 on success, or an error code - */ -GIT_EXTERN(int) git_remote_stop(git_remote *remote); - -/** - * Disconnect from the remote - * - * Close the connection to the remote. - * - * @param remote the remote to disconnect from - * @return 0 on success, or an error code - */ -GIT_EXTERN(int) git_remote_disconnect(git_remote *remote); - -/** - * Free the memory associated with a remote - * - * This also disconnects from the remote, if the connection - * has not been closed yet (using git_remote_disconnect). - * - * @param remote the remote to free - */ -GIT_EXTERN(void) git_remote_free(git_remote *remote); - -/** - * Get a list of the configured remotes for a repo - * - * The string array must be freed by the user. - * - * @param out a string array which receives the names of the remotes - * @param repo the repository to query - * @return 0 or an error code - */ -GIT_EXTERN(int) git_remote_list(git_strarray *out, git_repository *repo); - -/** - * Argument to the completion callback which tells it which operation - * finished. - */ -typedef enum git_remote_completion_t { - GIT_REMOTE_COMPLETION_DOWNLOAD, - GIT_REMOTE_COMPLETION_INDEXING, - GIT_REMOTE_COMPLETION_ERROR, -} git_remote_completion_t; - -/** Push network progress notification function */ -typedef int GIT_CALLBACK(git_push_transfer_progress_cb)( - unsigned int current, - unsigned int total, - size_t bytes, - void *payload); - -/** - * Represents an update which will be performed on the remote during push - */ -typedef struct { - /** - * The source name of the reference - */ - char *src_refname; - /** - * The name of the reference to update on the server - */ - char *dst_refname; - /** - * The current target of the reference - */ - git_oid src; - /** - * The new target for the reference - */ - git_oid dst; -} git_push_update; - -/** - * Callback used to inform of upcoming updates. - * - * @param updates an array containing the updates which will be sent - * as commands to the destination. - * @param len number of elements in `updates` - * @param payload Payload provided by the caller - */ -typedef int GIT_CALLBACK(git_push_negotiation)(const git_push_update **updates, size_t len, void *payload); - -/** - * Callback used to inform of the update status from the remote. - * - * Called for each updated reference on push. If `status` is - * not `NULL`, the update was rejected by the remote server - * and `status` contains the reason given. - * - * @param refname refname specifying to the remote ref - * @param status status message sent from the remote - * @param data data provided by the caller - * @return 0 on success, otherwise an error - */ -typedef int GIT_CALLBACK(git_push_update_reference_cb)(const char *refname, const char *status, void *data); - -#ifndef GIT_DEPRECATE_HARD -/** - * Callback to resolve URLs before connecting to remote - * - * If you return GIT_PASSTHROUGH, you don't need to write anything to - * url_resolved. - * - * @param url_resolved The buffer to write the resolved URL to - * @param url The URL to resolve - * @param direction GIT_DIRECTION_FETCH or GIT_DIRECTION_PUSH - * @param payload Payload provided by the caller - * @return 0 on success, GIT_PASSTHROUGH or an error - * @deprecated Use `git_remote_set_instance_url` - */ -typedef int GIT_CALLBACK(git_url_resolve_cb)(git_buf *url_resolved, const char *url, int direction, void *payload); -#endif - -/** - * Callback invoked immediately before we attempt to connect to the - * given url. Callers may change the URL before the connection by - * calling `git_remote_set_instance_url` in the callback. - * - * @param remote The remote to be connected - * @param direction GIT_DIRECTION_FETCH or GIT_DIRECTION_PUSH - * @param payload Payload provided by the caller - * @return 0 on success, or an error - */ -typedef int GIT_CALLBACK(git_remote_ready_cb)(git_remote *remote, int direction, void *payload); - -/** - * The callback settings structure - * - * Set the callbacks to be called by the remote when informing the user - * about the progress of the network operations. - */ -struct git_remote_callbacks { - unsigned int version; /**< The version */ - - /** - * Textual progress from the remote. Text send over the - * progress side-band will be passed to this function (this is - * the 'counting objects' output). - */ - git_transport_message_cb sideband_progress; - - /** - * Completion is called when different parts of the download - * process are done (currently unused). - */ - int GIT_CALLBACK(completion)(git_remote_completion_t type, void *data); - - /** - * This will be called if the remote host requires - * authentication in order to connect to it. - * - * Returning GIT_PASSTHROUGH will make libgit2 behave as - * though this field isn't set. - */ - git_credential_acquire_cb credentials; - - /** - * If cert verification fails, this will be called to let the - * user make the final decision of whether to allow the - * connection to proceed. Returns 0 to allow the connection - * or a negative value to indicate an error. - */ - git_transport_certificate_check_cb certificate_check; - - /** - * During the download of new data, this will be regularly - * called with the current count of progress done by the - * indexer. - */ - git_indexer_progress_cb transfer_progress; - - /** - * Each time a reference is updated locally, this function - * will be called with information about it. - */ - int GIT_CALLBACK(update_tips)(const char *refname, const git_oid *a, const git_oid *b, void *data); - - /** - * Function to call with progress information during pack - * building. Be aware that this is called inline with pack - * building operations, so performance may be affected. - */ - git_packbuilder_progress pack_progress; - - /** - * Function to call with progress information during the - * upload portion of a push. Be aware that this is called - * inline with pack building operations, so performance may be - * affected. - */ - git_push_transfer_progress_cb push_transfer_progress; - - /** - * See documentation of git_push_update_reference_cb - */ - git_push_update_reference_cb push_update_reference; - - /** - * Called once between the negotiation step and the upload. It - * provides information about what updates will be performed. - */ - git_push_negotiation push_negotiation; - - /** - * Create the transport to use for this operation. Leave NULL - * to auto-detect. - */ - git_transport_cb transport; - - /** - * Callback when the remote is ready to connect. - */ - git_remote_ready_cb remote_ready; - - /** - * This will be passed to each of the callbacks in this struct - * as the last parameter. - */ - void *payload; - -#ifdef GIT_DEPRECATE_HARD - void *reserved; -#else - /** - * Resolve URL before connecting to remote. - * The returned URL will be used to connect to the remote instead. - * - * This callback is deprecated; users should use - * git_remote_ready_cb and configure the instance URL instead. - */ - git_url_resolve_cb resolve_url; -#endif -}; - -#define GIT_REMOTE_CALLBACKS_VERSION 1 -#define GIT_REMOTE_CALLBACKS_INIT {GIT_REMOTE_CALLBACKS_VERSION} - -/** - * Initializes a `git_remote_callbacks` with default values. Equivalent to - * creating an instance with GIT_REMOTE_CALLBACKS_INIT. - * - * @param opts the `git_remote_callbacks` struct to initialize - * @param version Version of struct; pass `GIT_REMOTE_CALLBACKS_VERSION` - * @return Zero on success; -1 on failure. - */ -GIT_EXTERN(int) git_remote_init_callbacks( - git_remote_callbacks *opts, - unsigned int version); - -/** Acceptable prune settings when fetching */ -typedef enum { - /** - * Use the setting from the configuration - */ - GIT_FETCH_PRUNE_UNSPECIFIED, - /** - * Force pruning on - */ - GIT_FETCH_PRUNE, - /** - * Force pruning off - */ - GIT_FETCH_NO_PRUNE, -} git_fetch_prune_t; - -/** - * Automatic tag following option - * - * Lets us select the --tags option to use. - */ -typedef enum { - /** - * Use the setting from the configuration. - */ - GIT_REMOTE_DOWNLOAD_TAGS_UNSPECIFIED = 0, - /** - * Ask the server for tags pointing to objects we're already - * downloading. - */ - GIT_REMOTE_DOWNLOAD_TAGS_AUTO, - /** - * Don't ask for any tags beyond the refspecs. - */ - GIT_REMOTE_DOWNLOAD_TAGS_NONE, - /** - * Ask for the all the tags. - */ - GIT_REMOTE_DOWNLOAD_TAGS_ALL, -} git_remote_autotag_option_t; - -/** - * Fetch options structure. - * - * Zero out for defaults. Initialize with `GIT_FETCH_OPTIONS_INIT` macro to - * correctly set the `version` field. E.g. - * - * git_fetch_options opts = GIT_FETCH_OPTIONS_INIT; - */ -typedef struct { - int version; - - /** - * Callbacks to use for this fetch operation - */ - git_remote_callbacks callbacks; - - /** - * Whether to perform a prune after the fetch - */ - git_fetch_prune_t prune; - - /** - * Whether to write the results to FETCH_HEAD. Defaults to - * on. Leave this default in order to behave like git. - */ - int update_fetchhead; - - /** - * Determines how to behave regarding tags on the remote, such - * as auto-downloading tags for objects we're downloading or - * downloading all of them. - * - * The default is to auto-follow tags. - */ - git_remote_autotag_option_t download_tags; - - /** - * Proxy options to use, by default no proxy is used. - */ - git_proxy_options proxy_opts; - - /** - * Extra headers for this fetch operation - */ - git_strarray custom_headers; -} git_fetch_options; - -#define GIT_FETCH_OPTIONS_VERSION 1 -#define GIT_FETCH_OPTIONS_INIT { GIT_FETCH_OPTIONS_VERSION, GIT_REMOTE_CALLBACKS_INIT, GIT_FETCH_PRUNE_UNSPECIFIED, 1, \ - GIT_REMOTE_DOWNLOAD_TAGS_UNSPECIFIED, GIT_PROXY_OPTIONS_INIT } - -/** - * Initialize git_fetch_options structure - * - * Initializes a `git_fetch_options` with default values. Equivalent to - * creating an instance with `GIT_FETCH_OPTIONS_INIT`. - * - * @param opts The `git_fetch_options` struct to initialize. - * @param version The struct version; pass `GIT_FETCH_OPTIONS_VERSION`. - * @return Zero on success; -1 on failure. - */ -GIT_EXTERN(int) git_fetch_options_init( - git_fetch_options *opts, - unsigned int version); - - -/** - * Controls the behavior of a git_push object. - */ -typedef struct { - unsigned int version; - - /** - * If the transport being used to push to the remote requires the creation - * of a pack file, this controls the number of worker threads used by - * the packbuilder when creating that pack file to be sent to the remote. - * - * If set to 0, the packbuilder will auto-detect the number of threads - * to create. The default value is 1. - */ - unsigned int pb_parallelism; - - /** - * Callbacks to use for this push operation - */ - git_remote_callbacks callbacks; - - /** - * Proxy options to use, by default no proxy is used. - */ - git_proxy_options proxy_opts; - - /** - * Extra headers for this push operation - */ - git_strarray custom_headers; -} git_push_options; - -#define GIT_PUSH_OPTIONS_VERSION 1 -#define GIT_PUSH_OPTIONS_INIT { GIT_PUSH_OPTIONS_VERSION, 1, GIT_REMOTE_CALLBACKS_INIT, GIT_PROXY_OPTIONS_INIT } - -/** - * Initialize git_push_options structure - * - * Initializes a `git_push_options` with default values. Equivalent to - * creating an instance with `GIT_PUSH_OPTIONS_INIT`. - * - * @param opts The `git_push_options` struct to initialize. - * @param version The struct version; pass `GIT_PUSH_OPTIONS_VERSION`. - * @return Zero on success; -1 on failure. - */ -GIT_EXTERN(int) git_push_options_init( - git_push_options *opts, - unsigned int version); - -/** - * Download and index the packfile - * - * Connect to the remote if it hasn't been done yet, negotiate with - * the remote git which objects are missing, download and index the - * packfile. - * - * The .idx file will be created and both it and the packfile with be - * renamed to their final name. - * - * @param remote the remote - * @param refspecs the refspecs to use for this negotiation and - * download. Use NULL or an empty array to use the base refspecs - * @param opts the options to use for this fetch - * @return 0 or an error code - */ - GIT_EXTERN(int) git_remote_download(git_remote *remote, const git_strarray *refspecs, const git_fetch_options *opts); - -/** - * Create a packfile and send it to the server - * - * Connect to the remote if it hasn't been done yet, negotiate with - * the remote git which objects are missing, create a packfile with the missing objects and send it. - * - * @param remote the remote - * @param refspecs the refspecs to use for this negotiation and - * upload. Use NULL or an empty array to use the base refspecs - * @param opts the options to use for this push - * @return 0 or an error code - */ -GIT_EXTERN(int) git_remote_upload(git_remote *remote, const git_strarray *refspecs, const git_push_options *opts); - -/** - * Update the tips to the new state - * - * @param remote the remote to update - * @param reflog_message The message to insert into the reflogs. If - * NULL and fetching, the default is "fetch ", where is - * the name of the remote (or its url, for in-memory remotes). This - * parameter is ignored when pushing. - * @param callbacks pointer to the callback structure to use - * @param update_fetchhead whether to write to FETCH_HEAD. Pass 1 to behave like git. - * @param download_tags what the behaviour for downloading tags is for this fetch. This is - * ignored for push. This must be the same value passed to `git_remote_download()`. - * @return 0 or an error code - */ -GIT_EXTERN(int) git_remote_update_tips( - git_remote *remote, - const git_remote_callbacks *callbacks, - int update_fetchhead, - git_remote_autotag_option_t download_tags, - const char *reflog_message); - -/** - * Download new data and update tips - * - * Convenience function to connect to a remote, download the data, - * disconnect and update the remote-tracking branches. - * - * @param remote the remote to fetch from - * @param refspecs the refspecs to use for this fetch. Pass NULL or an - * empty array to use the base refspecs. - * @param opts options to use for this fetch - * @param reflog_message The message to insert into the reflogs. If NULL, the - * default is "fetch" - * @return 0 or an error code - */ -GIT_EXTERN(int) git_remote_fetch( - git_remote *remote, - const git_strarray *refspecs, - const git_fetch_options *opts, - const char *reflog_message); - -/** - * Prune tracking refs that are no longer present on remote - * - * @param remote the remote to prune - * @param callbacks callbacks to use for this prune - * @return 0 or an error code - */ -GIT_EXTERN(int) git_remote_prune(git_remote *remote, const git_remote_callbacks *callbacks); - -/** - * Perform a push - * - * Peform all the steps from a push. - * - * @param remote the remote to push to - * @param refspecs the refspecs to use for pushing. If NULL or an empty - * array, the configured refspecs will be used - * @param opts options to use for this push - */ -GIT_EXTERN(int) git_remote_push(git_remote *remote, - const git_strarray *refspecs, - const git_push_options *opts); - -/** - * Get the statistics structure that is filled in by the fetch operation. - */ -GIT_EXTERN(const git_indexer_progress *) git_remote_stats(git_remote *remote); - -/** - * Retrieve the tag auto-follow setting - * - * @param remote the remote to query - * @return the auto-follow setting - */ -GIT_EXTERN(git_remote_autotag_option_t) git_remote_autotag(const git_remote *remote); - -/** - * Set the remote's tag following setting. - * - * The change will be made in the configuration. No loaded remotes - * will be affected. - * - * @param repo the repository in which to make the change - * @param remote the name of the remote - * @param value the new value to take. - * @return 0, or an error code. - */ -GIT_EXTERN(int) git_remote_set_autotag(git_repository *repo, const char *remote, git_remote_autotag_option_t value); - -/** - * Retrieve the ref-prune setting - * - * @param remote the remote to query - * @return the ref-prune setting - */ -GIT_EXTERN(int) git_remote_prune_refs(const git_remote *remote); - -/** - * Give the remote a new name - * - * All remote-tracking branches and configuration settings - * for the remote are updated. - * - * The new name will be checked for validity. - * See `git_tag_create()` for rules about valid names. - * - * No loaded instances of a the remote with the old name will change - * their name or their list of refspecs. - * - * @param problems non-default refspecs cannot be renamed and will be - * stored here for further processing by the caller. Always free this - * strarray on successful return. - * @param repo the repository in which to rename - * @param name the current name of the remote - * @param new_name the new name the remote should bear - * @return 0, GIT_EINVALIDSPEC, GIT_EEXISTS or an error code - */ -GIT_EXTERN(int) git_remote_rename( - git_strarray *problems, - git_repository *repo, - const char *name, - const char *new_name); - -/** - * Ensure the remote name is well-formed. - * - * @param valid output pointer to set with validity of given remote name - * @param remote_name name to be checked. - * @return 0 on success or an error code - */ -GIT_EXTERN(int) git_remote_name_is_valid(int *valid, const char *remote_name); - -/** -* Delete an existing persisted remote. -* -* All remote-tracking branches and configuration settings -* for the remote will be removed. -* -* @param repo the repository in which to act -* @param name the name of the remote to delete -* @return 0 on success, or an error code. -*/ -GIT_EXTERN(int) git_remote_delete(git_repository *repo, const char *name); - -/** - * Retrieve the name of the remote's default branch - * - * The default branch of a repository is the branch which HEAD points - * to. If the remote does not support reporting this information - * directly, it performs the guess as git does; that is, if there are - * multiple branches which point to the same commit, the first one is - * chosen. If the master branch is a candidate, it wins. - * - * This function must only be called after connecting. - * - * @param out the buffer in which to store the reference name - * @param remote the remote - * @return 0, GIT_ENOTFOUND if the remote does not have any references - * or none of them point to HEAD's commit, or an error message. - */ -GIT_EXTERN(int) git_remote_default_branch(git_buf *out, git_remote *remote); - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/repository.h b/libgit2/headers/git2/repository.h deleted file mode 100644 index 8d1cffc..0000000 --- a/libgit2/headers/git2/repository.h +++ /dev/null @@ -1,949 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_repository_h__ -#define INCLUDE_git_repository_h__ - -#include "common.h" -#include "types.h" -#include "oid.h" -#include "buffer.h" - -/** - * @file git2/repository.h - * @brief Git repository management routines - * @defgroup git_repository Git repository management routines - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Open a git repository. - * - * The 'path' argument must point to either a git repository - * folder, or an existing work dir. - * - * The method will automatically detect if 'path' is a normal - * or bare repository or fail is 'path' is neither. - * - * @param out pointer to the repo which will be opened - * @param path the path to the repository - * @return 0 or an error code - */ -GIT_EXTERN(int) git_repository_open(git_repository **out, const char *path); -/** - * Open working tree as a repository - * - * Open the working directory of the working tree as a normal - * repository that can then be worked on. - * - * @param out Output pointer containing opened repository - * @param wt Working tree to open - * @return 0 or an error code - */ -GIT_EXTERN(int) git_repository_open_from_worktree(git_repository **out, git_worktree *wt); - -/** - * Create a "fake" repository to wrap an object database - * - * Create a repository object to wrap an object database to be used - * with the API when all you have is an object database. This doesn't - * have any paths associated with it, so use with care. - * - * @param out pointer to the repo - * @param odb the object database to wrap - * @return 0 or an error code - */ -GIT_EXTERN(int) git_repository_wrap_odb(git_repository **out, git_odb *odb); - -/** - * Look for a git repository and copy its path in the given buffer. - * The lookup start from base_path and walk across parent directories - * if nothing has been found. The lookup ends when the first repository - * is found, or when reaching a directory referenced in ceiling_dirs - * or when the filesystem changes (in case across_fs is true). - * - * The method will automatically detect if the repository is bare - * (if there is a repository). - * - * @param out A pointer to a user-allocated git_buf which will contain - * the found path. - * - * @param start_path The base path where the lookup starts. - * - * @param across_fs If true, then the lookup will not stop when a - * filesystem device change is detected while exploring parent directories. - * - * @param ceiling_dirs A GIT_PATH_LIST_SEPARATOR separated list of - * absolute symbolic link free paths. The lookup will stop when any - * of this paths is reached. Note that the lookup always performs on - * start_path no matter start_path appears in ceiling_dirs ceiling_dirs - * might be NULL (which is equivalent to an empty string) - * - * @return 0 or an error code - */ -GIT_EXTERN(int) git_repository_discover( - git_buf *out, - const char *start_path, - int across_fs, - const char *ceiling_dirs); - -/** - * Option flags for `git_repository_open_ext`. - */ -typedef enum { - /** - * Only open the repository if it can be immediately found in the - * start_path. Do not walk up from the start_path looking at parent - * directories. - */ - GIT_REPOSITORY_OPEN_NO_SEARCH = (1 << 0), - - /** - * Unless this flag is set, open will not continue searching across - * filesystem boundaries (i.e. when `st_dev` changes from the `stat` - * system call). For example, searching in a user's home directory at - * "/home/user/source/" will not return "/.git/" as the found repo if - * "/" is a different filesystem than "/home". - */ - GIT_REPOSITORY_OPEN_CROSS_FS = (1 << 1), - - /** - * Open repository as a bare repo regardless of core.bare config, and - * defer loading config file for faster setup. - * Unlike `git_repository_open_bare`, this can follow gitlinks. - */ - GIT_REPOSITORY_OPEN_BARE = (1 << 2), - - /** - * Do not check for a repository by appending /.git to the start_path; - * only open the repository if start_path itself points to the git - * directory. - */ - GIT_REPOSITORY_OPEN_NO_DOTGIT = (1 << 3), - - /** - * Find and open a git repository, respecting the environment variables - * used by the git command-line tools. - * If set, `git_repository_open_ext` will ignore the other flags and - * the `ceiling_dirs` argument, and will allow a NULL `path` to use - * `GIT_DIR` or search from the current directory. - * The search for a repository will respect $GIT_CEILING_DIRECTORIES and - * $GIT_DISCOVERY_ACROSS_FILESYSTEM. The opened repository will - * respect $GIT_INDEX_FILE, $GIT_NAMESPACE, $GIT_OBJECT_DIRECTORY, and - * $GIT_ALTERNATE_OBJECT_DIRECTORIES. - * In the future, this flag will also cause `git_repository_open_ext` - * to respect $GIT_WORK_TREE and $GIT_COMMON_DIR; currently, - * `git_repository_open_ext` with this flag will error out if either - * $GIT_WORK_TREE or $GIT_COMMON_DIR is set. - */ - GIT_REPOSITORY_OPEN_FROM_ENV = (1 << 4), -} git_repository_open_flag_t; - -/** - * Find and open a repository with extended controls. - * - * @param out Pointer to the repo which will be opened. This can - * actually be NULL if you only want to use the error code to - * see if a repo at this path could be opened. - * @param path Path to open as git repository. If the flags - * permit "searching", then this can be a path to a subdirectory - * inside the working directory of the repository. May be NULL if - * flags is GIT_REPOSITORY_OPEN_FROM_ENV. - * @param flags A combination of the GIT_REPOSITORY_OPEN flags above. - * @param ceiling_dirs A GIT_PATH_LIST_SEPARATOR delimited list of path - * prefixes at which the search for a containing repository should - * terminate. - * @return 0 on success, GIT_ENOTFOUND if no repository could be found, - * or -1 if there was a repository but open failed for some reason - * (such as repo corruption or system errors). - */ -GIT_EXTERN(int) git_repository_open_ext( - git_repository **out, - const char *path, - unsigned int flags, - const char *ceiling_dirs); - -/** - * Open a bare repository on the serverside. - * - * This is a fast open for bare repositories that will come in handy - * if you're e.g. hosting git repositories and need to access them - * efficiently - * - * @param out Pointer to the repo which will be opened. - * @param bare_path Direct path to the bare repository - * @return 0 on success, or an error code - */ -GIT_EXTERN(int) git_repository_open_bare(git_repository **out, const char *bare_path); - -/** - * Free a previously allocated repository - * - * Note that after a repository is free'd, all the objects it has spawned - * will still exist until they are manually closed by the user - * with `git_object_free`, but accessing any of the attributes of - * an object without a backing repository will result in undefined - * behavior - * - * @param repo repository handle to close. If NULL nothing occurs. - */ -GIT_EXTERN(void) git_repository_free(git_repository *repo); - -/** - * Creates a new Git repository in the given folder. - * - * TODO: - * - Reinit the repository - * - * @param out pointer to the repo which will be created or reinitialized - * @param path the path to the repository - * @param is_bare if true, a Git repository without a working directory is - * created at the pointed path. If false, provided path will be - * considered as the working directory into which the .git directory - * will be created. - * - * @return 0 or an error code - */ -GIT_EXTERN(int) git_repository_init( - git_repository **out, - const char *path, - unsigned is_bare); - -/** - * Option flags for `git_repository_init_ext`. - * - * These flags configure extra behaviors to `git_repository_init_ext`. - * In every case, the default behavior is the zero value (i.e. flag is - * not set). Just OR the flag values together for the `flags` parameter - * when initializing a new repo. - */ -typedef enum { - /** - * Create a bare repository with no working directory. - */ - GIT_REPOSITORY_INIT_BARE = (1u << 0), - - /** - * Return an GIT_EEXISTS error if the repo_path appears to already be - * an git repository. - */ - GIT_REPOSITORY_INIT_NO_REINIT = (1u << 1), - - /** - * Normally a "/.git/" will be appended to the repo path for - * non-bare repos (if it is not already there), but passing this flag - * prevents that behavior. - */ - GIT_REPOSITORY_INIT_NO_DOTGIT_DIR = (1u << 2), - - /** - * Make the repo_path (and workdir_path) as needed. Init is always willing - * to create the ".git" directory even without this flag. This flag tells - * init to create the trailing component of the repo and workdir paths - * as needed. - */ - GIT_REPOSITORY_INIT_MKDIR = (1u << 3), - - /** - * Recursively make all components of the repo and workdir paths as - * necessary. - */ - GIT_REPOSITORY_INIT_MKPATH = (1u << 4), - - /** - * libgit2 normally uses internal templates to initialize a new repo. - * This flags enables external templates, looking the "template_path" from - * the options if set, or the `init.templatedir` global config if not, - * or falling back on "/usr/share/git-core/templates" if it exists. - */ - GIT_REPOSITORY_INIT_EXTERNAL_TEMPLATE = (1u << 5), - - /** - * If an alternate workdir is specified, use relative paths for the gitdir - * and core.worktree. - */ - GIT_REPOSITORY_INIT_RELATIVE_GITLINK = (1u << 6), -} git_repository_init_flag_t; - -/** - * Mode options for `git_repository_init_ext`. - * - * Set the mode field of the `git_repository_init_options` structure - * either to the custom mode that you would like, or to one of the - * defined modes. - */ -typedef enum { - /** - * Use permissions configured by umask - the default. - */ - GIT_REPOSITORY_INIT_SHARED_UMASK = 0, - - /** - * Use "--shared=group" behavior, chmod'ing the new repo to be group - * writable and "g+sx" for sticky group assignment. - */ - GIT_REPOSITORY_INIT_SHARED_GROUP = 0002775, - - /** - * Use "--shared=all" behavior, adding world readability. - */ - GIT_REPOSITORY_INIT_SHARED_ALL = 0002777, -} git_repository_init_mode_t; - -/** - * Extended options structure for `git_repository_init_ext`. - * - * This contains extra options for `git_repository_init_ext` that enable - * additional initialization features. - */ -typedef struct { - unsigned int version; - - /** - * Combination of GIT_REPOSITORY_INIT flags above. - */ - uint32_t flags; - - /** - * Set to one of the standard GIT_REPOSITORY_INIT_SHARED_... constants - * above, or to a custom value that you would like. - */ - uint32_t mode; - - /** - * The path to the working dir or NULL for default (i.e. repo_path parent - * on non-bare repos). IF THIS IS RELATIVE PATH, IT WILL BE EVALUATED - * RELATIVE TO THE REPO_PATH. If this is not the "natural" working - * directory, a .git gitlink file will be created here linking to the - * repo_path. - */ - const char *workdir_path; - - /** - * If set, this will be used to initialize the "description" file in the - * repository, instead of using the template content. - */ - const char *description; - - /** - * When GIT_REPOSITORY_INIT_EXTERNAL_TEMPLATE is set, this contains - * the path to use for the template directory. If this is NULL, the config - * or default directory options will be used instead. - */ - const char *template_path; - - /** - * The name of the head to point HEAD at. If NULL, then this will be - * treated as "master" and the HEAD ref will be set to "refs/heads/master". - * If this begins with "refs/" it will be used verbatim; - * otherwise "refs/heads/" will be prefixed. - */ - const char *initial_head; - - /** - * If this is non-NULL, then after the rest of the repository - * initialization is completed, an "origin" remote will be added - * pointing to this URL. - */ - const char *origin_url; -} git_repository_init_options; - -#define GIT_REPOSITORY_INIT_OPTIONS_VERSION 1 -#define GIT_REPOSITORY_INIT_OPTIONS_INIT {GIT_REPOSITORY_INIT_OPTIONS_VERSION} - -/** - * Initialize git_repository_init_options structure - * - * Initializes a `git_repository_init_options` with default values. Equivalent to - * creating an instance with `GIT_REPOSITORY_INIT_OPTIONS_INIT`. - * - * @param opts The `git_repository_init_options` struct to initialize. - * @param version The struct version; pass `GIT_REPOSITORY_INIT_OPTIONS_VERSION`. - * @return Zero on success; -1 on failure. - */ -GIT_EXTERN(int) git_repository_init_options_init( - git_repository_init_options *opts, - unsigned int version); - -/** - * Create a new Git repository in the given folder with extended controls. - * - * This will initialize a new git repository (creating the repo_path - * if requested by flags) and working directory as needed. It will - * auto-detect the case sensitivity of the file system and if the - * file system supports file mode bits correctly. - * - * @param out Pointer to the repo which will be created or reinitialized. - * @param repo_path The path to the repository. - * @param opts Pointer to git_repository_init_options struct. - * @return 0 or an error code on failure. - */ -GIT_EXTERN(int) git_repository_init_ext( - git_repository **out, - const char *repo_path, - git_repository_init_options *opts); - -/** - * Retrieve and resolve the reference pointed at by HEAD. - * - * The returned `git_reference` will be owned by caller and - * `git_reference_free()` must be called when done with it to release the - * allocated memory and prevent a leak. - * - * @param out pointer to the reference which will be retrieved - * @param repo a repository object - * - * @return 0 on success, GIT_EUNBORNBRANCH when HEAD points to a non existing - * branch, GIT_ENOTFOUND when HEAD is missing; an error code otherwise - */ -GIT_EXTERN(int) git_repository_head(git_reference **out, git_repository *repo); - -/** - * Retrieve the referenced HEAD for the worktree - * - * @param out pointer to the reference which will be retrieved - * @param repo a repository object - * @param name name of the worktree to retrieve HEAD for - * @return 0 when successful, error-code otherwise - */ -GIT_EXTERN(int) git_repository_head_for_worktree(git_reference **out, git_repository *repo, - const char *name); - -/** - * Check if a repository's HEAD is detached - * - * A repository's HEAD is detached when it points directly to a commit - * instead of a branch. - * - * @param repo Repo to test - * @return 1 if HEAD is detached, 0 if it's not; error code if there - * was an error. - */ -GIT_EXTERN(int) git_repository_head_detached(git_repository *repo); - -/** - * Check if a worktree's HEAD is detached - * - * A worktree's HEAD is detached when it points directly to a - * commit instead of a branch. - * - * @param repo a repository object - * @param name name of the worktree to retrieve HEAD for - * @return 1 if HEAD is detached, 0 if its not; error code if - * there was an error - */ -GIT_EXTERN(int) git_repository_head_detached_for_worktree(git_repository *repo, - const char *name); - -/** - * Check if the current branch is unborn - * - * An unborn branch is one named from HEAD but which doesn't exist in - * the refs namespace, because it doesn't have any commit to point to. - * - * @param repo Repo to test - * @return 1 if the current branch is unborn, 0 if it's not; error - * code if there was an error - */ -GIT_EXTERN(int) git_repository_head_unborn(git_repository *repo); - -/** - * Check if a repository is empty - * - * An empty repository has just been initialized and contains no references - * apart from HEAD, which must be pointing to the unborn master branch. - * - * @param repo Repo to test - * @return 1 if the repository is empty, 0 if it isn't, error code - * if the repository is corrupted - */ -GIT_EXTERN(int) git_repository_is_empty(git_repository *repo); - -/** - * List of items which belong to the git repository layout - */ -typedef enum { - GIT_REPOSITORY_ITEM_GITDIR, - GIT_REPOSITORY_ITEM_WORKDIR, - GIT_REPOSITORY_ITEM_COMMONDIR, - GIT_REPOSITORY_ITEM_INDEX, - GIT_REPOSITORY_ITEM_OBJECTS, - GIT_REPOSITORY_ITEM_REFS, - GIT_REPOSITORY_ITEM_PACKED_REFS, - GIT_REPOSITORY_ITEM_REMOTES, - GIT_REPOSITORY_ITEM_CONFIG, - GIT_REPOSITORY_ITEM_INFO, - GIT_REPOSITORY_ITEM_HOOKS, - GIT_REPOSITORY_ITEM_LOGS, - GIT_REPOSITORY_ITEM_MODULES, - GIT_REPOSITORY_ITEM_WORKTREES, - GIT_REPOSITORY_ITEM__LAST -} git_repository_item_t; - -/** - * Get the location of a specific repository file or directory - * - * This function will retrieve the path of a specific repository - * item. It will thereby honor things like the repository's - * common directory, gitdir, etc. In case a file path cannot - * exist for a given item (e.g. the working directory of a bare - * repository), GIT_ENOTFOUND is returned. - * - * @param out Buffer to store the path at - * @param repo Repository to get path for - * @param item The repository item for which to retrieve the path - * @return 0, GIT_ENOTFOUND if the path cannot exist or an error code - */ -GIT_EXTERN(int) git_repository_item_path(git_buf *out, const git_repository *repo, git_repository_item_t item); - -/** - * Get the path of this repository - * - * This is the path of the `.git` folder for normal repositories, - * or of the repository itself for bare repositories. - * - * @param repo A repository object - * @return the path to the repository - */ -GIT_EXTERN(const char *) git_repository_path(const git_repository *repo); - -/** - * Get the path of the working directory for this repository - * - * If the repository is bare, this function will always return - * NULL. - * - * @param repo A repository object - * @return the path to the working dir, if it exists - */ -GIT_EXTERN(const char *) git_repository_workdir(const git_repository *repo); - -/** - * Get the path of the shared common directory for this repository. - * - * If the repository is bare, it is the root directory for the repository. - * If the repository is a worktree, it is the parent repo's gitdir. - * Otherwise, it is the gitdir. - * - * @param repo A repository object - * @return the path to the common dir - */ -GIT_EXTERN(const char *) git_repository_commondir(const git_repository *repo); - -/** - * Set the path to the working directory for this repository - * - * The working directory doesn't need to be the same one - * that contains the `.git` folder for this repository. - * - * If this repository is bare, setting its working directory - * will turn it into a normal repository, capable of performing - * all the common workdir operations (checkout, status, index - * manipulation, etc). - * - * @param repo A repository object - * @param workdir The path to a working directory - * @param update_gitlink Create/update gitlink in workdir and set config - * "core.worktree" (if workdir is not the parent of the .git directory) - * @return 0, or an error code - */ -GIT_EXTERN(int) git_repository_set_workdir( - git_repository *repo, const char *workdir, int update_gitlink); - -/** - * Check if a repository is bare - * - * @param repo Repo to test - * @return 1 if the repository is bare, 0 otherwise. - */ -GIT_EXTERN(int) git_repository_is_bare(const git_repository *repo); - -/** - * Check if a repository is a linked work tree - * - * @param repo Repo to test - * @return 1 if the repository is a linked work tree, 0 otherwise. - */ -GIT_EXTERN(int) git_repository_is_worktree(const git_repository *repo); - -/** - * Get the configuration file for this repository. - * - * If a configuration file has not been set, the default - * config set for the repository will be returned, including - * global and system configurations (if they are available). - * - * The configuration file must be freed once it's no longer - * being used by the user. - * - * @param out Pointer to store the loaded configuration - * @param repo A repository object - * @return 0, or an error code - */ -GIT_EXTERN(int) git_repository_config(git_config **out, git_repository *repo); - -/** - * Get a snapshot of the repository's configuration - * - * Convenience function to take a snapshot from the repository's - * configuration. The contents of this snapshot will not change, - * even if the underlying config files are modified. - * - * The configuration file must be freed once it's no longer - * being used by the user. - * - * @param out Pointer to store the loaded configuration - * @param repo the repository - * @return 0, or an error code - */ -GIT_EXTERN(int) git_repository_config_snapshot(git_config **out, git_repository *repo); - -/** - * Get the Object Database for this repository. - * - * If a custom ODB has not been set, the default - * database for the repository will be returned (the one - * located in `.git/objects`). - * - * The ODB must be freed once it's no longer being used by - * the user. - * - * @param out Pointer to store the loaded ODB - * @param repo A repository object - * @return 0, or an error code - */ -GIT_EXTERN(int) git_repository_odb(git_odb **out, git_repository *repo); - -/** - * Get the Reference Database Backend for this repository. - * - * If a custom refsdb has not been set, the default database for - * the repository will be returned (the one that manipulates loose - * and packed references in the `.git` directory). - * - * The refdb must be freed once it's no longer being used by - * the user. - * - * @param out Pointer to store the loaded refdb - * @param repo A repository object - * @return 0, or an error code - */ -GIT_EXTERN(int) git_repository_refdb(git_refdb **out, git_repository *repo); - -/** - * Get the Index file for this repository. - * - * If a custom index has not been set, the default - * index for the repository will be returned (the one - * located in `.git/index`). - * - * The index must be freed once it's no longer being used by - * the user. - * - * @param out Pointer to store the loaded index - * @param repo A repository object - * @return 0, or an error code - */ -GIT_EXTERN(int) git_repository_index(git_index **out, git_repository *repo); - -/** - * Retrieve git's prepared message - * - * Operations such as git revert/cherry-pick/merge with the -n option - * stop just short of creating a commit with the changes and save - * their prepared message in .git/MERGE_MSG so the next git-commit - * execution can present it to the user for them to amend if they - * wish. - * - * Use this function to get the contents of this file. Don't forget to - * remove the file after you create the commit. - * - * @param out git_buf to write data into - * @param repo Repository to read prepared message from - * @return 0, GIT_ENOTFOUND if no message exists or an error code - */ -GIT_EXTERN(int) git_repository_message(git_buf *out, git_repository *repo); - -/** - * Remove git's prepared message. - * - * Remove the message that `git_repository_message` retrieves. - */ -GIT_EXTERN(int) git_repository_message_remove(git_repository *repo); - -/** - * Remove all the metadata associated with an ongoing command like merge, - * revert, cherry-pick, etc. For example: MERGE_HEAD, MERGE_MSG, etc. - * - * @param repo A repository object - * @return 0 on success, or error - */ -GIT_EXTERN(int) git_repository_state_cleanup(git_repository *repo); - -/** - * Callback used to iterate over each FETCH_HEAD entry - * - * @see git_repository_fetchhead_foreach - * - * @param ref_name The reference name - * @param remote_url The remote URL - * @param oid The reference target OID - * @param is_merge Was the reference the result of a merge - * @param payload Payload passed to git_repository_fetchhead_foreach - * @return non-zero to terminate the iteration - */ -typedef int GIT_CALLBACK(git_repository_fetchhead_foreach_cb)(const char *ref_name, - const char *remote_url, - const git_oid *oid, - unsigned int is_merge, - void *payload); - -/** - * Invoke 'callback' for each entry in the given FETCH_HEAD file. - * - * Return a non-zero value from the callback to stop the loop. - * - * @param repo A repository object - * @param callback Callback function - * @param payload Pointer to callback data (optional) - * @return 0 on success, non-zero callback return value, GIT_ENOTFOUND if - * there is no FETCH_HEAD file, or other error code. - */ -GIT_EXTERN(int) git_repository_fetchhead_foreach( - git_repository *repo, - git_repository_fetchhead_foreach_cb callback, - void *payload); - -/** - * Callback used to iterate over each MERGE_HEAD entry - * - * @see git_repository_mergehead_foreach - * - * @param oid The merge OID - * @param payload Payload passed to git_repository_mergehead_foreach - * @return non-zero to terminate the iteration - */ -typedef int GIT_CALLBACK(git_repository_mergehead_foreach_cb)(const git_oid *oid, - void *payload); - -/** - * If a merge is in progress, invoke 'callback' for each commit ID in the - * MERGE_HEAD file. - * - * Return a non-zero value from the callback to stop the loop. - * - * @param repo A repository object - * @param callback Callback function - * @param payload Pointer to callback data (optional) - * @return 0 on success, non-zero callback return value, GIT_ENOTFOUND if - * there is no MERGE_HEAD file, or other error code. - */ -GIT_EXTERN(int) git_repository_mergehead_foreach( - git_repository *repo, - git_repository_mergehead_foreach_cb callback, - void *payload); - -/** - * Calculate hash of file using repository filtering rules. - * - * If you simply want to calculate the hash of a file on disk with no filters, - * you can just use the `git_odb_hashfile()` API. However, if you want to - * hash a file in the repository and you want to apply filtering rules (e.g. - * crlf filters) before generating the SHA, then use this function. - * - * Note: if the repository has `core.safecrlf` set to fail and the - * filtering triggers that failure, then this function will return an - * error and not calculate the hash of the file. - * - * @param out Output value of calculated SHA - * @param repo Repository pointer - * @param path Path to file on disk whose contents should be hashed. This - * may be an absolute path or a relative path, in which case it - * will be treated as a path within the working directory. - * @param type The object type to hash as (e.g. GIT_OBJECT_BLOB) - * @param as_path The path to use to look up filtering rules. If this is - * an empty string then no filters will be applied when - * calculating the hash. If this is `NULL` and the `path` - * parameter is a file within the repository's working - * directory, then the `path` will be used. - * @return 0 on success, or an error code - */ -GIT_EXTERN(int) git_repository_hashfile( - git_oid *out, - git_repository *repo, - const char *path, - git_object_t type, - const char *as_path); - -/** - * Make the repository HEAD point to the specified reference. - * - * If the provided reference points to a Tree or a Blob, the HEAD is - * unaltered and -1 is returned. - * - * If the provided reference points to a branch, the HEAD will point - * to that branch, staying attached, or become attached if it isn't yet. - * If the branch doesn't exist yet, no error will be return. The HEAD - * will then be attached to an unborn branch. - * - * Otherwise, the HEAD will be detached and will directly point to - * the Commit. - * - * @param repo Repository pointer - * @param refname Canonical name of the reference the HEAD should point at - * @return 0 on success, or an error code - */ -GIT_EXTERN(int) git_repository_set_head( - git_repository *repo, - const char *refname); - -/** - * Make the repository HEAD directly point to the Commit. - * - * If the provided committish cannot be found in the repository, the HEAD - * is unaltered and GIT_ENOTFOUND is returned. - * - * If the provided commitish cannot be peeled into a commit, the HEAD - * is unaltered and -1 is returned. - * - * Otherwise, the HEAD will eventually be detached and will directly point to - * the peeled Commit. - * - * @param repo Repository pointer - * @param commitish Object id of the Commit the HEAD should point to - * @return 0 on success, or an error code - */ -GIT_EXTERN(int) git_repository_set_head_detached( - git_repository *repo, - const git_oid *commitish); - -/** - * Make the repository HEAD directly point to the Commit. - * - * This behaves like `git_repository_set_head_detached()` but takes an - * annotated commit, which lets you specify which extended sha syntax - * string was specified by a user, allowing for more exact reflog - * messages. - * - * See the documentation for `git_repository_set_head_detached()`. - * - * @see git_repository_set_head_detached - */ -GIT_EXTERN(int) git_repository_set_head_detached_from_annotated( - git_repository *repo, - const git_annotated_commit *commitish); - -/** - * Detach the HEAD. - * - * If the HEAD is already detached and points to a Commit, 0 is returned. - * - * If the HEAD is already detached and points to a Tag, the HEAD is - * updated into making it point to the peeled Commit, and 0 is returned. - * - * If the HEAD is already detached and points to a non commitish, the HEAD is - * unaltered, and -1 is returned. - * - * Otherwise, the HEAD will be detached and point to the peeled Commit. - * - * @param repo Repository pointer - * @return 0 on success, GIT_EUNBORNBRANCH when HEAD points to a non existing - * branch or an error code - */ -GIT_EXTERN(int) git_repository_detach_head( - git_repository *repo); - -/** - * Repository state - * - * These values represent possible states for the repository to be in, - * based on the current operation which is ongoing. - */ -typedef enum { - GIT_REPOSITORY_STATE_NONE, - GIT_REPOSITORY_STATE_MERGE, - GIT_REPOSITORY_STATE_REVERT, - GIT_REPOSITORY_STATE_REVERT_SEQUENCE, - GIT_REPOSITORY_STATE_CHERRYPICK, - GIT_REPOSITORY_STATE_CHERRYPICK_SEQUENCE, - GIT_REPOSITORY_STATE_BISECT, - GIT_REPOSITORY_STATE_REBASE, - GIT_REPOSITORY_STATE_REBASE_INTERACTIVE, - GIT_REPOSITORY_STATE_REBASE_MERGE, - GIT_REPOSITORY_STATE_APPLY_MAILBOX, - GIT_REPOSITORY_STATE_APPLY_MAILBOX_OR_REBASE, -} git_repository_state_t; - -/** - * Determines the status of a git repository - ie, whether an operation - * (merge, cherry-pick, etc) is in progress. - * - * @param repo Repository pointer - * @return The state of the repository - */ -GIT_EXTERN(int) git_repository_state(git_repository *repo); - -/** - * Sets the active namespace for this Git Repository - * - * This namespace affects all reference operations for the repo. - * See `man gitnamespaces` - * - * @param repo The repo - * @param nmspace The namespace. This should not include the refs - * folder, e.g. to namespace all references under `refs/namespaces/foo/`, - * use `foo` as the namespace. - * @return 0 on success, -1 on error - */ -GIT_EXTERN(int) git_repository_set_namespace(git_repository *repo, const char *nmspace); - -/** - * Get the currently active namespace for this repository - * - * @param repo The repo - * @return the active namespace, or NULL if there isn't one - */ -GIT_EXTERN(const char *) git_repository_get_namespace(git_repository *repo); - - -/** - * Determine if the repository was a shallow clone - * - * @param repo The repository - * @return 1 if shallow, zero if not - */ -GIT_EXTERN(int) git_repository_is_shallow(git_repository *repo); - -/** - * Retrieve the configured identity to use for reflogs - * - * The memory is owned by the repository and must not be freed by the - * user. - * - * @param name where to store the pointer to the name - * @param email where to store the pointer to the email - * @param repo the repository - */ -GIT_EXTERN(int) git_repository_ident(const char **name, const char **email, const git_repository *repo); - -/** - * Set the identity to be used for writing reflogs - * - * If both are set, this name and email will be used to write to the - * reflog. Pass NULL to unset. When unset, the identity will be taken - * from the repository's configuration. - * - * @param repo the repository to configure - * @param name the name to use for the reflog entries - * @param email the email to use for the reflog entries - */ -GIT_EXTERN(int) git_repository_set_ident(git_repository *repo, const char *name, const char *email); - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/reset.h b/libgit2/headers/git2/reset.h deleted file mode 100644 index be25414..0000000 --- a/libgit2/headers/git2/reset.h +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_reset_h__ -#define INCLUDE_git_reset_h__ - -#include "common.h" -#include "types.h" -#include "strarray.h" -#include "checkout.h" - -/** - * @file git2/reset.h - * @brief Git reset management routines - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Kinds of reset operation - */ -typedef enum { - GIT_RESET_SOFT = 1, /**< Move the head to the given commit */ - GIT_RESET_MIXED = 2, /**< SOFT plus reset index to the commit */ - GIT_RESET_HARD = 3, /**< MIXED plus changes in working tree discarded */ -} git_reset_t; - -/** - * Sets the current head to the specified commit oid and optionally - * resets the index and working tree to match. - * - * SOFT reset means the Head will be moved to the commit. - * - * MIXED reset will trigger a SOFT reset, plus the index will be replaced - * with the content of the commit tree. - * - * HARD reset will trigger a MIXED reset and the working directory will be - * replaced with the content of the index. (Untracked and ignored files - * will be left alone, however.) - * - * TODO: Implement remaining kinds of resets. - * - * @param repo Repository where to perform the reset operation. - * - * @param target Committish to which the Head should be moved to. This object - * must belong to the given `repo` and can either be a git_commit or a - * git_tag. When a git_tag is being passed, it should be dereferencable - * to a git_commit which oid will be used as the target of the branch. - * - * @param reset_type Kind of reset operation to perform. - * - * @param checkout_opts Optional checkout options to be used for a HARD reset. - * The checkout_strategy field will be overridden (based on reset_type). - * This parameter can be used to propagate notify and progress callbacks. - * - * @return 0 on success or an error code - */ -GIT_EXTERN(int) git_reset( - git_repository *repo, - const git_object *target, - git_reset_t reset_type, - const git_checkout_options *checkout_opts); - -/** - * Sets the current head to the specified commit oid and optionally - * resets the index and working tree to match. - * - * This behaves like `git_reset()` but takes an annotated commit, - * which lets you specify which extended sha syntax string was - * specified by a user, allowing for more exact reflog messages. - * - * See the documentation for `git_reset()`. - * - * @see git_reset - */ -GIT_EXTERN(int) git_reset_from_annotated( - git_repository *repo, - const git_annotated_commit *commit, - git_reset_t reset_type, - const git_checkout_options *checkout_opts); - -/** - * Updates some entries in the index from the target commit tree. - * - * The scope of the updated entries is determined by the paths - * being passed in the `pathspec` parameters. - * - * Passing a NULL `target` will result in removing - * entries in the index matching the provided pathspecs. - * - * @param repo Repository where to perform the reset operation. - * - * @param target The committish which content will be used to reset the content - * of the index. - * - * @param pathspecs List of pathspecs to operate on. - * - * @return 0 on success or an error code < 0 - */ -GIT_EXTERN(int) git_reset_default( - git_repository *repo, - const git_object *target, - const git_strarray* pathspecs); - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/revert.h b/libgit2/headers/git2/revert.h deleted file mode 100644 index 331e90d..0000000 --- a/libgit2/headers/git2/revert.h +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_revert_h__ -#define INCLUDE_git_revert_h__ - -#include "common.h" -#include "types.h" -#include "merge.h" - -/** - * @file git2/revert.h - * @brief Git revert routines - * @defgroup git_revert Git revert routines - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Options for revert - */ -typedef struct { - unsigned int version; - - /** For merge commits, the "mainline" is treated as the parent. */ - unsigned int mainline; - - git_merge_options merge_opts; /**< Options for the merging */ - git_checkout_options checkout_opts; /**< Options for the checkout */ -} git_revert_options; - -#define GIT_REVERT_OPTIONS_VERSION 1 -#define GIT_REVERT_OPTIONS_INIT {GIT_REVERT_OPTIONS_VERSION, 0, GIT_MERGE_OPTIONS_INIT, GIT_CHECKOUT_OPTIONS_INIT} - -/** - * Initialize git_revert_options structure - * - * Initializes a `git_revert_options` with default values. Equivalent to - * creating an instance with `GIT_REVERT_OPTIONS_INIT`. - * - * @param opts The `git_revert_options` struct to initialize. - * @param version The struct version; pass `GIT_REVERT_OPTIONS_VERSION`. - * @return Zero on success; -1 on failure. - */ -GIT_EXTERN(int) git_revert_options_init( - git_revert_options *opts, - unsigned int version); - -/** - * Reverts the given commit against the given "our" commit, producing an - * index that reflects the result of the revert. - * - * The returned index must be freed explicitly with `git_index_free`. - * - * @param out pointer to store the index result in - * @param repo the repository that contains the given commits - * @param revert_commit the commit to revert - * @param our_commit the commit to revert against (eg, HEAD) - * @param mainline the parent of the revert commit, if it is a merge - * @param merge_options the merge options (or null for defaults) - * @return zero on success, -1 on failure. - */ -GIT_EXTERN(int) git_revert_commit( - git_index **out, - git_repository *repo, - git_commit *revert_commit, - git_commit *our_commit, - unsigned int mainline, - const git_merge_options *merge_options); - -/** - * Reverts the given commit, producing changes in the index and working directory. - * - * @param repo the repository to revert - * @param commit the commit to revert - * @param given_opts the revert options (or null for defaults) - * @return zero on success, -1 on failure. - */ -GIT_EXTERN(int) git_revert( - git_repository *repo, - git_commit *commit, - const git_revert_options *given_opts); - -/** @} */ -GIT_END_DECL -#endif - diff --git a/libgit2/headers/git2/revparse.h b/libgit2/headers/git2/revparse.h deleted file mode 100644 index e14ddee..0000000 --- a/libgit2/headers/git2/revparse.h +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_revparse_h__ -#define INCLUDE_git_revparse_h__ - -#include "common.h" -#include "types.h" - -/** - * @file git2/revparse.h - * @brief Git revision parsing routines - * @defgroup git_revparse Git revision parsing routines - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Find a single object, as specified by a revision string. - * - * See `man gitrevisions`, or - * http://git-scm.com/docs/git-rev-parse.html#_specifying_revisions for - * information on the syntax accepted. - * - * The returned object should be released with `git_object_free` when no - * longer needed. - * - * @param out pointer to output object - * @param repo the repository to search in - * @param spec the textual specification for an object - * @return 0 on success, GIT_ENOTFOUND, GIT_EAMBIGUOUS, GIT_EINVALIDSPEC or an error code - */ -GIT_EXTERN(int) git_revparse_single( - git_object **out, git_repository *repo, const char *spec); - -/** - * Find a single object and intermediate reference by a revision string. - * - * See `man gitrevisions`, or - * http://git-scm.com/docs/git-rev-parse.html#_specifying_revisions for - * information on the syntax accepted. - * - * In some cases (`@{<-n>}` or `@{upstream}`), the expression may - * point to an intermediate reference. When such expressions are being passed - * in, `reference_out` will be valued as well. - * - * The returned object should be released with `git_object_free` and the - * returned reference with `git_reference_free` when no longer needed. - * - * @param object_out pointer to output object - * @param reference_out pointer to output reference or NULL - * @param repo the repository to search in - * @param spec the textual specification for an object - * @return 0 on success, GIT_ENOTFOUND, GIT_EAMBIGUOUS, GIT_EINVALIDSPEC - * or an error code - */ -GIT_EXTERN(int) git_revparse_ext( - git_object **object_out, - git_reference **reference_out, - git_repository *repo, - const char *spec); - -/** - * Revparse flags. These indicate the intended behavior of the spec passed to - * git_revparse. - */ -typedef enum { - /** The spec targeted a single object. */ - GIT_REVSPEC_SINGLE = 1 << 0, - /** The spec targeted a range of commits. */ - GIT_REVSPEC_RANGE = 1 << 1, - /** The spec used the '...' operator, which invokes special semantics. */ - GIT_REVSPEC_MERGE_BASE = 1 << 2, -} git_revspec_t; - -/** - * Git Revision Spec: output of a `git_revparse` operation - */ -typedef struct { - /** The left element of the revspec; must be freed by the user */ - git_object *from; - /** The right element of the revspec; must be freed by the user */ - git_object *to; - /** The intent of the revspec (i.e. `git_revspec_mode_t` flags) */ - unsigned int flags; -} git_revspec; - -/** - * Parse a revision string for `from`, `to`, and intent. - * - * See `man gitrevisions` or - * http://git-scm.com/docs/git-rev-parse.html#_specifying_revisions for - * information on the syntax accepted. - * - * @param revspec Pointer to an user-allocated git_revspec struct where - * the result of the rev-parse will be stored - * @param repo the repository to search in - * @param spec the rev-parse spec to parse - * @return 0 on success, GIT_INVALIDSPEC, GIT_ENOTFOUND, GIT_EAMBIGUOUS or an error code - */ -GIT_EXTERN(int) git_revparse( - git_revspec *revspec, - git_repository *repo, - const char *spec); - - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/revwalk.h b/libgit2/headers/git2/revwalk.h deleted file mode 100644 index 98dcbf8..0000000 --- a/libgit2/headers/git2/revwalk.h +++ /dev/null @@ -1,299 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_revwalk_h__ -#define INCLUDE_git_revwalk_h__ - -#include "common.h" -#include "types.h" -#include "oid.h" - -/** - * @file git2/revwalk.h - * @brief Git revision traversal routines - * @defgroup git_revwalk Git revision traversal routines - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Flags to specify the sorting which a revwalk should perform. - */ -typedef enum { - /** - * Sort the output with the same default method from `git`: reverse - * chronological order. This is the default sorting for new walkers. - */ - GIT_SORT_NONE = 0, - - /** - * Sort the repository contents in topological order (no parents before - * all of its children are shown); this sorting mode can be combined - * with time sorting to produce `git`'s `--date-order``. - */ - GIT_SORT_TOPOLOGICAL = 1 << 0, - - /** - * Sort the repository contents by commit time; - * this sorting mode can be combined with - * topological sorting. - */ - GIT_SORT_TIME = 1 << 1, - - /** - * Iterate through the repository contents in reverse - * order; this sorting mode can be combined with - * any of the above. - */ - GIT_SORT_REVERSE = 1 << 2, -} git_sort_t; - -/** - * Allocate a new revision walker to iterate through a repo. - * - * This revision walker uses a custom memory pool and an internal - * commit cache, so it is relatively expensive to allocate. - * - * For maximum performance, this revision walker should be - * reused for different walks. - * - * This revision walker is *not* thread safe: it may only be - * used to walk a repository on a single thread; however, - * it is possible to have several revision walkers in - * several different threads walking the same repository. - * - * @param out pointer to the new revision walker - * @param repo the repo to walk through - * @return 0 or an error code - */ -GIT_EXTERN(int) git_revwalk_new(git_revwalk **out, git_repository *repo); - -/** - * Reset the revision walker for reuse. - * - * This will clear all the pushed and hidden commits, and - * leave the walker in a blank state (just like at - * creation) ready to receive new commit pushes and - * start a new walk. - * - * The revision walk is automatically reset when a walk - * is over. - * - * @param walker handle to reset. - * @return 0 or an error code - */ -GIT_EXTERN(int) git_revwalk_reset(git_revwalk *walker); - -/** - * Add a new root for the traversal - * - * The pushed commit will be marked as one of the roots from which to - * start the walk. This commit may not be walked if it or a child is - * hidden. - * - * At least one commit must be pushed onto the walker before a walk - * can be started. - * - * The given id must belong to a committish on the walked - * repository. - * - * @param walk the walker being used for the traversal. - * @param id the oid of the commit to start from. - * @return 0 or an error code - */ -GIT_EXTERN(int) git_revwalk_push(git_revwalk *walk, const git_oid *id); - -/** - * Push matching references - * - * The OIDs pointed to by the references that match the given glob - * pattern will be pushed to the revision walker. - * - * A leading 'refs/' is implied if not present as well as a trailing - * '/\*' if the glob lacks '?', '\*' or '['. - * - * Any references matching this glob which do not point to a - * committish will be ignored. - * - * @param walk the walker being used for the traversal - * @param glob the glob pattern references should match - * @return 0 or an error code - */ -GIT_EXTERN(int) git_revwalk_push_glob(git_revwalk *walk, const char *glob); - -/** - * Push the repository's HEAD - * - * @param walk the walker being used for the traversal - * @return 0 or an error code - */ -GIT_EXTERN(int) git_revwalk_push_head(git_revwalk *walk); - -/** - * Mark a commit (and its ancestors) uninteresting for the output. - * - * The given id must belong to a committish on the walked - * repository. - * - * The resolved commit and all its parents will be hidden from the - * output on the revision walk. - * - * @param walk the walker being used for the traversal. - * @param commit_id the oid of commit that will be ignored during the traversal - * @return 0 or an error code - */ -GIT_EXTERN(int) git_revwalk_hide(git_revwalk *walk, const git_oid *commit_id); - -/** - * Hide matching references. - * - * The OIDs pointed to by the references that match the given glob - * pattern and their ancestors will be hidden from the output on the - * revision walk. - * - * A leading 'refs/' is implied if not present as well as a trailing - * '/\*' if the glob lacks '?', '\*' or '['. - * - * Any references matching this glob which do not point to a - * committish will be ignored. - * - * @param walk the walker being used for the traversal - * @param glob the glob pattern references should match - * @return 0 or an error code - */ -GIT_EXTERN(int) git_revwalk_hide_glob(git_revwalk *walk, const char *glob); - -/** - * Hide the repository's HEAD - * - * @param walk the walker being used for the traversal - * @return 0 or an error code - */ -GIT_EXTERN(int) git_revwalk_hide_head(git_revwalk *walk); - -/** - * Push the OID pointed to by a reference - * - * The reference must point to a committish. - * - * @param walk the walker being used for the traversal - * @param refname the reference to push - * @return 0 or an error code - */ -GIT_EXTERN(int) git_revwalk_push_ref(git_revwalk *walk, const char *refname); - -/** - * Hide the OID pointed to by a reference - * - * The reference must point to a committish. - * - * @param walk the walker being used for the traversal - * @param refname the reference to hide - * @return 0 or an error code - */ -GIT_EXTERN(int) git_revwalk_hide_ref(git_revwalk *walk, const char *refname); - -/** - * Get the next commit from the revision walk. - * - * The initial call to this method is *not* blocking when - * iterating through a repo with a time-sorting mode. - * - * Iterating with Topological or inverted modes makes the initial - * call blocking to preprocess the commit list, but this block should be - * mostly unnoticeable on most repositories (topological preprocessing - * times at 0.3s on the git.git repo). - * - * The revision walker is reset when the walk is over. - * - * @param out Pointer where to store the oid of the next commit - * @param walk the walker to pop the commit from. - * @return 0 if the next commit was found; - * GIT_ITEROVER if there are no commits left to iterate - */ -GIT_EXTERN(int) git_revwalk_next(git_oid *out, git_revwalk *walk); - -/** - * Change the sorting mode when iterating through the - * repository's contents. - * - * Changing the sorting mode resets the walker. - * - * @param walk the walker being used for the traversal. - * @param sort_mode combination of GIT_SORT_XXX flags - * @return 0 or an error code - */ -GIT_EXTERN(int) git_revwalk_sorting(git_revwalk *walk, unsigned int sort_mode); - -/** - * Push and hide the respective endpoints of the given range. - * - * The range should be of the form - * .. - * where each is in the form accepted by 'git_revparse_single'. - * The left-hand commit will be hidden and the right-hand commit pushed. - * - * @param walk the walker being used for the traversal - * @param range the range - * @return 0 or an error code - * - */ -GIT_EXTERN(int) git_revwalk_push_range(git_revwalk *walk, const char *range); - -/** - * Simplify the history by first-parent - * - * No parents other than the first for each commit will be enqueued. - * - * @return 0 or an error code - */ -GIT_EXTERN(int) git_revwalk_simplify_first_parent(git_revwalk *walk); - - -/** - * Free a revision walker previously allocated. - * - * @param walk traversal handle to close. If NULL nothing occurs. - */ -GIT_EXTERN(void) git_revwalk_free(git_revwalk *walk); - -/** - * Return the repository on which this walker - * is operating. - * - * @param walk the revision walker - * @return the repository being walked - */ -GIT_EXTERN(git_repository *) git_revwalk_repository(git_revwalk *walk); - -/** - * This is a callback function that user can provide to hide a - * commit and its parents. If the callback function returns non-zero value, - * then this commit and its parents will be hidden. - * - * @param commit_id oid of Commit - * @param payload User-specified pointer to data to be passed as data payload - */ -typedef int GIT_CALLBACK(git_revwalk_hide_cb)( - const git_oid *commit_id, - void *payload); - -/** - * Adds, changes or removes a callback function to hide a commit and its parents - * - * @param walk the revision walker - * @param hide_cb callback function to hide a commit and its parents - * @param payload data payload to be passed to callback function - */ -GIT_EXTERN(int) git_revwalk_add_hide_cb( - git_revwalk *walk, - git_revwalk_hide_cb hide_cb, - void *payload); - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/signature.h b/libgit2/headers/git2/signature.h deleted file mode 100644 index b14f3ea..0000000 --- a/libgit2/headers/git2/signature.h +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_signature_h__ -#define INCLUDE_git_signature_h__ - -#include "common.h" -#include "types.h" - -/** - * @file git2/signature.h - * @brief Git signature creation - * @defgroup git_signature Git signature creation - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Create a new action signature. - * - * Call `git_signature_free()` to free the data. - * - * Note: angle brackets ('<' and '>') characters are not allowed - * to be used in either the `name` or the `email` parameter. - * - * @param out new signature, in case of error NULL - * @param name name of the person - * @param email email of the person - * @param time time (in seconds from epoch) when the action happened - * @param offset timezone offset (in minutes) for the time - * @return 0 or an error code - */ -GIT_EXTERN(int) git_signature_new(git_signature **out, const char *name, const char *email, git_time_t time, int offset); - -/** - * Create a new action signature with a timestamp of 'now'. - * - * Call `git_signature_free()` to free the data. - * - * @param out new signature, in case of error NULL - * @param name name of the person - * @param email email of the person - * @return 0 or an error code - */ -GIT_EXTERN(int) git_signature_now(git_signature **out, const char *name, const char *email); - -/** - * Create a new action signature with default user and now timestamp. - * - * This looks up the user.name and user.email from the configuration and - * uses the current time as the timestamp, and creates a new signature - * based on that information. It will return GIT_ENOTFOUND if either the - * user.name or user.email are not set. - * - * @param out new signature - * @param repo repository pointer - * @return 0 on success, GIT_ENOTFOUND if config is missing, or error code - */ -GIT_EXTERN(int) git_signature_default(git_signature **out, git_repository *repo); - -/** - * Create a new signature by parsing the given buffer, which is - * expected to be in the format "Real Name timestamp tzoffset", - * where `timestamp` is the number of seconds since the Unix epoch and - * `tzoffset` is the timezone offset in `hhmm` format (note the lack - * of a colon separator). - * - * @param out new signature - * @param buf signature string - * @return 0 on success, or an error code - */ -GIT_EXTERN(int) git_signature_from_buffer(git_signature **out, const char *buf); - -/** - * Create a copy of an existing signature. All internal strings are also - * duplicated. - * - * Call `git_signature_free()` to free the data. - * - * @param dest pointer where to store the copy - * @param sig signature to duplicate - * @return 0 or an error code - */ -GIT_EXTERN(int) git_signature_dup(git_signature **dest, const git_signature *sig); - -/** - * Free an existing signature. - * - * Because the signature is not an opaque structure, it is legal to free it - * manually, but be sure to free the "name" and "email" strings in addition - * to the structure itself. - * - * @param sig signature to free - */ -GIT_EXTERN(void) git_signature_free(git_signature *sig); - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/stash.h b/libgit2/headers/git2/stash.h deleted file mode 100644 index 795920e..0000000 --- a/libgit2/headers/git2/stash.h +++ /dev/null @@ -1,260 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_stash_h__ -#define INCLUDE_git_stash_h__ - -#include "common.h" -#include "types.h" -#include "checkout.h" - -/** - * @file git2/stash.h - * @brief Git stash management routines - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Stash flags - */ -typedef enum { - /** - * No option, default - */ - GIT_STASH_DEFAULT = 0, - - /** - * All changes already added to the index are left intact in - * the working directory - */ - GIT_STASH_KEEP_INDEX = (1 << 0), - - /** - * All untracked files are also stashed and then cleaned up - * from the working directory - */ - GIT_STASH_INCLUDE_UNTRACKED = (1 << 1), - - /** - * All ignored files are also stashed and then cleaned up from - * the working directory - */ - GIT_STASH_INCLUDE_IGNORED = (1 << 2), -} git_stash_flags; - -/** - * Save the local modifications to a new stash. - * - * @param out Object id of the commit containing the stashed state. - * This commit is also the target of the direct reference refs/stash. - * - * @param repo The owning repository. - * - * @param stasher The identity of the person performing the stashing. - * - * @param message Optional description along with the stashed state. - * - * @param flags Flags to control the stashing process. (see GIT_STASH_* above) - * - * @return 0 on success, GIT_ENOTFOUND where there's nothing to stash, - * or error code. - */ -GIT_EXTERN(int) git_stash_save( - git_oid *out, - git_repository *repo, - const git_signature *stasher, - const char *message, - uint32_t flags); - -/** Stash application flags. */ -typedef enum { - GIT_STASH_APPLY_DEFAULT = 0, - - /* Try to reinstate not only the working tree's changes, - * but also the index's changes. - */ - GIT_STASH_APPLY_REINSTATE_INDEX = (1 << 0), -} git_stash_apply_flags; - -/** Stash apply progression states */ -typedef enum { - GIT_STASH_APPLY_PROGRESS_NONE = 0, - - /** Loading the stashed data from the object database. */ - GIT_STASH_APPLY_PROGRESS_LOADING_STASH, - - /** The stored index is being analyzed. */ - GIT_STASH_APPLY_PROGRESS_ANALYZE_INDEX, - - /** The modified files are being analyzed. */ - GIT_STASH_APPLY_PROGRESS_ANALYZE_MODIFIED, - - /** The untracked and ignored files are being analyzed. */ - GIT_STASH_APPLY_PROGRESS_ANALYZE_UNTRACKED, - - /** The untracked files are being written to disk. */ - GIT_STASH_APPLY_PROGRESS_CHECKOUT_UNTRACKED, - - /** The modified files are being written to disk. */ - GIT_STASH_APPLY_PROGRESS_CHECKOUT_MODIFIED, - - /** The stash was applied successfully. */ - GIT_STASH_APPLY_PROGRESS_DONE, -} git_stash_apply_progress_t; - -/** - * Stash application progress notification function. - * Return 0 to continue processing, or a negative value to - * abort the stash application. - */ -typedef int GIT_CALLBACK(git_stash_apply_progress_cb)( - git_stash_apply_progress_t progress, - void *payload); - -/** - * Stash application options structure - * - * Initialize with `GIT_STASH_APPLY_OPTIONS_INIT`. Alternatively, you can - * use `git_stash_apply_options_init`. - * - */ -typedef struct git_stash_apply_options { - unsigned int version; - - /** See `git_stash_apply_flags`, above. */ - uint32_t flags; - - /** Options to use when writing files to the working directory. */ - git_checkout_options checkout_options; - - /** Optional callback to notify the consumer of application progress. */ - git_stash_apply_progress_cb progress_cb; - void *progress_payload; -} git_stash_apply_options; - -#define GIT_STASH_APPLY_OPTIONS_VERSION 1 -#define GIT_STASH_APPLY_OPTIONS_INIT { \ - GIT_STASH_APPLY_OPTIONS_VERSION, \ - GIT_STASH_APPLY_DEFAULT, \ - GIT_CHECKOUT_OPTIONS_INIT } - -/** - * Initialize git_stash_apply_options structure - * - * Initializes a `git_stash_apply_options` with default values. Equivalent to - * creating an instance with `GIT_STASH_APPLY_OPTIONS_INIT`. - * - * @param opts The `git_stash_apply_options` struct to initialize. - * @param version The struct version; pass `GIT_STASH_APPLY_OPTIONS_VERSION`. - * @return Zero on success; -1 on failure. - */ -GIT_EXTERN(int) git_stash_apply_options_init( - git_stash_apply_options *opts, unsigned int version); - -/** - * Apply a single stashed state from the stash list. - * - * If local changes in the working directory conflict with changes in the - * stash then GIT_EMERGECONFLICT will be returned. In this case, the index - * will always remain unmodified and all files in the working directory will - * remain unmodified. However, if you are restoring untracked files or - * ignored files and there is a conflict when applying the modified files, - * then those files will remain in the working directory. - * - * If passing the GIT_STASH_APPLY_REINSTATE_INDEX flag and there would be - * conflicts when reinstating the index, the function will return - * GIT_EMERGECONFLICT and both the working directory and index will be left - * unmodified. - * - * Note that a minimum checkout strategy of `GIT_CHECKOUT_SAFE` is implied. - * - * @param repo The owning repository. - * @param index The position within the stash list. 0 points to the - * most recent stashed state. - * @param options Optional options to control how stashes are applied. - * - * @return 0 on success, GIT_ENOTFOUND if there's no stashed state for the - * given index, GIT_EMERGECONFLICT if changes exist in the working - * directory, or an error code - */ -GIT_EXTERN(int) git_stash_apply( - git_repository *repo, - size_t index, - const git_stash_apply_options *options); - -/** - * This is a callback function you can provide to iterate over all the - * stashed states that will be invoked per entry. - * - * @param index The position within the stash list. 0 points to the - * most recent stashed state. - * @param message The stash message. - * @param stash_id The commit oid of the stashed state. - * @param payload Extra parameter to callback function. - * @return 0 to continue iterating or non-zero to stop. - */ -typedef int GIT_CALLBACK(git_stash_cb)( - size_t index, - const char *message, - const git_oid *stash_id, - void *payload); - -/** - * Loop over all the stashed states and issue a callback for each one. - * - * If the callback returns a non-zero value, this will stop looping. - * - * @param repo Repository where to find the stash. - * - * @param callback Callback to invoke per found stashed state. The most - * recent stash state will be enumerated first. - * - * @param payload Extra parameter to callback function. - * - * @return 0 on success, non-zero callback return value, or error code. - */ -GIT_EXTERN(int) git_stash_foreach( - git_repository *repo, - git_stash_cb callback, - void *payload); - -/** - * Remove a single stashed state from the stash list. - * - * @param repo The owning repository. - * - * @param index The position within the stash list. 0 points to the - * most recent stashed state. - * - * @return 0 on success, GIT_ENOTFOUND if there's no stashed state for the given - * index, or error code. - */ -GIT_EXTERN(int) git_stash_drop( - git_repository *repo, - size_t index); - -/** - * Apply a single stashed state from the stash list and remove it from the list - * if successful. - * - * @param repo The owning repository. - * @param index The position within the stash list. 0 points to the - * most recent stashed state. - * @param options Optional options to control how stashes are applied. - * - * @return 0 on success, GIT_ENOTFOUND if there's no stashed state for the given - * index, or error code. (see git_stash_apply() above for details) -*/ -GIT_EXTERN(int) git_stash_pop( - git_repository *repo, - size_t index, - const git_stash_apply_options *options); - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/status.h b/libgit2/headers/git2/status.h deleted file mode 100644 index 543e3fa..0000000 --- a/libgit2/headers/git2/status.h +++ /dev/null @@ -1,443 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_status_h__ -#define INCLUDE_git_status_h__ - -#include "common.h" -#include "types.h" -#include "strarray.h" -#include "diff.h" - -/** - * @file git2/status.h - * @brief Git file status routines - * @defgroup git_status Git file status routines - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Status flags for a single file. - * - * A combination of these values will be returned to indicate the status of - * a file. Status compares the working directory, the index, and the - * current HEAD of the repository. The `GIT_STATUS_INDEX` set of flags - * represents the status of file in the index relative to the HEAD, and the - * `GIT_STATUS_WT` set of flags represent the status of the file in the - * working directory relative to the index. - */ -typedef enum { - GIT_STATUS_CURRENT = 0, - - GIT_STATUS_INDEX_NEW = (1u << 0), - GIT_STATUS_INDEX_MODIFIED = (1u << 1), - GIT_STATUS_INDEX_DELETED = (1u << 2), - GIT_STATUS_INDEX_RENAMED = (1u << 3), - GIT_STATUS_INDEX_TYPECHANGE = (1u << 4), - - GIT_STATUS_WT_NEW = (1u << 7), - GIT_STATUS_WT_MODIFIED = (1u << 8), - GIT_STATUS_WT_DELETED = (1u << 9), - GIT_STATUS_WT_TYPECHANGE = (1u << 10), - GIT_STATUS_WT_RENAMED = (1u << 11), - GIT_STATUS_WT_UNREADABLE = (1u << 12), - - GIT_STATUS_IGNORED = (1u << 14), - GIT_STATUS_CONFLICTED = (1u << 15), -} git_status_t; - -/** - * Function pointer to receive status on individual files - * - * `path` is the relative path to the file from the root of the repository. - * - * `status_flags` is a combination of `git_status_t` values that apply. - * - * `payload` is the value you passed to the foreach function as payload. - */ -typedef int GIT_CALLBACK(git_status_cb)( - const char *path, unsigned int status_flags, void *payload); - -/** - * Select the files on which to report status. - * - * With `git_status_foreach_ext`, this will control which changes get - * callbacks. With `git_status_list_new`, these will control which - * changes are included in the list. - */ -typedef enum { - /** - * The default. This roughly matches `git status --porcelain` regarding - * which files are included and in what order. - */ - GIT_STATUS_SHOW_INDEX_AND_WORKDIR = 0, - - /** - * Only gives status based on HEAD to index comparison, not looking at - * working directory changes. - */ - GIT_STATUS_SHOW_INDEX_ONLY = 1, - - /** - * Only gives status based on index to working directory comparison, - * not comparing the index to the HEAD. - */ - GIT_STATUS_SHOW_WORKDIR_ONLY = 2, -} git_status_show_t; - -/** - * Flags to control status callbacks - * - * Calling `git_status_foreach()` is like calling the extended version - * with: GIT_STATUS_OPT_INCLUDE_IGNORED, GIT_STATUS_OPT_INCLUDE_UNTRACKED, - * and GIT_STATUS_OPT_RECURSE_UNTRACKED_DIRS. Those options are bundled - * together as `GIT_STATUS_OPT_DEFAULTS` if you want them as a baseline. - */ -typedef enum { - /** - * Says that callbacks should be made on untracked files. - * These will only be made if the workdir files are included in the status - * "show" option. - */ - GIT_STATUS_OPT_INCLUDE_UNTRACKED = (1u << 0), - - /** - * Says that ignored files get callbacks. - * Again, these callbacks will only be made if the workdir files are - * included in the status "show" option. - */ - GIT_STATUS_OPT_INCLUDE_IGNORED = (1u << 1), - - /** - * Indicates that callback should be made even on unmodified files. - */ - GIT_STATUS_OPT_INCLUDE_UNMODIFIED = (1u << 2), - - /** - * Indicates that submodules should be skipped. - * This only applies if there are no pending typechanges to the submodule - * (either from or to another type). - */ - GIT_STATUS_OPT_EXCLUDE_SUBMODULES = (1u << 3), - - /** - * Indicates that all files in untracked directories should be included. - * Normally if an entire directory is new, then just the top-level - * directory is included (with a trailing slash on the entry name). - * This flag says to include all of the individual files in the directory - * instead. - */ - GIT_STATUS_OPT_RECURSE_UNTRACKED_DIRS = (1u << 4), - - /** - * Indicates that the given path should be treated as a literal path, - * and not as a pathspec pattern. - */ - GIT_STATUS_OPT_DISABLE_PATHSPEC_MATCH = (1u << 5), - - /** - * Indicates that the contents of ignored directories should be included - * in the status. This is like doing `git ls-files -o -i --exclude-standard` - * with core git. - */ - GIT_STATUS_OPT_RECURSE_IGNORED_DIRS = (1u << 6), - - /** - * Indicates that rename detection should be processed between the head and - * the index and enables the GIT_STATUS_INDEX_RENAMED as a possible status - * flag. - */ - GIT_STATUS_OPT_RENAMES_HEAD_TO_INDEX = (1u << 7), - - /** - * Indicates that rename detection should be run between the index and the - * working directory and enabled GIT_STATUS_WT_RENAMED as a possible status - * flag. - */ - GIT_STATUS_OPT_RENAMES_INDEX_TO_WORKDIR = (1u << 8), - - /** - * Overrides the native case sensitivity for the file system and forces - * the output to be in case-sensitive order. - */ - GIT_STATUS_OPT_SORT_CASE_SENSITIVELY = (1u << 9), - - /** - * Overrides the native case sensitivity for the file system and forces - * the output to be in case-insensitive order. - */ - GIT_STATUS_OPT_SORT_CASE_INSENSITIVELY = (1u << 10), - - /** - * Iindicates that rename detection should include rewritten files. - */ - GIT_STATUS_OPT_RENAMES_FROM_REWRITES = (1u << 11), - - /** - * Bypasses the default status behavior of doing a "soft" index reload - * (i.e. reloading the index data if the file on disk has been modified - * outside libgit2). - */ - GIT_STATUS_OPT_NO_REFRESH = (1u << 12), - - /** - * Tells libgit2 to refresh the stat cache in the index for files that are - * unchanged but have out of date stat einformation in the index. - * It will result in less work being done on subsequent calls to get status. - * This is mutually exclusive with the NO_REFRESH option. - */ - GIT_STATUS_OPT_UPDATE_INDEX = (1u << 13), - - /** - * Normally files that cannot be opened or read are ignored as - * these are often transient files; this option will return - * unreadable files as `GIT_STATUS_WT_UNREADABLE`. - */ - GIT_STATUS_OPT_INCLUDE_UNREADABLE = (1u << 14), - - /** - * Unreadable files will be detected and given the status - * untracked instead of unreadable. - */ - GIT_STATUS_OPT_INCLUDE_UNREADABLE_AS_UNTRACKED = (1u << 15), -} git_status_opt_t; - -#define GIT_STATUS_OPT_DEFAULTS \ - (GIT_STATUS_OPT_INCLUDE_IGNORED | \ - GIT_STATUS_OPT_INCLUDE_UNTRACKED | \ - GIT_STATUS_OPT_RECURSE_UNTRACKED_DIRS) - -/** - * Options to control how `git_status_foreach_ext()` will issue callbacks. - * - * Initialize with `GIT_STATUS_OPTIONS_INIT`. Alternatively, you can - * use `git_status_options_init`. - * - */ -typedef struct { - /** - * The struct version; pass `GIT_STATUS_OPTIONS_VERSION`. - */ - unsigned int version; - - /** - * The `show` value is one of the `git_status_show_t` constants that - * control which files to scan and in what order. - */ - git_status_show_t show; - - /** - * The `flags` value is an OR'ed combination of the - * `git_status_opt_t` values above. - */ - unsigned int flags; - - /** - * The `pathspec` is an array of path patterns to match (using - * fnmatch-style matching), or just an array of paths to match - * exactly if `GIT_STATUS_OPT_DISABLE_PATHSPEC_MATCH` is specified - * in the flags. - */ - git_strarray pathspec; - - /** - * The `baseline` is the tree to be used for comparison to the - * working directory and index; defaults to HEAD. - */ - git_tree *baseline; -} git_status_options; - -#define GIT_STATUS_OPTIONS_VERSION 1 -#define GIT_STATUS_OPTIONS_INIT {GIT_STATUS_OPTIONS_VERSION} - -/** - * Initialize git_status_options structure - * - * Initializes a `git_status_options` with default values. Equivalent to - * creating an instance with `GIT_STATUS_OPTIONS_INIT`. - * - * @param opts The `git_status_options` struct to initialize. - * @param version The struct version; pass `GIT_STATUS_OPTIONS_VERSION`. - * @return Zero on success; -1 on failure. - */ -GIT_EXTERN(int) git_status_options_init( - git_status_options *opts, - unsigned int version); - -/** - * A status entry, providing the differences between the file as it exists - * in HEAD and the index, and providing the differences between the index - * and the working directory. - * - * The `status` value provides the status flags for this file. - * - * The `head_to_index` value provides detailed information about the - * differences between the file in HEAD and the file in the index. - * - * The `index_to_workdir` value provides detailed information about the - * differences between the file in the index and the file in the - * working directory. - */ -typedef struct { - git_status_t status; - git_diff_delta *head_to_index; - git_diff_delta *index_to_workdir; -} git_status_entry; - - -/** - * Gather file statuses and run a callback for each one. - * - * The callback is passed the path of the file, the status (a combination of - * the `git_status_t` values above) and the `payload` data pointer passed - * into this function. - * - * If the callback returns a non-zero value, this function will stop looping - * and return that value to caller. - * - * @param repo A repository object - * @param callback The function to call on each file - * @param payload Pointer to pass through to callback function - * @return 0 on success, non-zero callback return value, or error code - */ -GIT_EXTERN(int) git_status_foreach( - git_repository *repo, - git_status_cb callback, - void *payload); - -/** - * Gather file status information and run callbacks as requested. - * - * This is an extended version of the `git_status_foreach()` API that - * allows for more granular control over which paths will be processed and - * in what order. See the `git_status_options` structure for details - * about the additional controls that this makes available. - * - * Note that if a `pathspec` is given in the `git_status_options` to filter - * the status, then the results from rename detection (if you enable it) may - * not be accurate. To do rename detection properly, this must be called - * with no `pathspec` so that all files can be considered. - * - * @param repo Repository object - * @param opts Status options structure - * @param callback The function to call on each file - * @param payload Pointer to pass through to callback function - * @return 0 on success, non-zero callback return value, or error code - */ -GIT_EXTERN(int) git_status_foreach_ext( - git_repository *repo, - const git_status_options *opts, - git_status_cb callback, - void *payload); - -/** - * Get file status for a single file. - * - * This tries to get status for the filename that you give. If no files - * match that name (in either the HEAD, index, or working directory), this - * returns GIT_ENOTFOUND. - * - * If the name matches multiple files (for example, if the `path` names a - * directory or if running on a case- insensitive filesystem and yet the - * HEAD has two entries that both match the path), then this returns - * GIT_EAMBIGUOUS because it cannot give correct results. - * - * This does not do any sort of rename detection. Renames require a set of - * targets and because of the path filtering, there is not enough - * information to check renames correctly. To check file status with rename - * detection, there is no choice but to do a full `git_status_list_new` and - * scan through looking for the path that you are interested in. - * - * @param status_flags Output combination of git_status_t values for file - * @param repo A repository object - * @param path The exact path to retrieve status for relative to the - * repository working directory - * @return 0 on success, GIT_ENOTFOUND if the file is not found in the HEAD, - * index, and work tree, GIT_EAMBIGUOUS if `path` matches multiple files - * or if it refers to a folder, and -1 on other errors. - */ -GIT_EXTERN(int) git_status_file( - unsigned int *status_flags, - git_repository *repo, - const char *path); - -/** - * Gather file status information and populate the `git_status_list`. - * - * Note that if a `pathspec` is given in the `git_status_options` to filter - * the status, then the results from rename detection (if you enable it) may - * not be accurate. To do rename detection properly, this must be called - * with no `pathspec` so that all files can be considered. - * - * @param out Pointer to store the status results in - * @param repo Repository object - * @param opts Status options structure - * @return 0 on success or error code - */ -GIT_EXTERN(int) git_status_list_new( - git_status_list **out, - git_repository *repo, - const git_status_options *opts); - -/** - * Gets the count of status entries in this list. - * - * If there are no changes in status (at least according the options given - * when the status list was created), this can return 0. - * - * @param statuslist Existing status list object - * @return the number of status entries - */ -GIT_EXTERN(size_t) git_status_list_entrycount( - git_status_list *statuslist); - -/** - * Get a pointer to one of the entries in the status list. - * - * The entry is not modifiable and should not be freed. - * - * @param statuslist Existing status list object - * @param idx Position of the entry - * @return Pointer to the entry; NULL if out of bounds - */ -GIT_EXTERN(const git_status_entry *) git_status_byindex( - git_status_list *statuslist, - size_t idx); - -/** - * Free an existing status list - * - * @param statuslist Existing status list object - */ -GIT_EXTERN(void) git_status_list_free( - git_status_list *statuslist); - -/** - * Test if the ignore rules apply to a given file. - * - * This function checks the ignore rules to see if they would apply to the - * given file. This indicates if the file would be ignored regardless of - * whether the file is already in the index or committed to the repository. - * - * One way to think of this is if you were to do "git add ." on the - * directory containing the file, would it be added or not? - * - * @param ignored Boolean returning 0 if the file is not ignored, 1 if it is - * @param repo A repository object - * @param path The file to check ignores for, rooted at the repo's workdir. - * @return 0 if ignore rules could be processed for the file (regardless - * of whether it exists or not), or an error < 0 if they could not. - */ -GIT_EXTERN(int) git_status_should_ignore( - int *ignored, - git_repository *repo, - const char *path); - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/stdint.h b/libgit2/headers/git2/stdint.h deleted file mode 100644 index 6950427..0000000 --- a/libgit2/headers/git2/stdint.h +++ /dev/null @@ -1,247 +0,0 @@ -// ISO C9x compliant stdint.h for Microsoft Visual Studio -// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124 -// -// Copyright (c) 2006-2008 Alexander Chemeris -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. The name of the author may be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED -// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; -// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifdef _MSC_VER // [ - -#ifndef _MSC_STDINT_H_ // [ -#define _MSC_STDINT_H_ - -#if _MSC_VER > 1000 -#pragma once -#endif - -#include - -// For Visual Studio 6 in C++ mode and for many Visual Studio versions when -// compiling for ARM we should wrap include with 'extern "C++" {}' -// or compiler give many errors like this: -// error C2733: second C linkage of overloaded function 'wmemchr' not allowed -#ifdef __cplusplus -extern "C" { -#endif -# include -#ifdef __cplusplus -} -#endif - -// Define _W64 macros to mark types changing their size, like intptr_t. -#ifndef _W64 -# if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300 -# define _W64 __w64 -# else -# define _W64 -# endif -#endif - - -// 7.18.1 Integer types - -// 7.18.1.1 Exact-width integer types - -// Visual Studio 6 and Embedded Visual C++ 4 doesn't -// realize that, e.g. char has the same size as __int8 -// so we give up on __intX for them. -#if (_MSC_VER < 1300) - typedef signed char int8_t; - typedef signed short int16_t; - typedef signed int int32_t; - typedef unsigned char uint8_t; - typedef unsigned short uint16_t; - typedef unsigned int uint32_t; -#else - typedef signed __int8 int8_t; - typedef signed __int16 int16_t; - typedef signed __int32 int32_t; - typedef unsigned __int8 uint8_t; - typedef unsigned __int16 uint16_t; - typedef unsigned __int32 uint32_t; -#endif -typedef signed __int64 int64_t; -typedef unsigned __int64 uint64_t; - - -// 7.18.1.2 Minimum-width integer types -typedef int8_t int_least8_t; -typedef int16_t int_least16_t; -typedef int32_t int_least32_t; -typedef int64_t int_least64_t; -typedef uint8_t uint_least8_t; -typedef uint16_t uint_least16_t; -typedef uint32_t uint_least32_t; -typedef uint64_t uint_least64_t; - -// 7.18.1.3 Fastest minimum-width integer types -typedef int8_t int_fast8_t; -typedef int16_t int_fast16_t; -typedef int32_t int_fast32_t; -typedef int64_t int_fast64_t; -typedef uint8_t uint_fast8_t; -typedef uint16_t uint_fast16_t; -typedef uint32_t uint_fast32_t; -typedef uint64_t uint_fast64_t; - -// 7.18.1.4 Integer types capable of holding object pointers -#ifdef _WIN64 // [ - typedef signed __int64 intptr_t; - typedef unsigned __int64 uintptr_t; -#else // _WIN64 ][ - typedef _W64 signed int intptr_t; - typedef _W64 unsigned int uintptr_t; -#endif // _WIN64 ] - -// 7.18.1.5 Greatest-width integer types -typedef int64_t intmax_t; -typedef uint64_t uintmax_t; - - -// 7.18.2 Limits of specified-width integer types - -#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) // [ See footnote 220 at page 257 and footnote 221 at page 259 - -// 7.18.2.1 Limits of exact-width integer types -#define INT8_MIN ((int8_t)_I8_MIN) -#define INT8_MAX _I8_MAX -#define INT16_MIN ((int16_t)_I16_MIN) -#define INT16_MAX _I16_MAX -#define INT32_MIN ((int32_t)_I32_MIN) -#define INT32_MAX _I32_MAX -#define INT64_MIN ((int64_t)_I64_MIN) -#define INT64_MAX _I64_MAX -#define UINT8_MAX _UI8_MAX -#define UINT16_MAX _UI16_MAX -#define UINT32_MAX _UI32_MAX -#define UINT64_MAX _UI64_MAX - -// 7.18.2.2 Limits of minimum-width integer types -#define INT_LEAST8_MIN INT8_MIN -#define INT_LEAST8_MAX INT8_MAX -#define INT_LEAST16_MIN INT16_MIN -#define INT_LEAST16_MAX INT16_MAX -#define INT_LEAST32_MIN INT32_MIN -#define INT_LEAST32_MAX INT32_MAX -#define INT_LEAST64_MIN INT64_MIN -#define INT_LEAST64_MAX INT64_MAX -#define UINT_LEAST8_MAX UINT8_MAX -#define UINT_LEAST16_MAX UINT16_MAX -#define UINT_LEAST32_MAX UINT32_MAX -#define UINT_LEAST64_MAX UINT64_MAX - -// 7.18.2.3 Limits of fastest minimum-width integer types -#define INT_FAST8_MIN INT8_MIN -#define INT_FAST8_MAX INT8_MAX -#define INT_FAST16_MIN INT16_MIN -#define INT_FAST16_MAX INT16_MAX -#define INT_FAST32_MIN INT32_MIN -#define INT_FAST32_MAX INT32_MAX -#define INT_FAST64_MIN INT64_MIN -#define INT_FAST64_MAX INT64_MAX -#define UINT_FAST8_MAX UINT8_MAX -#define UINT_FAST16_MAX UINT16_MAX -#define UINT_FAST32_MAX UINT32_MAX -#define UINT_FAST64_MAX UINT64_MAX - -// 7.18.2.4 Limits of integer types capable of holding object pointers -#ifdef _WIN64 // [ -# define INTPTR_MIN INT64_MIN -# define INTPTR_MAX INT64_MAX -# define UINTPTR_MAX UINT64_MAX -#else // _WIN64 ][ -# define INTPTR_MIN INT32_MIN -# define INTPTR_MAX INT32_MAX -# define UINTPTR_MAX UINT32_MAX -#endif // _WIN64 ] - -// 7.18.2.5 Limits of greatest-width integer types -#define INTMAX_MIN INT64_MIN -#define INTMAX_MAX INT64_MAX -#define UINTMAX_MAX UINT64_MAX - -// 7.18.3 Limits of other integer types - -#ifdef _WIN64 // [ -# define PTRDIFF_MIN _I64_MIN -# define PTRDIFF_MAX _I64_MAX -#else // _WIN64 ][ -# define PTRDIFF_MIN _I32_MIN -# define PTRDIFF_MAX _I32_MAX -#endif // _WIN64 ] - -#define SIG_ATOMIC_MIN INT_MIN -#define SIG_ATOMIC_MAX INT_MAX - -#ifndef SIZE_MAX // [ -# ifdef _WIN64 // [ -# define SIZE_MAX _UI64_MAX -# else // _WIN64 ][ -# define SIZE_MAX _UI32_MAX -# endif // _WIN64 ] -#endif // SIZE_MAX ] - -// WCHAR_MIN and WCHAR_MAX are also defined in -#ifndef WCHAR_MIN // [ -# define WCHAR_MIN 0 -#endif // WCHAR_MIN ] -#ifndef WCHAR_MAX // [ -# define WCHAR_MAX _UI16_MAX -#endif // WCHAR_MAX ] - -#define WINT_MIN 0 -#define WINT_MAX _UI16_MAX - -#endif // __STDC_LIMIT_MACROS ] - - -// 7.18.4 Limits of other integer types - -#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [ See footnote 224 at page 260 - -// 7.18.4.1 Macros for minimum-width integer constants - -#define INT8_C(val) val##i8 -#define INT16_C(val) val##i16 -#define INT32_C(val) val##i32 -#define INT64_C(val) val##i64 - -#define UINT8_C(val) val##ui8 -#define UINT16_C(val) val##ui16 -#define UINT32_C(val) val##ui32 -#define UINT64_C(val) val##ui64 - -// 7.18.4.2 Macros for greatest-width integer constants -#define INTMAX_C INT64_C -#define UINTMAX_C UINT64_C - -#endif // __STDC_CONSTANT_MACROS ] - - -#endif // _MSC_STDINT_H_ ] - -#endif // _MSC_VER ] \ No newline at end of file diff --git a/libgit2/headers/git2/strarray.h b/libgit2/headers/git2/strarray.h deleted file mode 100644 index 0f657e6..0000000 --- a/libgit2/headers/git2/strarray.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_strarray_h__ -#define INCLUDE_git_strarray_h__ - -#include "common.h" - -/** - * @file git2/strarray.h - * @brief Git string array routines - * @defgroup git_strarray Git string array routines - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** Array of strings */ -typedef struct git_strarray { - char **strings; - size_t count; -} git_strarray; - -/** - * Free the strings contained in a string array. This method should - * be called on `git_strarray` objects that were provided by the - * library. Not doing so, will result in a memory leak. - * - * This does not free the `git_strarray` itself, since the library will - * never allocate that object directly itself. - * - * @param array The git_strarray that contains strings to free - */ -GIT_EXTERN(void) git_strarray_dispose(git_strarray *array); - -/** - * Copy a string array object from source to target. - * - * Note: target is overwritten and hence should be empty, otherwise its - * contents are leaked. Call git_strarray_free() if necessary. - * - * @param tgt target - * @param src source - * @return 0 on success, < 0 on allocation failure - */ -GIT_EXTERN(int) git_strarray_copy(git_strarray *tgt, const git_strarray *src); - - -/** @} */ -GIT_END_DECL - -#endif - diff --git a/libgit2/headers/git2/submodule.h b/libgit2/headers/git2/submodule.h deleted file mode 100644 index 29d8bc1..0000000 --- a/libgit2/headers/git2/submodule.h +++ /dev/null @@ -1,663 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_submodule_h__ -#define INCLUDE_git_submodule_h__ - -#include "common.h" -#include "types.h" -#include "oid.h" -#include "remote.h" -#include "checkout.h" - -/** - * @file git2/submodule.h - * @brief Git submodule management utilities - * - * Submodule support in libgit2 builds a list of known submodules and keeps - * it in the repository. The list is built from the .gitmodules file, the - * .git/config file, the index, and the HEAD tree. Items in the working - * directory that look like submodules (i.e. a git repo) but are not - * mentioned in those places won't be tracked. - * - * @defgroup git_submodule Git submodule management routines - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Return codes for submodule status. - * - * A combination of these flags will be returned to describe the status of a - * submodule. Depending on the "ignore" property of the submodule, some of - * the flags may never be returned because they indicate changes that are - * supposed to be ignored. - * - * Submodule info is contained in 4 places: the HEAD tree, the index, config - * files (both .git/config and .gitmodules), and the working directory. Any - * or all of those places might be missing information about the submodule - * depending on what state the repo is in. We consider all four places to - * build the combination of status flags. - * - * There are four values that are not really status, but give basic info - * about what sources of submodule data are available. These will be - * returned even if ignore is set to "ALL". - * - * * IN_HEAD - superproject head contains submodule - * * IN_INDEX - superproject index contains submodule - * * IN_CONFIG - superproject gitmodules has submodule - * * IN_WD - superproject workdir has submodule - * - * The following values will be returned so long as ignore is not "ALL". - * - * * INDEX_ADDED - in index, not in head - * * INDEX_DELETED - in head, not in index - * * INDEX_MODIFIED - index and head don't match - * * WD_UNINITIALIZED - workdir contains empty directory - * * WD_ADDED - in workdir, not index - * * WD_DELETED - in index, not workdir - * * WD_MODIFIED - index and workdir head don't match - * - * The following can only be returned if ignore is "NONE" or "UNTRACKED". - * - * * WD_INDEX_MODIFIED - submodule workdir index is dirty - * * WD_WD_MODIFIED - submodule workdir has modified files - * - * Lastly, the following will only be returned for ignore "NONE". - * - * * WD_UNTRACKED - wd contains untracked files - */ -typedef enum { - GIT_SUBMODULE_STATUS_IN_HEAD = (1u << 0), - GIT_SUBMODULE_STATUS_IN_INDEX = (1u << 1), - GIT_SUBMODULE_STATUS_IN_CONFIG = (1u << 2), - GIT_SUBMODULE_STATUS_IN_WD = (1u << 3), - GIT_SUBMODULE_STATUS_INDEX_ADDED = (1u << 4), - GIT_SUBMODULE_STATUS_INDEX_DELETED = (1u << 5), - GIT_SUBMODULE_STATUS_INDEX_MODIFIED = (1u << 6), - GIT_SUBMODULE_STATUS_WD_UNINITIALIZED = (1u << 7), - GIT_SUBMODULE_STATUS_WD_ADDED = (1u << 8), - GIT_SUBMODULE_STATUS_WD_DELETED = (1u << 9), - GIT_SUBMODULE_STATUS_WD_MODIFIED = (1u << 10), - GIT_SUBMODULE_STATUS_WD_INDEX_MODIFIED = (1u << 11), - GIT_SUBMODULE_STATUS_WD_WD_MODIFIED = (1u << 12), - GIT_SUBMODULE_STATUS_WD_UNTRACKED = (1u << 13), -} git_submodule_status_t; - -#define GIT_SUBMODULE_STATUS__IN_FLAGS 0x000Fu -#define GIT_SUBMODULE_STATUS__INDEX_FLAGS 0x0070u -#define GIT_SUBMODULE_STATUS__WD_FLAGS 0x3F80u - -#define GIT_SUBMODULE_STATUS_IS_UNMODIFIED(S) \ - (((S) & ~GIT_SUBMODULE_STATUS__IN_FLAGS) == 0) - -#define GIT_SUBMODULE_STATUS_IS_INDEX_UNMODIFIED(S) \ - (((S) & GIT_SUBMODULE_STATUS__INDEX_FLAGS) == 0) - -#define GIT_SUBMODULE_STATUS_IS_WD_UNMODIFIED(S) \ - (((S) & (GIT_SUBMODULE_STATUS__WD_FLAGS & \ - ~GIT_SUBMODULE_STATUS_WD_UNINITIALIZED)) == 0) - -#define GIT_SUBMODULE_STATUS_IS_WD_DIRTY(S) \ - (((S) & (GIT_SUBMODULE_STATUS_WD_INDEX_MODIFIED | \ - GIT_SUBMODULE_STATUS_WD_WD_MODIFIED | \ - GIT_SUBMODULE_STATUS_WD_UNTRACKED)) != 0) - -/** - * Function pointer to receive each submodule - * - * @param sm git_submodule currently being visited - * @param name name of the submodule - * @param payload value you passed to the foreach function as payload - * @return 0 on success or error code - */ -typedef int GIT_CALLBACK(git_submodule_cb)( - git_submodule *sm, const char *name, void *payload); - -/** - * Submodule update options structure - * - * Initialize with `GIT_SUBMODULE_UPDATE_OPTIONS_INIT`. Alternatively, you can - * use `git_submodule_update_options_init`. - * - */ -typedef struct git_submodule_update_options { - unsigned int version; - - /** - * These options are passed to the checkout step. To disable - * checkout, set the `checkout_strategy` to - * `GIT_CHECKOUT_NONE`. Generally you will want the use - * GIT_CHECKOUT_SAFE to update files in the working - * directory. - */ - git_checkout_options checkout_opts; - - /** - * Options which control the fetch, including callbacks. - * - * The callbacks to use for reporting fetch progress, and for acquiring - * credentials in the event they are needed. - */ - git_fetch_options fetch_opts; - - /** - * Allow fetching from the submodule's default remote if the target - * commit isn't found. Enabled by default. - */ - int allow_fetch; -} git_submodule_update_options; - -#define GIT_SUBMODULE_UPDATE_OPTIONS_VERSION 1 -#define GIT_SUBMODULE_UPDATE_OPTIONS_INIT \ - { GIT_SUBMODULE_UPDATE_OPTIONS_VERSION, \ - { GIT_CHECKOUT_OPTIONS_VERSION, GIT_CHECKOUT_SAFE }, \ - GIT_FETCH_OPTIONS_INIT, 1 } - -/** - * Initialize git_submodule_update_options structure - * - * Initializes a `git_submodule_update_options` with default values. Equivalent to - * creating an instance with `GIT_SUBMODULE_UPDATE_OPTIONS_INIT`. - * - * @param opts The `git_submodule_update_options` struct to initialize. - * @param version The struct version; pass `GIT_SUBMODULE_UPDATE_OPTIONS_VERSION`. - * @return Zero on success; -1 on failure. - */ -GIT_EXTERN(int) git_submodule_update_options_init( - git_submodule_update_options *opts, unsigned int version); - -/** - * Update a submodule. This will clone a missing submodule and - * checkout the subrepository to the commit specified in the index of - * the containing repository. If the submodule repository doesn't contain - * the target commit (e.g. because fetchRecurseSubmodules isn't set), then - * the submodule is fetched using the fetch options supplied in options. - * - * @param submodule Submodule object - * @param init If the submodule is not initialized, setting this flag to true - * will initialize the submodule before updating. Otherwise, this will - * return an error if attempting to update an uninitialzed repository. - * but setting this to true forces them to be updated. - * @param options configuration options for the update. If NULL, the - * function works as though GIT_SUBMODULE_UPDATE_OPTIONS_INIT was passed. - * @return 0 on success, any non-zero return value from a callback - * function, or a negative value to indicate an error (use - * `git_error_last` for a detailed error message). - */ -GIT_EXTERN(int) git_submodule_update(git_submodule *submodule, int init, git_submodule_update_options *options); - -/** - * Lookup submodule information by name or path. - * - * Given either the submodule name or path (they are usually the same), this - * returns a structure describing the submodule. - * - * There are two expected error scenarios: - * - * - The submodule is not mentioned in the HEAD, the index, and the config, - * but does "exist" in the working directory (i.e. there is a subdirectory - * that appears to be a Git repository). In this case, this function - * returns GIT_EEXISTS to indicate a sub-repository exists but not in a - * state where a git_submodule can be instantiated. - * - The submodule is not mentioned in the HEAD, index, or config and the - * working directory doesn't contain a value git repo at that path. - * There may or may not be anything else at that path, but nothing that - * looks like a submodule. In this case, this returns GIT_ENOTFOUND. - * - * You must call `git_submodule_free` when done with the submodule. - * - * @param out Output ptr to submodule; pass NULL to just get return code - * @param repo The parent repository - * @param name The name of or path to the submodule; trailing slashes okay - * @return 0 on success, GIT_ENOTFOUND if submodule does not exist, - * GIT_EEXISTS if a repository is found in working directory only, - * -1 on other errors. - */ -GIT_EXTERN(int) git_submodule_lookup( - git_submodule **out, - git_repository *repo, - const char *name); - -/** - * Create an in-memory copy of a submodule. The copy must be explicitly - * free'd or it will leak. - * - * @param out Pointer to store the copy of the submodule. - * @param source Original submodule to copy. - */ -GIT_EXTERN(int) git_submodule_dup(git_submodule **out, git_submodule *source); - -/** - * Release a submodule - * - * @param submodule Submodule object - */ -GIT_EXTERN(void) git_submodule_free(git_submodule *submodule); - -/** - * Iterate over all tracked submodules of a repository. - * - * See the note on `git_submodule` above. This iterates over the tracked - * submodules as described therein. - * - * If you are concerned about items in the working directory that look like - * submodules but are not tracked, the diff API will generate a diff record - * for workdir items that look like submodules but are not tracked, showing - * them as added in the workdir. Also, the status API will treat the entire - * subdirectory of a contained git repo as a single GIT_STATUS_WT_NEW item. - * - * @param repo The repository - * @param callback Function to be called with the name of each submodule. - * Return a non-zero value to terminate the iteration. - * @param payload Extra data to pass to callback - * @return 0 on success, -1 on error, or non-zero return value of callback - */ -GIT_EXTERN(int) git_submodule_foreach( - git_repository *repo, - git_submodule_cb callback, - void *payload); - -/** - * Set up a new git submodule for checkout. - * - * This does "git submodule add" up to the fetch and checkout of the - * submodule contents. It preps a new submodule, creates an entry in - * .gitmodules and creates an empty initialized repository either at the - * given path in the working directory or in .git/modules with a gitlink - * from the working directory to the new repo. - * - * To fully emulate "git submodule add" call this function, then open the - * submodule repo and perform the clone step as needed (if you don't need - * anything custom see `git_submodule_add_clone()`). Lastly, call - * `git_submodule_add_finalize()` to wrap up adding the new submodule and - * .gitmodules to the index to be ready to commit. - * - * You must call `git_submodule_free` on the submodule object when done. - * - * @param out The newly created submodule ready to open for clone - * @param repo The repository in which you want to create the submodule - * @param url URL for the submodule's remote - * @param path Path at which the submodule should be created - * @param use_gitlink Should workdir contain a gitlink to the repo in - * .git/modules vs. repo directly in workdir. - * @return 0 on success, GIT_EEXISTS if submodule already exists, - * -1 on other errors. - */ -GIT_EXTERN(int) git_submodule_add_setup( - git_submodule **out, - git_repository *repo, - const char *url, - const char *path, - int use_gitlink); - -/** - * Perform the clone step for a newly created submodule. - * - * This performs the necessary `git_clone` to setup a newly-created submodule. - * - * @param out The newly created repository object. Optional. - * @param submodule The submodule currently waiting for its clone. - * @param opts The options to use. - * - * @return 0 on success, -1 on other errors (see git_clone). - */ -GIT_EXTERN(int) git_submodule_clone( - git_repository **out, - git_submodule *submodule, - const git_submodule_update_options *opts); - -/** - * Resolve the setup of a new git submodule. - * - * This should be called on a submodule once you have called add setup - * and done the clone of the submodule. This adds the .gitmodules file - * and the newly cloned submodule to the index to be ready to be committed - * (but doesn't actually do the commit). - * - * @param submodule The submodule to finish adding. - */ -GIT_EXTERN(int) git_submodule_add_finalize(git_submodule *submodule); - -/** - * Add current submodule HEAD commit to index of superproject. - * - * @param submodule The submodule to add to the index - * @param write_index Boolean if this should immediately write the index - * file. If you pass this as false, you will have to get the - * git_index and explicitly call `git_index_write()` on it to - * save the change. - * @return 0 on success, <0 on failure - */ -GIT_EXTERN(int) git_submodule_add_to_index( - git_submodule *submodule, - int write_index); - -/** - * Get the containing repository for a submodule. - * - * This returns a pointer to the repository that contains the submodule. - * This is a just a reference to the repository that was passed to the - * original `git_submodule_lookup()` call, so if that repository has been - * freed, then this may be a dangling reference. - * - * @param submodule Pointer to submodule object - * @return Pointer to `git_repository` - */ -GIT_EXTERN(git_repository *) git_submodule_owner(git_submodule *submodule); - -/** - * Get the name of submodule. - * - * @param submodule Pointer to submodule object - * @return Pointer to the submodule name - */ -GIT_EXTERN(const char *) git_submodule_name(git_submodule *submodule); - -/** - * Get the path to the submodule. - * - * The path is almost always the same as the submodule name, but the - * two are actually not required to match. - * - * @param submodule Pointer to submodule object - * @return Pointer to the submodule path - */ -GIT_EXTERN(const char *) git_submodule_path(git_submodule *submodule); - -/** - * Get the URL for the submodule. - * - * @param submodule Pointer to submodule object - * @return Pointer to the submodule url - */ -GIT_EXTERN(const char *) git_submodule_url(git_submodule *submodule); - -/** - * Resolve a submodule url relative to the given repository. - * - * @param out buffer to store the absolute submodule url in - * @param repo Pointer to repository object - * @param url Relative url - * @return 0 or an error code - */ -GIT_EXTERN(int) git_submodule_resolve_url(git_buf *out, git_repository *repo, const char *url); - -/** -* Get the branch for the submodule. -* -* @param submodule Pointer to submodule object -* @return Pointer to the submodule branch -*/ -GIT_EXTERN(const char *) git_submodule_branch(git_submodule *submodule); - -/** - * Set the branch for the submodule in the configuration - * - * After calling this, you may wish to call `git_submodule_sync()` to - * write the changes to the checked out submodule repository. - * - * @param repo the repository to affect - * @param name the name of the submodule to configure - * @param branch Branch that should be used for the submodule - * @return 0 on success, <0 on failure - */ -GIT_EXTERN(int) git_submodule_set_branch(git_repository *repo, const char *name, const char *branch); - -/** - * Set the URL for the submodule in the configuration - * - * - * After calling this, you may wish to call `git_submodule_sync()` to - * write the changes to the checked out submodule repository. - * - * @param repo the repository to affect - * @param name the name of the submodule to configure - * @param url URL that should be used for the submodule - * @return 0 on success, <0 on failure - */ -GIT_EXTERN(int) git_submodule_set_url(git_repository *repo, const char *name, const char *url); - -/** - * Get the OID for the submodule in the index. - * - * @param submodule Pointer to submodule object - * @return Pointer to git_oid or NULL if submodule is not in index. - */ -GIT_EXTERN(const git_oid *) git_submodule_index_id(git_submodule *submodule); - -/** - * Get the OID for the submodule in the current HEAD tree. - * - * @param submodule Pointer to submodule object - * @return Pointer to git_oid or NULL if submodule is not in the HEAD. - */ -GIT_EXTERN(const git_oid *) git_submodule_head_id(git_submodule *submodule); - -/** - * Get the OID for the submodule in the current working directory. - * - * This returns the OID that corresponds to looking up 'HEAD' in the checked - * out submodule. If there are pending changes in the index or anything - * else, this won't notice that. You should call `git_submodule_status()` - * for a more complete picture about the state of the working directory. - * - * @param submodule Pointer to submodule object - * @return Pointer to git_oid or NULL if submodule is not checked out. - */ -GIT_EXTERN(const git_oid *) git_submodule_wd_id(git_submodule *submodule); - -/** - * Get the ignore rule that will be used for the submodule. - * - * These values control the behavior of `git_submodule_status()` for this - * submodule. There are four ignore values: - * - * - **GIT_SUBMODULE_IGNORE_NONE** will consider any change to the contents - * of the submodule from a clean checkout to be dirty, including the - * addition of untracked files. This is the default if unspecified. - * - **GIT_SUBMODULE_IGNORE_UNTRACKED** examines the contents of the - * working tree (i.e. call `git_status_foreach()` on the submodule) but - * UNTRACKED files will not count as making the submodule dirty. - * - **GIT_SUBMODULE_IGNORE_DIRTY** means to only check if the HEAD of the - * submodule has moved for status. This is fast since it does not need to - * scan the working tree of the submodule at all. - * - **GIT_SUBMODULE_IGNORE_ALL** means not to open the submodule repo. - * The working directory will be consider clean so long as there is a - * checked out version present. - * - * @param submodule The submodule to check - * @return The current git_submodule_ignore_t valyue what will be used for - * this submodule. - */ -GIT_EXTERN(git_submodule_ignore_t) git_submodule_ignore( - git_submodule *submodule); - -/** - * Set the ignore rule for the submodule in the configuration - * - * This does not affect any currently-loaded instances. - * - * @param repo the repository to affect - * @param name the name of the submdule - * @param ignore The new value for the ignore rule - * @return 0 or an error code - */ -GIT_EXTERN(int) git_submodule_set_ignore( - git_repository *repo, - const char *name, - git_submodule_ignore_t ignore); - -/** - * Get the update rule that will be used for the submodule. - * - * This value controls the behavior of the `git submodule update` command. - * There are four useful values documented with `git_submodule_update_t`. - * - * @param submodule The submodule to check - * @return The current git_submodule_update_t value that will be used - * for this submodule. - */ -GIT_EXTERN(git_submodule_update_t) git_submodule_update_strategy( - git_submodule *submodule); - -/** - * Set the update rule for the submodule in the configuration - * - * This setting won't affect any existing instances. - * - * @param repo the repository to affect - * @param name the name of the submodule to configure - * @param update The new value to use - * @return 0 or an error code - */ -GIT_EXTERN(int) git_submodule_set_update( - git_repository *repo, - const char *name, - git_submodule_update_t update); - -/** - * Read the fetchRecurseSubmodules rule for a submodule. - * - * This accesses the submodule..fetchRecurseSubmodules value for - * the submodule that controls fetching behavior for the submodule. - * - * Note that at this time, libgit2 does not honor this setting and the - * fetch functionality current ignores submodules. - * - * @return 0 if fetchRecurseSubmodules is false, 1 if true - */ -GIT_EXTERN(git_submodule_recurse_t) git_submodule_fetch_recurse_submodules( - git_submodule *submodule); - -/** - * Set the fetchRecurseSubmodules rule for a submodule in the configuration - * - * This setting won't affect any existing instances. - * - * @param repo the repository to affect - * @param name the submodule to configure - * @param fetch_recurse_submodules Boolean value - * @return old value for fetchRecurseSubmodules - */ -GIT_EXTERN(int) git_submodule_set_fetch_recurse_submodules( - git_repository *repo, - const char *name, - git_submodule_recurse_t fetch_recurse_submodules); - -/** - * Copy submodule info into ".git/config" file. - * - * Just like "git submodule init", this copies information about the - * submodule into ".git/config". You can use the accessor functions - * above to alter the in-memory git_submodule object and control what - * is written to the config, overriding what is in .gitmodules. - * - * @param submodule The submodule to write into the superproject config - * @param overwrite By default, existing entries will not be overwritten, - * but setting this to true forces them to be updated. - * @return 0 on success, <0 on failure. - */ -GIT_EXTERN(int) git_submodule_init(git_submodule *submodule, int overwrite); - -/** - * Set up the subrepository for a submodule in preparation for clone. - * - * This function can be called to init and set up a submodule - * repository from a submodule in preparation to clone it from - * its remote. - * - * @param out Output pointer to the created git repository. - * @param sm The submodule to create a new subrepository from. - * @param use_gitlink Should the workdir contain a gitlink to - * the repo in .git/modules vs. repo directly in workdir. - * @return 0 on success, <0 on failure. - */ -GIT_EXTERN(int) git_submodule_repo_init( - git_repository **out, - const git_submodule *sm, - int use_gitlink); - -/** - * Copy submodule remote info into submodule repo. - * - * This copies the information about the submodules URL into the checked out - * submodule config, acting like "git submodule sync". This is useful if - * you have altered the URL for the submodule (or it has been altered by a - * fetch of upstream changes) and you need to update your local repo. - */ -GIT_EXTERN(int) git_submodule_sync(git_submodule *submodule); - -/** - * Open the repository for a submodule. - * - * This is a newly opened repository object. The caller is responsible for - * calling `git_repository_free()` on it when done. Multiple calls to this - * function will return distinct `git_repository` objects. This will only - * work if the submodule is checked out into the working directory. - * - * @param repo Pointer to the submodule repo which was opened - * @param submodule Submodule to be opened - * @return 0 on success, <0 if submodule repo could not be opened. - */ -GIT_EXTERN(int) git_submodule_open( - git_repository **repo, - git_submodule *submodule); - -/** - * Reread submodule info from config, index, and HEAD. - * - * Call this to reread cached submodule information for this submodule if - * you have reason to believe that it has changed. - * - * @param submodule The submodule to reload - * @param force Force reload even if the data doesn't seem out of date - * @return 0 on success, <0 on error - */ -GIT_EXTERN(int) git_submodule_reload(git_submodule *submodule, int force); - -/** - * Get the status for a submodule. - * - * This looks at a submodule and tries to determine the status. It - * will return a combination of the `GIT_SUBMODULE_STATUS` values above. - * How deeply it examines the working directory to do this will depend - * on the `git_submodule_ignore_t` value for the submodule. - * - * @param status Combination of `GIT_SUBMODULE_STATUS` flags - * @param repo the repository in which to look - * @param name name of the submodule - * @param ignore the ignore rules to follow - * @return 0 on success, <0 on error - */ -GIT_EXTERN(int) git_submodule_status( - unsigned int *status, - git_repository *repo, - const char *name, - git_submodule_ignore_t ignore); - -/** - * Get the locations of submodule information. - * - * This is a bit like a very lightweight version of `git_submodule_status`. - * It just returns a made of the first four submodule status values (i.e. - * the ones like GIT_SUBMODULE_STATUS_IN_HEAD, etc) that tell you where the - * submodule data comes from (i.e. the HEAD commit, gitmodules file, etc.). - * This can be useful if you want to know if the submodule is present in the - * working directory at this point in time, etc. - * - * @param location_status Combination of first four `GIT_SUBMODULE_STATUS` flags - * @param submodule Submodule for which to get status - * @return 0 on success, <0 on error - */ -GIT_EXTERN(int) git_submodule_location( - unsigned int *location_status, - git_submodule *submodule); - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/sys/alloc.h b/libgit2/headers/git2/sys/alloc.h deleted file mode 100644 index c295807..0000000 --- a/libgit2/headers/git2/sys/alloc.h +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ - -#ifndef INCLUDE_sys_git_alloc_h__ -#define INCLUDE_sys_git_alloc_h__ - -#include "git2/common.h" - -GIT_BEGIN_DECL - -/** - * An instance for a custom memory allocator - * - * Setting the pointers of this structure allows the developer to implement - * custom memory allocators. The global memory allocator can be set by using - * "GIT_OPT_SET_ALLOCATOR" with the `git_libgit2_opts` function. Keep in mind - * that all fields need to be set to a proper function. - */ -typedef struct { - /** Allocate `n` bytes of memory */ - void * GIT_CALLBACK(gmalloc)(size_t n, const char *file, int line); - - /** - * Allocate memory for an array of `nelem` elements, where each element - * has a size of `elsize`. Returned memory shall be initialized to - * all-zeroes - */ - void * GIT_CALLBACK(gcalloc)(size_t nelem, size_t elsize, const char *file, int line); - - /** Allocate memory for the string `str` and duplicate its contents. */ - char * GIT_CALLBACK(gstrdup)(const char *str, const char *file, int line); - - /** - * Equivalent to the `gstrdup` function, but only duplicating at most - * `n + 1` bytes - */ - char * GIT_CALLBACK(gstrndup)(const char *str, size_t n, const char *file, int line); - - /** - * Equivalent to `gstrndup`, but will always duplicate exactly `n` bytes - * of `str`. Thus, out of bounds reads at `str` may happen. - */ - char * GIT_CALLBACK(gsubstrdup)(const char *str, size_t n, const char *file, int line); - - /** - * This function shall deallocate the old object `ptr` and return a - * pointer to a new object that has the size specified by `size`. In - * case `ptr` is `NULL`, a new array shall be allocated. - */ - void * GIT_CALLBACK(grealloc)(void *ptr, size_t size, const char *file, int line); - - /** - * This function shall be equivalent to `grealloc`, but allocating - * `neleme * elsize` bytes. - */ - void * GIT_CALLBACK(greallocarray)(void *ptr, size_t nelem, size_t elsize, const char *file, int line); - - /** - * This function shall allocate a new array of `nelem` elements, where - * each element has a size of `elsize` bytes. - */ - void * GIT_CALLBACK(gmallocarray)(size_t nelem, size_t elsize, const char *file, int line); - - /** - * This function shall free the memory pointed to by `ptr`. In case - * `ptr` is `NULL`, this shall be a no-op. - */ - void GIT_CALLBACK(gfree)(void *ptr); -} git_allocator; - -/** - * Initialize the allocator structure to use the `stdalloc` pointer. - * - * Set up the structure so that all of its members are using the standard - * "stdalloc" allocator functions. The structure can then be used with - * `git_allocator_setup`. - * - * @param allocator The allocator that is to be initialized. - * @return An error code or 0. - */ -int git_stdalloc_init_allocator(git_allocator *allocator); - -/** - * Initialize the allocator structure to use the `crtdbg` pointer. - * - * Set up the structure so that all of its members are using the "crtdbg" - * allocator functions. Note that this allocator is only available on Windows - * platforms and only if libgit2 is being compiled with "-DMSVC_CRTDBG". - * - * @param allocator The allocator that is to be initialized. - * @return An error code or 0. - */ -int git_win32_crtdbg_init_allocator(git_allocator *allocator); - -GIT_END_DECL - -#endif diff --git a/libgit2/headers/git2/sys/commit.h b/libgit2/headers/git2/sys/commit.h deleted file mode 100644 index ba67106..0000000 --- a/libgit2/headers/git2/sys/commit.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_sys_git_commit_h__ -#define INCLUDE_sys_git_commit_h__ - -#include "git2/common.h" -#include "git2/types.h" -#include "git2/oid.h" - -/** - * @file git2/sys/commit.h - * @brief Low-level Git commit creation - * @defgroup git_backend Git custom backend APIs - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Create new commit in the repository from a list of `git_oid` values. - * - * See documentation for `git_commit_create()` for information about the - * parameters, as the meaning is identical excepting that `tree` and - * `parents` now take `git_oid`. This is a dangerous API in that nor - * the `tree`, neither the `parents` list of `git_oid`s are checked for - * validity. - * - * @see git_commit_create - */ -GIT_EXTERN(int) git_commit_create_from_ids( - git_oid *id, - git_repository *repo, - const char *update_ref, - const git_signature *author, - const git_signature *committer, - const char *message_encoding, - const char *message, - const git_oid *tree, - size_t parent_count, - const git_oid *parents[]); - -/** - * Callback function to return parents for commit. - * - * This is invoked with the count of the number of parents processed so far - * along with the user supplied payload. This should return a git_oid of - * the next parent or NULL if all parents have been provided. - */ -typedef const git_oid * GIT_CALLBACK(git_commit_parent_callback)(size_t idx, void *payload); - -/** - * Create a new commit in the repository with an callback to supply parents. - * - * See documentation for `git_commit_create()` for information about the - * parameters, as the meaning is identical excepting that `tree` takes a - * `git_oid` and doesn't check for validity, and `parent_cb` is invoked - * with `parent_payload` and should return `git_oid` values or NULL to - * indicate that all parents are accounted for. - * - * @see git_commit_create - */ -GIT_EXTERN(int) git_commit_create_from_callback( - git_oid *id, - git_repository *repo, - const char *update_ref, - const git_signature *author, - const git_signature *committer, - const char *message_encoding, - const char *message, - const git_oid *tree, - git_commit_parent_callback parent_cb, - void *parent_payload); - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/sys/commit_graph.h b/libgit2/headers/git2/sys/commit_graph.h deleted file mode 100644 index f6c0fc4..0000000 --- a/libgit2/headers/git2/sys/commit_graph.h +++ /dev/null @@ -1,174 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_sys_git_commit_graph_h__ -#define INCLUDE_sys_git_commit_graph_h__ - -#include "git2/common.h" -#include "git2/types.h" - -/** - * @file git2/sys/commit_graph.h - * @brief Git commit-graph - * @defgroup git_commit_graph Git commit-graph APIs - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Opens a `git_commit_graph` from a path to an objects directory. - * - * This finds, opens, and validates the `commit-graph` file. - * - * @param cgraph_out the `git_commit_graph` struct to initialize. - * @param objects_dir the path to a git objects directory. - * @return Zero on success; -1 on failure. - */ -GIT_EXTERN(int) git_commit_graph_open(git_commit_graph **cgraph_out, const char *objects_dir); - -/** - * Frees commit-graph data. This should only be called when memory allocated - * using `git_commit_graph_open` is not returned to libgit2 because it was not - * associated with the ODB through a successful call to - * `git_odb_set_commit_graph`. - * - * @param cgraph the commit-graph object to free. If NULL, no action is taken. - */ -GIT_EXTERN(void) git_commit_graph_free(git_commit_graph *cgraph); - -/** - * Create a new writer for `commit-graph` files. - * - * @param out Location to store the writer pointer. - * @param objects_info_dir The `objects/info` directory. - * The `commit-graph` file will be written in this directory. - * @return 0 or an error code - */ -GIT_EXTERN(int) git_commit_graph_writer_new( - git_commit_graph_writer **out, - const char *objects_info_dir); - -/** - * Free the commit-graph writer and its resources. - * - * @param w The writer to free. If NULL no action is taken. - */ -GIT_EXTERN(void) git_commit_graph_writer_free(git_commit_graph_writer *w); - -/** - * Add an `.idx` file (associated to a packfile) to the writer. - * - * @param w The writer. - * @param repo The repository that owns the `.idx` file. - * @param idx_path The path of an `.idx` file. - * @return 0 or an error code - */ -GIT_EXTERN(int) git_commit_graph_writer_add_index_file( - git_commit_graph_writer *w, - git_repository *repo, - const char *idx_path); - -/** - * Add a revwalk to the writer. This will add all the commits from the revwalk - * to the commit-graph. - * - * @param w The writer. - * @param walk The git_revwalk. - * @return 0 or an error code - */ -GIT_EXTERN(int) git_commit_graph_writer_add_revwalk( - git_commit_graph_writer *w, - git_revwalk *walk); - - -/** - * The strategy to use when adding a new set of commits to a pre-existing - * commit-graph chain. - */ -typedef enum { - /** - * Do not split commit-graph files. The other split strategy-related option - * fields are ignored. - */ - GIT_COMMIT_GRAPH_SPLIT_STRATEGY_SINGLE_FILE = 0, -} git_commit_graph_split_strategy_t; - -/** - * Options structure for - * `git_commit_graph_writer_commit`/`git_commit_graph_writer_dump`. - * - * Initialize with `GIT_COMMIT_GRAPH_WRITER_OPTIONS_INIT`. Alternatively, you - * can use `git_commit_graph_writer_options_init`. - */ -typedef struct { - unsigned int version; - - /** - * The strategy to use when adding new commits to a pre-existing commit-graph - * chain. - */ - git_commit_graph_split_strategy_t split_strategy; - - /** - * The number of commits in level N is less than X times the number of - * commits in level N + 1. Default is 2. - */ - float size_multiple; - - /** - * The number of commits in level N + 1 is more than C commits. - * Default is 64000. - */ - size_t max_commits; -} git_commit_graph_writer_options; - -#define GIT_COMMIT_GRAPH_WRITER_OPTIONS_VERSION 1 -#define GIT_COMMIT_GRAPH_WRITER_OPTIONS_INIT { \ - GIT_COMMIT_GRAPH_WRITER_OPTIONS_VERSION \ - } - -/** - * Initialize git_commit_graph_writer_options structure - * - * Initializes a `git_commit_graph_writer_options` with default values. Equivalent to - * creating an instance with `GIT_COMMIT_GRAPH_WRITER_OPTIONS_INIT`. - * - * @param opts The `git_commit_graph_writer_options` struct to initialize. - * @param version The struct version; pass `GIT_COMMIT_GRAPH_WRITER_OPTIONS_VERSION`. - * @return Zero on success; -1 on failure. - */ -GIT_EXTERN(int) git_commit_graph_writer_options_init( - git_commit_graph_writer_options *opts, - unsigned int version); - -/** - * Write a `commit-graph` file to a file. - * - * @param w The writer - * @param opts Pointer to git_commit_graph_writer_options struct. - * @return 0 or an error code - */ -GIT_EXTERN(int) git_commit_graph_writer_commit( - git_commit_graph_writer *w, - git_commit_graph_writer_options *opts); - -/** - * Dump the contents of the `commit-graph` to an in-memory buffer. - * - * @param buffer Buffer where to store the contents of the `commit-graph`. - * @param w The writer. - * @param opts Pointer to git_commit_graph_writer_options struct. - * @return 0 or an error code - */ -GIT_EXTERN(int) git_commit_graph_writer_dump( - git_buf *buffer, - git_commit_graph_writer *w, - git_commit_graph_writer_options *opts); - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/sys/config.h b/libgit2/headers/git2/sys/config.h deleted file mode 100644 index 0a9005e..0000000 --- a/libgit2/headers/git2/sys/config.h +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_sys_git_config_backend_h__ -#define INCLUDE_sys_git_config_backend_h__ - -#include "git2/common.h" -#include "git2/types.h" -#include "git2/config.h" - -/** - * @file git2/sys/config.h - * @brief Git config backend routines - * @defgroup git_backend Git custom backend APIs - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Every iterator must have this struct as its first element, so the - * API can talk to it. You'd define your iterator as - * - * struct my_iterator { - * git_config_iterator parent; - * ... - * } - * - * and assign `iter->parent.backend` to your `git_config_backend`. - */ -struct git_config_iterator { - git_config_backend *backend; - unsigned int flags; - - /** - * Return the current entry and advance the iterator. The - * memory belongs to the library. - */ - int GIT_CALLBACK(next)(git_config_entry **entry, git_config_iterator *iter); - - /** - * Free the iterator - */ - void GIT_CALLBACK(free)(git_config_iterator *iter); -}; - -/** - * Generic backend that implements the interface to - * access a configuration file - */ -struct git_config_backend { - unsigned int version; - /** True if this backend is for a snapshot */ - int readonly; - struct git_config *cfg; - - /* Open means open the file/database and parse if necessary */ - int GIT_CALLBACK(open)(struct git_config_backend *, git_config_level_t level, const git_repository *repo); - int GIT_CALLBACK(get)(struct git_config_backend *, const char *key, git_config_entry **entry); - int GIT_CALLBACK(set)(struct git_config_backend *, const char *key, const char *value); - int GIT_CALLBACK(set_multivar)(git_config_backend *cfg, const char *name, const char *regexp, const char *value); - int GIT_CALLBACK(del)(struct git_config_backend *, const char *key); - int GIT_CALLBACK(del_multivar)(struct git_config_backend *, const char *key, const char *regexp); - int GIT_CALLBACK(iterator)(git_config_iterator **, struct git_config_backend *); - /** Produce a read-only version of this backend */ - int GIT_CALLBACK(snapshot)(struct git_config_backend **, struct git_config_backend *); - /** - * Lock this backend. - * - * Prevent any writes to the data store backing this - * backend. Any updates must not be visible to any other - * readers. - */ - int GIT_CALLBACK(lock)(struct git_config_backend *); - /** - * Unlock the data store backing this backend. If success is - * true, the changes should be committed, otherwise rolled - * back. - */ - int GIT_CALLBACK(unlock)(struct git_config_backend *, int success); - void GIT_CALLBACK(free)(struct git_config_backend *); -}; -#define GIT_CONFIG_BACKEND_VERSION 1 -#define GIT_CONFIG_BACKEND_INIT {GIT_CONFIG_BACKEND_VERSION} - -/** - * Initializes a `git_config_backend` with default values. Equivalent to - * creating an instance with GIT_CONFIG_BACKEND_INIT. - * - * @param backend the `git_config_backend` struct to initialize. - * @param version Version of struct; pass `GIT_CONFIG_BACKEND_VERSION` - * @return Zero on success; -1 on failure. - */ -GIT_EXTERN(int) git_config_init_backend( - git_config_backend *backend, - unsigned int version); - -/** - * Add a generic config file instance to an existing config - * - * Note that the configuration object will free the file - * automatically. - * - * Further queries on this config object will access each - * of the config file instances in order (instances with - * a higher priority level will be accessed first). - * - * @param cfg the configuration to add the file to - * @param file the configuration file (backend) to add - * @param level the priority level of the backend - * @param repo optional repository to allow parsing of - * conditional includes - * @param force if a config file already exists for the given - * priority level, replace it - * @return 0 on success, GIT_EEXISTS when adding more than one file - * for a given priority level (and force_replace set to 0), or error code - */ -GIT_EXTERN(int) git_config_add_backend( - git_config *cfg, - git_config_backend *file, - git_config_level_t level, - const git_repository *repo, - int force); - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/sys/cred.h b/libgit2/headers/git2/sys/cred.h deleted file mode 100644 index 4d2a59a..0000000 --- a/libgit2/headers/git2/sys/cred.h +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_sys_git_cred_h__ -#define INCLUDE_sys_git_cred_h__ - -/* These declarations have moved. */ -#ifndef GIT_DEPRECATE_HARD -# include "git2/sys/credential.h" -#endif - -#endif diff --git a/libgit2/headers/git2/sys/credential.h b/libgit2/headers/git2/sys/credential.h deleted file mode 100644 index bb4c9f9..0000000 --- a/libgit2/headers/git2/sys/credential.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_sys_git_credential_h__ -#define INCLUDE_sys_git_credential_h__ - -#include "git2/common.h" -#include "git2/credential.h" - -/** - * @file git2/sys/cred.h - * @brief Git credentials low-level implementation - * @defgroup git_credential Git credentials low-level implementation - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * The base structure for all credential types - */ -struct git_credential { - git_credential_t credtype; /**< A type of credential */ - - /** The deallocator for this type of credentials */ - void GIT_CALLBACK(free)(git_credential *cred); -}; - -/** A plaintext username and password */ -struct git_credential_userpass_plaintext { - git_credential parent; /**< The parent credential */ - char *username; /**< The username to authenticate as */ - char *password; /**< The password to use */ -}; - -/** Username-only credential information */ -struct git_credential_username { - git_credential parent; /**< The parent credential */ - char username[1]; /**< The username to authenticate as */ -}; - -/** - * A ssh key from disk - */ -struct git_credential_ssh_key { - git_credential parent; /**< The parent credential */ - char *username; /**< The username to authenticate as */ - char *publickey; /**< The path to a public key */ - char *privatekey; /**< The path to a private key */ - char *passphrase; /**< Passphrase to decrypt the private key */ -}; - -/** - * Keyboard-interactive based ssh authentication - */ -struct git_credential_ssh_interactive { - git_credential parent; /**< The parent credential */ - char *username; /**< The username to authenticate as */ - - /** - * Callback used for authentication. - */ - git_credential_ssh_interactive_cb prompt_callback; - - void *payload; /**< Payload passed to prompt_callback */ -}; - -/** - * A key with a custom signature function - */ -struct git_credential_ssh_custom { - git_credential parent; /**< The parent credential */ - char *username; /**< The username to authenticate as */ - char *publickey; /**< The public key data */ - size_t publickey_len; /**< Length of the public key */ - - /** - * Callback used to sign the data. - */ - git_credential_sign_cb sign_callback; - - void *payload; /**< Payload passed to prompt_callback */ -}; - -GIT_END_DECL - -#endif diff --git a/libgit2/headers/git2/sys/diff.h b/libgit2/headers/git2/sys/diff.h deleted file mode 100644 index aefd7b9..0000000 --- a/libgit2/headers/git2/sys/diff.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_sys_git_diff_h__ -#define INCLUDE_sys_git_diff_h__ - -#include "git2/common.h" -#include "git2/types.h" -#include "git2/oid.h" -#include "git2/diff.h" -#include "git2/status.h" - -/** - * @file git2/sys/diff.h - * @brief Low-level Git diff utilities - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Diff print callback that writes to a git_buf. - * - * This function is provided not for you to call it directly, but instead - * so you can use it as a function pointer to the `git_diff_print` or - * `git_patch_print` APIs. When using those APIs, you specify a callback - * to actually handle the diff and/or patch data. - * - * Use this callback to easily write that data to a `git_buf` buffer. You - * must pass a `git_buf *` value as the payload to the `git_diff_print` - * and/or `git_patch_print` function. The data will be appended to the - * buffer (after any existing content). - */ -GIT_EXTERN(int) git_diff_print_callback__to_buf( - const git_diff_delta *delta, - const git_diff_hunk *hunk, - const git_diff_line *line, - void *payload); /**< payload must be a `git_buf *` */ - -/** - * Diff print callback that writes to stdio FILE handle. - * - * This function is provided not for you to call it directly, but instead - * so you can use it as a function pointer to the `git_diff_print` or - * `git_patch_print` APIs. When using those APIs, you specify a callback - * to actually handle the diff and/or patch data. - * - * Use this callback to easily write that data to a stdio FILE handle. You - * must pass a `FILE *` value (such as `stdout` or `stderr` or the return - * value from `fopen()`) as the payload to the `git_diff_print` - * and/or `git_patch_print` function. If you pass NULL, this will write - * data to `stdout`. - */ -GIT_EXTERN(int) git_diff_print_callback__to_file_handle( - const git_diff_delta *delta, - const git_diff_hunk *hunk, - const git_diff_line *line, - void *payload); /**< payload must be a `FILE *` */ - - -/** - * Performance data from diffing - */ -typedef struct { - unsigned int version; - size_t stat_calls; /**< Number of stat() calls performed */ - size_t oid_calculations; /**< Number of ID calculations */ -} git_diff_perfdata; - -#define GIT_DIFF_PERFDATA_VERSION 1 -#define GIT_DIFF_PERFDATA_INIT {GIT_DIFF_PERFDATA_VERSION,0,0} - -/** - * Get performance data for a diff object. - * - * @param out Structure to be filled with diff performance data - * @param diff Diff to read performance data from - * @return 0 for success, <0 for error - */ -GIT_EXTERN(int) git_diff_get_perfdata( - git_diff_perfdata *out, const git_diff *diff); - -/** - * Get performance data for diffs from a git_status_list - */ -GIT_EXTERN(int) git_status_list_get_perfdata( - git_diff_perfdata *out, const git_status_list *status); - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/sys/email.h b/libgit2/headers/git2/sys/email.h deleted file mode 100644 index 6f4a286..0000000 --- a/libgit2/headers/git2/sys/email.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_sys_git_email_h__ -#define INCLUDE_sys_git_email_h__ - -/** - * @file git2/sys/email.h - * @brief Advanced git email creation routines - * @defgroup git_email Advanced git email creation routines - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Create a diff for a commit in mbox format for sending via email. - * - * @param out buffer to store the e-mail patch in - * @param diff the changes to include in the email - * @param patch_idx the patch index - * @param patch_count the total number of patches that will be included - * @param commit_id the commit id for this change - * @param summary the commit message for this change - * @param body optional text to include above the diffstat - * @param author the person who authored this commit - * @param opts email creation options - */ -GIT_EXTERN(int) git_email_create_from_diff( - git_buf *out, - git_diff *diff, - size_t patch_idx, - size_t patch_count, - const git_oid *commit_id, - const char *summary, - const char *body, - const git_signature *author, - const git_email_create_options *opts); - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/sys/filter.h b/libgit2/headers/git2/sys/filter.h deleted file mode 100644 index b375941..0000000 --- a/libgit2/headers/git2/sys/filter.h +++ /dev/null @@ -1,353 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_sys_git_filter_h__ -#define INCLUDE_sys_git_filter_h__ - -#include "git2/filter.h" - -/** - * @file git2/sys/filter.h - * @brief Git filter backend and plugin routines - * @defgroup git_backend Git custom backend APIs - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Look up a filter by name - * - * @param name The name of the filter - * @return Pointer to the filter object or NULL if not found - */ -GIT_EXTERN(git_filter *) git_filter_lookup(const char *name); - -#define GIT_FILTER_CRLF "crlf" -#define GIT_FILTER_IDENT "ident" - -/** - * This is priority that the internal CRLF filter will be registered with - */ -#define GIT_FILTER_CRLF_PRIORITY 0 - -/** - * This is priority that the internal ident filter will be registered with - */ -#define GIT_FILTER_IDENT_PRIORITY 100 - -/** - * This is priority to use with a custom filter to imitate a core Git - * filter driver, so that it will be run last on checkout and first on - * checkin. You do not have to use this, but it helps compatibility. - */ -#define GIT_FILTER_DRIVER_PRIORITY 200 - -/** - * Create a new empty filter list - * - * Normally you won't use this because `git_filter_list_load` will create - * the filter list for you, but you can use this in combination with the - * `git_filter_lookup` and `git_filter_list_push` functions to assemble - * your own chains of filters. - */ -GIT_EXTERN(int) git_filter_list_new( - git_filter_list **out, - git_repository *repo, - git_filter_mode_t mode, - uint32_t options); - -/** - * Add a filter to a filter list with the given payload. - * - * Normally you won't have to do this because the filter list is created - * by calling the "check" function on registered filters when the filter - * attributes are set, but this does allow more direct manipulation of - * filter lists when desired. - * - * Note that normally the "check" function can set up a payload for the - * filter. Using this function, you can either pass in a payload if you - * know the expected payload format, or you can pass NULL. Some filters - * may fail with a NULL payload. Good luck! - */ -GIT_EXTERN(int) git_filter_list_push( - git_filter_list *fl, git_filter *filter, void *payload); - -/** - * Look up how many filters are in the list - * - * We will attempt to apply all of these filters to any data passed in, - * but note that the filter apply action still has the option of skipping - * data that is passed in (for example, the CRLF filter will skip data - * that appears to be binary). - * - * @param fl A filter list - * @return The number of filters in the list - */ -GIT_EXTERN(size_t) git_filter_list_length(const git_filter_list *fl); - -/** - * A filter source represents a file/blob to be processed - */ -typedef struct git_filter_source git_filter_source; - -/** - * Get the repository that the source data is coming from. - */ -GIT_EXTERN(git_repository *) git_filter_source_repo(const git_filter_source *src); - -/** - * Get the path that the source data is coming from. - */ -GIT_EXTERN(const char *) git_filter_source_path(const git_filter_source *src); - -/** - * Get the file mode of the source file - * If the mode is unknown, this will return 0 - */ -GIT_EXTERN(uint16_t) git_filter_source_filemode(const git_filter_source *src); - -/** - * Get the OID of the source - * If the OID is unknown (often the case with GIT_FILTER_CLEAN) then - * this will return NULL. - */ -GIT_EXTERN(const git_oid *) git_filter_source_id(const git_filter_source *src); - -/** - * Get the git_filter_mode_t to be used - */ -GIT_EXTERN(git_filter_mode_t) git_filter_source_mode(const git_filter_source *src); - -/** - * Get the combination git_filter_flag_t options to be applied - */ -GIT_EXTERN(uint32_t) git_filter_source_flags(const git_filter_source *src); - -/** - * Initialize callback on filter - * - * Specified as `filter.initialize`, this is an optional callback invoked - * before a filter is first used. It will be called once at most. - * - * If non-NULL, the filter's `initialize` callback will be invoked right - * before the first use of the filter, so you can defer expensive - * initialization operations (in case libgit2 is being used in a way that - * doesn't need the filter). - */ -typedef int GIT_CALLBACK(git_filter_init_fn)(git_filter *self); - -/** - * Shutdown callback on filter - * - * Specified as `filter.shutdown`, this is an optional callback invoked - * when the filter is unregistered or when libgit2 is shutting down. It - * will be called once at most and should release resources as needed. - * This may be called even if the `initialize` callback was not made. - * - * Typically this function will free the `git_filter` object itself. - */ -typedef void GIT_CALLBACK(git_filter_shutdown_fn)(git_filter *self); - -/** - * Callback to decide if a given source needs this filter - * - * Specified as `filter.check`, this is an optional callback that checks - * if filtering is needed for a given source. - * - * It should return 0 if the filter should be applied (i.e. success), - * GIT_PASSTHROUGH if the filter should not be applied, or an error code - * to fail out of the filter processing pipeline and return to the caller. - * - * The `attr_values` will be set to the values of any attributes given in - * the filter definition. See `git_filter` below for more detail. - * - * The `payload` will be a pointer to a reference payload for the filter. - * This will start as NULL, but `check` can assign to this pointer for - * later use by the `stream` callback. Note that the value should be heap - * allocated (not stack), so that it doesn't go away before the `stream` - * callback can use it. If a filter allocates and assigns a value to the - * `payload`, it will need a `cleanup` callback to free the payload. - */ -typedef int GIT_CALLBACK(git_filter_check_fn)( - git_filter *self, - void **payload, /* NULL on entry, may be set */ - const git_filter_source *src, - const char **attr_values); - -#ifndef GIT_DEPRECATE_HARD -/** - * Callback to actually perform the data filtering - * - * Specified as `filter.apply`, this is the callback that actually filters - * data. If it successfully writes the output, it should return 0. Like - * `check`, it can return GIT_PASSTHROUGH to indicate that the filter - * doesn't want to run. Other error codes will stop filter processing and - * return to the caller. - * - * The `payload` value will refer to any payload that was set by the - * `check` callback. It may be read from or written to as needed. - * - * @deprecated use git_filter_stream_fn - */ -typedef int GIT_CALLBACK(git_filter_apply_fn)( - git_filter *self, - void **payload, /* may be read and/or set */ - git_buf *to, - const git_buf *from, - const git_filter_source *src); -#endif - -/** - * Callback to perform the data filtering. - * - * Specified as `filter.stream`, this is a callback that filters data - * in a streaming manner. This function will provide a - * `git_writestream` that will the original data will be written to; - * with that data, the `git_writestream` will then perform the filter - * translation and stream the filtered data out to the `next` location. - */ -typedef int GIT_CALLBACK(git_filter_stream_fn)( - git_writestream **out, - git_filter *self, - void **payload, - const git_filter_source *src, - git_writestream *next); - -/** - * Callback to clean up after filtering has been applied - * - * Specified as `filter.cleanup`, this is an optional callback invoked - * after the filter has been applied. If the `check`, `apply`, or - * `stream` callbacks allocated a `payload` to keep per-source filter - * state, use this callback to free that payload and release resources - * as required. - */ -typedef void GIT_CALLBACK(git_filter_cleanup_fn)( - git_filter *self, - void *payload); - -/** - * Filter structure used to register custom filters. - * - * To associate extra data with a filter, allocate extra data and put the - * `git_filter` struct at the start of your data buffer, then cast the - * `self` pointer to your larger structure when your callback is invoked. - */ -struct git_filter { - /** The `version` field should be set to `GIT_FILTER_VERSION`. */ - unsigned int version; - - /** - * A whitespace-separated list of attribute names to check for this - * filter (e.g. "eol crlf text"). If the attribute name is bare, it - * will be simply loaded and passed to the `check` callback. If it - * has a value (i.e. "name=value"), the attribute must match that - * value for the filter to be applied. The value may be a wildcard - * (eg, "name=*"), in which case the filter will be invoked for any - * value for the given attribute name. See the attribute parameter - * of the `check` callback for the attribute value that was specified. - */ - const char *attributes; - - /** Called when the filter is first used for any file. */ - git_filter_init_fn initialize; - - /** Called when the filter is removed or unregistered from the system. */ - git_filter_shutdown_fn shutdown; - - /** - * Called to determine whether the filter should be invoked for a - * given file. If this function returns `GIT_PASSTHROUGH` then the - * `stream` or `apply` functions will not be invoked and the - * contents will be passed through unmodified. - */ - git_filter_check_fn check; - -#ifdef GIT_DEPRECATE_HARD - void *reserved; -#else - /** - * Provided for backward compatibility; this will apply the - * filter to the given contents in a `git_buf`. Callers should - * provide a `stream` function instead. - */ - git_filter_apply_fn apply; -#endif - - /** - * Called to apply the filter, this function will provide a - * `git_writestream` that will the original data will be - * written to; with that data, the `git_writestream` will then - * perform the filter translation and stream the filtered data - * out to the `next` location. - */ - git_filter_stream_fn stream; - - /** Called when the system is done filtering for a file. */ - git_filter_cleanup_fn cleanup; -}; - -#define GIT_FILTER_VERSION 1 -#define GIT_FILTER_INIT {GIT_FILTER_VERSION} - -/** - * Initializes a `git_filter` with default values. Equivalent to - * creating an instance with GIT_FILTER_INIT. - * - * @param filter the `git_filter` struct to initialize. - * @param version Version the struct; pass `GIT_FILTER_VERSION` - * @return Zero on success; -1 on failure. - */ -GIT_EXTERN(int) git_filter_init(git_filter *filter, unsigned int version); - -/** - * Register a filter under a given name with a given priority. - * - * As mentioned elsewhere, the initialize callback will not be invoked - * immediately. It is deferred until the filter is used in some way. - * - * A filter's attribute checks and `check` and `stream` (or `apply`) - * callbacks will be issued in order of `priority` on smudge (to - * workdir), and in reverse order of `priority` on clean (to odb). - * - * Two filters are preregistered with libgit2: - * - GIT_FILTER_CRLF with priority 0 - * - GIT_FILTER_IDENT with priority 100 - * - * Currently the filter registry is not thread safe, so any registering or - * deregistering of filters must be done outside of any possible usage of - * the filters (i.e. during application setup or shutdown). - * - * @param name A name by which the filter can be referenced. Attempting - * to register with an in-use name will return GIT_EEXISTS. - * @param filter The filter definition. This pointer will be stored as is - * by libgit2 so it must be a durable allocation (either static - * or on the heap). - * @param priority The priority for filter application - * @return 0 on successful registry, error code <0 on failure - */ -GIT_EXTERN(int) git_filter_register( - const char *name, git_filter *filter, int priority); - -/** - * Remove the filter with the given name - * - * Attempting to remove the builtin libgit2 filters is not permitted and - * will return an error. - * - * Currently the filter registry is not thread safe, so any registering or - * deregistering of filters must be done outside of any possible usage of - * the filters (i.e. during application setup or shutdown). - * - * @param name The name under which the filter was registered - * @return 0 on success, error code <0 on failure - */ -GIT_EXTERN(int) git_filter_unregister(const char *name); - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/sys/hashsig.h b/libgit2/headers/git2/sys/hashsig.h deleted file mode 100644 index 09c19ae..0000000 --- a/libgit2/headers/git2/sys/hashsig.h +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_sys_hashsig_h__ -#define INCLUDE_sys_hashsig_h__ - -#include "git2/common.h" - -GIT_BEGIN_DECL - -/** - * Similarity signature of arbitrary text content based on line hashes - */ -typedef struct git_hashsig git_hashsig; - -/** - * Options for hashsig computation - * - * The options GIT_HASHSIG_NORMAL, GIT_HASHSIG_IGNORE_WHITESPACE, - * GIT_HASHSIG_SMART_WHITESPACE are exclusive and should not be combined. - */ -typedef enum { - /** - * Use all data - */ - GIT_HASHSIG_NORMAL = 0, - - /** - * Ignore whitespace - */ - GIT_HASHSIG_IGNORE_WHITESPACE = (1 << 0), - - /** - * Ignore \r and all space after \n - */ - GIT_HASHSIG_SMART_WHITESPACE = (1 << 1), - - /** - * Allow hashing of small files - */ - GIT_HASHSIG_ALLOW_SMALL_FILES = (1 << 2) -} git_hashsig_option_t; - -/** - * Compute a similarity signature for a text buffer - * - * If you have passed the option GIT_HASHSIG_IGNORE_WHITESPACE, then the - * whitespace will be removed from the buffer while it is being processed, - * modifying the buffer in place. Sorry about that! - * - * @param out The computed similarity signature. - * @param buf The input buffer. - * @param buflen The input buffer size. - * @param opts The signature computation options (see above). - * @return 0 on success, GIT_EBUFS if the buffer doesn't contain enough data to - * compute a valid signature (unless GIT_HASHSIG_ALLOW_SMALL_FILES is set), or - * error code. - */ -GIT_EXTERN(int) git_hashsig_create( - git_hashsig **out, - const char *buf, - size_t buflen, - git_hashsig_option_t opts); - -/** - * Compute a similarity signature for a text file - * - * This walks through the file, only loading a maximum of 4K of file data at - * a time. Otherwise, it acts just like `git_hashsig_create`. - * - * @param out The computed similarity signature. - * @param path The path to the input file. - * @param opts The signature computation options (see above). - * @return 0 on success, GIT_EBUFS if the buffer doesn't contain enough data to - * compute a valid signature (unless GIT_HASHSIG_ALLOW_SMALL_FILES is set), or - * error code. - */ -GIT_EXTERN(int) git_hashsig_create_fromfile( - git_hashsig **out, - const char *path, - git_hashsig_option_t opts); - -/** - * Release memory for a content similarity signature - * - * @param sig The similarity signature to free. - */ -GIT_EXTERN(void) git_hashsig_free(git_hashsig *sig); - -/** - * Measure similarity score between two similarity signatures - * - * @param a The first similarity signature to compare. - * @param b The second similarity signature to compare. - * @return [0 to 100] on success as the similarity score, or error code. - */ -GIT_EXTERN(int) git_hashsig_compare( - const git_hashsig *a, - const git_hashsig *b); - -GIT_END_DECL - -#endif diff --git a/libgit2/headers/git2/sys/index.h b/libgit2/headers/git2/sys/index.h deleted file mode 100644 index 1f6d93f..0000000 --- a/libgit2/headers/git2/sys/index.h +++ /dev/null @@ -1,182 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_sys_git_index_h__ -#define INCLUDE_sys_git_index_h__ - -#include "git2/common.h" -#include "git2/types.h" - -/** - * @file git2/sys/index.h - * @brief Low-level Git index manipulation routines - * @defgroup git_backend Git custom backend APIs - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** Representation of a rename conflict entry in the index. */ -typedef struct git_index_name_entry { - char *ancestor; - char *ours; - char *theirs; -} git_index_name_entry; - -/** Representation of a resolve undo entry in the index. */ -typedef struct git_index_reuc_entry { - uint32_t mode[3]; - git_oid oid[3]; - char *path; -} git_index_reuc_entry; - -/** @name Conflict Name entry functions - * - * These functions work on rename conflict entries. - */ -/**@{*/ - -/** - * Get the count of filename conflict entries currently in the index. - * - * @param index an existing index object - * @return integer of count of current filename conflict entries - */ -GIT_EXTERN(size_t) git_index_name_entrycount(git_index *index); - -/** - * Get a filename conflict entry from the index. - * - * The returned entry is read-only and should not be modified - * or freed by the caller. - * - * @param index an existing index object - * @param n the position of the entry - * @return a pointer to the filename conflict entry; NULL if out of bounds - */ -GIT_EXTERN(const git_index_name_entry *) git_index_name_get_byindex( - git_index *index, size_t n); - -/** - * Record the filenames involved in a rename conflict. - * - * @param index an existing index object - * @param ancestor the path of the file as it existed in the ancestor - * @param ours the path of the file as it existed in our tree - * @param theirs the path of the file as it existed in their tree - */ -GIT_EXTERN(int) git_index_name_add(git_index *index, - const char *ancestor, const char *ours, const char *theirs); - -/** - * Remove all filename conflict entries. - * - * @param index an existing index object - * @return 0 or an error code - */ -GIT_EXTERN(int) git_index_name_clear(git_index *index); - -/**@}*/ - -/** @name Resolve Undo (REUC) index entry manipulation. - * - * These functions work on the Resolve Undo index extension and contains - * data about the original files that led to a merge conflict. - */ -/**@{*/ - -/** - * Get the count of resolve undo entries currently in the index. - * - * @param index an existing index object - * @return integer of count of current resolve undo entries - */ -GIT_EXTERN(size_t) git_index_reuc_entrycount(git_index *index); - -/** - * Finds the resolve undo entry that points to the given path in the Git - * index. - * - * @param at_pos the address to which the position of the reuc entry is written (optional) - * @param index an existing index object - * @param path path to search - * @return 0 if found, < 0 otherwise (GIT_ENOTFOUND) - */ -GIT_EXTERN(int) git_index_reuc_find(size_t *at_pos, git_index *index, const char *path); - -/** - * Get a resolve undo entry from the index. - * - * The returned entry is read-only and should not be modified - * or freed by the caller. - * - * @param index an existing index object - * @param path path to search - * @return the resolve undo entry; NULL if not found - */ -GIT_EXTERN(const git_index_reuc_entry *) git_index_reuc_get_bypath(git_index *index, const char *path); - -/** - * Get a resolve undo entry from the index. - * - * The returned entry is read-only and should not be modified - * or freed by the caller. - * - * @param index an existing index object - * @param n the position of the entry - * @return a pointer to the resolve undo entry; NULL if out of bounds - */ -GIT_EXTERN(const git_index_reuc_entry *) git_index_reuc_get_byindex(git_index *index, size_t n); - -/** - * Adds a resolve undo entry for a file based on the given parameters. - * - * The resolve undo entry contains the OIDs of files that were involved - * in a merge conflict after the conflict has been resolved. This allows - * conflicts to be re-resolved later. - * - * If there exists a resolve undo entry for the given path in the index, - * it will be removed. - * - * This method will fail in bare index instances. - * - * @param index an existing index object - * @param path filename to add - * @param ancestor_mode mode of the ancestor file - * @param ancestor_id oid of the ancestor file - * @param our_mode mode of our file - * @param our_id oid of our file - * @param their_mode mode of their file - * @param their_id oid of their file - * @return 0 or an error code - */ -GIT_EXTERN(int) git_index_reuc_add(git_index *index, const char *path, - int ancestor_mode, const git_oid *ancestor_id, - int our_mode, const git_oid *our_id, - int their_mode, const git_oid *their_id); - -/** - * Remove an resolve undo entry from the index - * - * @param index an existing index object - * @param n position of the resolve undo entry to remove - * @return 0 or an error code - */ -GIT_EXTERN(int) git_index_reuc_remove(git_index *index, size_t n); - -/** - * Remove all resolve undo entries from the index - * - * @param index an existing index object - * @return 0 or an error code - */ -GIT_EXTERN(int) git_index_reuc_clear(git_index *index); - -/**@}*/ - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/sys/mempack.h b/libgit2/headers/git2/sys/mempack.h deleted file mode 100644 index 17da590..0000000 --- a/libgit2/headers/git2/sys/mempack.h +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_sys_git_odb_mempack_h__ -#define INCLUDE_sys_git_odb_mempack_h__ - -#include "git2/common.h" -#include "git2/types.h" -#include "git2/oid.h" -#include "git2/odb.h" -#include "git2/buffer.h" - -/** - * @file git2/sys/mempack.h - * @brief Custom ODB backend that permits packing objects in-memory - * @defgroup git_backend Git custom backend APIs - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Instantiate a new mempack backend. - * - * The backend must be added to an existing ODB with the highest - * priority. - * - * git_mempack_new(&mempacker); - * git_repository_odb(&odb, repository); - * git_odb_add_backend(odb, mempacker, 999); - * - * Once the backend has been loaded, all writes to the ODB will - * instead be queued in memory, and can be finalized with - * `git_mempack_dump`. - * - * Subsequent reads will also be served from the in-memory store - * to ensure consistency, until the memory store is dumped. - * - * @param out Pointer where to store the ODB backend - * @return 0 on success; error code otherwise - */ -GIT_EXTERN(int) git_mempack_new(git_odb_backend **out); - -/** - * Dump all the queued in-memory writes to a packfile. - * - * The contents of the packfile will be stored in the given buffer. - * It is the caller's responsibility to ensure that the generated - * packfile is available to the repository (e.g. by writing it - * to disk, or doing something crazy like distributing it across - * several copies of the repository over a network). - * - * Once the generated packfile is available to the repository, - * call `git_mempack_reset` to cleanup the memory store. - * - * Calling `git_mempack_reset` before the packfile has been - * written to disk will result in an inconsistent repository - * (the objects in the memory store won't be accessible). - * - * @param pack Buffer where to store the raw packfile - * @param repo The active repository where the backend is loaded - * @param backend The mempack backend - * @return 0 on success; error code otherwise - */ -GIT_EXTERN(int) git_mempack_dump(git_buf *pack, git_repository *repo, git_odb_backend *backend); - -/** - * Reset the memory packer by clearing all the queued objects. - * - * This assumes that `git_mempack_dump` has been called before to - * store all the queued objects into a single packfile. - * - * Alternatively, call `reset` without a previous dump to "undo" - * all the recently written objects, giving transaction-like - * semantics to the Git repository. - * - * @param backend The mempack backend - * @return 0 on success; error code otherwise - */ -GIT_EXTERN(int) git_mempack_reset(git_odb_backend *backend); - -GIT_END_DECL - -#endif diff --git a/libgit2/headers/git2/sys/merge.h b/libgit2/headers/git2/sys/merge.h deleted file mode 100644 index ef4bc5a..0000000 --- a/libgit2/headers/git2/sys/merge.h +++ /dev/null @@ -1,182 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_sys_git_merge_h__ -#define INCLUDE_sys_git_merge_h__ - -#include "git2/common.h" -#include "git2/types.h" -#include "git2/index.h" -#include "git2/merge.h" - -/** - * @file git2/sys/merge.h - * @brief Git merge driver backend and plugin routines - * @defgroup git_merge Git merge driver APIs - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -typedef struct git_merge_driver git_merge_driver; - -/** - * Look up a merge driver by name - * - * @param name The name of the merge driver - * @return Pointer to the merge driver object or NULL if not found - */ -GIT_EXTERN(git_merge_driver *) git_merge_driver_lookup(const char *name); - -#define GIT_MERGE_DRIVER_TEXT "text" -#define GIT_MERGE_DRIVER_BINARY "binary" -#define GIT_MERGE_DRIVER_UNION "union" - -/** - * A merge driver source represents the file to be merged - */ -typedef struct git_merge_driver_source git_merge_driver_source; - -/** Get the repository that the source data is coming from. */ -GIT_EXTERN(git_repository *) git_merge_driver_source_repo( - const git_merge_driver_source *src); - -/** Gets the ancestor of the file to merge. */ -GIT_EXTERN(const git_index_entry *) git_merge_driver_source_ancestor( - const git_merge_driver_source *src); - -/** Gets the ours side of the file to merge. */ -GIT_EXTERN(const git_index_entry *) git_merge_driver_source_ours( - const git_merge_driver_source *src); - -/** Gets the theirs side of the file to merge. */ -GIT_EXTERN(const git_index_entry *) git_merge_driver_source_theirs( - const git_merge_driver_source *src); - -/** Gets the merge file options that the merge was invoked with */ -GIT_EXTERN(const git_merge_file_options *) git_merge_driver_source_file_options( - const git_merge_driver_source *src); - - -/** - * Initialize callback on merge driver - * - * Specified as `driver.initialize`, this is an optional callback invoked - * before a merge driver is first used. It will be called once at most - * per library lifetime. - * - * If non-NULL, the merge driver's `initialize` callback will be invoked - * right before the first use of the driver, so you can defer expensive - * initialization operations (in case libgit2 is being used in a way that - * doesn't need the merge driver). - */ -typedef int GIT_CALLBACK(git_merge_driver_init_fn)(git_merge_driver *self); - -/** - * Shutdown callback on merge driver - * - * Specified as `driver.shutdown`, this is an optional callback invoked - * when the merge driver is unregistered or when libgit2 is shutting down. - * It will be called once at most and should release resources as needed. - * This may be called even if the `initialize` callback was not made. - * - * Typically this function will free the `git_merge_driver` object itself. - */ -typedef void GIT_CALLBACK(git_merge_driver_shutdown_fn)(git_merge_driver *self); - -/** - * Callback to perform the merge. - * - * Specified as `driver.apply`, this is the callback that actually does the - * merge. If it can successfully perform a merge, it should populate - * `path_out` with a pointer to the filename to accept, `mode_out` with - * the resultant mode, and `merged_out` with the buffer of the merged file - * and then return 0. If the driver returns `GIT_PASSTHROUGH`, then the - * default merge driver should instead be run. It can also return - * `GIT_EMERGECONFLICT` if the driver is not able to produce a merge result, - * and the file will remain conflicted. Any other errors will fail and - * return to the caller. - * - * The `filter_name` contains the name of the filter that was invoked, as - * specified by the file's attributes. - * - * The `src` contains the data about the file to be merged. - */ -typedef int GIT_CALLBACK(git_merge_driver_apply_fn)( - git_merge_driver *self, - const char **path_out, - uint32_t *mode_out, - git_buf *merged_out, - const char *filter_name, - const git_merge_driver_source *src); - -/** - * Merge driver structure used to register custom merge drivers. - * - * To associate extra data with a driver, allocate extra data and put the - * `git_merge_driver` struct at the start of your data buffer, then cast - * the `self` pointer to your larger structure when your callback is invoked. - */ -struct git_merge_driver { - /** The `version` should be set to `GIT_MERGE_DRIVER_VERSION`. */ - unsigned int version; - - /** Called when the merge driver is first used for any file. */ - git_merge_driver_init_fn initialize; - - /** Called when the merge driver is unregistered from the system. */ - git_merge_driver_shutdown_fn shutdown; - - /** - * Called to merge the contents of a conflict. If this function - * returns `GIT_PASSTHROUGH` then the default (`text`) merge driver - * will instead be invoked. If this function returns - * `GIT_EMERGECONFLICT` then the file will remain conflicted. - */ - git_merge_driver_apply_fn apply; -}; - -#define GIT_MERGE_DRIVER_VERSION 1 - -/** - * Register a merge driver under a given name. - * - * As mentioned elsewhere, the initialize callback will not be invoked - * immediately. It is deferred until the driver is used in some way. - * - * Currently the merge driver registry is not thread safe, so any - * registering or deregistering of merge drivers must be done outside of - * any possible usage of the drivers (i.e. during application setup or - * shutdown). - * - * @param name The name of this driver to match an attribute. Attempting - * to register with an in-use name will return GIT_EEXISTS. - * @param driver The merge driver definition. This pointer will be stored - * as is by libgit2 so it must be a durable allocation (either - * static or on the heap). - * @return 0 on successful registry, error code <0 on failure - */ -GIT_EXTERN(int) git_merge_driver_register( - const char *name, git_merge_driver *driver); - -/** - * Remove the merge driver with the given name. - * - * Attempting to remove the builtin libgit2 merge drivers is not permitted - * and will return an error. - * - * Currently the merge driver registry is not thread safe, so any - * registering or deregistering of drivers must be done outside of any - * possible usage of the drivers (i.e. during application setup or shutdown). - * - * @param name The name under which the merge driver was registered - * @return 0 on success, error code <0 on failure - */ -GIT_EXTERN(int) git_merge_driver_unregister(const char *name); - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/sys/midx.h b/libgit2/headers/git2/sys/midx.h deleted file mode 100644 index e3d7498..0000000 --- a/libgit2/headers/git2/sys/midx.h +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_sys_git_midx_h__ -#define INCLUDE_sys_git_midx_h__ - -#include "git2/common.h" -#include "git2/types.h" - -/** - * @file git2/midx.h - * @brief Git multi-pack-index routines - * @defgroup git_midx Git multi-pack-index routines - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Create a new writer for `multi-pack-index` files. - * - * @param out location to store the writer pointer. - * @param pack_dir the directory where the `.pack` and `.idx` files are. The - * `multi-pack-index` file will be written in this directory, too. - * @return 0 or an error code - */ -GIT_EXTERN(int) git_midx_writer_new( - git_midx_writer **out, - const char *pack_dir); - -/** - * Free the multi-pack-index writer and its resources. - * - * @param w the writer to free. If NULL no action is taken. - */ -GIT_EXTERN(void) git_midx_writer_free(git_midx_writer *w); - -/** - * Add an `.idx` file to the writer. - * - * @param w the writer - * @param idx_path the path of an `.idx` file. - * @return 0 or an error code - */ -GIT_EXTERN(int) git_midx_writer_add( - git_midx_writer *w, - const char *idx_path); - -/** - * Write a `multi-pack-index` file to a file. - * - * @param w the writer - * @return 0 or an error code - */ -GIT_EXTERN(int) git_midx_writer_commit( - git_midx_writer *w); - -/** - * Dump the contents of the `multi-pack-index` to an in-memory buffer. - * - * @param midx Buffer where to store the contents of the `multi-pack-index`. - * @param w the writer - * @return 0 or an error code - */ -GIT_EXTERN(int) git_midx_writer_dump( - git_buf *midx, - git_midx_writer *w); - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/sys/odb_backend.h b/libgit2/headers/git2/sys/odb_backend.h deleted file mode 100644 index 9ae0ed9..0000000 --- a/libgit2/headers/git2/sys/odb_backend.h +++ /dev/null @@ -1,175 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_sys_git_odb_backend_h__ -#define INCLUDE_sys_git_odb_backend_h__ - -#include "git2/common.h" -#include "git2/types.h" -#include "git2/oid.h" -#include "git2/odb.h" - -/** - * @file git2/sys/backend.h - * @brief Git custom backend implementors functions - * @defgroup git_backend Git custom backend APIs - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * An instance for a custom backend - */ -struct git_odb_backend { - unsigned int version; - git_odb *odb; - - /* read and read_prefix each return to libgit2 a buffer which - * will be freed later. The buffer should be allocated using - * the function git_odb_backend_data_alloc to ensure that libgit2 - * can safely free it later. */ - int GIT_CALLBACK(read)( - void **, size_t *, git_object_t *, git_odb_backend *, const git_oid *); - - /* To find a unique object given a prefix of its oid. The oid given - * must be so that the remaining (GIT_OID_HEXSZ - len)*4 bits are 0s. - */ - int GIT_CALLBACK(read_prefix)( - git_oid *, void **, size_t *, git_object_t *, - git_odb_backend *, const git_oid *, size_t); - - int GIT_CALLBACK(read_header)( - size_t *, git_object_t *, git_odb_backend *, const git_oid *); - - /** - * Write an object into the backend. The id of the object has - * already been calculated and is passed in. - */ - int GIT_CALLBACK(write)( - git_odb_backend *, const git_oid *, const void *, size_t, git_object_t); - - int GIT_CALLBACK(writestream)( - git_odb_stream **, git_odb_backend *, git_object_size_t, git_object_t); - - int GIT_CALLBACK(readstream)( - git_odb_stream **, size_t *, git_object_t *, - git_odb_backend *, const git_oid *); - - int GIT_CALLBACK(exists)( - git_odb_backend *, const git_oid *); - - int GIT_CALLBACK(exists_prefix)( - git_oid *, git_odb_backend *, const git_oid *, size_t); - - /** - * If the backend implements a refreshing mechanism, it should be exposed - * through this endpoint. Each call to `git_odb_refresh()` will invoke it. - * - * However, the backend implementation should try to stay up-to-date as much - * as possible by itself as libgit2 will not automatically invoke - * `git_odb_refresh()`. For instance, a potential strategy for the backend - * implementation to achieve this could be to internally invoke this - * endpoint on failed lookups (ie. `exists()`, `read()`, `read_header()`). - */ - int GIT_CALLBACK(refresh)(git_odb_backend *); - - int GIT_CALLBACK(foreach)( - git_odb_backend *, git_odb_foreach_cb cb, void *payload); - - int GIT_CALLBACK(writepack)( - git_odb_writepack **, git_odb_backend *, git_odb *odb, - git_indexer_progress_cb progress_cb, void *progress_payload); - - /** - * If the backend supports pack files, this will create a - * `multi-pack-index` file which will contain an index of all objects - * across all the `.pack` files. - */ - int GIT_CALLBACK(writemidx)(git_odb_backend *); - - /** - * "Freshens" an already existing object, updating its last-used - * time. This occurs when `git_odb_write` was called, but the - * object already existed (and will not be re-written). The - * underlying implementation may want to update last-used timestamps. - * - * If callers implement this, they should return `0` if the object - * exists and was freshened, and non-zero otherwise. - */ - int GIT_CALLBACK(freshen)(git_odb_backend *, const git_oid *); - - /** - * Frees any resources held by the odb (including the `git_odb_backend` - * itself). An odb backend implementation must provide this function. - */ - void GIT_CALLBACK(free)(git_odb_backend *); -}; - -#define GIT_ODB_BACKEND_VERSION 1 -#define GIT_ODB_BACKEND_INIT {GIT_ODB_BACKEND_VERSION} - -/** - * Initializes a `git_odb_backend` with default values. Equivalent to - * creating an instance with GIT_ODB_BACKEND_INIT. - * - * @param backend the `git_odb_backend` struct to initialize. - * @param version Version the struct; pass `GIT_ODB_BACKEND_VERSION` - * @return Zero on success; -1 on failure. - */ -GIT_EXTERN(int) git_odb_init_backend( - git_odb_backend *backend, - unsigned int version); - -/** - * Allocate data for an ODB object. Custom ODB backends may use this - * to provide data back to the ODB from their read function. This - * memory should not be freed once it is returned to libgit2. If a - * custom ODB uses this function but encounters an error and does not - * return this data to libgit2, then they should use the corresponding - * git_odb_backend_data_free function. - * - * @param backend the ODB backend that is allocating this memory - * @param len the number of bytes to allocate - * @return the allocated buffer on success or NULL if out of memory - */ -GIT_EXTERN(void *) git_odb_backend_data_alloc(git_odb_backend *backend, size_t len); - -/** - * Frees custom allocated ODB data. This should only be called when - * memory allocated using git_odb_backend_data_alloc is not returned - * to libgit2 because the backend encountered an error in the read - * function after allocation and did not return this data to libgit2. - * - * @param backend the ODB backend that is freeing this memory - * @param data the buffer to free - */ -GIT_EXTERN(void) git_odb_backend_data_free(git_odb_backend *backend, void *data); - - -/* - * Users can avoid deprecated functions by defining `GIT_DEPRECATE_HARD`. - */ -#ifndef GIT_DEPRECATE_HARD - -/** - * Allocate memory for an ODB object from a custom backend. This is - * an alias of `git_odb_backend_data_alloc` and is preserved for - * backward compatibility. - * - * This function is deprecated, but there is no plan to remove this - * function at this time. - * - * @deprecated git_odb_backend_data_alloc - * @see git_odb_backend_data_alloc - */ -GIT_EXTERN(void *) git_odb_backend_malloc(git_odb_backend *backend, size_t len); - -#endif - -GIT_END_DECL - -#endif diff --git a/libgit2/headers/git2/sys/openssl.h b/libgit2/headers/git2/sys/openssl.h deleted file mode 100644 index b41c55c..0000000 --- a/libgit2/headers/git2/sys/openssl.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_openssl_h__ -#define INCLUDE_git_openssl_h__ - -#include "git2/common.h" - -GIT_BEGIN_DECL - -/** - * Initialize the OpenSSL locks - * - * OpenSSL requires the application to determine how it performs - * locking. - * - * This is a last-resort convenience function which libgit2 provides for - * allocating and initializing the locks as well as setting the - * locking function to use the system's native locking functions. - * - * The locking function will be cleared and the memory will be freed - * when you call git_threads_sutdown(). - * - * If your programming language has an OpenSSL package/bindings, it - * likely sets up locking. You should very strongly prefer that over - * this function. - * - * @return 0 on success, -1 if there are errors or if libgit2 was not - * built with OpenSSL and threading support. - */ -GIT_EXTERN(int) git_openssl_set_locking(void); - -GIT_END_DECL -#endif - diff --git a/libgit2/headers/git2/sys/path.h b/libgit2/headers/git2/sys/path.h deleted file mode 100644 index 2a0c7e0..0000000 --- a/libgit2/headers/git2/sys/path.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ - -#ifndef INCLUDE_sys_git_path_h__ -#define INCLUDE_sys_git_path_h__ - -#include "git2/common.h" - -GIT_BEGIN_DECL - -/** - * The kinds of git-specific files we know about. - * - * The order needs to stay the same to not break the `gitfiles` - * array in path.c - */ -typedef enum { - /** Check for the .gitignore file */ - GIT_PATH_GITFILE_GITIGNORE, - /** Check for the .gitmodules file */ - GIT_PATH_GITFILE_GITMODULES, - /** Check for the .gitattributes file */ - GIT_PATH_GITFILE_GITATTRIBUTES -} git_path_gitfile; - -/** - * The kinds of checks to perform according to which filesystem we are trying to - * protect. - */ -typedef enum { - /** Do both NTFS- and HFS-specific checks */ - GIT_PATH_FS_GENERIC, - /** Do NTFS-specific checks only */ - GIT_PATH_FS_NTFS, - /** Do HFS-specific checks only */ - GIT_PATH_FS_HFS -} git_path_fs; - -/** - * Check whether a path component corresponds to a .git$SUFFIX - * file. - * - * As some filesystems do special things to filenames when - * writing files to disk, you cannot always do a plain string - * comparison to verify whether a file name matches an expected - * path or not. This function can do the comparison for you, - * depending on the filesystem you're on. - * - * @param path the path component to check - * @param pathlen the length of `path` that is to be checked - * @param gitfile which file to check against - * @param fs which filesystem-specific checks to use - * @return 0 in case the file does not match, a positive value if - * it does; -1 in case of an error - */ -GIT_EXTERN(int) git_path_is_gitfile(const char *path, size_t pathlen, git_path_gitfile gitfile, git_path_fs fs); - -GIT_END_DECL - -#endif /* INCLUDE_sys_git_path */ diff --git a/libgit2/headers/git2/sys/refdb_backend.h b/libgit2/headers/git2/sys/refdb_backend.h deleted file mode 100644 index c31e26d..0000000 --- a/libgit2/headers/git2/sys/refdb_backend.h +++ /dev/null @@ -1,361 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_sys_git_refdb_backend_h__ -#define INCLUDE_sys_git_refdb_backend_h__ - -#include "git2/common.h" -#include "git2/types.h" -#include "git2/oid.h" - -/** - * @file git2/refdb_backend.h - * @brief Git custom refs backend functions - * @defgroup git_refdb_backend Git custom refs backend API - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - - -/** - * Every backend's iterator must have a pointer to itself as the first - * element, so the API can talk to it. You'd define your iterator as - * - * struct my_iterator { - * git_reference_iterator parent; - * ... - * } - * - * and assign `iter->parent.backend` to your `git_refdb_backend`. - */ -struct git_reference_iterator { - git_refdb *db; - - /** - * Return the current reference and advance the iterator. - */ - int GIT_CALLBACK(next)( - git_reference **ref, - git_reference_iterator *iter); - - /** - * Return the name of the current reference and advance the iterator - */ - int GIT_CALLBACK(next_name)( - const char **ref_name, - git_reference_iterator *iter); - - /** - * Free the iterator - */ - void GIT_CALLBACK(free)( - git_reference_iterator *iter); -}; - -/** An instance for a custom backend */ -struct git_refdb_backend { - unsigned int version; /**< The backend API version */ - - /** - * Queries the refdb backend for the existence of a reference. - * - * A refdb implementation must provide this function. - * - * @arg exists The implementation shall set this to `0` if a ref does - * not exist, otherwise to `1`. - * @arg ref_name The reference's name that should be checked for - * existence. - * @return `0` on success, a negative error value code. - */ - int GIT_CALLBACK(exists)( - int *exists, - git_refdb_backend *backend, - const char *ref_name); - - /** - * Queries the refdb backend for a given reference. - * - * A refdb implementation must provide this function. - * - * @arg out The implementation shall set this to the allocated - * reference, if it could be found, otherwise to `NULL`. - * @arg ref_name The reference's name that should be checked for - * existence. - * @return `0` on success, `GIT_ENOTFOUND` if the reference does - * exist, otherwise a negative error code. - */ - int GIT_CALLBACK(lookup)( - git_reference **out, - git_refdb_backend *backend, - const char *ref_name); - - /** - * Allocate an iterator object for the backend. - * - * A refdb implementation must provide this function. - * - * @arg out The implementation shall set this to the allocated - * reference iterator. A custom structure may be used with an - * embedded `git_reference_iterator` structure. Both `next` - * and `next_name` functions of `git_reference_iterator` need - * to be populated. - * @arg glob A pattern to filter references by. If given, the iterator - * shall only return references that match the glob when - * passed to `wildmatch`. - * @return `0` on success, otherwise a negative error code. - */ - int GIT_CALLBACK(iterator)( - git_reference_iterator **iter, - struct git_refdb_backend *backend, - const char *glob); - - /** - * Writes the given reference to the refdb. - * - * A refdb implementation must provide this function. - * - * @arg ref The reference to persist. May either be a symbolic or - * direct reference. - * @arg force Whether to write the reference if a reference with the - * same name already exists. - * @arg who The person updating the reference. Shall be used to create - * a reflog entry. - * @arg message The message detailing what kind of reference update is - * performed. Shall be used to create a reflog entry. - * @arg old If not `NULL` and `force` is not set, then the - * implementation needs to ensure that the reference is currently at - * the given OID before writing the new value. If both `old` - * and `old_target` are `NULL`, then the reference should not - * exist at the point of writing. - * @arg old_target If not `NULL` and `force` is not set, then the - * implementation needs to ensure that the symbolic - * reference is currently at the given target before - * writing the new value. If both `old` and - * `old_target` are `NULL`, then the reference should - * not exist at the point of writing. - * @return `0` on success, otherwise a negative error code. - */ - int GIT_CALLBACK(write)(git_refdb_backend *backend, - const git_reference *ref, int force, - const git_signature *who, const char *message, - const git_oid *old, const char *old_target); - - /** - * Rename a reference in the refdb. - * - * A refdb implementation must provide this function. - * - * @arg out The implementation shall set this to the newly created - * reference or `NULL` on error. - * @arg old_name The current name of the reference that is to be renamed. - * @arg new_name The new name that the old reference shall be renamed to. - * @arg force Whether to write the reference if a reference with the - * target name already exists. - * @arg who The person updating the reference. Shall be used to create - * a reflog entry. - * @arg message The message detailing what kind of reference update is - * performed. Shall be used to create a reflog entry. - * @return `0` on success, otherwise a negative error code. - */ - int GIT_CALLBACK(rename)( - git_reference **out, git_refdb_backend *backend, - const char *old_name, const char *new_name, int force, - const git_signature *who, const char *message); - - /** - * Deletes the given reference from the refdb. - * - * If it exists, its reflog should be deleted as well. - * - * A refdb implementation must provide this function. - * - * @arg ref_name The name of the reference name that shall be deleted. - * @arg old_id If not `NULL` and `force` is not set, then the - * implementation needs to ensure that the reference is currently at - * the given OID before writing the new value. - * @arg old_target If not `NULL` and `force` is not set, then the - * implementation needs to ensure that the symbolic - * reference is currently at the given target before - * writing the new value. - * @return `0` on success, otherwise a negative error code. - */ - int GIT_CALLBACK(del)(git_refdb_backend *backend, const char *ref_name, const git_oid *old_id, const char *old_target); - - /** - * Suggests that the given refdb compress or optimize its references. - * - * This mechanism is implementation specific. For on-disk reference - * databases, this may pack all loose references. - * - * A refdb implementation may provide this function; if it is not - * provided, nothing will be done. - * - * @return `0` on success a negative error code otherwise - */ - int GIT_CALLBACK(compress)(git_refdb_backend *backend); - - /** - * Query whether a particular reference has a log (may be empty) - * - * Shall return 1 if it has a reflog, 0 it it doesn't and negative in - * case an error occurred. - * - * A refdb implementation must provide this function. - * - * @return `0` on success, `1` if the reflog for the given reference - * exists, a negative error code otherwise - */ - int GIT_CALLBACK(has_log)(git_refdb_backend *backend, const char *refname); - - /** - * Make sure a particular reference will have a reflog which - * will be appended to on writes. - * - * A refdb implementation must provide this function. - * - * @return `0` on success, a negative error code otherwise - */ - int GIT_CALLBACK(ensure_log)(git_refdb_backend *backend, const char *refname); - - /** - * Frees any resources held by the refdb (including the `git_refdb_backend` - * itself). - * - * A refdb backend implementation must provide this function. - */ - void GIT_CALLBACK(free)(git_refdb_backend *backend); - - /** - * Read the reflog for the given reference name. - * - * A refdb implementation must provide this function. - * - * @return `0` on success, a negative error code otherwise - */ - int GIT_CALLBACK(reflog_read)(git_reflog **out, git_refdb_backend *backend, const char *name); - - /** - * Write a reflog to disk. - * - * A refdb implementation must provide this function. - * - * @arg reflog The complete reference log for a given reference. Note - * that this may contain entries that have already been - * written to disk. - * @return `0` on success, a negative error code otherwise - */ - int GIT_CALLBACK(reflog_write)(git_refdb_backend *backend, git_reflog *reflog); - - /** - * Rename a reflog. - * - * A refdb implementation must provide this function. - * - * @arg old_name The name of old reference whose reflog shall be renamed from. - * @arg new_name The name of new reference whose reflog shall be renamed to. - * @return `0` on success, a negative error code otherwise - */ - int GIT_CALLBACK(reflog_rename)(git_refdb_backend *_backend, const char *old_name, const char *new_name); - - /** - * Remove a reflog. - * - * A refdb implementation must provide this function. - * - * @arg name The name of the reference whose reflog shall be deleted. - * @return `0` on success, a negative error code otherwise - */ - int GIT_CALLBACK(reflog_delete)(git_refdb_backend *backend, const char *name); - - /** - * Lock a reference. - * - * A refdb implementation may provide this function; if it is not - * provided, the transaction API will fail to work. - * - * @arg payload_out Opaque parameter that will be passed verbosely to - * `unlock`. - * @arg refname Reference that shall be locked. - * @return `0` on success, a negative error code otherwise - */ - int GIT_CALLBACK(lock)(void **payload_out, git_refdb_backend *backend, const char *refname); - - /** - * Unlock a reference. - * - * Only one of target or symbolic_target will be set. - * `success` will be true if the reference should be update, false if - * the lock must be discarded. - * - * A refdb implementation must provide this function if a `lock` - * implementation is provided. - * - * @arg payload The payload returned by `lock`. - * @arg success `1` if a reference should be updated, `2` if - * a reference should be deleted, `0` if the lock must be - * discarded. - * @arg update_reflog `1` in case the reflog should be updated, `0` - * otherwise. - * @arg ref The reference which should be unlocked. - * @arg who The person updating the reference. Shall be used to create - * a reflog entry in case `update_reflog` is set. - * @arg message The message detailing what kind of reference update is - * performed. Shall be used to create a reflog entry in - * case `update_reflog` is set. - * @return `0` on success, a negative error code otherwise - */ - int GIT_CALLBACK(unlock)(git_refdb_backend *backend, void *payload, int success, int update_reflog, - const git_reference *ref, const git_signature *sig, const char *message); -}; - -#define GIT_REFDB_BACKEND_VERSION 1 -#define GIT_REFDB_BACKEND_INIT {GIT_REFDB_BACKEND_VERSION} - -/** - * Initializes a `git_refdb_backend` with default values. Equivalent to - * creating an instance with GIT_REFDB_BACKEND_INIT. - * - * @param backend the `git_refdb_backend` struct to initialize - * @param version Version of struct; pass `GIT_REFDB_BACKEND_VERSION` - * @return Zero on success; -1 on failure. - */ -GIT_EXTERN(int) git_refdb_init_backend( - git_refdb_backend *backend, - unsigned int version); - -/** - * Constructors for default filesystem-based refdb backend - * - * Under normal usage, this is called for you when the repository is - * opened / created, but you can use this to explicitly construct a - * filesystem refdb backend for a repository. - * - * @param backend_out Output pointer to the git_refdb_backend object - * @param repo Git repository to access - * @return 0 on success, <0 error code on failure - */ -GIT_EXTERN(int) git_refdb_backend_fs( - git_refdb_backend **backend_out, - git_repository *repo); - -/** - * Sets the custom backend to an existing reference DB - * - * The `git_refdb` will take ownership of the `git_refdb_backend` so you - * should NOT free it after calling this function. - * - * @param refdb database to add the backend to - * @param backend pointer to a git_refdb_backend instance - * @return 0 on success; error code otherwise - */ -GIT_EXTERN(int) git_refdb_set_backend( - git_refdb *refdb, - git_refdb_backend *backend); - -GIT_END_DECL - -#endif diff --git a/libgit2/headers/git2/sys/reflog.h b/libgit2/headers/git2/sys/reflog.h deleted file mode 100644 index c9d0041..0000000 --- a/libgit2/headers/git2/sys/reflog.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_sys_git_reflog_h__ -#define INCLUDE_sys_git_reflog_h__ - -#include "git2/common.h" -#include "git2/types.h" -#include "git2/oid.h" - -GIT_BEGIN_DECL - -GIT_EXTERN(git_reflog_entry *) git_reflog_entry__alloc(void); -GIT_EXTERN(void) git_reflog_entry__free(git_reflog_entry *entry); - -GIT_END_DECL - -#endif diff --git a/libgit2/headers/git2/sys/refs.h b/libgit2/headers/git2/sys/refs.h deleted file mode 100644 index d2ce2e0..0000000 --- a/libgit2/headers/git2/sys/refs.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_sys_git_refdb_h__ -#define INCLUDE_sys_git_refdb_h__ - -#include "git2/common.h" -#include "git2/types.h" -#include "git2/oid.h" - -/** - * @file git2/sys/refs.h - * @brief Low-level Git ref creation - * @defgroup git_backend Git custom backend APIs - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Create a new direct reference from an OID. - * - * @param name the reference name - * @param oid the object id for a direct reference - * @param peel the first non-tag object's OID, or NULL - * @return the created git_reference or NULL on error - */ -GIT_EXTERN(git_reference *) git_reference__alloc( - const char *name, - const git_oid *oid, - const git_oid *peel); - -/** - * Create a new symbolic reference. - * - * @param name the reference name - * @param target the target for a symbolic reference - * @return the created git_reference or NULL on error - */ -GIT_EXTERN(git_reference *) git_reference__alloc_symbolic( - const char *name, - const char *target); - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/sys/repository.h b/libgit2/headers/git2/sys/repository.h deleted file mode 100644 index 892be66..0000000 --- a/libgit2/headers/git2/sys/repository.h +++ /dev/null @@ -1,180 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_sys_git_repository_h__ -#define INCLUDE_sys_git_repository_h__ - -#include "git2/common.h" -#include "git2/types.h" - -/** - * @file git2/sys/repository.h - * @brief Git repository custom implementation routines - * @defgroup git_backend Git custom backend APIs - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Create a new repository with neither backends nor config object - * - * Note that this is only useful if you wish to associate the repository - * with a non-filesystem-backed object database and config store. - * - * Caveats: since this repository has no physical location, some systems - * can fail to function properly: locations under $GIT_DIR, $GIT_COMMON_DIR, - * or $GIT_INFO_DIR are impacted. - * - * @param out The blank repository - * @return 0 on success, or an error code - */ -GIT_EXTERN(int) git_repository_new(git_repository **out); - -/** - * Reset all the internal state in a repository. - * - * This will free all the mapped memory and internal objects - * of the repository and leave it in a "blank" state. - * - * There's no need to call this function directly unless you're - * trying to aggressively cleanup the repo before its - * deallocation. `git_repository_free` already performs this operation - * before deallocating the repo. - * - * @param repo The repository to clean up - * @return 0 on success, or an error code - */ -GIT_EXTERN(int) git_repository__cleanup(git_repository *repo); - -/** - * Update the filesystem config settings for an open repository - * - * When a repository is initialized, config values are set based on the - * properties of the filesystem that the repository is on, such as - * "core.ignorecase", "core.filemode", "core.symlinks", etc. If the - * repository is moved to a new filesystem, these properties may no - * longer be correct and API calls may not behave as expected. This - * call reruns the phase of repository initialization that sets those - * properties to compensate for the current filesystem of the repo. - * - * @param repo A repository object - * @param recurse_submodules Should submodules be updated recursively - * @return 0 on success, < 0 on error - */ -GIT_EXTERN(int) git_repository_reinit_filesystem( - git_repository *repo, - int recurse_submodules); - -/** - * Set the configuration file for this repository - * - * This configuration file will be used for all configuration - * queries involving this repository. - * - * The repository will keep a reference to the config file; - * the user must still free the config after setting it - * to the repository, or it will leak. - * - * @param repo A repository object - * @param config A Config object - * @return 0 on success, or an error code - */ -GIT_EXTERN(int) git_repository_set_config(git_repository *repo, git_config *config); - -/** - * Set the Object Database for this repository - * - * The ODB will be used for all object-related operations - * involving this repository. - * - * The repository will keep a reference to the ODB; the user - * must still free the ODB object after setting it to the - * repository, or it will leak. - * - * @param repo A repository object - * @param odb An ODB object - * @return 0 on success, or an error code - */ -GIT_EXTERN(int) git_repository_set_odb(git_repository *repo, git_odb *odb); - -/** - * Set the Reference Database Backend for this repository - * - * The refdb will be used for all reference related operations - * involving this repository. - * - * The repository will keep a reference to the refdb; the user - * must still free the refdb object after setting it to the - * repository, or it will leak. - * - * @param repo A repository object - * @param refdb An refdb object - * @return 0 on success, or an error code - */ -GIT_EXTERN(int) git_repository_set_refdb(git_repository *repo, git_refdb *refdb); - -/** - * Set the index file for this repository - * - * This index will be used for all index-related operations - * involving this repository. - * - * The repository will keep a reference to the index file; - * the user must still free the index after setting it - * to the repository, or it will leak. - * - * @param repo A repository object - * @param index An index object - * @return 0 on success, or an error code - */ -GIT_EXTERN(int) git_repository_set_index(git_repository *repo, git_index *index); - -/** - * Set a repository to be bare. - * - * Clear the working directory and set core.bare to true. You may also - * want to call `git_repository_set_index(repo, NULL)` since a bare repo - * typically does not have an index, but this function will not do that - * for you. - * - * @param repo Repo to make bare - * @return 0 on success, <0 on failure - */ -GIT_EXTERN(int) git_repository_set_bare(git_repository *repo); - -/** - * Load and cache all submodules. - * - * Because the `.gitmodules` file is unstructured, loading submodules is an - * O(N) operation. Any operation (such as `git_rebase_init`) that requires - * accessing all submodules is O(N^2) in the number of submodules, if it - * has to look each one up individually. This function loads all submodules - * and caches them so that subsequent calls to `git_submodule_lookup` are O(1). - * - * @param repo the repository whose submodules will be cached. - */ -GIT_EXTERN(int) git_repository_submodule_cache_all( - git_repository *repo); - -/** - * Clear the submodule cache. - * - * Clear the submodule cache populated by `git_repository_submodule_cache_all`. - * If there is no cache, do nothing. - * - * The cache incorporates data from the repository's configuration, as well - * as the state of the working tree, the index, and HEAD. So any time any - * of these has changed, the cache might become invalid. - * - * @param repo the repository whose submodule cache will be cleared - */ -GIT_EXTERN(int) git_repository_submodule_cache_clear( - git_repository *repo); - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/sys/stream.h b/libgit2/headers/git2/sys/stream.h deleted file mode 100644 index 6f93cc4..0000000 --- a/libgit2/headers/git2/sys/stream.h +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_sys_git_stream_h__ -#define INCLUDE_sys_git_stream_h__ - -#include "git2/common.h" -#include "git2/types.h" -#include "git2/proxy.h" - -GIT_BEGIN_DECL - -#define GIT_STREAM_VERSION 1 - -/** - * Every stream must have this struct as its first element, so the - * API can talk to it. You'd define your stream as - * - * struct my_stream { - * git_stream parent; - * ... - * } - * - * and fill the functions - */ -typedef struct git_stream { - int version; - - int encrypted; - int proxy_support; - int GIT_CALLBACK(connect)(struct git_stream *); - int GIT_CALLBACK(certificate)(git_cert **, struct git_stream *); - int GIT_CALLBACK(set_proxy)(struct git_stream *, const git_proxy_options *proxy_opts); - ssize_t GIT_CALLBACK(read)(struct git_stream *, void *, size_t); - ssize_t GIT_CALLBACK(write)(struct git_stream *, const char *, size_t, int); - int GIT_CALLBACK(close)(struct git_stream *); - void GIT_CALLBACK(free)(struct git_stream *); -} git_stream; - -typedef struct { - /** The `version` field should be set to `GIT_STREAM_VERSION`. */ - int version; - - /** - * Called to create a new connection to a given host. - * - * @param out The created stream - * @param host The hostname to connect to; may be a hostname or - * IP address - * @param port The port to connect to; may be a port number or - * service name - * @return 0 or an error code - */ - int GIT_CALLBACK(init)(git_stream **out, const char *host, const char *port); - - /** - * Called to create a new connection on top of the given stream. If - * this is a TLS stream, then this function may be used to proxy a - * TLS stream over an HTTP CONNECT session. If this is unset, then - * HTTP CONNECT proxies will not be supported. - * - * @param out The created stream - * @param in An existing stream to add TLS to - * @param host The hostname that the stream is connected to, - * for certificate validation - * @return 0 or an error code - */ - int GIT_CALLBACK(wrap)(git_stream **out, git_stream *in, const char *host); -} git_stream_registration; - -/** - * The type of stream to register. - */ -typedef enum { - /** A standard (non-TLS) socket. */ - GIT_STREAM_STANDARD = 1, - - /** A TLS-encrypted socket. */ - GIT_STREAM_TLS = 2, -} git_stream_t; - -/** - * Register stream constructors for the library to use - * - * If a registration structure is already set, it will be overwritten. - * Pass `NULL` in order to deregister the current constructor and return - * to the system defaults. - * - * The type parameter may be a bitwise AND of types. - * - * @param type the type or types of stream to register - * @param registration the registration data - * @return 0 or an error code - */ -GIT_EXTERN(int) git_stream_register( - git_stream_t type, git_stream_registration *registration); - -#ifndef GIT_DEPRECATE_HARD - -/** @name Deprecated TLS Stream Registration Functions - * - * These functions are retained for backward compatibility. The newer - * versions of these values should be preferred in all new code. - * - * There is no plan to remove these backward compatibility values at - * this time. - */ -/**@{*/ - -/** - * @deprecated Provide a git_stream_registration to git_stream_register - * @see git_stream_registration - */ -typedef int GIT_CALLBACK(git_stream_cb)(git_stream **out, const char *host, const char *port); - -/** - * Register a TLS stream constructor for the library to use. This stream - * will not support HTTP CONNECT proxies. This internally calls - * `git_stream_register` and is preserved for backward compatibility. - * - * This function is deprecated, but there is no plan to remove this - * function at this time. - * - * @deprecated Provide a git_stream_registration to git_stream_register - * @see git_stream_register - */ -GIT_EXTERN(int) git_stream_register_tls(git_stream_cb ctor); - -/**@}*/ - -#endif - -GIT_END_DECL - -#endif diff --git a/libgit2/headers/git2/sys/transport.h b/libgit2/headers/git2/sys/transport.h deleted file mode 100644 index fee3454..0000000 --- a/libgit2/headers/git2/sys/transport.h +++ /dev/null @@ -1,440 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ - -#ifndef INCLUDE_sys_git_transport_h -#define INCLUDE_sys_git_transport_h - -#include "git2/net.h" -#include "git2/transport.h" -#include "git2/types.h" -#include "git2/strarray.h" -#include "git2/proxy.h" - -/** - * @file git2/sys/transport.h - * @brief Git custom transport registration interfaces and functions - * @defgroup git_transport Git custom transport registration - * @ingroup Git - * @{ - */ - -GIT_BEGIN_DECL - -/** - * Flags to pass to transport - * - * Currently unused. - */ -typedef enum { - GIT_TRANSPORTFLAGS_NONE = 0, -} git_transport_flags_t; - -struct git_transport { - unsigned int version; /**< The struct version */ - - /** Set progress and error callbacks */ - int GIT_CALLBACK(set_callbacks)( - git_transport *transport, - git_transport_message_cb progress_cb, - git_transport_message_cb error_cb, - git_transport_certificate_check_cb certificate_check_cb, - void *payload); - - /** Set custom headers for HTTP requests */ - int GIT_CALLBACK(set_custom_headers)( - git_transport *transport, - const git_strarray *custom_headers); - - /** - * Connect the transport to the remote repository, using the given - * direction. - */ - int GIT_CALLBACK(connect)( - git_transport *transport, - const char *url, - git_credential_acquire_cb cred_acquire_cb, - void *cred_acquire_payload, - const git_proxy_options *proxy_opts, - int direction, - int flags); - - /** - * Get the list of available references in the remote repository. - * - * This function may be called after a successful call to - * `connect()`. The array returned is owned by the transport and - * must be kept valid until the next call to one of its functions. - */ - int GIT_CALLBACK(ls)( - const git_remote_head ***out, - size_t *size, - git_transport *transport); - - /** Executes the push whose context is in the git_push object. */ - int GIT_CALLBACK(push)(git_transport *transport, git_push *push, const git_remote_callbacks *callbacks); - - /** - * Negotiate a fetch with the remote repository. - * - * This function may be called after a successful call to `connect()`, - * when the direction is GIT_DIRECTION_FETCH. The function performs a - * negotiation to calculate the `wants` list for the fetch. - */ - int GIT_CALLBACK(negotiate_fetch)( - git_transport *transport, - git_repository *repo, - const git_remote_head * const *refs, - size_t count); - - /** - * Start downloading the packfile from the remote repository. - * - * This function may be called after a successful call to - * negotiate_fetch(), when the direction is GIT_DIRECTION_FETCH. - */ - int GIT_CALLBACK(download_pack)( - git_transport *transport, - git_repository *repo, - git_indexer_progress *stats, - git_indexer_progress_cb progress_cb, - void *progress_payload); - - /** Checks to see if the transport is connected */ - int GIT_CALLBACK(is_connected)(git_transport *transport); - - /** Reads the flags value previously passed into connect() */ - int GIT_CALLBACK(read_flags)(git_transport *transport, int *flags); - - /** Cancels any outstanding transport operation */ - void GIT_CALLBACK(cancel)(git_transport *transport); - - /** - * Close the connection to the remote repository. - * - * This function is the reverse of connect() -- it terminates the - * connection to the remote end. - */ - int GIT_CALLBACK(close)(git_transport *transport); - - /** Frees/destructs the git_transport object. */ - void GIT_CALLBACK(free)(git_transport *transport); -}; - -#define GIT_TRANSPORT_VERSION 1 -#define GIT_TRANSPORT_INIT {GIT_TRANSPORT_VERSION} - -/** - * Initializes a `git_transport` with default values. Equivalent to - * creating an instance with GIT_TRANSPORT_INIT. - * - * @param opts the `git_transport` struct to initialize - * @param version Version of struct; pass `GIT_TRANSPORT_VERSION` - * @return Zero on success; -1 on failure. - */ -GIT_EXTERN(int) git_transport_init( - git_transport *opts, - unsigned int version); - -/** - * Function to use to create a transport from a URL. The transport database - * is scanned to find a transport that implements the scheme of the URI (i.e. - * git:// or http://) and a transport object is returned to the caller. - * - * @param out The newly created transport (out) - * @param owner The git_remote which will own this transport - * @param url The URL to connect to - * @return 0 or an error code - */ -GIT_EXTERN(int) git_transport_new(git_transport **out, git_remote *owner, const char *url); - -/** - * Create an ssh transport with custom git command paths - * - * This is a factory function suitable for setting as the transport - * callback in a remote (or for a clone in the options). - * - * The payload argument must be a strarray pointer with the paths for - * the `git-upload-pack` and `git-receive-pack` at index 0 and 1. - * - * @param out the resulting transport - * @param owner the owning remote - * @param payload a strarray with the paths - * @return 0 or an error code - */ -GIT_EXTERN(int) git_transport_ssh_with_paths(git_transport **out, git_remote *owner, void *payload); - -/** - * Add a custom transport definition, to be used in addition to the built-in - * set of transports that come with libgit2. - * - * The caller is responsible for synchronizing calls to git_transport_register - * and git_transport_unregister with other calls to the library that - * instantiate transports. - * - * @param prefix The scheme (ending in "://") to match, i.e. "git://" - * @param cb The callback used to create an instance of the transport - * @param param A fixed parameter to pass to cb at creation time - * @return 0 or an error code - */ -GIT_EXTERN(int) git_transport_register( - const char *prefix, - git_transport_cb cb, - void *param); - -/** - * Unregister a custom transport definition which was previously registered - * with git_transport_register. - * - * The caller is responsible for synchronizing calls to git_transport_register - * and git_transport_unregister with other calls to the library that - * instantiate transports. - * - * @param prefix From the previous call to git_transport_register - * @return 0 or an error code - */ -GIT_EXTERN(int) git_transport_unregister( - const char *prefix); - -/* Transports which come with libgit2 (match git_transport_cb). The expected - * value for "param" is listed in-line below. */ - -/** - * Create an instance of the dummy transport. - * - * @param out The newly created transport (out) - * @param owner The git_remote which will own this transport - * @param payload You must pass NULL for this parameter. - * @return 0 or an error code - */ -GIT_EXTERN(int) git_transport_dummy( - git_transport **out, - git_remote *owner, - /* NULL */ void *payload); - -/** - * Create an instance of the local transport. - * - * @param out The newly created transport (out) - * @param owner The git_remote which will own this transport - * @param payload You must pass NULL for this parameter. - * @return 0 or an error code - */ -GIT_EXTERN(int) git_transport_local( - git_transport **out, - git_remote *owner, - /* NULL */ void *payload); - -/** - * Create an instance of the smart transport. - * - * @param out The newly created transport (out) - * @param owner The git_remote which will own this transport - * @param payload A pointer to a git_smart_subtransport_definition - * @return 0 or an error code - */ -GIT_EXTERN(int) git_transport_smart( - git_transport **out, - git_remote *owner, - /* (git_smart_subtransport_definition *) */ void *payload); - -/** - * Call the certificate check for this transport. - * - * @param transport a smart transport - * @param cert the certificate to pass to the caller - * @param valid whether we believe the certificate is valid - * @param hostname the hostname we connected to - * @return the return value of the callback: 0 for no error, GIT_PASSTHROUGH - * to indicate that there is no callback registered (or the callback - * refused to validate the certificate and callers should behave as - * if no callback was set), or < 0 for an error - */ -GIT_EXTERN(int) git_transport_smart_certificate_check(git_transport *transport, git_cert *cert, int valid, const char *hostname); - -/** - * Call the credentials callback for this transport - * - * @param out the pointer where the creds are to be stored - * @param transport a smart transport - * @param user the user we saw on the url (if any) - * @param methods available methods for authentication - * @return the return value of the callback: 0 for no error, GIT_PASSTHROUGH - * to indicate that there is no callback registered (or the callback - * refused to provide credentials and callers should behave as if no - * callback was set), or < 0 for an error - */ -GIT_EXTERN(int) git_transport_smart_credentials(git_credential **out, git_transport *transport, const char *user, int methods); - -/** - * Get a copy of the proxy options - * - * The url is copied and must be freed by the caller. - * - * @param out options struct to fill - * @param transport the transport to extract the data from. - */ -GIT_EXTERN(int) git_transport_smart_proxy_options(git_proxy_options *out, git_transport *transport); - -/* - *** End of base transport interface *** - *** Begin interface for subtransports for the smart transport *** - */ - -/** Actions that the smart transport can ask a subtransport to perform */ -typedef enum { - GIT_SERVICE_UPLOADPACK_LS = 1, - GIT_SERVICE_UPLOADPACK = 2, - GIT_SERVICE_RECEIVEPACK_LS = 3, - GIT_SERVICE_RECEIVEPACK = 4, -} git_smart_service_t; - -typedef struct git_smart_subtransport git_smart_subtransport; -typedef struct git_smart_subtransport_stream git_smart_subtransport_stream; - -/** - * A stream used by the smart transport to read and write data - * from a subtransport. - * - * This provides a customization point in case you need to - * support some other communication method. - */ -struct git_smart_subtransport_stream { - git_smart_subtransport *subtransport; /**< The owning subtransport */ - - /** - * Read available data from the stream. - * - * The implementation may read less than requested. - */ - int GIT_CALLBACK(read)( - git_smart_subtransport_stream *stream, - char *buffer, - size_t buf_size, - size_t *bytes_read); - - /** - * Write data to the stream - * - * The implementation must write all data or return an error. - */ - int GIT_CALLBACK(write)( - git_smart_subtransport_stream *stream, - const char *buffer, - size_t len); - - /** Free the stream */ - void GIT_CALLBACK(free)( - git_smart_subtransport_stream *stream); -}; - -/** - * An implementation of a subtransport which carries data for the - * smart transport - */ -struct git_smart_subtransport { - /** - * Setup a subtransport stream for the requested action. - */ - int GIT_CALLBACK(action)( - git_smart_subtransport_stream **out, - git_smart_subtransport *transport, - const char *url, - git_smart_service_t action); - - /** - * Close the subtransport. - * - * Subtransports are guaranteed a call to close() between - * calls to action(), except for the following two "natural" progressions - * of actions against a constant URL: - * - * - UPLOADPACK_LS -> UPLOADPACK - * - RECEIVEPACK_LS -> RECEIVEPACK - */ - int GIT_CALLBACK(close)(git_smart_subtransport *transport); - - /** Free the subtransport */ - void GIT_CALLBACK(free)(git_smart_subtransport *transport); -}; - -/** A function which creates a new subtransport for the smart transport */ -typedef int GIT_CALLBACK(git_smart_subtransport_cb)( - git_smart_subtransport **out, - git_transport *owner, - void *param); - -/** - * Definition for a "subtransport" - * - * The smart transport knows how to speak the git protocol, but it has no - * knowledge of how to establish a connection between it and another endpoint, - * or how to move data back and forth. For this, a subtransport interface is - * declared, and the smart transport delegates this work to the subtransports. - * - * Three subtransports are provided by libgit2: ssh, git, http(s). - * - * Subtransports can either be RPC = 0 (persistent connection) or RPC = 1 - * (request/response). The smart transport handles the differences in its own - * logic. The git subtransport is RPC = 0, while http is RPC = 1. - */ -typedef struct git_smart_subtransport_definition { - /** The function to use to create the git_smart_subtransport */ - git_smart_subtransport_cb callback; - - /** - * True if the protocol is stateless; false otherwise. For example, - * http:// is stateless, but git:// is not. - */ - unsigned rpc; - - /** User-specified parameter passed to the callback */ - void *param; -} git_smart_subtransport_definition; - -/* Smart transport subtransports that come with libgit2 */ - -/** - * Create an instance of the http subtransport. - * - * This subtransport also supports https. - * - * @param out The newly created subtransport - * @param owner The smart transport to own this subtransport - * @return 0 or an error code - */ -GIT_EXTERN(int) git_smart_subtransport_http( - git_smart_subtransport **out, - git_transport *owner, - void *param); - -/** - * Create an instance of the git subtransport. - * - * @param out The newly created subtransport - * @param owner The smart transport to own this subtransport - * @return 0 or an error code - */ -GIT_EXTERN(int) git_smart_subtransport_git( - git_smart_subtransport **out, - git_transport *owner, - void *param); - -/** - * Create an instance of the ssh subtransport. - * - * @param out The newly created subtransport - * @param owner The smart transport to own this subtransport - * @return 0 or an error code - */ -GIT_EXTERN(int) git_smart_subtransport_ssh( - git_smart_subtransport **out, - git_transport *owner, - void *param); - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/tag.h b/libgit2/headers/git2/tag.h deleted file mode 100644 index a392136..0000000 --- a/libgit2/headers/git2/tag.h +++ /dev/null @@ -1,382 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_tag_h__ -#define INCLUDE_git_tag_h__ - -#include "common.h" -#include "types.h" -#include "oid.h" -#include "object.h" -#include "strarray.h" - -/** - * @file git2/tag.h - * @brief Git tag parsing routines - * @defgroup git_tag Git tag management - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Lookup a tag object from the repository. - * - * @param out pointer to the looked up tag - * @param repo the repo to use when locating the tag. - * @param id identity of the tag to locate. - * @return 0 or an error code - */ -GIT_EXTERN(int) git_tag_lookup( - git_tag **out, git_repository *repo, const git_oid *id); - -/** - * Lookup a tag object from the repository, - * given a prefix of its identifier (short id). - * - * @see git_object_lookup_prefix - * - * @param out pointer to the looked up tag - * @param repo the repo to use when locating the tag. - * @param id identity of the tag to locate. - * @param len the length of the short identifier - * @return 0 or an error code - */ -GIT_EXTERN(int) git_tag_lookup_prefix( - git_tag **out, git_repository *repo, const git_oid *id, size_t len); - -/** - * Close an open tag - * - * You can no longer use the git_tag pointer after this call. - * - * IMPORTANT: You MUST call this method when you are through with a tag to - * release memory. Failure to do so will cause a memory leak. - * - * @param tag the tag to close - */ -GIT_EXTERN(void) git_tag_free(git_tag *tag); - -/** - * Get the id of a tag. - * - * @param tag a previously loaded tag. - * @return object identity for the tag. - */ -GIT_EXTERN(const git_oid *) git_tag_id(const git_tag *tag); - -/** - * Get the repository that contains the tag. - * - * @param tag A previously loaded tag. - * @return Repository that contains this tag. - */ -GIT_EXTERN(git_repository *) git_tag_owner(const git_tag *tag); - -/** - * Get the tagged object of a tag - * - * This method performs a repository lookup for the - * given object and returns it - * - * @param target_out pointer where to store the target - * @param tag a previously loaded tag. - * @return 0 or an error code - */ -GIT_EXTERN(int) git_tag_target(git_object **target_out, const git_tag *tag); - -/** - * Get the OID of the tagged object of a tag - * - * @param tag a previously loaded tag. - * @return pointer to the OID - */ -GIT_EXTERN(const git_oid *) git_tag_target_id(const git_tag *tag); - -/** - * Get the type of a tag's tagged object - * - * @param tag a previously loaded tag. - * @return type of the tagged object - */ -GIT_EXTERN(git_object_t) git_tag_target_type(const git_tag *tag); - -/** - * Get the name of a tag - * - * @param tag a previously loaded tag. - * @return name of the tag - */ -GIT_EXTERN(const char *) git_tag_name(const git_tag *tag); - -/** - * Get the tagger (author) of a tag - * - * @param tag a previously loaded tag. - * @return reference to the tag's author or NULL when unspecified - */ -GIT_EXTERN(const git_signature *) git_tag_tagger(const git_tag *tag); - -/** - * Get the message of a tag - * - * @param tag a previously loaded tag. - * @return message of the tag or NULL when unspecified - */ -GIT_EXTERN(const char *) git_tag_message(const git_tag *tag); - - -/** - * Create a new tag in the repository from an object - * - * A new reference will also be created pointing to - * this tag object. If `force` is true and a reference - * already exists with the given name, it'll be replaced. - * - * The message will not be cleaned up. This can be achieved - * through `git_message_prettify()`. - * - * The tag name will be checked for validity. You must avoid - * the characters '~', '^', ':', '\\', '?', '[', and '*', and the - * sequences ".." and "@{" which have special meaning to revparse. - * - * @param oid Pointer where to store the OID of the - * newly created tag. If the tag already exists, this parameter - * will be the oid of the existing tag, and the function will - * return a GIT_EEXISTS error code. - * - * @param repo Repository where to store the tag - * - * @param tag_name Name for the tag; this name is validated - * for consistency. It should also not conflict with an - * already existing tag name - * - * @param target Object to which this tag points. This object - * must belong to the given `repo`. - * - * @param tagger Signature of the tagger for this tag, and - * of the tagging time - * - * @param message Full message for this tag - * - * @param force Overwrite existing references - * - * @return 0 on success, GIT_EINVALIDSPEC or an error code - * A tag object is written to the ODB, and a proper reference - * is written in the /refs/tags folder, pointing to it - */ -GIT_EXTERN(int) git_tag_create( - git_oid *oid, - git_repository *repo, - const char *tag_name, - const git_object *target, - const git_signature *tagger, - const char *message, - int force); - -/** - * Create a new tag in the object database pointing to a git_object - * - * The message will not be cleaned up. This can be achieved - * through `git_message_prettify()`. - * - * @param oid Pointer where to store the OID of the - * newly created tag - * - * @param repo Repository where to store the tag - * - * @param tag_name Name for the tag - * - * @param target Object to which this tag points. This object - * must belong to the given `repo`. - * - * @param tagger Signature of the tagger for this tag, and - * of the tagging time - * - * @param message Full message for this tag - * - * @return 0 on success or an error code - */ -GIT_EXTERN(int) git_tag_annotation_create( - git_oid *oid, - git_repository *repo, - const char *tag_name, - const git_object *target, - const git_signature *tagger, - const char *message); - -/** - * Create a new tag in the repository from a buffer - * - * @param oid Pointer where to store the OID of the newly created tag - * @param repo Repository where to store the tag - * @param buffer Raw tag data - * @param force Overwrite existing tags - * @return 0 on success; error code otherwise - */ -GIT_EXTERN(int) git_tag_create_from_buffer( - git_oid *oid, - git_repository *repo, - const char *buffer, - int force); - -/** - * Create a new lightweight tag pointing at a target object - * - * A new direct reference will be created pointing to - * this target object. If `force` is true and a reference - * already exists with the given name, it'll be replaced. - * - * The tag name will be checked for validity. - * See `git_tag_create()` for rules about valid names. - * - * @param oid Pointer where to store the OID of the provided - * target object. If the tag already exists, this parameter - * will be filled with the oid of the existing pointed object - * and the function will return a GIT_EEXISTS error code. - * - * @param repo Repository where to store the lightweight tag - * - * @param tag_name Name for the tag; this name is validated - * for consistency. It should also not conflict with an - * already existing tag name - * - * @param target Object to which this tag points. This object - * must belong to the given `repo`. - * - * @param force Overwrite existing references - * - * @return 0 on success, GIT_EINVALIDSPEC or an error code - * A proper reference is written in the /refs/tags folder, - * pointing to the provided target object - */ -GIT_EXTERN(int) git_tag_create_lightweight( - git_oid *oid, - git_repository *repo, - const char *tag_name, - const git_object *target, - int force); - -/** - * Delete an existing tag reference. - * - * The tag name will be checked for validity. - * See `git_tag_create()` for rules about valid names. - * - * @param repo Repository where lives the tag - * - * @param tag_name Name of the tag to be deleted; - * this name is validated for consistency. - * - * @return 0 on success, GIT_EINVALIDSPEC or an error code - */ -GIT_EXTERN(int) git_tag_delete( - git_repository *repo, - const char *tag_name); - -/** - * Fill a list with all the tags in the Repository - * - * The string array will be filled with the names of the - * matching tags; these values are owned by the user and - * should be free'd manually when no longer needed, using - * `git_strarray_free`. - * - * @param tag_names Pointer to a git_strarray structure where - * the tag names will be stored - * @param repo Repository where to find the tags - * @return 0 or an error code - */ -GIT_EXTERN(int) git_tag_list( - git_strarray *tag_names, - git_repository *repo); - -/** - * Fill a list with all the tags in the Repository - * which name match a defined pattern - * - * If an empty pattern is provided, all the tags - * will be returned. - * - * The string array will be filled with the names of the - * matching tags; these values are owned by the user and - * should be free'd manually when no longer needed, using - * `git_strarray_free`. - * - * @param tag_names Pointer to a git_strarray structure where - * the tag names will be stored - * @param pattern Standard fnmatch pattern - * @param repo Repository where to find the tags - * @return 0 or an error code - */ -GIT_EXTERN(int) git_tag_list_match( - git_strarray *tag_names, - const char *pattern, - git_repository *repo); - -/** - * Callback used to iterate over tag names - * - * @see git_tag_foreach - * - * @param name The tag name - * @param oid The tag's OID - * @param payload Payload passed to git_tag_foreach - * @return non-zero to terminate the iteration - */ -typedef int GIT_CALLBACK(git_tag_foreach_cb)(const char *name, git_oid *oid, void *payload); - -/** - * Call callback `cb' for each tag in the repository - * - * @param repo Repository - * @param callback Callback function - * @param payload Pointer to callback data (optional) - */ -GIT_EXTERN(int) git_tag_foreach( - git_repository *repo, - git_tag_foreach_cb callback, - void *payload); - - -/** - * Recursively peel a tag until a non tag git_object is found - * - * The retrieved `tag_target` object is owned by the repository - * and should be closed with the `git_object_free` method. - * - * @param tag_target_out Pointer to the peeled git_object - * @param tag The tag to be processed - * @return 0 or an error code - */ -GIT_EXTERN(int) git_tag_peel( - git_object **tag_target_out, - const git_tag *tag); - -/** - * Create an in-memory copy of a tag. The copy must be explicitly - * free'd or it will leak. - * - * @param out Pointer to store the copy of the tag - * @param source Original tag to copy - */ -GIT_EXTERN(int) git_tag_dup(git_tag **out, git_tag *source); - -/** - * Determine whether a tag name is valid, meaning that (when prefixed - * with `refs/tags/`) that it is a valid reference name, and that any - * additional tag name restrictions are imposed (eg, it cannot start - * with a `-`). - * - * @param valid output pointer to set with validity of given tag name - * @param name a tag name to test - * @return 0 on success or an error code - */ -GIT_EXTERN(int) git_tag_name_is_valid(int *valid, const char *name); - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/trace.h b/libgit2/headers/git2/trace.h deleted file mode 100644 index 8cee3a9..0000000 --- a/libgit2/headers/git2/trace.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_trace_h__ -#define INCLUDE_git_trace_h__ - -#include "common.h" -#include "types.h" - -/** - * @file git2/trace.h - * @brief Git tracing configuration routines - * @defgroup git_trace Git tracing configuration routines - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Available tracing levels. When tracing is set to a particular level, - * callers will be provided tracing at the given level and all lower levels. - */ -typedef enum { - /** No tracing will be performed. */ - GIT_TRACE_NONE = 0, - - /** Severe errors that may impact the program's execution */ - GIT_TRACE_FATAL = 1, - - /** Errors that do not impact the program's execution */ - GIT_TRACE_ERROR = 2, - - /** Warnings that suggest abnormal data */ - GIT_TRACE_WARN = 3, - - /** Informational messages about program execution */ - GIT_TRACE_INFO = 4, - - /** Detailed data that allows for debugging */ - GIT_TRACE_DEBUG = 5, - - /** Exceptionally detailed debugging data */ - GIT_TRACE_TRACE = 6 -} git_trace_level_t; - -/** - * An instance for a tracing function - */ -typedef void GIT_CALLBACK(git_trace_cb)(git_trace_level_t level, const char *msg); - -/** - * Sets the system tracing configuration to the specified level with the - * specified callback. When system events occur at a level equal to, or - * lower than, the given level they will be reported to the given callback. - * - * @param level Level to set tracing to - * @param cb Function to call with trace data - * @return 0 or an error code - */ -GIT_EXTERN(int) git_trace_set(git_trace_level_t level, git_trace_cb cb); - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/transaction.h b/libgit2/headers/git2/transaction.h deleted file mode 100644 index 4938570..0000000 --- a/libgit2/headers/git2/transaction.h +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_transaction_h__ -#define INCLUDE_git_transaction_h__ - -#include "common.h" -#include "types.h" - -/** - * @file git2/transaction.h - * @brief Git transactional reference routines - * @defgroup git_transaction Git transactional reference routines - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Create a new transaction object - * - * This does not lock anything, but sets up the transaction object to - * know from which repository to lock. - * - * @param out the resulting transaction - * @param repo the repository in which to lock - * @return 0 or an error code - */ -GIT_EXTERN(int) git_transaction_new(git_transaction **out, git_repository *repo); - -/** - * Lock a reference - * - * Lock the specified reference. This is the first step to updating a - * reference. - * - * @param tx the transaction - * @param refname the reference to lock - * @return 0 or an error message - */ -GIT_EXTERN(int) git_transaction_lock_ref(git_transaction *tx, const char *refname); - -/** - * Set the target of a reference - * - * Set the target of the specified reference. This reference must be - * locked. - * - * @param tx the transaction - * @param refname reference to update - * @param target target to set the reference to - * @param sig signature to use in the reflog; pass NULL to read the identity from the config - * @param msg message to use in the reflog - * @return 0, GIT_ENOTFOUND if the reference is not among the locked ones, or an error code - */ -GIT_EXTERN(int) git_transaction_set_target(git_transaction *tx, const char *refname, const git_oid *target, const git_signature *sig, const char *msg); - -/** - * Set the target of a reference - * - * Set the target of the specified reference. This reference must be - * locked. - * - * @param tx the transaction - * @param refname reference to update - * @param target target to set the reference to - * @param sig signature to use in the reflog; pass NULL to read the identity from the config - * @param msg message to use in the reflog - * @return 0, GIT_ENOTFOUND if the reference is not among the locked ones, or an error code - */ -GIT_EXTERN(int) git_transaction_set_symbolic_target(git_transaction *tx, const char *refname, const char *target, const git_signature *sig, const char *msg); - -/** - * Set the reflog of a reference - * - * Set the specified reference's reflog. If this is combined with - * setting the target, that update won't be written to the reflog. - * - * @param tx the transaction - * @param refname the reference whose reflog to set - * @param reflog the reflog as it should be written out - * @return 0, GIT_ENOTFOUND if the reference is not among the locked ones, or an error code - */ -GIT_EXTERN(int) git_transaction_set_reflog(git_transaction *tx, const char *refname, const git_reflog *reflog); - -/** - * Remove a reference - * - * @param tx the transaction - * @param refname the reference to remove - * @return 0, GIT_ENOTFOUND if the reference is not among the locked ones, or an error code - */ -GIT_EXTERN(int) git_transaction_remove(git_transaction *tx, const char *refname); - -/** - * Commit the changes from the transaction - * - * Perform the changes that have been queued. The updates will be made - * one by one, and the first failure will stop the processing. - * - * @param tx the transaction - * @return 0 or an error code - */ -GIT_EXTERN(int) git_transaction_commit(git_transaction *tx); - -/** - * Free the resources allocated by this transaction - * - * If any references remain locked, they will be unlocked without any - * changes made to them. - * - * @param tx the transaction - */ -GIT_EXTERN(void) git_transaction_free(git_transaction *tx); - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/transport.h b/libgit2/headers/git2/transport.h deleted file mode 100644 index 5a27de9..0000000 --- a/libgit2/headers/git2/transport.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_transport_h__ -#define INCLUDE_git_transport_h__ - -#include "indexer.h" -#include "net.h" -#include "types.h" -#include "cert.h" -#include "credential.h" - -/** - * @file git2/transport.h - * @brief Git transport interfaces and functions - * @defgroup git_transport interfaces and functions - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Callback for messages received by the transport. - * - * Return a negative value to cancel the network operation. - * - * @param str The message from the transport - * @param len The length of the message - * @param payload Payload provided by the caller - */ -typedef int GIT_CALLBACK(git_transport_message_cb)(const char *str, int len, void *payload); - -/** Signature of a function which creates a transport */ -typedef int GIT_CALLBACK(git_transport_cb)(git_transport **out, git_remote *owner, void *param); - -/** @} */ -GIT_END_DECL - -#endif diff --git a/libgit2/headers/git2/tree.h b/libgit2/headers/git2/tree.h deleted file mode 100644 index f2289fc..0000000 --- a/libgit2/headers/git2/tree.h +++ /dev/null @@ -1,474 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_tree_h__ -#define INCLUDE_git_tree_h__ - -#include "common.h" -#include "types.h" -#include "oid.h" -#include "object.h" - -/** - * @file git2/tree.h - * @brief Git tree parsing, loading routines - * @defgroup git_tree Git tree parsing, loading routines - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Lookup a tree object from the repository. - * - * @param out Pointer to the looked up tree - * @param repo The repo to use when locating the tree. - * @param id Identity of the tree to locate. - * @return 0 or an error code - */ -GIT_EXTERN(int) git_tree_lookup( - git_tree **out, git_repository *repo, const git_oid *id); - -/** - * Lookup a tree object from the repository, - * given a prefix of its identifier (short id). - * - * @see git_object_lookup_prefix - * - * @param out pointer to the looked up tree - * @param repo the repo to use when locating the tree. - * @param id identity of the tree to locate. - * @param len the length of the short identifier - * @return 0 or an error code - */ -GIT_EXTERN(int) git_tree_lookup_prefix( - git_tree **out, - git_repository *repo, - const git_oid *id, - size_t len); - -/** - * Close an open tree - * - * You can no longer use the git_tree pointer after this call. - * - * IMPORTANT: You MUST call this method when you stop using a tree to - * release memory. Failure to do so will cause a memory leak. - * - * @param tree The tree to close - */ -GIT_EXTERN(void) git_tree_free(git_tree *tree); - -/** - * Get the id of a tree. - * - * @param tree a previously loaded tree. - * @return object identity for the tree. - */ -GIT_EXTERN(const git_oid *) git_tree_id(const git_tree *tree); - -/** - * Get the repository that contains the tree. - * - * @param tree A previously loaded tree. - * @return Repository that contains this tree. - */ -GIT_EXTERN(git_repository *) git_tree_owner(const git_tree *tree); - -/** - * Get the number of entries listed in a tree - * - * @param tree a previously loaded tree. - * @return the number of entries in the tree - */ -GIT_EXTERN(size_t) git_tree_entrycount(const git_tree *tree); - -/** - * Lookup a tree entry by its filename - * - * This returns a git_tree_entry that is owned by the git_tree. You don't - * have to free it, but you must not use it after the git_tree is released. - * - * @param tree a previously loaded tree. - * @param filename the filename of the desired entry - * @return the tree entry; NULL if not found - */ -GIT_EXTERN(const git_tree_entry *) git_tree_entry_byname( - const git_tree *tree, const char *filename); - -/** - * Lookup a tree entry by its position in the tree - * - * This returns a git_tree_entry that is owned by the git_tree. You don't - * have to free it, but you must not use it after the git_tree is released. - * - * @param tree a previously loaded tree. - * @param idx the position in the entry list - * @return the tree entry; NULL if not found - */ -GIT_EXTERN(const git_tree_entry *) git_tree_entry_byindex( - const git_tree *tree, size_t idx); - -/** - * Lookup a tree entry by SHA value. - * - * This returns a git_tree_entry that is owned by the git_tree. You don't - * have to free it, but you must not use it after the git_tree is released. - * - * Warning: this must examine every entry in the tree, so it is not fast. - * - * @param tree a previously loaded tree. - * @param id the sha being looked for - * @return the tree entry; NULL if not found - */ -GIT_EXTERN(const git_tree_entry *) git_tree_entry_byid( - const git_tree *tree, const git_oid *id); - -/** - * Retrieve a tree entry contained in a tree or in any of its subtrees, - * given its relative path. - * - * Unlike the other lookup functions, the returned tree entry is owned by - * the user and must be freed explicitly with `git_tree_entry_free()`. - * - * @param out Pointer where to store the tree entry - * @param root Previously loaded tree which is the root of the relative path - * @param path Path to the contained entry - * @return 0 on success; GIT_ENOTFOUND if the path does not exist - */ -GIT_EXTERN(int) git_tree_entry_bypath( - git_tree_entry **out, - const git_tree *root, - const char *path); - -/** - * Duplicate a tree entry - * - * Create a copy of a tree entry. The returned copy is owned by the user, - * and must be freed explicitly with `git_tree_entry_free()`. - * - * @param dest pointer where to store the copy - * @param source tree entry to duplicate - * @return 0 or an error code - */ -GIT_EXTERN(int) git_tree_entry_dup(git_tree_entry **dest, const git_tree_entry *source); - -/** - * Free a user-owned tree entry - * - * IMPORTANT: This function is only needed for tree entries owned by the - * user, such as the ones returned by `git_tree_entry_dup()` or - * `git_tree_entry_bypath()`. - * - * @param entry The entry to free - */ -GIT_EXTERN(void) git_tree_entry_free(git_tree_entry *entry); - -/** - * Get the filename of a tree entry - * - * @param entry a tree entry - * @return the name of the file - */ -GIT_EXTERN(const char *) git_tree_entry_name(const git_tree_entry *entry); - -/** - * Get the id of the object pointed by the entry - * - * @param entry a tree entry - * @return the oid of the object - */ -GIT_EXTERN(const git_oid *) git_tree_entry_id(const git_tree_entry *entry); - -/** - * Get the type of the object pointed by the entry - * - * @param entry a tree entry - * @return the type of the pointed object - */ -GIT_EXTERN(git_object_t) git_tree_entry_type(const git_tree_entry *entry); - -/** - * Get the UNIX file attributes of a tree entry - * - * @param entry a tree entry - * @return filemode as an integer - */ -GIT_EXTERN(git_filemode_t) git_tree_entry_filemode(const git_tree_entry *entry); - -/** - * Get the raw UNIX file attributes of a tree entry - * - * This function does not perform any normalization and is only useful - * if you need to be able to recreate the original tree object. - * - * @param entry a tree entry - * @return filemode as an integer - */ - -GIT_EXTERN(git_filemode_t) git_tree_entry_filemode_raw(const git_tree_entry *entry); -/** - * Compare two tree entries - * - * @param e1 first tree entry - * @param e2 second tree entry - * @return <0 if e1 is before e2, 0 if e1 == e2, >0 if e1 is after e2 - */ -GIT_EXTERN(int) git_tree_entry_cmp(const git_tree_entry *e1, const git_tree_entry *e2); - -/** - * Convert a tree entry to the git_object it points to. - * - * You must call `git_object_free()` on the object when you are done with it. - * - * @param object_out pointer to the converted object - * @param repo repository where to lookup the pointed object - * @param entry a tree entry - * @return 0 or an error code - */ -GIT_EXTERN(int) git_tree_entry_to_object( - git_object **object_out, - git_repository *repo, - const git_tree_entry *entry); - -/** - * Create a new tree builder. - * - * The tree builder can be used to create or modify trees in memory and - * write them as tree objects to the database. - * - * If the `source` parameter is not NULL, the tree builder will be - * initialized with the entries of the given tree. - * - * If the `source` parameter is NULL, the tree builder will start with no - * entries and will have to be filled manually. - * - * @param out Pointer where to store the tree builder - * @param repo Repository in which to store the object - * @param source Source tree to initialize the builder (optional) - * @return 0 on success; error code otherwise - */ -GIT_EXTERN(int) git_treebuilder_new( - git_treebuilder **out, git_repository *repo, const git_tree *source); - -/** - * Clear all the entires in the builder - * - * @param bld Builder to clear - * @return 0 on success; error code otherwise - */ -GIT_EXTERN(int) git_treebuilder_clear(git_treebuilder *bld); - -/** - * Get the number of entries listed in a treebuilder - * - * @param bld a previously loaded treebuilder. - * @return the number of entries in the treebuilder - */ -GIT_EXTERN(size_t) git_treebuilder_entrycount(git_treebuilder *bld); - -/** - * Free a tree builder - * - * This will clear all the entries and free to builder. - * Failing to free the builder after you're done using it - * will result in a memory leak - * - * @param bld Builder to free - */ -GIT_EXTERN(void) git_treebuilder_free(git_treebuilder *bld); - -/** - * Get an entry from the builder from its filename - * - * The returned entry is owned by the builder and should - * not be freed manually. - * - * @param bld Tree builder - * @param filename Name of the entry - * @return pointer to the entry; NULL if not found - */ -GIT_EXTERN(const git_tree_entry *) git_treebuilder_get( - git_treebuilder *bld, const char *filename); - -/** - * Add or update an entry to the builder - * - * Insert a new entry for `filename` in the builder with the - * given attributes. - * - * If an entry named `filename` already exists, its attributes - * will be updated with the given ones. - * - * The optional pointer `out` can be used to retrieve a pointer to the - * newly created/updated entry. Pass NULL if you do not need it. The - * pointer may not be valid past the next operation in this - * builder. Duplicate the entry if you want to keep it. - * - * By default the entry that you are inserting will be checked for - * validity; that it exists in the object database and is of the - * correct type. If you do not want this behavior, set the - * `GIT_OPT_ENABLE_STRICT_OBJECT_CREATION` library option to false. - * - * @param out Pointer to store the entry (optional) - * @param bld Tree builder - * @param filename Filename of the entry - * @param id SHA1 oid of the entry - * @param filemode Folder attributes of the entry. This parameter must - * be valued with one of the following entries: 0040000, 0100644, - * 0100755, 0120000 or 0160000. - * @return 0 or an error code - */ -GIT_EXTERN(int) git_treebuilder_insert( - const git_tree_entry **out, - git_treebuilder *bld, - const char *filename, - const git_oid *id, - git_filemode_t filemode); - -/** - * Remove an entry from the builder by its filename - * - * @param bld Tree builder - * @param filename Filename of the entry to remove - * @return 0 or an error code - */ -GIT_EXTERN(int) git_treebuilder_remove( - git_treebuilder *bld, const char *filename); - -/** - * Callback for git_treebuilder_filter - * - * The return value is treated as a boolean, with zero indicating that the - * entry should be left alone and any non-zero value meaning that the - * entry should be removed from the treebuilder list (i.e. filtered out). - */ -typedef int GIT_CALLBACK(git_treebuilder_filter_cb)( - const git_tree_entry *entry, void *payload); - -/** - * Selectively remove entries in the tree - * - * The `filter` callback will be called for each entry in the tree with a - * pointer to the entry and the provided `payload`; if the callback returns - * non-zero, the entry will be filtered (removed from the builder). - * - * @param bld Tree builder - * @param filter Callback to filter entries - * @param payload Extra data to pass to filter callback - * @return 0 on success, non-zero callback return value, or error code - */ -GIT_EXTERN(int) git_treebuilder_filter( - git_treebuilder *bld, - git_treebuilder_filter_cb filter, - void *payload); - -/** - * Write the contents of the tree builder as a tree object - * - * The tree builder will be written to the given `repo`, and its - * identifying SHA1 hash will be stored in the `id` pointer. - * - * @param id Pointer to store the OID of the newly written tree - * @param bld Tree builder to write - * @return 0 or an error code - */ -GIT_EXTERN(int) git_treebuilder_write( - git_oid *id, git_treebuilder *bld); - -/** Callback for the tree traversal method */ -typedef int GIT_CALLBACK(git_treewalk_cb)( - const char *root, const git_tree_entry *entry, void *payload); - -/** Tree traversal modes */ -typedef enum { - GIT_TREEWALK_PRE = 0, /* Pre-order */ - GIT_TREEWALK_POST = 1, /* Post-order */ -} git_treewalk_mode; - -/** - * Traverse the entries in a tree and its subtrees in post or pre order. - * - * The entries will be traversed in the specified order, children subtrees - * will be automatically loaded as required, and the `callback` will be - * called once per entry with the current (relative) root for the entry and - * the entry data itself. - * - * If the callback returns a positive value, the passed entry will be - * skipped on the traversal (in pre mode). A negative value stops the walk. - * - * @param tree The tree to walk - * @param mode Traversal mode (pre or post-order) - * @param callback Function to call on each tree entry - * @param payload Opaque pointer to be passed on each callback - * @return 0 or an error code - */ -GIT_EXTERN(int) git_tree_walk( - const git_tree *tree, - git_treewalk_mode mode, - git_treewalk_cb callback, - void *payload); - -/** - * Create an in-memory copy of a tree. The copy must be explicitly - * free'd or it will leak. - * - * @param out Pointer to store the copy of the tree - * @param source Original tree to copy - */ -GIT_EXTERN(int) git_tree_dup(git_tree **out, git_tree *source); - -/** - * The kind of update to perform - */ -typedef enum { - /** Update or insert an entry at the specified path */ - GIT_TREE_UPDATE_UPSERT, - /** Remove an entry from the specified path */ - GIT_TREE_UPDATE_REMOVE, -} git_tree_update_t; - -/** - * An action to perform during the update of a tree - */ -typedef struct { - /** Update action. If it's an removal, only the path is looked at */ - git_tree_update_t action; - /** The entry's id */ - git_oid id; - /** The filemode/kind of object */ - git_filemode_t filemode; - /** The full path from the root tree */ - const char *path; -} git_tree_update; - -/** - * Create a tree based on another one with the specified modifications - * - * Given the `baseline` perform the changes described in the list of - * `updates` and create a new tree. - * - * This function is optimized for common file/directory addition, removal and - * replacement in trees. It is much more efficient than reading the tree into a - * `git_index` and modifying that, but in exchange it is not as flexible. - * - * Deleting and adding the same entry is undefined behaviour, changing - * a tree to a blob or viceversa is not supported. - * - * @param out id of the new tree - * @param repo the repository in which to create the tree, must be the - * same as for `baseline` - * @param baseline the tree to base these changes on - * @param nupdates the number of elements in the update list - * @param updates the list of updates to perform - * @return 0 or an error code - */ -GIT_EXTERN(int) git_tree_create_updated(git_oid *out, git_repository *repo, git_tree *baseline, size_t nupdates, const git_tree_update *updates); - -/** @} */ - -GIT_END_DECL -#endif diff --git a/libgit2/headers/git2/types.h b/libgit2/headers/git2/types.h deleted file mode 100644 index aac8e42..0000000 --- a/libgit2/headers/git2/types.h +++ /dev/null @@ -1,371 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_types_h__ -#define INCLUDE_git_types_h__ - -#include "common.h" - -/** - * @file git2/types.h - * @brief libgit2 base & compatibility types - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * Cross-platform compatibility types for off_t / time_t - * - * NOTE: This needs to be in a public header so that both the library - * implementation and client applications both agree on the same types. - * Otherwise we get undefined behavior. - * - * Use the "best" types that each platform provides. Currently we truncate - * these intermediate representations for compatibility with the git ABI, but - * if and when it changes to support 64 bit types, our code will naturally - * adapt. - * NOTE: These types should match those that are returned by our internal - * stat() functions, for all platforms. - */ -#include -#ifdef __amigaos4__ -#include -#endif - -#if defined(_MSC_VER) - -typedef __int64 git_off_t; -typedef __time64_t git_time_t; - -#elif defined(__MINGW32__) - -typedef off64_t git_off_t; -typedef __time64_t git_time_t; - -#elif defined(__HAIKU__) - -typedef __haiku_std_int64 git_off_t; -typedef __haiku_std_int64 git_time_t; - -#else /* POSIX */ - -/* - * Note: Can't use off_t since if a client program includes - * before us (directly or indirectly), they'll get 32 bit off_t in their client - * app, even though /we/ define _FILE_OFFSET_BITS=64. - */ -typedef int64_t git_off_t; -typedef int64_t git_time_t; /**< time in seconds from epoch */ - -#endif - -/** The maximum size of an object */ -typedef uint64_t git_object_size_t; - -#include "buffer.h" -#include "oid.h" - -/** Basic type (loose or packed) of any Git object. */ -typedef enum { - GIT_OBJECT_ANY = -2, /**< Object can be any of the following */ - GIT_OBJECT_INVALID = -1, /**< Object is invalid. */ - GIT_OBJECT_COMMIT = 1, /**< A commit object. */ - GIT_OBJECT_TREE = 2, /**< A tree (directory listing) object. */ - GIT_OBJECT_BLOB = 3, /**< A file revision object. */ - GIT_OBJECT_TAG = 4, /**< An annotated tag object. */ - GIT_OBJECT_OFS_DELTA = 6, /**< A delta, base is given by an offset. */ - GIT_OBJECT_REF_DELTA = 7, /**< A delta, base is given by object id. */ -} git_object_t; - -/** An open object database handle. */ -typedef struct git_odb git_odb; - -/** A custom backend in an ODB */ -typedef struct git_odb_backend git_odb_backend; - -/** An object read from the ODB */ -typedef struct git_odb_object git_odb_object; - -/** A stream to read/write from the ODB */ -typedef struct git_odb_stream git_odb_stream; - -/** A stream to write a packfile to the ODB */ -typedef struct git_odb_writepack git_odb_writepack; - -/** a writer for multi-pack-index files. */ -typedef struct git_midx_writer git_midx_writer; - -/** An open refs database handle. */ -typedef struct git_refdb git_refdb; - -/** A custom backend for refs */ -typedef struct git_refdb_backend git_refdb_backend; - -/** A git commit-graph */ -typedef struct git_commit_graph git_commit_graph; - -/** a writer for commit-graph files. */ -typedef struct git_commit_graph_writer git_commit_graph_writer; - -/** - * Representation of an existing git repository, - * including all its object contents - */ -typedef struct git_repository git_repository; - -/** Representation of a working tree */ -typedef struct git_worktree git_worktree; - -/** Representation of a generic object in a repository */ -typedef struct git_object git_object; - -/** Representation of an in-progress walk through the commits in a repo */ -typedef struct git_revwalk git_revwalk; - -/** Parsed representation of a tag object. */ -typedef struct git_tag git_tag; - -/** In-memory representation of a blob object. */ -typedef struct git_blob git_blob; - -/** Parsed representation of a commit object. */ -typedef struct git_commit git_commit; - -/** Representation of each one of the entries in a tree object. */ -typedef struct git_tree_entry git_tree_entry; - -/** Representation of a tree object. */ -typedef struct git_tree git_tree; - -/** Constructor for in-memory trees */ -typedef struct git_treebuilder git_treebuilder; - -/** Memory representation of an index file. */ -typedef struct git_index git_index; - -/** An iterator for entries in the index. */ -typedef struct git_index_iterator git_index_iterator; - -/** An iterator for conflicts in the index. */ -typedef struct git_index_conflict_iterator git_index_conflict_iterator; - -/** Memory representation of a set of config files */ -typedef struct git_config git_config; - -/** Interface to access a configuration file */ -typedef struct git_config_backend git_config_backend; - -/** Representation of a reference log entry */ -typedef struct git_reflog_entry git_reflog_entry; - -/** Representation of a reference log */ -typedef struct git_reflog git_reflog; - -/** Representation of a git note */ -typedef struct git_note git_note; - -/** Representation of a git packbuilder */ -typedef struct git_packbuilder git_packbuilder; - -/** Time in a signature */ -typedef struct git_time { - git_time_t time; /**< time in seconds from epoch */ - int offset; /**< timezone offset, in minutes */ - char sign; /**< indicator for questionable '-0000' offsets in signature */ -} git_time; - -/** An action signature (e.g. for committers, taggers, etc) */ -typedef struct git_signature { - char *name; /**< full name of the author */ - char *email; /**< email of the author */ - git_time when; /**< time when the action happened */ -} git_signature; - -/** In-memory representation of a reference. */ -typedef struct git_reference git_reference; - -/** Iterator for references */ -typedef struct git_reference_iterator git_reference_iterator; - -/** Transactional interface to references */ -typedef struct git_transaction git_transaction; - -/** Annotated commits, the input to merge and rebase. */ -typedef struct git_annotated_commit git_annotated_commit; - -/** Representation of a status collection */ -typedef struct git_status_list git_status_list; - -/** Representation of a rebase */ -typedef struct git_rebase git_rebase; - -/** Basic type of any Git reference. */ -typedef enum { - GIT_REFERENCE_INVALID = 0, /**< Invalid reference */ - GIT_REFERENCE_DIRECT = 1, /**< A reference that points at an object id */ - GIT_REFERENCE_SYMBOLIC = 2, /**< A reference that points at another reference */ - GIT_REFERENCE_ALL = GIT_REFERENCE_DIRECT | GIT_REFERENCE_SYMBOLIC, -} git_reference_t; - -/** Basic type of any Git branch. */ -typedef enum { - GIT_BRANCH_LOCAL = 1, - GIT_BRANCH_REMOTE = 2, - GIT_BRANCH_ALL = GIT_BRANCH_LOCAL|GIT_BRANCH_REMOTE, -} git_branch_t; - -/** Valid modes for index and tree entries. */ -typedef enum { - GIT_FILEMODE_UNREADABLE = 0000000, - GIT_FILEMODE_TREE = 0040000, - GIT_FILEMODE_BLOB = 0100644, - GIT_FILEMODE_BLOB_EXECUTABLE = 0100755, - GIT_FILEMODE_LINK = 0120000, - GIT_FILEMODE_COMMIT = 0160000, -} git_filemode_t; - -/** - * A refspec specifies the mapping between remote and local reference - * names when fetch or pushing. - */ -typedef struct git_refspec git_refspec; - -/** - * Git's idea of a remote repository. A remote can be anonymous (in - * which case it does not have backing configuration entires). - */ -typedef struct git_remote git_remote; - -/** - * Interface which represents a transport to communicate with a - * remote. - */ -typedef struct git_transport git_transport; - -/** - * Preparation for a push operation. Can be used to configure what to - * push and the level of parallelism of the packfile builder. - */ -typedef struct git_push git_push; - -/* documentation in the definition */ -typedef struct git_remote_head git_remote_head; -typedef struct git_remote_callbacks git_remote_callbacks; - -/** - * Parent type for `git_cert_hostkey` and `git_cert_x509`. - */ -typedef struct git_cert git_cert; - -/** - * Opaque structure representing a submodule. - */ -typedef struct git_submodule git_submodule; - -/** - * Submodule update values - * - * These values represent settings for the `submodule.$name.update` - * configuration value which says how to handle `git submodule update` for - * this submodule. The value is usually set in the ".gitmodules" file and - * copied to ".git/config" when the submodule is initialized. - * - * You can override this setting on a per-submodule basis with - * `git_submodule_set_update()` and write the changed value to disk using - * `git_submodule_save()`. If you have overwritten the value, you can - * revert it by passing `GIT_SUBMODULE_UPDATE_RESET` to the set function. - * - * The values are: - * - * - GIT_SUBMODULE_UPDATE_CHECKOUT: the default; when a submodule is - * updated, checkout the new detached HEAD to the submodule directory. - * - GIT_SUBMODULE_UPDATE_REBASE: update by rebasing the current checked - * out branch onto the commit from the superproject. - * - GIT_SUBMODULE_UPDATE_MERGE: update by merging the commit in the - * superproject into the current checkout out branch of the submodule. - * - GIT_SUBMODULE_UPDATE_NONE: do not update this submodule even when - * the commit in the superproject is updated. - * - GIT_SUBMODULE_UPDATE_DEFAULT: not used except as static initializer - * when we don't want any particular update rule to be specified. - */ -typedef enum { - GIT_SUBMODULE_UPDATE_CHECKOUT = 1, - GIT_SUBMODULE_UPDATE_REBASE = 2, - GIT_SUBMODULE_UPDATE_MERGE = 3, - GIT_SUBMODULE_UPDATE_NONE = 4, - - GIT_SUBMODULE_UPDATE_DEFAULT = 0 -} git_submodule_update_t; - -/** - * Submodule ignore values - * - * These values represent settings for the `submodule.$name.ignore` - * configuration value which says how deeply to look at the working - * directory when getting submodule status. - * - * You can override this value in memory on a per-submodule basis with - * `git_submodule_set_ignore()` and can write the changed value to disk - * with `git_submodule_save()`. If you have overwritten the value, you - * can revert to the on disk value by using `GIT_SUBMODULE_IGNORE_RESET`. - * - * The values are: - * - * - GIT_SUBMODULE_IGNORE_UNSPECIFIED: use the submodule's configuration - * - GIT_SUBMODULE_IGNORE_NONE: don't ignore any change - i.e. even an - * untracked file, will mark the submodule as dirty. Ignored files are - * still ignored, of course. - * - GIT_SUBMODULE_IGNORE_UNTRACKED: ignore untracked files; only changes - * to tracked files, or the index or the HEAD commit will matter. - * - GIT_SUBMODULE_IGNORE_DIRTY: ignore changes in the working directory, - * only considering changes if the HEAD of submodule has moved from the - * value in the superproject. - * - GIT_SUBMODULE_IGNORE_ALL: never check if the submodule is dirty - * - GIT_SUBMODULE_IGNORE_DEFAULT: not used except as static initializer - * when we don't want any particular ignore rule to be specified. - */ -typedef enum { - GIT_SUBMODULE_IGNORE_UNSPECIFIED = -1, /**< use the submodule's configuration */ - - GIT_SUBMODULE_IGNORE_NONE = 1, /**< any change or untracked == dirty */ - GIT_SUBMODULE_IGNORE_UNTRACKED = 2, /**< dirty if tracked files change */ - GIT_SUBMODULE_IGNORE_DIRTY = 3, /**< only dirty if HEAD moved */ - GIT_SUBMODULE_IGNORE_ALL = 4, /**< never dirty */ -} git_submodule_ignore_t; - -/** - * Options for submodule recurse. - * - * Represent the value of `submodule.$name.fetchRecurseSubmodules` - * - * * GIT_SUBMODULE_RECURSE_NO - do no recurse into submodules - * * GIT_SUBMODULE_RECURSE_YES - recurse into submodules - * * GIT_SUBMODULE_RECURSE_ONDEMAND - recurse into submodules only when - * commit not already in local clone - */ -typedef enum { - GIT_SUBMODULE_RECURSE_NO = 0, - GIT_SUBMODULE_RECURSE_YES = 1, - GIT_SUBMODULE_RECURSE_ONDEMAND = 2, -} git_submodule_recurse_t; - -typedef struct git_writestream git_writestream; - -/** A type to write in a streaming fashion, for example, for filters. */ -struct git_writestream { - int GIT_CALLBACK(write)(git_writestream *stream, const char *buffer, size_t len); - int GIT_CALLBACK(close)(git_writestream *stream); - void GIT_CALLBACK(free)(git_writestream *stream); -}; - -/** Representation of .mailmap file state. */ -typedef struct git_mailmap git_mailmap; - -/** @} */ -GIT_END_DECL - -#endif diff --git a/libgit2/headers/git2/version.h b/libgit2/headers/git2/version.h deleted file mode 100644 index 3503a62..0000000 --- a/libgit2/headers/git2/version.h +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_version_h__ -#define INCLUDE_git_version_h__ - -#define LIBGIT2_VERSION "1.3.0" -#define LIBGIT2_VER_MAJOR 1 -#define LIBGIT2_VER_MINOR 3 -#define LIBGIT2_VER_REVISION 0 -#define LIBGIT2_VER_PATCH 0 - -#define LIBGIT2_SOVERSION "1.3" - -#endif diff --git a/libgit2/headers/git2/worktree.h b/libgit2/headers/git2/worktree.h deleted file mode 100644 index 23084d8..0000000 --- a/libgit2/headers/git2/worktree.h +++ /dev/null @@ -1,256 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_git_worktree_h__ -#define INCLUDE_git_worktree_h__ - -#include "common.h" -#include "buffer.h" -#include "types.h" -#include "strarray.h" - -/** - * @file git2/worktrees.h - * @brief Git worktree related functions - * @defgroup git_commit Git worktree related functions - * @ingroup Git - * @{ - */ -GIT_BEGIN_DECL - -/** - * List names of linked working trees - * - * The returned list should be released with `git_strarray_free` - * when no longer needed. - * - * @param out pointer to the array of working tree names - * @param repo the repo to use when listing working trees - * @return 0 or an error code - */ -GIT_EXTERN(int) git_worktree_list(git_strarray *out, git_repository *repo); - -/** - * Lookup a working tree by its name for a given repository - * - * @param out Output pointer to looked up worktree or `NULL` - * @param repo The repository containing worktrees - * @param name Name of the working tree to look up - * @return 0 or an error code - */ -GIT_EXTERN(int) git_worktree_lookup(git_worktree **out, git_repository *repo, const char *name); - -/** - * Open a worktree of a given repository - * - * If a repository is not the main tree but a worktree, this - * function will look up the worktree inside the parent - * repository and create a new `git_worktree` structure. - * - * @param out Out-pointer for the newly allocated worktree - * @param repo Repository to look up worktree for - */ -GIT_EXTERN(int) git_worktree_open_from_repository(git_worktree **out, git_repository *repo); - -/** - * Free a previously allocated worktree - * - * @param wt worktree handle to close. If NULL nothing occurs. - */ -GIT_EXTERN(void) git_worktree_free(git_worktree *wt); - -/** - * Check if worktree is valid - * - * A valid worktree requires both the git data structures inside - * the linked parent repository and the linked working copy to be - * present. - * - * @param wt Worktree to check - * @return 0 when worktree is valid, error-code otherwise - */ -GIT_EXTERN(int) git_worktree_validate(const git_worktree *wt); - -/** - * Worktree add options structure - * - * Initialize with `GIT_WORKTREE_ADD_OPTIONS_INIT`. Alternatively, you can - * use `git_worktree_add_options_init`. - * - */ -typedef struct git_worktree_add_options { - unsigned int version; - - int lock; /**< lock newly created worktree */ - git_reference *ref; /**< reference to use for the new worktree HEAD */ -} git_worktree_add_options; - -#define GIT_WORKTREE_ADD_OPTIONS_VERSION 1 -#define GIT_WORKTREE_ADD_OPTIONS_INIT {GIT_WORKTREE_ADD_OPTIONS_VERSION,0,NULL} - -/** - * Initialize git_worktree_add_options structure - * - * Initializes a `git_worktree_add_options` with default values. Equivalent to - * creating an instance with `GIT_WORKTREE_ADD_OPTIONS_INIT`. - * - * @param opts The `git_worktree_add_options` struct to initialize. - * @param version The struct version; pass `GIT_WORKTREE_ADD_OPTIONS_VERSION`. - * @return Zero on success; -1 on failure. - */ -GIT_EXTERN(int) git_worktree_add_options_init(git_worktree_add_options *opts, - unsigned int version); - -/** - * Add a new working tree - * - * Add a new working tree for the repository, that is create the - * required data structures inside the repository and check out - * the current HEAD at `path` - * - * @param out Output pointer containing new working tree - * @param repo Repository to create working tree for - * @param name Name of the working tree - * @param path Path to create working tree at - * @param opts Options to modify default behavior. May be NULL - * @return 0 or an error code - */ -GIT_EXTERN(int) git_worktree_add(git_worktree **out, git_repository *repo, - const char *name, const char *path, - const git_worktree_add_options *opts); - -/** - * Lock worktree if not already locked - * - * Lock a worktree, optionally specifying a reason why the linked - * working tree is being locked. - * - * @param wt Worktree to lock - * @param reason Reason why the working tree is being locked - * @return 0 on success, non-zero otherwise - */ -GIT_EXTERN(int) git_worktree_lock(git_worktree *wt, const char *reason); - -/** - * Unlock a locked worktree - * - * @param wt Worktree to unlock - * @return 0 on success, 1 if worktree was not locked, error-code - * otherwise - */ -GIT_EXTERN(int) git_worktree_unlock(git_worktree *wt); - -/** - * Check if worktree is locked - * - * A worktree may be locked if the linked working tree is stored - * on a portable device which is not available. - * - * @param reason Buffer to store reason in. If NULL no reason is stored. - * @param wt Worktree to check - * @return 0 when the working tree not locked, a value greater - * than zero if it is locked, less than zero if there was an - * error - */ -GIT_EXTERN(int) git_worktree_is_locked(git_buf *reason, const git_worktree *wt); - -/** - * Retrieve the name of the worktree - * - * @param wt Worktree to get the name for - * @return The worktree's name. The pointer returned is valid for the - * lifetime of the git_worktree - */ -GIT_EXTERN(const char *) git_worktree_name(const git_worktree *wt); - -/** - * Retrieve the filesystem path for the worktree - * - * @param wt Worktree to get the path for - * @return The worktree's filesystem path. The pointer returned - * is valid for the lifetime of the git_worktree. - */ -GIT_EXTERN(const char *) git_worktree_path(const git_worktree *wt); - -/** - * Flags which can be passed to git_worktree_prune to alter its - * behavior. - */ -typedef enum { - /* Prune working tree even if working tree is valid */ - GIT_WORKTREE_PRUNE_VALID = 1u << 0, - /* Prune working tree even if it is locked */ - GIT_WORKTREE_PRUNE_LOCKED = 1u << 1, - /* Prune checked out working tree */ - GIT_WORKTREE_PRUNE_WORKING_TREE = 1u << 2, -} git_worktree_prune_t; - -/** - * Worktree prune options structure - * - * Initialize with `GIT_WORKTREE_PRUNE_OPTIONS_INIT`. Alternatively, you can - * use `git_worktree_prune_options_init`. - * - */ -typedef struct git_worktree_prune_options { - unsigned int version; - - /** A combination of `git_worktree_prune_t` */ - uint32_t flags; -} git_worktree_prune_options; - -#define GIT_WORKTREE_PRUNE_OPTIONS_VERSION 1 -#define GIT_WORKTREE_PRUNE_OPTIONS_INIT {GIT_WORKTREE_PRUNE_OPTIONS_VERSION,0} - -/** - * Initialize git_worktree_prune_options structure - * - * Initializes a `git_worktree_prune_options` with default values. Equivalent to - * creating an instance with `GIT_WORKTREE_PRUNE_OPTIONS_INIT`. - * - * @param opts The `git_worktree_prune_options` struct to initialize. - * @param version The struct version; pass `GIT_WORKTREE_PRUNE_OPTIONS_VERSION`. - * @return Zero on success; -1 on failure. - */ -GIT_EXTERN(int) git_worktree_prune_options_init( - git_worktree_prune_options *opts, - unsigned int version); - -/** - * Is the worktree prunable with the given options? - * - * A worktree is not prunable in the following scenarios: - * - * - the worktree is linking to a valid on-disk worktree. The - * `valid` member will cause this check to be ignored. - * - the worktree is locked. The `locked` flag will cause this - * check to be ignored. - * - * If the worktree is not valid and not locked or if the above - * flags have been passed in, this function will return a - * positive value. - */ -GIT_EXTERN(int) git_worktree_is_prunable(git_worktree *wt, - git_worktree_prune_options *opts); - -/** - * Prune working tree - * - * Prune the working tree, that is remove the git data - * structures on disk. The repository will only be pruned of - * `git_worktree_is_prunable` succeeds. - * - * @param wt Worktree to prune - * @param opts Specifies which checks to override. See - * `git_worktree_is_prunable`. May be NULL - * @return 0 or an error code - */ -GIT_EXTERN(int) git_worktree_prune(git_worktree *wt, - git_worktree_prune_options *opts); - -/** @} */ -GIT_END_DECL -#endif diff --git a/libgit2/libgit2.so.1.3.0 b/libgit2/libgit2.so.1.3.0 deleted file mode 100755 index 7aeba917e74bccb31da619f7839d5f040f67bc12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3878080 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

!-qSliS0!R_+;Jfus=Q8ELcsjWUM0p* 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