diff --git a/Clibgit2.xcframework/Info.plist b/Clibgit2.xcframework/Info.plist index 4e9c185..2e954b5 100644 --- a/Clibgit2.xcframework/Info.plist +++ b/Clibgit2.xcframework/Info.plist @@ -5,10 +5,12 @@ AvailableLibraries + BinaryPath + libgit2_all.a HeadersPath Headers LibraryIdentifier - ios-arm64_x86_64-maccatalyst + macos-arm64_x86_64 LibraryPath libgit2_all.a SupportedArchitectures @@ -17,25 +19,30 @@ x86_64 SupportedPlatform - ios - SupportedPlatformVariant - maccatalyst + macos + BinaryPath + libgit2_all.a HeadersPath Headers LibraryIdentifier - ios-arm64 + ios-arm64_x86_64-maccatalyst LibraryPath libgit2_all.a SupportedArchitectures arm64 + x86_64 SupportedPlatform ios + SupportedPlatformVariant + maccatalyst + BinaryPath + libgit2_all.a HeadersPath Headers LibraryIdentifier @@ -52,19 +59,20 @@ simulator + BinaryPath + libgit2_all.a HeadersPath Headers LibraryIdentifier - macos-arm64_x86_64 + ios-arm64 LibraryPath libgit2_all.a SupportedArchitectures arm64 - x86_64 SupportedPlatform - macos + ios CFBundlePackageType diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2.h index 2961cc3..3457e5f 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2.h @@ -28,6 +28,7 @@ #include "git2/diff.h" #include "git2/email.h" #include "git2/errors.h" +#include "git2/experimental.h" #include "git2/filter.h" #include "git2/global.h" #include "git2/graph.h" diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/annotated_commit.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/annotated_commit.h index 3b7103f..04f3b1c 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/annotated_commit.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/annotated_commit.h @@ -13,9 +13,16 @@ /** * @file git2/annotated_commit.h - * @brief Git annotated commit routines + * @brief A commit and information about how it was looked up by the user. * @defgroup git_annotated_commit Git annotated commit routines * @ingroup Git + * + * An "annotated commit" is a commit that contains information about + * how the commit was resolved, which can be used for maintaining the + * user's "intent" through commands like merge and rebase. For example, + * if a user wants to "merge HEAD" then an annotated commit is used to + * both contain the HEAD commit _and_ the fact that it was resolved as + * the HEAD ref. * @{ */ GIT_BEGIN_DECL @@ -25,7 +32,7 @@ GIT_BEGIN_DECL * 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[out] 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 @@ -40,7 +47,7 @@ GIT_EXTERN(int) git_annotated_commit_from_ref( * 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[out] 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 @@ -67,7 +74,7 @@ GIT_EXTERN(int) git_annotated_commit_from_fetchhead( * 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[out] 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 @@ -84,7 +91,7 @@ GIT_EXTERN(int) git_annotated_commit_lookup( * 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[out] 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 diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/apply.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/apply.h index bc637df..7ab939d 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/apply.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/apply.h @@ -14,9 +14,12 @@ /** * @file git2/apply.h - * @brief Git patch application routines + * @brief Apply patches to the working directory or index * @defgroup git_apply Git patch application routines * @ingroup Git + * + * Mechanisms to apply a patch to the index, the working directory, + * or both. * @{ */ GIT_BEGIN_DECL @@ -32,6 +35,8 @@ GIT_BEGIN_DECL * * @param delta The delta to be applied * @param payload User-specified payload + * @return 0 if the delta is applied, < 0 if the apply process will be aborted + * or > 0 if the delta will not be applied. */ typedef int GIT_CALLBACK(git_apply_delta_cb)( const git_diff_delta *delta, @@ -48,27 +53,44 @@ typedef int GIT_CALLBACK(git_apply_delta_cb)( * * @param hunk The hunk to be applied * @param payload User-specified payload + * @return 0 if the hunk is applied, < 0 if the apply process will be aborted + * or > 0 if the hunk will not be applied. */ typedef int GIT_CALLBACK(git_apply_hunk_cb)( const git_diff_hunk *hunk, void *payload); -/** Flags controlling the behavior of git_apply */ +/** + * Flags controlling the behavior of `git_apply`. + * + * 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. + */ 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_CHECK = (1 << 0) } git_apply_flags_t; /** - * Apply options structure + * Apply options structure. + * + * 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. * * Initialize with `GIT_APPLY_OPTIONS_INIT`. Alternatively, you can * use `git_apply_options_init`. * - * @see git_apply_to_tree, git_apply + * @see git_apply_to_tree + * @see git_apply */ typedef struct { unsigned int version; /**< The version */ @@ -79,16 +101,29 @@ typedef struct { /** 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. */ + /** Payload passed to both `delta_cb` & `hunk_cb`. */ void *payload; - /** Bitmask of git_apply_flags_t */ + /** Bitmask of `git_apply_flags_t` */ unsigned int flags; } git_apply_options; +/** Current version for the `git_apply_options` structure */ #define GIT_APPLY_OPTIONS_VERSION 1 + +/** Static constructor for `git_apply_options` */ #define GIT_APPLY_OPTIONS_INIT {GIT_APPLY_OPTIONS_VERSION} +/** + * Initialize git_apply_options structure + * + * Initialize a `git_apply_options` with default values. Equivalent to creating + * an instance with GIT_APPLY_OPTIONS_INIT. + * + * @param opts The `git_apply_options` struct to initialize. + * @param version The struct version; pass `GIT_APPLY_OPTIONS_VERSION` + * @return 0 on success or -1 on failure. + */ GIT_EXTERN(int) git_apply_options_init(git_apply_options *opts, unsigned int version); /** @@ -127,7 +162,7 @@ typedef enum { * 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_BOTH = 2 } git_apply_location_t; /** diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/attr.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/attr.h index 3891a0c..e5216fe 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/attr.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/attr.h @@ -12,9 +12,13 @@ /** * @file git2/attr.h - * @brief Git attribute management routines + * @brief Attribute management routines * @defgroup git_attr Git attribute management routines * @ingroup Git + * + * Attributes specify additional information about how git should + * handle particular paths - for example, they may indicate whether + * a particular filter is applied, like LFS or line ending conversions. * @{ */ GIT_BEGIN_DECL @@ -83,7 +87,7 @@ 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_STRING /**< This attribute has a value */ } git_attr_value_t; /** @@ -114,16 +118,18 @@ GIT_EXTERN(git_attr_value_t) git_attr_value(const char *attr); * use index only for creating archives or for a bare repo (if an * index has been specified for the bare repo). */ + +/** Examine attribute in working directory, then index */ #define GIT_ATTR_CHECK_FILE_THEN_INDEX 0 +/** Examine attribute in index, then working directory */ #define GIT_ATTR_CHECK_INDEX_THEN_FILE 1 -#define GIT_ATTR_CHECK_INDEX_ONLY 2 +/** Examine attributes only in the index */ +#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. @@ -134,8 +140,12 @@ GIT_EXTERN(git_attr_value_t) git_attr_value(const char *attr); * Passing the `GIT_ATTR_CHECK_INCLUDE_COMMIT` flag will use attributes * from a `.gitattributes` file in a specific commit. */ + +/** Ignore system attributes */ #define GIT_ATTR_CHECK_NO_SYSTEM (1 << 2) +/** Honor `.gitattributes` in the HEAD revision */ #define GIT_ATTR_CHECK_INCLUDE_HEAD (1 << 3) +/** Honor `.gitattributes` in a specific commit */ #define GIT_ATTR_CHECK_INCLUDE_COMMIT (1 << 4) /** @@ -160,7 +170,10 @@ typedef struct { git_oid attr_commit_id; } git_attr_options; +/** Current version for the `git_attr_options` structure */ #define GIT_ATTR_OPTIONS_VERSION 1 + +/** Static constructor for `git_attr_options` */ #define GIT_ATTR_OPTIONS_INIT {GIT_ATTR_OPTIONS_VERSION} /** @@ -177,6 +190,7 @@ typedef struct { * 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. + * @return 0 or an error code. */ GIT_EXTERN(int) git_attr_get( const char **value_out, @@ -199,6 +213,7 @@ GIT_EXTERN(int) git_attr_get( * 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. + * @return 0 or an error code. */ GIT_EXTERN(int) git_attr_get_ext( const char **value_out, @@ -235,6 +250,7 @@ GIT_EXTERN(int) git_attr_get_ext( * 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. + * @return 0 or an error code. */ GIT_EXTERN(int) git_attr_get_many( const char **values_out, @@ -259,6 +275,7 @@ GIT_EXTERN(int) git_attr_get_many( * 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. + * @return 0 or an error code. */ GIT_EXTERN(int) git_attr_get_many_ext( const char **values_out, @@ -344,11 +361,16 @@ GIT_EXTERN(int) git_attr_cache_flush( * 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 + * file of the repository (plus the built-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"); + * + * @param repo The repository to add the macro in. + * @param name The name of the macro. + * @param values The value for the macro. + * @return 0 or an error code. */ GIT_EXTERN(int) git_attr_add_macro( git_repository *repo, diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/blame.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/blame.h index d193ce1..f3e6692 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/blame.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/blame.h @@ -13,9 +13,14 @@ /** * @file git2/blame.h - * @brief Git blame routines + * @brief Specify a file's most recent changes per-line * @defgroup git_blame Git blame routines * @ingroup Git + * + * Producing a "blame" (or "annotated history") decorates individual + * lines in a file with the commit that introduced that particular line + * of changes. This can be useful to indicate when and why a particular + * change was made. * @{ */ GIT_BEGIN_DECL @@ -73,7 +78,7 @@ typedef enum { GIT_BLAME_USE_MAILMAP = (1<<5), /** Ignore whitespace differences */ - GIT_BLAME_IGNORE_WHITESPACE = (1<<6), + GIT_BLAME_IGNORE_WHITESPACE = (1<<6) } git_blame_flag_t; /** @@ -87,7 +92,7 @@ typedef struct git_blame_options { unsigned int version; /** A combination of `git_blame_flag_t` */ - uint32_t flags; + unsigned int flags; /** * The lower bound on the number of alphanumeric characters that @@ -122,7 +127,10 @@ typedef struct git_blame_options { size_t max_line; } git_blame_options; +/** Current version for the `git_blame_options` structure */ #define GIT_BLAME_OPTIONS_VERSION 1 + +/** Static constructor for `git_blame_options` */ #define GIT_BLAME_OPTIONS_INIT {GIT_BLAME_OPTIONS_VERSION} /** @@ -165,6 +173,13 @@ typedef struct git_blame_hunk { */ git_signature *final_signature; + /** + * The committer 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_committer; + /** * The OID of the commit where this hunk was found. * This will usually be the same as `final_commit_id`, except when @@ -190,6 +205,18 @@ typedef struct git_blame_hunk { */ git_signature *orig_signature; + /** + * The committer 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_committer; + + /* + * The summary of the commit. + */ + const char *summary; + /** * The 1 iff the hunk has been tracked to a boundary commit (the root, * or the commit specified in git_blame_options.oldest_commit) @@ -197,13 +224,75 @@ typedef struct git_blame_hunk { char boundary; } git_blame_hunk; +/** + * Structure that represents a line in a blamed file. + */ +typedef struct git_blame_line { + const char *ptr; + size_t len; +} git_blame_line; /** Opaque structure to hold blame results */ typedef struct git_blame git_blame; +/** + * Gets the number of lines that exist in the blame structure. + * + * @param blame The blame structure to query. + * @return The number of line. + */ +GIT_EXTERN(size_t) git_blame_linecount(git_blame *blame); + /** * Gets the number of hunks that exist in the blame structure. + * + * @param blame The blame structure to query. + * @return The number of hunks. */ +GIT_EXTERN(size_t) git_blame_hunkcount(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_hunk_byindex( + git_blame *blame, + size_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_hunk_byline( + git_blame *blame, + size_t lineno); + +/** + * Gets the information about the line in the blame. + * + * @param blame the blame structure to query + * @param idx the (1-based) line number + * @return the blamed line, or NULL on error + */ +GIT_EXTERN(const git_blame_line *) git_blame_line_byindex( + git_blame *blame, + size_t idx); + +#ifndef GIT_DEPRECATE_HARD +/** + * Gets the number of hunks that exist in the blame structure. + * + * @param blame The blame structure to query. + * @return The number of hunks. + */ + GIT_EXTERN(uint32_t) git_blame_get_hunk_count(git_blame *blame); /** @@ -213,9 +302,9 @@ GIT_EXTERN(uint32_t) git_blame_get_hunk_count(git_blame *blame); * @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); +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. @@ -224,39 +313,58 @@ GIT_EXTERN(const git_blame_hunk*) git_blame_get_hunk_byindex( * @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); +GIT_EXTERN(const git_blame_hunk *) git_blame_get_hunk_byline( + git_blame *blame, + size_t lineno); +#endif /** - * Get the blame for a single file. + * Get the blame for a single file in the repository. * * @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.) + * @param options options for the blame operation or NULL + * @return 0 on success, or an error code */ GIT_EXTERN(int) git_blame_file( - git_blame **out, - git_repository *repo, - const char *path, - git_blame_options *options); + git_blame **out, + git_repository *repo, + const char *path, + git_blame_options *options); +/** + * Get the blame for a single file in the repository, using the specified + * buffer contents as the uncommitted changes of the file (the working + * directory contents). + * + * @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 contents the uncommitted changes + * @param contents_len the length of the changes buffer + * @param options options for the blame operation or NULL + * @return 0 on success, or an error code + */ +GIT_EXTERN(int) git_blame_file_from_buffer( + git_blame **out, + git_repository *repo, + const char *path, + const char *contents, + size_t contents_len, + 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. + * Get blame data for a file that has been modified in memory. The `blame` + * 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. + * 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 + * @param base 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 @@ -264,10 +372,10 @@ GIT_EXTERN(int) git_blame_file( * about the error) */ GIT_EXTERN(int) git_blame_buffer( - git_blame **out, - git_blame *reference, - const char *buffer, - size_t buffer_len); + git_blame **out, + git_blame *base, + const char *buffer, + size_t buffer_len); /** * Free memory allocated by git_blame_file or git_blame_buffer. diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/blob.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/blob.h index 8fc7391..0ed1685 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/blob.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/blob.h @@ -15,9 +15,13 @@ /** * @file git2/blob.h - * @brief Git blob load and write routines + * @brief A blob represents a file in a git repository. * @defgroup git_blob Git blob load and write routines * @ingroup Git + * + * A blob represents a file in a git repository. This is the raw data + * as it is stored in the repository itself. Blobs may be "filtered" + * to produce the on-disk content. * @{ */ GIT_BEGIN_DECL @@ -25,12 +29,15 @@ GIT_BEGIN_DECL /** * Lookup a blob object from a repository. * - * @param blob pointer to the looked up blob + * @param[out] 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); +GIT_EXTERN(int) git_blob_lookup( + git_blob **blob, + git_repository *repo, + const git_oid *id); /** * Lookup a blob object from a repository, @@ -38,7 +45,7 @@ GIT_EXTERN(int) git_blob_lookup(git_blob **blob, git_repository *repo, const git * * @see git_object_lookup_prefix * - * @param blob pointer to the looked up blob + * @param[out] 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 @@ -84,7 +91,7 @@ GIT_EXTERN(git_repository *) git_blob_owner(const git_blob *blob); * time. * * @param blob pointer to the blob - * @return the pointer, or NULL on error + * @return @type `unsigned char *` the pointer, or NULL on error */ GIT_EXTERN(const void *) git_blob_rawcontent(const git_blob *blob); @@ -92,12 +99,14 @@ 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 + * @return size in bytes */ GIT_EXTERN(git_object_size_t) git_blob_rawsize(const git_blob *blob); /** * Flags to control the functionality of `git_blob_filter`. + * + * @flags */ typedef enum { /** When set, filters will not be applied to binary files. */ @@ -119,7 +128,7 @@ typedef enum { * 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_ATTRIBUTES_FROM_COMMIT = (1 << 3) } git_blob_filter_flag_t; /** @@ -128,16 +137,34 @@ typedef enum { * Initialize with `GIT_BLOB_FILTER_OPTIONS_INIT`. Alternatively, you can * use `git_blob_filter_options_init`. * + * @options[version] GIT_BLOB_FILTER_OPTIONS_VERSION + * @options[init_macro] GIT_BLOB_FILTER_OPTIONS_INIT + * @options[init_function] git_blob_filter_options_init */ typedef struct { + /** Version number of the options structure. */ int version; - /** Flags to control the filtering process, see `git_blob_filter_flag_t` above */ + /** + * Flags to control the filtering process, see `git_blob_filter_flag_t` above. + * + * @type[flags] git_blob_filter_flag_t + */ uint32_t flags; #ifdef GIT_DEPRECATE_HARD + /** + * Unused and reserved for ABI compatibility. + * + * @deprecated this value should not be set + */ void *reserved; #else + /** + * This value is unused and reserved for API compatibility. + * + * @deprecated this value should not be set + */ git_oid *commit_id; #endif @@ -148,8 +175,18 @@ typedef struct { git_oid attr_commit_id; } git_blob_filter_options; +/** + * The current version number for the `git_blob_filter_options` structure ABI. + */ #define GIT_BLOB_FILTER_OPTIONS_VERSION 1 -#define GIT_BLOB_FILTER_OPTIONS_INIT {GIT_BLOB_FILTER_OPTIONS_VERSION, GIT_BLOB_FILTER_CHECK_FOR_BINARY} + +/** + * The default values for `git_blob_filter_options`. + */ +#define GIT_BLOB_FILTER_OPTIONS_INIT { \ + GIT_BLOB_FILTER_OPTIONS_VERSION, \ + GIT_BLOB_FILTER_CHECK_FOR_BINARY \ + } /** * Initialize git_blob_filter_options structure @@ -158,10 +195,12 @@ typedef struct { * 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`. + * @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); +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. @@ -171,7 +210,7 @@ GIT_EXTERN(int) git_blob_filter_options_init(git_blob_filter_options *opts, unsi * 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 + * The output is written into a `git_buf` which the caller must dispose * when done (via `git_buf_dispose`). * * If no filters need to be applied, then the `out` buffer will just @@ -183,7 +222,7 @@ GIT_EXTERN(int) git_blob_filter_options_init(git_blob_filter_options *opts, unsi * @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 + * @return @type[enum] git_error_code 0 on success or an error code */ GIT_EXTERN(int) git_blob_filter( git_buf *out, @@ -192,10 +231,10 @@ GIT_EXTERN(int) git_blob_filter( 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 + * Read a file from the working folder of a repository and write it + * to the object database. * - * @param id return the id of the written blob + * @param[out] 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, @@ -205,19 +244,23 @@ GIT_EXTERN(int) git_blob_filter( 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 + * Read a file from the filesystem (not necessarily inside the + * working folder of the repository) and write it to the object + * database. * - * @param id return the id of the written blob + * @param[out] 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); +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 + * Create a stream to write a new blob into the object database. * * 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 @@ -234,7 +277,7 @@ GIT_EXTERN(int) git_blob_create_from_disk(git_oid *id, git_repository *repo, con * 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[out] 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 @@ -247,11 +290,11 @@ GIT_EXTERN(int) git_blob_create_from_stream( const char *hintpath); /** - * Close the stream and write the blob to the object db + * Close the stream and finalize writing the blob to the object database. * * The stream will be closed and freed. * - * @param out the id of the new blob + * @param[out] out the id of the new blob * @param stream the stream to close * @return 0 or an error code */ @@ -260,9 +303,9 @@ GIT_EXTERN(int) git_blob_create_from_stream_commit( git_writestream *stream); /** - * Write an in-memory buffer to the ODB as a blob + * Write an in-memory buffer to the object database as a blob. * - * @param id return the id of the written blob + * @param[out] 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 @@ -272,24 +315,37 @@ 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. + * Determine if the blob content is most likely 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 + * @return @type bool 1 if the content of the blob is detected * as binary; 0 otherwise. */ GIT_EXTERN(int) git_blob_is_binary(const git_blob *blob); +/** + * Determine if the given content is most certainly binary or not; + * this is the same mechanism used by `git_blob_is_binary` but only + * looking at raw data. + * + * @param data The blob data which content should be analyzed + * @param len The length of the data + * @return 1 if the content of the blob is detected + * as binary; 0 otherwise. + */ +GIT_EXTERN(int) git_blob_data_is_binary(const char *data, size_t len); + /** * 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[out] out Pointer to store the copy of the object * @param source Original object to copy + * @return 0. */ GIT_EXTERN(int) git_blob_dup(git_blob **out, git_blob *source); diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/branch.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/branch.h index 24ea7f7..56d737d 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/branch.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/branch.h @@ -13,9 +13,15 @@ /** * @file git2/branch.h - * @brief Git branch parsing routines + * @brief Branch creation and handling * @defgroup git_branch Git branch management * @ingroup Git + * + * A branch is a specific type of reference, at any particular time, + * a git working directory typically is said to have a branch "checked out", + * meaning that commits that are created will be made "on" a branch. + * This occurs by updating the branch reference to point to the new + * commit. The checked out branch is indicated by the `HEAD` meta-ref. * @{ */ GIT_BEGIN_DECL @@ -33,16 +39,13 @@ GIT_BEGIN_DECL * See `git_tag_create()` for rules about valid names. * * @param out Pointer where to store the underlying reference. - * + * @param repo the repository to create the branch in. * @param branch_name Name for the branch; this name is - * validated for consistency. It should also not conflict with - * an already existing branch name. - * + * 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`. - * + * 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. @@ -61,15 +64,21 @@ GIT_EXTERN(int) git_branch_create( * 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 + * @param ref_out Pointer where to store the underlying reference. + * @param repo the repository to create the branch in. + * @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 Annotated 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. */ GIT_EXTERN(int) git_branch_create_from_annotated( git_reference **ref_out, - git_repository *repository, + git_repository *repo, const char *branch_name, - const git_annotated_commit *commit, + const git_annotated_commit *target, int force); /** @@ -127,8 +136,8 @@ GIT_EXTERN(void) git_branch_iterator_free(git_branch_iterator *iter); * 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()`. + * be valid anymore, and should be freed immediately by the user using + * `git_reference_free()`. * * @param out New reference object for the updated name. * @@ -220,7 +229,7 @@ GIT_EXTERN(int) git_branch_upstream( * @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` + * @return @type git_error_t 0 on success; GIT_ENOTFOUND if there's no branch named `branch_name` * or an error code */ GIT_EXTERN(int) git_branch_set_upstream( diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/buffer.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/buffer.h index 926f133..3fe4f85 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/buffer.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/buffer.h @@ -11,9 +11,12 @@ /** * @file git2/buffer.h - * @brief Buffer export structure - * + * @brief A data structure to return data to callers * @ingroup Git + * + * The `git_buf` buffer is used to return arbitrary data - typically + * strings - to callers. Callers are responsible for freeing the memory + * in a buffer with the `git_buf_dispose` function. * @{ */ GIT_BEGIN_DECL @@ -23,112 +26,51 @@ GIT_BEGIN_DECL * * 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. + * To make ownership clear in these cases, libgit2 uses `git_buf` to + * return this data. Callers should use `git_buf_dispose()` to release + * the memory when they are done. * - * 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. + * A `git_buf` contains a pointer to a NUL-terminated C string, and + * the length of the string (not including the NUL terminator). */ 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. + * The buffer contents. `ptr` points to the start of the buffer + * being returned. The buffer's length (in bytes) is specified + * by the `size` member of the structure, and contains a NUL + * terminator at position `(size + 1)`. */ - char *ptr; + 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. + * This field is reserved and unused. */ - size_t asize; + size_t reserved; /** - * `size` holds the size (in bytes) of the data that is actually used. + * The length (in bytes) of the buffer pointed to by `ptr`, + * not including a NUL terminator. */ size_t size; } git_buf; /** - * Static initializer for git_buf from static buffer + * Use to initialize a `git_buf` before passing it to a function that + * will populate it. */ -#define GIT_BUF_INIT_CONST(STR,LEN) { (char *)(STR), 0, (size_t)(LEN) } +#define GIT_BUF_INIT { NULL, 0, 0 } /** * 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. + * pointed to by `buffer->ptr`. * * @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 - /** @} */ +GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/cert.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/cert.h index 0ed38ff..7b91b63 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/cert.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/cert.h @@ -12,7 +12,7 @@ /** * @file git2/cert.h - * @brief Git certificate objects + * @brief TLS and SSH certificate handling * @defgroup git_cert Certificate objects * @ingroup Git * @{ @@ -44,7 +44,7 @@ typedef enum git_cert_t { * information about the certificate. This is used when using * curl. */ - GIT_CERT_STRARRAY, + GIT_CERT_STRARRAY } git_cert_t; /** @@ -82,7 +82,7 @@ typedef enum { /** SHA-256 is available */ GIT_CERT_SSH_SHA256 = (1 << 2), /** Raw hostkey is available */ - GIT_CERT_SSH_RAW = (1 << 3), + GIT_CERT_SSH_RAW = (1 << 3) } git_cert_ssh_t; typedef enum { @@ -169,4 +169,5 @@ typedef struct { /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/checkout.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/checkout.h index c7aeee4..bdea928 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/checkout.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/checkout.h @@ -13,9 +13,13 @@ /** * @file git2/checkout.h - * @brief Git checkout routines + * @brief Update the contents of the working directory * @defgroup git_checkout Git checkout routines * @ingroup Git + * + * Update the contents of the working directory, or a subset of the + * files in the working directory, to point to the data in the index + * or a specific commit. * @{ */ GIT_BEGIN_DECL @@ -31,17 +35,11 @@ GIT_BEGIN_DECL * 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. + * You give checkout one of two strategies for update: * - * - `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. + * - `GIT_CHECKOUT_SAFE` is the default, and similar to git's default, + * which will make modifications that will not lose changes in the + * working directory. * * | target == baseline | target != baseline | * ---------------------|-----------------------|----------------------| @@ -55,6 +53,10 @@ GIT_BEGIN_DECL * baseline present | | | * ---------------------|-----------------------|----------------------| * + * - `GIT_CHECKOUT_FORCE` will take any action to make the working + * directory match the target (including potentially discarding + * modified files). + * * 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. @@ -69,6 +71,9 @@ GIT_BEGIN_DECL * * There are some additional flags to modify the behavior of checkout: * + * - `GIT_CHECKOUT_DRY_RUN` is a dry-run strategy that checks for conflicts, + * etc., but doesn't make any actual changes. + * * - GIT_CHECKOUT_ALLOW_CONFLICTS makes SAFE mode apply safe file updates * even if there are conflicts (instead of cancelling the checkout). * @@ -102,29 +107,24 @@ GIT_BEGIN_DECL * 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. + * + * @flags */ 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. + * If the uncommitted changes don't conflict with the checked + * out files, the checkout will still proceed, leaving the + * changes intact. */ - GIT_CHECKOUT_SAFE = (1u << 0), + GIT_CHECKOUT_SAFE = 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. + * Allow all updates to force working directory to look like + * the index, potentially losing data in the process. */ GIT_CHECKOUT_FORCE = (1u << 1), - /** Allow checkout to recreate missing files */ GIT_CHECKOUT_RECREATE_MISSING = (1u << 2), @@ -178,20 +178,31 @@ typedef enum { 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. + * Perform a "dry run", reporting what _would_ be done but + * without actually making changes in the working directory + * or the index. */ GIT_CHECKOUT_DRY_RUN = (1u << 24), - + + /** Include common ancestor data in zdiff3 format for conflicts */ + GIT_CHECKOUT_CONFLICT_STYLE_ZDIFF3 = (1u << 25), + /** + * Do not do a checkout and do not fire callbacks; this is primarily + * useful only for internal functions that will perform the + * checkout themselves but need to pass checkout options into + * another function, for example, `git_clone`. + */ + GIT_CHECKOUT_NONE = (1u << 30), + + /* * 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_UPDATE_SUBMODULES_IF_CHANGED = (1u << 17) } git_checkout_strategy_t; /** @@ -207,6 +218,8 @@ typedef enum { * 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. + * + * @flags */ typedef enum { GIT_CHECKOUT_NOTIFY_NONE = 0, @@ -248,7 +261,17 @@ typedef struct { size_t chmod_calls; } git_checkout_perfdata; -/** Checkout notification callback function */ +/** + * Checkout notification callback function. + * + * @param why the notification reason + * @param path the path to the file being checked out + * @param baseline the baseline's diff file information + * @param target the checkout target diff file information + * @param workdir the working directory diff file information + * @param payload the user-supplied callback payload + * @return 0 on success, or an error code + */ typedef int GIT_CALLBACK(git_checkout_notify_cb)( git_checkout_notify_t why, const char *path, @@ -257,14 +280,26 @@ typedef int GIT_CALLBACK(git_checkout_notify_cb)( const git_diff_file *workdir, void *payload); -/** Checkout progress notification function */ +/** + * Checkout progress notification function. + * + * @param path the path to the file being checked out + * @param completed_steps number of checkout steps completed + * @param total_steps number of total steps in the checkout process + * @param payload the user-supplied callback payload + */ 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 */ +/** + * Checkout performance data reporting function. + * + * @param perfdata the performance data for the checkout + * @param payload the user-supplied callback payload + */ typedef void GIT_CALLBACK(git_checkout_perfdata_cb)( const git_checkout_perfdata *perfdata, void *payload); @@ -275,10 +310,18 @@ typedef void GIT_CALLBACK(git_checkout_perfdata_cb)( * Initialize with `GIT_CHECKOUT_OPTIONS_INIT`. Alternatively, you can * use `git_checkout_options_init`. * + * @options[version] GIT_CHECKOUT_OPTIONS_VERSION + * @options[init_macro] GIT_CHECKOUT_OPTIONS_INIT + * @options[init_function] git_checkout_options_init */ typedef struct git_checkout_options { unsigned int version; /**< The version */ + /** + * Checkout strategy. Default is a safe checkout. + * + * @type[flags] git_checkout_strategy_t + */ unsigned int checkout_strategy; /**< default will be a safe checkout */ int disable_filters; /**< don't apply filters like CRLF conversion */ @@ -286,7 +329,13 @@ typedef struct git_checkout_options { 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 */ + /** + * Checkout notification flags specify what operations the notify + * callback is invoked for. + * + * @type[flags] git_checkout_notify_t + */ + unsigned int notify_flags; /** * Optional callback to get notifications on specific file states. @@ -341,8 +390,12 @@ typedef struct git_checkout_options { void *perfdata_payload; } git_checkout_options; + +/** Current version for the `git_checkout_options` structure */ #define GIT_CHECKOUT_OPTIONS_VERSION 1 -#define GIT_CHECKOUT_OPTIONS_INIT {GIT_CHECKOUT_OPTIONS_VERSION, GIT_CHECKOUT_SAFE} + +/** Static constructor for `git_checkout_options` */ +#define GIT_CHECKOUT_OPTIONS_INIT { GIT_CHECKOUT_OPTIONS_VERSION } /** * Initialize git_checkout_options structure @@ -411,4 +464,5 @@ GIT_EXTERN(int) git_checkout_tree( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/cherrypick.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/cherrypick.h index 0e6a252..e6cf99e 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/cherrypick.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/cherrypick.h @@ -13,9 +13,12 @@ /** * @file git2/cherrypick.h - * @brief Git cherry-pick routines + * @brief Cherry-pick the contents of an individual commit * @defgroup git_cherrypick Git cherry-pick routines * @ingroup Git + * + * "Cherry-pick" will attempts to re-apply the changes in an + * individual commit to the current index and working directory. * @{ */ GIT_BEGIN_DECL @@ -33,8 +36,13 @@ typedef struct { git_checkout_options checkout_opts; /**< Options for the checkout */ } git_cherrypick_options; +/** Current version for the `git_cherrypick_options` structure */ #define GIT_CHERRYPICK_OPTIONS_VERSION 1 -#define GIT_CHERRYPICK_OPTIONS_INIT {GIT_CHERRYPICK_OPTIONS_VERSION, 0, GIT_MERGE_OPTIONS_INIT, GIT_CHECKOUT_OPTIONS_INIT} + +/** Static constructor for `git_cherrypick_options` */ +#define GIT_CHERRYPICK_OPTIONS_INIT { \ + GIT_CHERRYPICK_OPTIONS_VERSION, 0, \ + GIT_MERGE_OPTIONS_INIT, GIT_CHECKOUT_OPTIONS_INIT } /** * Initialize git_cherrypick_options structure @@ -89,4 +97,3 @@ GIT_EXTERN(int) git_cherrypick( GIT_END_DECL #endif - diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/clone.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/clone.h index 3c3ea26..b7a47ab 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/clone.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/clone.h @@ -17,9 +17,13 @@ /** * @file git2/clone.h - * @brief Git cloning routines + * @brief Clone a remote repository to the local disk * @defgroup git_clone Git cloning routines * @ingroup Git + * + * Clone will take a remote repository - located on a remote server + * accessible by HTTPS or SSH, or a repository located elsewhere on + * the local disk - and place a copy in the given local path. * @{ */ GIT_BEGIN_DECL @@ -49,7 +53,7 @@ typedef enum { * Bypass the git-aware transport, but do not try to use * hardlinks. */ - GIT_CLONE_LOCAL_NO_LINKS, + GIT_CLONE_LOCAL_NO_LINKS } git_clone_local_t; /** @@ -59,7 +63,7 @@ typedef enum { * 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[out] 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 @@ -74,14 +78,14 @@ typedef int GIT_CALLBACK(git_remote_create_cb)( void *payload); /** - * The signature of a function matchin git_repository_init, with an - * aditional void * as callback payload. + * The signature of a function matching git_repository_init, with an + * additional 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[out] 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 @@ -99,14 +103,17 @@ typedef int GIT_CALLBACK(git_repository_create_cb)( * Initialize with `GIT_CLONE_OPTIONS_INIT`. Alternatively, you can * use `git_clone_options_init`. * + * @options[version] GIT_CLONE_OPTIONS_VERSION + * @options[init_macro] GIT_CLONE_OPTIONS_INIT + * @options[init_function] 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`. + * checkout, set the `checkout_strategy` to `GIT_CHECKOUT_NONE` + * or `GIT_CHECKOUT_DRY_RUN`. */ git_checkout_options checkout_opts; @@ -163,10 +170,14 @@ typedef struct git_clone_options { void *remote_cb_payload; } git_clone_options; +/** Current version for the `git_clone_options` structure */ #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 } + +/** Static constructor for `git_clone_options` */ +#define GIT_CLONE_OPTIONS_INIT \ + { GIT_CLONE_OPTIONS_VERSION, \ + GIT_CHECKOUT_OPTIONS_INIT, \ + GIT_FETCH_OPTIONS_INIT } /** * Initialize git_clone_options structure @@ -189,7 +200,11 @@ GIT_EXTERN(int) git_clone_options_init( * 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 + * Note that the libgit2 library _must_ be initialized using + * `git_libgit2_init` before any APIs can be called, including + * this one. + * + * @param[out] 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 @@ -206,4 +221,5 @@ GIT_EXTERN(int) git_clone( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/commit.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/commit.h index 4d74b89..b998e18 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/commit.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/commit.h @@ -14,9 +14,13 @@ /** * @file git2/commit.h - * @brief Git commit parsing, formatting routines + * @brief A representation of a set of changes in the repository * @defgroup git_commit Git commit parsing, formatting routines * @ingroup Git + * + * A commit represents a set of changes made to the files within a + * repository, and metadata about who made the changes, and when the + * changes were made. * @{ */ GIT_BEGIN_DECL @@ -380,7 +384,38 @@ GIT_EXTERN(int) git_commit_create( * * All other parameters remain the same as `git_commit_create()`. * - * @see git_commit_create + * @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 + * + * @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_v( git_oid *id, @@ -394,6 +429,52 @@ GIT_EXTERN(int) git_commit_create_v( size_t parent_count, ...); +typedef struct { + unsigned int version; + + /** + * Flags for creating the commit. + * + * If `allow_empty_commit` is specified, a commit with no changes + * from the prior commit (and "empty" commit) is allowed. Otherwise, + * commit creation will be stopped. + */ + unsigned int allow_empty_commit : 1; + + /** The commit author, or NULL for the default. */ + const git_signature *author; + + /** The committer, or NULL for the default. */ + const git_signature *committer; + + /** Encoding for the commit message; leave NULL for default. */ + const char *message_encoding; +} git_commit_create_options; + +/** Current version for the `git_commit_create_options` structure */ +#define GIT_COMMIT_CREATE_OPTIONS_VERSION 1 + +/** Static constructor for `git_commit_create_options` */ +#define GIT_COMMIT_CREATE_OPTIONS_INIT { GIT_COMMIT_CREATE_OPTIONS_VERSION } + +/** + * Commits the staged changes in the repository; this is a near analog to + * `git commit -m message`. + * + * By default, empty commits are not allowed. + * + * @param id pointer to store the new commit's object id + * @param repo repository to commit changes in + * @param message the commit message + * @param opts options for creating the commit + * @return 0 on success, GIT_EUNCHANGED if there were no changes to commit, or an error code + */ +GIT_EXTERN(int) git_commit_create_from_stage( + git_oid *id, + git_repository *repo, + const char *message, + const git_commit_create_options *opts); + /** * Amend an existing commit by replacing only non-NULL values. * @@ -413,7 +494,36 @@ GIT_EXTERN(int) git_commit_create_v( * * All parameters have the same meanings as in `git_commit_create()`. * - * @see git_commit_create + * @param id Pointer in which to store the OID of the newly created commit + * + * @param commit_to_amend The commit to amend + * + * @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`. + * + * @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_amend( git_oid *id, @@ -479,6 +589,7 @@ GIT_EXTERN(int) git_commit_create_buffer( * to the commit and write it into the given repository. * * @param out the resulting commit id + * @param repo the repository to create the commit in. * @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. @@ -499,6 +610,7 @@ GIT_EXTERN(int) git_commit_create_with_signature( * * @param out Pointer to store the copy of the commit * @param source Original commit to copy + * @return 0 */ GIT_EXTERN(int) git_commit_dup(git_commit **out, git_commit *source); @@ -539,6 +651,25 @@ typedef int (*git_commit_create_cb)( const git_commit *parents[], void *payload); +/** An array of commits returned from the library */ +typedef struct git_commitarray { + git_commit *const *commits; + size_t count; +} git_commitarray; + +/** + * Free the commits contained in a commit array. This method should + * be called on `git_commitarray` objects that were provided by the + * library. Not doing so will result in a memory leak. + * + * This does not free the `git_commitarray` itself, since the library + * will never allocate that object directly itself. + * + * @param array The git_commitarray that contains commits to free + */ +GIT_EXTERN(void) git_commitarray_dispose(git_commitarray *array); + /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/common.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/common.h index 2ee8290..40a3903 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/common.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/common.h @@ -11,7 +11,9 @@ #include #ifdef __cplusplus + /** Start declarations in C mode for C++ compatibility */ # define GIT_BEGIN_DECL extern "C" { + /** End declarations in C mode */ # define GIT_END_DECL } #else /** Start declarations in C mode */ @@ -71,19 +73,19 @@ typedef size_t size_t; # 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 + * @brief Base platform functionality * @defgroup git_common Git common platform definitions * @ingroup Git + * + * Common platform functionality including introspecting libgit2 + * itself - information like how it was built, and the current + * running version. * @{ */ @@ -94,10 +96,10 @@ GIT_BEGIN_DECL * 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 ';' +#if (defined(_WIN32) && !defined(__CYGWIN__)) || defined(AMIGA) +# define GIT_PATH_LIST_SEPARATOR ';' #else -#define GIT_PATH_LIST_SEPARATOR ':' +# define GIT_PATH_LIST_SEPARATOR ':' #endif /** @@ -105,11 +107,6 @@ GIT_BEGIN_DECL */ #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. @@ -122,53 +119,91 @@ GIT_BEGIN_DECL GIT_EXTERN(int) git_libgit2_version(int *major, int *minor, int *rev); /** - * Combinations of these values describe the features with which libgit2 - * was compiled + * Return the prerelease state of the libgit2 library currently being + * used. For nightly builds during active development, this will be + * "alpha". Releases may have a "beta" or release candidate ("rc1", + * "rc2", etc) prerelease. For a final release, this function returns + * NULL. + * + * @return the name of the prerelease state or NULL + */ +GIT_EXTERN(const char *) git_libgit2_prerelease(void); + +/** + * Configurable features of libgit2; either optional settings (like + * threading), or features that can be enabled by one of a number of + * different backend "providers" (like HTTPS, which can be provided by + * OpenSSL, mbedTLS, or system libraries). */ 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), + /** + * libgit2 is thread-aware and can be used from multiple threads + * (as described in the documentation). + */ + GIT_FEATURE_THREADS = (1 << 0), + + /** HTTPS remotes */ + GIT_FEATURE_HTTPS = (1 << 1), + + /** SSH remotes */ + GIT_FEATURE_SSH = (1 << 2), + + /** Sub-second resolution in index timestamps */ + GIT_FEATURE_NSEC = (1 << 3), + + /** HTTP parsing; always available */ + GIT_FEATURE_HTTP_PARSER = (1 << 4), + + /** Regular expression support; always available */ + GIT_FEATURE_REGEX = (1 << 5), + + /** Internationalization support for filename translation */ + GIT_FEATURE_I18N = (1 << 6), + + /** NTLM support over HTTPS */ + GIT_FEATURE_AUTH_NTLM = (1 << 7), + + /** Kerberos (SPNEGO) authentication support over HTTPS */ + GIT_FEATURE_AUTH_NEGOTIATE = (1 << 8), + + /** zlib support; always available */ + GIT_FEATURE_COMPRESSION = (1 << 9), + + /** SHA1 object support; always available */ + GIT_FEATURE_SHA1 = (1 << 10), + + /** SHA256 object support */ + GIT_FEATURE_SHA256 = (1 << 11) } git_feature_t; /** * Query compile time options for libgit2. * * @return A combination of GIT_FEATURE_* values. + */ +GIT_EXTERN(int) git_libgit2_features(void); + +/** + * Query the backend details for the compile-time feature in libgit2. + * + * This will return the "backend" for the feature, which is useful for + * things like HTTPS or SSH support, that can have multiple backends + * that could be compiled in. * - * - 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. + * For example, when libgit2 is compiled with dynamic OpenSSL support, + * the feature backend will be `openssl-dynamic`. The feature backend + * names reflect the compilation options specified to the build system + * (though in all lower case). The backend _may_ be "builtin" for + * features that are provided by libgit2 itself. * - * - GIT_FEATURE_HTTPS - * Libgit2 supports the https:// protocol. This requires the openssl - * library to be found when compiling libgit2. + * If the feature is not supported by the library, this API returns + * `NULL`. * - * - GIT_FEATURE_SSH - * Libgit2 supports the SSH protocol for network operations. This requires - * the libssh2 library to be found when compiling libgit2 + * @param feature the feature to query details for + * @return the provider details, or NULL if the feature is not supported */ -GIT_EXTERN(int) git_libgit2_features(void); +GIT_EXTERN(const char *) git_libgit2_feature_backend( + git_feature_t feature); /** * Global library options @@ -211,7 +246,18 @@ typedef enum { GIT_OPT_SET_ODB_PACKED_PRIORITY, GIT_OPT_SET_ODB_LOOSE_PRIORITY, GIT_OPT_GET_EXTENSIONS, - GIT_OPT_SET_EXTENSIONS + GIT_OPT_SET_EXTENSIONS, + GIT_OPT_GET_OWNER_VALIDATION, + GIT_OPT_SET_OWNER_VALIDATION, + GIT_OPT_GET_HOMEDIR, + GIT_OPT_SET_HOMEDIR, + GIT_OPT_SET_SERVER_CONNECT_TIMEOUT, + GIT_OPT_GET_SERVER_CONNECT_TIMEOUT, + GIT_OPT_SET_SERVER_TIMEOUT, + GIT_OPT_GET_SERVER_TIMEOUT, + GIT_OPT_SET_USER_AGENT_PRODUCT, + GIT_OPT_GET_USER_AGENT_PRODUCT, + GIT_OPT_ADD_SSL_X509_CERT } git_libgit2_opt_t; /** @@ -316,15 +362,52 @@ typedef enum { * > - `path` is the location of a directory holding several * > certificates, one per file. * > + * > Calling `GIT_OPT_ADD_SSL_X509_CERT` may override the + * > data in `path`. + * > * > Either parameter may be `NULL`, but not both. * + * * opts(GIT_OPT_ADD_SSL_X509_CERT, const X509 *cert) + * + * > Add a raw X509 certificate into the SSL certs store. + * > This certificate is only used by libgit2 invocations + * > during the application lifetime and is not persisted + * > to disk. This certificate cannot be removed from the + * > application once is has been added. + * > + * > - `cert` is the raw X509 cert will be added to cert store. + * * * 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. + * > Set the value of the comment section of the User-Agent header. + * > This can be information about your product and its version. + * > By default this is "libgit2" followed by the libgit2 version. + * > + * > This value will be appended to User-Agent _product_, which + * > is typically set to "git/2.0". + * > + * > Set to the empty string ("") to not send any information in the + * > comment section, or set to NULL to restore the default. + * + * * 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_SET_USER_AGENT_PRODUCT, const char *user_agent_product) + * + * > Set the value of the product portion of the User-Agent header. + * > This defaults to "git/2.0", for compatibility with other git + * > clients. It is recommended to keep this as git/ for + * > compatibility with servers that do user-agent detection. * > - * > - `user_agent` is the value that will be delivered as the - * > User-Agent header on HTTP requests. + * > Set to the empty string ("") to not send any user-agent string, + * > or set to NULL to restore the default. + * + * * opts(GIT_OPT_GET_USER_AGENT_PRODUCT, git_buf *out) + * + * > Get the value of the User-Agent product header. + * > The User-Agent product is written to the `out` buffer. * * * opts(GIT_OPT_SET_WINDOWS_SHAREMODE, unsigned long value) * @@ -360,11 +443,6 @@ typedef enum { * > * > - `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, @@ -449,8 +527,43 @@ typedef enum { * > to support repositories with the `noop` extension but does want * > to support repositories with the `newext` extension. * + * opts(GIT_OPT_GET_OWNER_VALIDATION, int *enabled) + * > Gets the owner validation setting for repository + * > directories. + * + * opts(GIT_OPT_SET_OWNER_VALIDATION, int enabled) + * > Set that repository directories should be owned by the current + * > user. The default is to validate ownership. + * + * opts(GIT_OPT_GET_HOMEDIR, git_buf *out) + * > Gets the current user's home directory, as it will be used + * > for file lookups. The path is written to the `out` buffer. + * + * opts(GIT_OPT_SET_HOMEDIR, const char *path) + * > Sets the directory used as the current user's home directory, + * > for file lookups. + * > + * > - `path` directory of home directory. + * + * opts(GIT_OPT_GET_SERVER_CONNECT_TIMEOUT, int *timeout) + * > Gets the timeout (in milliseconds) to attempt connections to + * > a remote server. + * + * opts(GIT_OPT_SET_SERVER_CONNECT_TIMEOUT, int timeout) + * > Sets the timeout (in milliseconds) to attempt connections to + * > a remote server. Set to 0 to use the system default. Note that + * > this may not be able to be configured longer than the system + * > default, typically 75 seconds. + * + * opts(GIT_OPT_GET_SERVER_TIMEOUT, int *timeout) + * > Gets the timeout (in milliseconds) for reading from and writing + * > to a remote server. + * + * opts(GIT_OPT_SET_SERVER_TIMEOUT, int timeout) + * > Sets the timeout (in milliseconds) for reading from and writing + * > to a remote server. Set to 0 to use the system default. + * * @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, ...); diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/config.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/config.h index 7c8e388..f9c2667 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/config.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/config.h @@ -13,78 +13,134 @@ /** * @file git2/config.h - * @brief Git config management routines + * @brief Per-repository, per-user or per-system configuration * @defgroup git_config Git config management routines * @ingroup Git + * + * Git configuration affects the operation of the version control + * system, and can be specified on a per-repository basis, in user + * settings, or at the system level. * @{ */ 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. + * (from higher to lower) when reading or searching for config entries + * in git.git. Meaning that for the same key, the configuration in + * the local configuration is preferred over the configuration in + * the system configuration file. + * + * Callers can add their own custom configuration, beginning at the + * `GIT_CONFIG_LEVEL_APP` level. + * + * Writes, by default, occur in the highest priority level backend + * that is writable. This ordering can be overridden with + * `git_config_set_writeorder`. * * git_config_open_default() and git_repository_config() honor those * priority levels as well. + * + * @see git_config_open_default + * @see git_repository_config */ typedef enum { - /** System-wide on Windows, for compatibility with portable git */ + /** + * System-wide on Windows, for compatibility with "Portable Git". + */ GIT_CONFIG_LEVEL_PROGRAMDATA = 1, - /** System-wide configuration file; /etc/gitconfig on Linux systems */ + /** + * System-wide configuration file; `/etc/gitconfig` on Linux. + */ GIT_CONFIG_LEVEL_SYSTEM = 2, - /** XDG compatible configuration file; typically ~/.config/git/config */ + /** + * XDG compatible configuration file; typically + * `~/.config/git/config`. + */ GIT_CONFIG_LEVEL_XDG = 3, - /** User-specific configuration file (also called Global configuration - * file); typically ~/.gitconfig + /** + * Global configuration file is the user-specific configuration; + * typically `~/.gitconfig`. */ GIT_CONFIG_LEVEL_GLOBAL = 4, - /** Repository specific configuration file; $WORK_DIR/.git/config on - * non-bare repos + /** + * Local configuration, the repository-specific configuration file; + * typically `$GIT_DIR/config`. */ GIT_CONFIG_LEVEL_LOCAL = 5, - /** Application specific configuration file; freely defined by applications + /** + * Worktree-specific configuration; typically + * `$GIT_DIR/config.worktree`. */ - GIT_CONFIG_LEVEL_APP = 6, + GIT_CONFIG_LEVEL_WORKTREE = 6, - /** Represents the highest level available config file (i.e. the most - * specific config file available that actually is loaded) + /** + * Application-specific configuration file. Callers into libgit2 + * can add their own configuration beginning at this level. + */ + GIT_CONFIG_LEVEL_APP = 7, + + /** + * Not a configuration level; callers can use this value when + * querying configuration levels to specify that they want to + * have data from the highest-level currently configuration. + * This can be used to indicate that callers want the most + * specific config file available that actually is loaded. */ - GIT_CONFIG_HIGHEST_LEVEL = -1, + 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 */ + /** Name of the configuration entry (normalized). */ + const char *name; + + /** Literal (string) value of the entry. */ + const char *value; + + /** The type of backend that this entry exists in (eg, "file"). */ + const char *backend_type; + + /** + * The path to the origin of this entry. For config files, this is + * the path to the file. + */ + const char *origin_path; + + /** Depth of includes where this variable was found. */ + unsigned int include_depth; + + /** Configuration level for the file this was found in. */ + git_config_level_t level; } git_config_entry; /** - * Free a config entry + * Free a config entry. + * + * @param entry The entry to free. */ -GIT_EXTERN(void) git_config_entry_free(git_config_entry *); +GIT_EXTERN(void) git_config_entry_free(git_config_entry *entry); /** - * A config enumeration callback + * A config enumeration callback. * * @param entry the entry currently being enumerated * @param payload a user-specified pointer + * @return non-zero to terminate the iteration. */ typedef int GIT_CALLBACK(git_config_foreach_cb)(const git_config_entry *entry, void *payload); /** - * An opaque structure for a configuration iterator + * An opaque structure for a configuration iterator. */ typedef struct git_config_iterator git_config_iterator; @@ -119,7 +175,7 @@ typedef struct { * global configuration file. * * This method will not guess the path to the xdg compatible - * config file (.config/git/config). + * 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`. @@ -146,8 +202,8 @@ 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. + * 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 @@ -158,7 +214,7 @@ 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. + * 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 @@ -209,9 +265,9 @@ GIT_EXTERN(int) git_config_new(git_config **out); * @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 + * @param force replace config file at the given priority level * @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 @@ -269,9 +325,26 @@ GIT_EXTERN(int) git_config_open_level( * * @param out pointer in which to store the config object * @param config the config object in which to look + * @return 0 or an error code. */ GIT_EXTERN(int) git_config_open_global(git_config **out, git_config *config); +/** + * Set the write order for configuration backends. By default, the + * write ordering does not match the read ordering; for example, the + * worktree configuration is a high-priority for reading, but is not + * written to unless explicitly chosen. + * + * @param cfg the configuration to change write order of + * @param levels the ordering of levels for writing + * @param len the length of the levels array + * @return 0 or an error code + */ +GIT_EXTERN(int) git_config_set_writeorder( + git_config *cfg, + git_config_level_t *levels, + size_t len); + /** * Create a snapshot of the configuration * @@ -422,6 +495,7 @@ GIT_EXTERN(int) git_config_get_string_buf(git_buf *out, const git_config *cfg, c * 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 + * @return 0 or an error code. */ 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); @@ -437,14 +511,15 @@ GIT_EXTERN(int) git_config_get_multivar_foreach(const git_config *cfg, const cha * @param name the variable's name * @param regexp regular expression to filter which variables we're * interested in. Use NULL to indicate all + * @return 0 or an error code. */ 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. + * The pointers returned by this function are valid until the next call + * to `git_config_next` or until the iterator is freed. * * @param entry pointer to store the entry * @param iter the iterator @@ -515,6 +590,7 @@ GIT_EXTERN(int) git_config_set_string(git_config *cfg, const char *name, const c * @param name the variable's name * @param regexp a regular expression to indicate which values to replace * @param value the new value. + * @return 0 or an error code. */ GIT_EXTERN(int) git_config_set_multivar(git_config *cfg, const char *name, const char *regexp, const char *value); @@ -524,6 +600,7 @@ GIT_EXTERN(int) git_config_set_multivar(git_config *cfg, const char *name, const * * @param cfg the configuration * @param name the variable to delete + * @return 0 or an error code. */ GIT_EXTERN(int) git_config_delete_entry(git_config *cfg, const char *name); @@ -568,7 +645,8 @@ GIT_EXTERN(int) git_config_foreach( * `git_config_iterator_free` when done. * * @param out pointer to store the iterator - * @param cfg where to ge the variables from + * @param cfg where to get the variables from + * @return 0 or an error code. */ GIT_EXTERN(int) git_config_iterator_new(git_config_iterator **out, const git_config *cfg); @@ -585,6 +663,7 @@ GIT_EXTERN(int) git_config_iterator_new(git_config_iterator **out, const git_con * @param out pointer to store the iterator * @param cfg where to ge the variables from * @param regexp regular expression to match the names + * @return 0 or an error code. */ GIT_EXTERN(int) git_config_iterator_glob_new(git_config_iterator **out, const git_config *cfg, const char *regexp); @@ -662,6 +741,7 @@ GIT_EXTERN(int) git_config_get_mapped( * @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 + * @return 0 or an error code. */ GIT_EXTERN(int) git_config_lookup_map_value( int *out, @@ -678,6 +758,7 @@ GIT_EXTERN(int) git_config_lookup_map_value( * * @param out place to store the result of the parsing * @param value value to parse + * @return 0 or an error code. */ GIT_EXTERN(int) git_config_parse_bool(int *out, const char *value); @@ -690,6 +771,7 @@ GIT_EXTERN(int) git_config_parse_bool(int *out, const char *value); * * @param out place to store the result of the parsing * @param value value to parse + * @return 0 or an error code. */ GIT_EXTERN(int) git_config_parse_int32(int32_t *out, const char *value); @@ -702,6 +784,7 @@ GIT_EXTERN(int) git_config_parse_int32(int32_t *out, const char *value); * * @param out place to store the result of the parsing * @param value value to parse + * @return 0 or an error code. */ GIT_EXTERN(int) git_config_parse_int64(int64_t *out, const char *value); @@ -717,6 +800,7 @@ GIT_EXTERN(int) git_config_parse_int64(int64_t *out, const char *value); * * @param out placae to store the result of parsing * @param value the path to evaluate + * @return 0 or an error code. */ GIT_EXTERN(int) git_config_parse_path(git_buf *out, const char *value); @@ -735,6 +819,7 @@ GIT_EXTERN(int) git_config_parse_path(git_buf *out, const char *value); * @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 + * @return 0 or an error code. */ GIT_EXTERN(int) git_config_backend_foreach_match( git_config_backend *backend, @@ -763,4 +848,5 @@ GIT_EXTERN(int) git_config_lock(git_transaction **tx, git_config *cfg); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/credential.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/credential.h index 9426a6e..33755ca 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/credential.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/credential.h @@ -11,9 +11,12 @@ /** * @file git2/credential.h - * @brief Git authentication & credential management + * @brief Authentication and credential management * @defgroup git_credential Authentication & credential management * @ingroup Git + * + * Credentials specify how to authenticate to a remote system + * over HTTPS or SSH. * @{ */ GIT_BEGIN_DECL @@ -75,7 +78,7 @@ typedef enum { * * @see git_credential_ssh_key_memory_new */ - GIT_CREDENTIAL_SSH_MEMORY = (1u << 6), + GIT_CREDENTIAL_SSH_MEMORY = (1u << 6) } git_credential_t; /** @@ -119,7 +122,7 @@ typedef struct git_credential_ssh_custom git_credential_ssh_custom; * 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[out] 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. @@ -241,6 +244,18 @@ typedef struct _LIBSSH2_USERAUTH_KBDINT_PROMPT LIBSSH2_USERAUTH_KBDINT_PROMPT; typedef struct _LIBSSH2_USERAUTH_KBDINT_RESPONSE LIBSSH2_USERAUTH_KBDINT_RESPONSE; #endif +/** + * Callback for interactive SSH credentials. + * + * @param name the name + * @param name_len the length of the name + * @param instruction the authentication instruction + * @param instruction_len the length of the instruction + * @param num_prompts the number of prompts + * @param prompts the prompts + * @param responses the responses + * @param abstract the abstract + */ typedef void GIT_CALLBACK(git_credential_ssh_interactive_cb)( const char *name, int name_len, @@ -254,6 +269,7 @@ typedef void GIT_CALLBACK(git_credential_ssh_interactive_cb)( * Create a new ssh keyboard-interactive based 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 prompt_callback The callback method used for prompts. * @param payload Additional data to pass to the callback. @@ -277,6 +293,18 @@ GIT_EXTERN(int) git_credential_ssh_key_from_agent( git_credential **out, const char *username); +/** + * Callback for credential signing. + * + * @param session the libssh2 session + * @param sig the signature + * @param sig_len the length of the signature + * @param data the data + * @param data_len the length of the data + * @param abstract the abstract + * @return 0 for success, < 0 to indicate an error, > 0 to indicate + * no credential was acquired + */ typedef int GIT_CALLBACK(git_credential_sign_cb)( LIBSSH2_SESSION *session, unsigned char **sig, size_t *sig_len, @@ -311,4 +339,5 @@ GIT_EXTERN(int) git_credential_ssh_custom_new( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/credential_helpers.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/credential_helpers.h index 9a70ecb..706558d 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/credential_helpers.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/credential_helpers.h @@ -39,6 +39,7 @@ typedef struct git_credential_userpass_payload { * @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*`.) + * @return 0 or an error code. */ GIT_EXTERN(int) git_credential_userpass( git_credential **out, @@ -49,4 +50,5 @@ GIT_EXTERN(int) git_credential_userpass( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/deprecated.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/deprecated.h index 37b9fa0..b8b0238 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/deprecated.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/deprecated.h @@ -52,7 +52,7 @@ /** * @file git2/deprecated.h - * @brief libgit2 deprecated functions and values + * @brief Deprecated functions and values * @ingroup Git * @{ */ @@ -69,15 +69,23 @@ GIT_BEGIN_DECL */ /**@{*/ +/** @deprecated use GIT_ATTR_VALUE_UNSPECIFIED */ #define GIT_ATTR_UNSPECIFIED_T GIT_ATTR_VALUE_UNSPECIFIED +/** @deprecated use GIT_ATTR_VALUE_TRUE */ #define GIT_ATTR_TRUE_T GIT_ATTR_VALUE_TRUE +/** @deprecated use GIT_ATTR_VALUE_FALSE */ #define GIT_ATTR_FALSE_T GIT_ATTR_VALUE_FALSE +/** @deprecated use GIT_ATTR_VALUE_STRING */ #define GIT_ATTR_VALUE_T GIT_ATTR_VALUE_STRING +/** @deprecated use GIT_ATTR_IS_TRUE */ #define GIT_ATTR_TRUE(attr) GIT_ATTR_IS_TRUE(attr) +/** @deprecated use GIT_ATTR_IS_FALSE */ #define GIT_ATTR_FALSE(attr) GIT_ATTR_IS_FALSE(attr) +/** @deprecated use GIT_ATTR_IS_UNSPECIFIED */ #define GIT_ATTR_UNSPECIFIED(attr) GIT_ATTR_IS_UNSPECIFIED(attr) +/** @deprecated use git_attr_value_t */ typedef git_attr_value_t git_attr_t; /**@}*/ @@ -93,6 +101,7 @@ typedef git_attr_value_t git_attr_t; */ /**@{*/ +/** @deprecated use GIT_BLOB_FILTER_ATTRIBUTES_FROM_HEAD */ #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); @@ -285,11 +294,16 @@ typedef int (*git_commit_signing_cb)( */ /**@{*/ +/** @deprecated use GIT_CONFIGMAP_FALSE */ #define GIT_CVAR_FALSE GIT_CONFIGMAP_FALSE +/** @deprecated use GIT_CONFIGMAP_TRUE */ #define GIT_CVAR_TRUE GIT_CONFIGMAP_TRUE +/** @deprecated use GIT_CONFIGMAP_INT32 */ #define GIT_CVAR_INT32 GIT_CONFIGMAP_INT32 +/** @deprecated use GIT_CONFIGMAP_STRING */ #define GIT_CVAR_STRING GIT_CONFIGMAP_STRING +/** @deprecated use git_cvar_map */ typedef git_configmap git_cvar_map; /**@}*/ @@ -313,12 +327,13 @@ typedef enum { 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_EXCLUDE_SUBJECT_PATCH_MARKER = (1 << 0) } git_diff_format_email_flags_t; /** * Options for controlling the formatting of the generated e-mail. + * + * @deprecated use `git_email_create_options` */ typedef struct { unsigned int version; @@ -345,7 +360,9 @@ typedef struct { const git_signature *author; } git_diff_format_email_options; +/** @deprecated use `git_email_create_options` */ #define GIT_DIFF_FORMAT_EMAIL_OPTIONS_VERSION 1 +/** @deprecated use `git_email_create_options` */ #define GIT_DIFF_FORMAT_EMAIL_OPTIONS_INIT {GIT_DIFF_FORMAT_EMAIL_OPTIONS_VERSION, 0, 1, 1, NULL, NULL, NULL, NULL} /** @@ -401,40 +418,76 @@ GIT_EXTERN(int) git_diff_format_email_options_init( */ /**@{*/ +/** @deprecated use `GIT_ERROR_NONE` */ #define GITERR_NONE GIT_ERROR_NONE +/** @deprecated use `GIT_ERROR_NOMEMORY` */ #define GITERR_NOMEMORY GIT_ERROR_NOMEMORY +/** @deprecated use `GIT_ERROR_OS` */ #define GITERR_OS GIT_ERROR_OS +/** @deprecated use `GIT_ERROR_INVALID` */ #define GITERR_INVALID GIT_ERROR_INVALID +/** @deprecated use `GIT_ERROR_REFERENCE` */ #define GITERR_REFERENCE GIT_ERROR_REFERENCE +/** @deprecated use `GIT_ERROR_ZLIB` */ #define GITERR_ZLIB GIT_ERROR_ZLIB +/** @deprecated use `GIT_ERROR_REPOSITORY` */ #define GITERR_REPOSITORY GIT_ERROR_REPOSITORY +/** @deprecated use `GIT_ERROR_CONFIG` */ #define GITERR_CONFIG GIT_ERROR_CONFIG +/** @deprecated use `GIT_ERROR_REGEX` */ #define GITERR_REGEX GIT_ERROR_REGEX +/** @deprecated use `GIT_ERROR_ODB` */ #define GITERR_ODB GIT_ERROR_ODB +/** @deprecated use `GIT_ERROR_INDEX` */ #define GITERR_INDEX GIT_ERROR_INDEX +/** @deprecated use `GIT_ERROR_OBJECT` */ #define GITERR_OBJECT GIT_ERROR_OBJECT +/** @deprecated use `GIT_ERROR_NET` */ #define GITERR_NET GIT_ERROR_NET +/** @deprecated use `GIT_ERROR_TAG` */ #define GITERR_TAG GIT_ERROR_TAG +/** @deprecated use `GIT_ERROR_TREE` */ #define GITERR_TREE GIT_ERROR_TREE +/** @deprecated use `GIT_ERROR_INDEXER` */ #define GITERR_INDEXER GIT_ERROR_INDEXER +/** @deprecated use `GIT_ERROR_SSL` */ #define GITERR_SSL GIT_ERROR_SSL +/** @deprecated use `GIT_ERROR_SUBMODULE` */ #define GITERR_SUBMODULE GIT_ERROR_SUBMODULE +/** @deprecated use `GIT_ERROR_THREAD` */ #define GITERR_THREAD GIT_ERROR_THREAD +/** @deprecated use `GIT_ERROR_STASH` */ #define GITERR_STASH GIT_ERROR_STASH +/** @deprecated use `GIT_ERROR_CHECKOUT` */ #define GITERR_CHECKOUT GIT_ERROR_CHECKOUT +/** @deprecated use `GIT_ERROR_FETCHHEAD` */ #define GITERR_FETCHHEAD GIT_ERROR_FETCHHEAD +/** @deprecated use `GIT_ERROR_MERGE` */ #define GITERR_MERGE GIT_ERROR_MERGE +/** @deprecated use `GIT_ERROR_SSH` */ #define GITERR_SSH GIT_ERROR_SSH +/** @deprecated use `GIT_ERROR_FILTER` */ #define GITERR_FILTER GIT_ERROR_FILTER +/** @deprecated use `GIT_ERROR_REVERT` */ #define GITERR_REVERT GIT_ERROR_REVERT +/** @deprecated use `GIT_ERROR_CALLBACK` */ #define GITERR_CALLBACK GIT_ERROR_CALLBACK +/** @deprecated use `GIT_ERROR_CHERRYPICK` */ #define GITERR_CHERRYPICK GIT_ERROR_CHERRYPICK +/** @deprecated use `GIT_ERROR_DESCRIBE` */ #define GITERR_DESCRIBE GIT_ERROR_DESCRIBE +/** @deprecated use `GIT_ERROR_REBASE` */ #define GITERR_REBASE GIT_ERROR_REBASE +/** @deprecated use `GIT_ERROR_FILESYSTEM` */ #define GITERR_FILESYSTEM GIT_ERROR_FILESYSTEM +/** @deprecated use `GIT_ERROR_PATCH` */ #define GITERR_PATCH GIT_ERROR_PATCH +/** @deprecated use `GIT_ERROR_WORKTREE` */ #define GITERR_WORKTREE GIT_ERROR_WORKTREE +/** @deprecated use `GIT_ERROR_SHA1` */ #define GITERR_SHA1 GIT_ERROR_SHA1 +/** @deprecated use `GIT_ERROR_SHA` */ +#define GIT_ERROR_SHA1 GIT_ERROR_SHA /** * Return the last `git_error` object that was generated for the @@ -498,37 +551,63 @@ GIT_EXTERN(void) giterr_set_oom(void); */ /**@{*/ +/* The git_idxentry_extended_flag_t enum */ +/** @deprecated use `GIT_INDEX_ENTRY_NAMEMASK` */ #define GIT_IDXENTRY_NAMEMASK GIT_INDEX_ENTRY_NAMEMASK +/** @deprecated use `GIT_INDEX_ENTRY_STAGEMASK` */ #define GIT_IDXENTRY_STAGEMASK GIT_INDEX_ENTRY_STAGEMASK +/** @deprecated use `GIT_INDEX_ENTRY_STAGESHIFT` */ #define GIT_IDXENTRY_STAGESHIFT GIT_INDEX_ENTRY_STAGESHIFT /* The git_indxentry_flag_t enum */ +/** @deprecated use `GIT_INDEX_ENTRY_EXTENDED` */ #define GIT_IDXENTRY_EXTENDED GIT_INDEX_ENTRY_EXTENDED +/** @deprecated use `GIT_INDEX_ENTRY_VALID` */ #define GIT_IDXENTRY_VALID GIT_INDEX_ENTRY_VALID +/** @deprecated use `GIT_INDEX_ENTRY_STAGE` */ #define GIT_IDXENTRY_STAGE(E) GIT_INDEX_ENTRY_STAGE(E) +/** @deprecated use `GIT_INDEX_ENTRY_STAGE_SET` */ #define GIT_IDXENTRY_STAGE_SET(E,S) GIT_INDEX_ENTRY_STAGE_SET(E,S) /* The git_idxentry_extended_flag_t enum */ +/** @deprecated use `GIT_INDEX_ENTRY_INTENT_TO_ADD` */ #define GIT_IDXENTRY_INTENT_TO_ADD GIT_INDEX_ENTRY_INTENT_TO_ADD +/** @deprecated use `GIT_INDEX_ENTRY_SKIP_WORKTREE` */ #define GIT_IDXENTRY_SKIP_WORKTREE GIT_INDEX_ENTRY_SKIP_WORKTREE +/** @deprecated use `GIT_INDEX_ENTRY_INTENT_TO_ADD | GIT_INDEX_ENTRY_SKIP_WORKTREE` */ #define GIT_IDXENTRY_EXTENDED_FLAGS (GIT_INDEX_ENTRY_INTENT_TO_ADD | GIT_INDEX_ENTRY_SKIP_WORKTREE) +/** @deprecated this value is not public */ #define GIT_IDXENTRY_EXTENDED2 (1 << 15) +/** @deprecated this value is not public */ #define GIT_IDXENTRY_UPDATE (1 << 0) +/** @deprecated this value is not public */ #define GIT_IDXENTRY_REMOVE (1 << 1) +/** @deprecated this value is not public */ #define GIT_IDXENTRY_UPTODATE (1 << 2) +/** @deprecated this value is not public */ #define GIT_IDXENTRY_ADDED (1 << 3) +/** @deprecated this value is not public */ #define GIT_IDXENTRY_HASHED (1 << 4) +/** @deprecated this value is not public */ #define GIT_IDXENTRY_UNHASHED (1 << 5) +/** @deprecated this value is not public */ #define GIT_IDXENTRY_WT_REMOVE (1 << 6) +/** @deprecated this value is not public */ #define GIT_IDXENTRY_CONFLICTED (1 << 7) +/** @deprecated this value is not public */ #define GIT_IDXENTRY_UNPACKED (1 << 8) +/** @deprecated this value is not public */ #define GIT_IDXENTRY_NEW_SKIP_WORKTREE (1 << 9) /* The git_index_capability_t enum */ +/** @deprecated use `GIT_INDEX_CAPABILITY_IGNORE_CASE` */ #define GIT_INDEXCAP_IGNORE_CASE GIT_INDEX_CAPABILITY_IGNORE_CASE +/** @deprecated use `GIT_INDEX_CAPABILITY_NO_FILEMODE` */ #define GIT_INDEXCAP_NO_FILEMODE GIT_INDEX_CAPABILITY_NO_FILEMODE +/** @deprecated use `GIT_INDEX_CAPABILITY_NO_SYMLINKS` */ #define GIT_INDEXCAP_NO_SYMLINKS GIT_INDEX_CAPABILITY_NO_SYMLINKS +/** @deprecated use `GIT_INDEX_CAPABILITY_FROM_OWNER` */ #define GIT_INDEXCAP_FROM_OWNER GIT_INDEX_CAPABILITY_FROM_OWNER GIT_EXTERN(int) git_index_add_frombuffer( @@ -548,17 +627,28 @@ GIT_EXTERN(int) git_index_add_frombuffer( */ /**@{*/ +/** @deprecate use `git_object_t` */ #define git_otype git_object_t +/** @deprecate use `GIT_OBJECT_ANY` */ #define GIT_OBJ_ANY GIT_OBJECT_ANY +/** @deprecate use `GIT_OBJECT_INVALID` */ #define GIT_OBJ_BAD GIT_OBJECT_INVALID +/** @deprecated this value is not public */ #define GIT_OBJ__EXT1 0 +/** @deprecate use `GIT_OBJECT_COMMIT` */ #define GIT_OBJ_COMMIT GIT_OBJECT_COMMIT +/** @deprecate use `GIT_OBJECT_TREE` */ #define GIT_OBJ_TREE GIT_OBJECT_TREE +/** @deprecate use `GIT_OBJECT_BLOB` */ #define GIT_OBJ_BLOB GIT_OBJECT_BLOB +/** @deprecate use `GIT_OBJECT_TAG` */ #define GIT_OBJ_TAG GIT_OBJECT_TAG +/** @deprecated this value is not public */ #define GIT_OBJ__EXT2 5 +/** @deprecate use `GIT_OBJECT_OFS_DELTA` */ #define GIT_OBJ_OFS_DELTA GIT_OBJECT_OFS_DELTA +/** @deprecate use `GIT_OBJECT_REF_DELTA` */ #define GIT_OBJ_REF_DELTA GIT_OBJECT_REF_DELTA /** @@ -610,17 +700,27 @@ GIT_EXTERN(int) git_remote_is_valid_name(const char *remote_name); /**@{*/ /** Basic type of any Git reference. */ +/** @deprecate use `git_reference_t` */ #define git_ref_t git_reference_t +/** @deprecate use `git_reference_format_t` */ #define git_reference_normalize_t git_reference_format_t +/** @deprecate use `GIT_REFERENCE_INVALID` */ #define GIT_REF_INVALID GIT_REFERENCE_INVALID +/** @deprecate use `GIT_REFERENCE_DIRECT` */ #define GIT_REF_OID GIT_REFERENCE_DIRECT +/** @deprecate use `GIT_REFERENCE_SYMBOLIC` */ #define GIT_REF_SYMBOLIC GIT_REFERENCE_SYMBOLIC +/** @deprecate use `GIT_REFERENCE_ALL` */ #define GIT_REF_LISTALL GIT_REFERENCE_ALL +/** @deprecate use `GIT_REFERENCE_FORMAT_NORMAL` */ #define GIT_REF_FORMAT_NORMAL GIT_REFERENCE_FORMAT_NORMAL +/** @deprecate use `GIT_REFERENCE_FORMAT_ALLOW_ONELEVEL` */ #define GIT_REF_FORMAT_ALLOW_ONELEVEL GIT_REFERENCE_FORMAT_ALLOW_ONELEVEL +/** @deprecate use `GIT_REFERENCE_FORMAT_REFSPEC_PATTERN` */ #define GIT_REF_FORMAT_REFSPEC_PATTERN GIT_REFERENCE_FORMAT_REFSPEC_PATTERN +/** @deprecate use `GIT_REFERENCE_FORMAT_REFSPEC_SHORTHAND` */ #define GIT_REF_FORMAT_REFSPEC_SHORTHAND GIT_REFERENCE_FORMAT_REFSPEC_SHORTHAND /** @@ -661,8 +761,11 @@ GIT_EXTERN(int) git_tag_create_frombuffer( typedef git_revspec_t git_revparse_mode_t; +/** @deprecated use `GIT_REVSPEC_SINGLE` */ #define GIT_REVPARSE_SINGLE GIT_REVSPEC_SINGLE +/** @deprecated use `GIT_REVSPEC_RANGE` */ #define GIT_REVPARSE_RANGE GIT_REVSPEC_RANGE +/** @deprecated use `GIT_REVSPEC_MERGE_BASE` */ #define GIT_REVPARSE_MERGE_BASE GIT_REVSPEC_MERGE_BASE /**@}*/ @@ -691,14 +794,22 @@ 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; +/** @deprecated use `git_credential_t` */ #define git_credtype_t git_credential_t +/** @deprecated use `GIT_CREDENTIAL_USERPASS_PLAINTEXT` */ #define GIT_CREDTYPE_USERPASS_PLAINTEXT GIT_CREDENTIAL_USERPASS_PLAINTEXT +/** @deprecated use `GIT_CREDENTIAL_SSH_KEY` */ #define GIT_CREDTYPE_SSH_KEY GIT_CREDENTIAL_SSH_KEY +/** @deprecated use `GIT_CREDENTIAL_SSH_CUSTOM` */ #define GIT_CREDTYPE_SSH_CUSTOM GIT_CREDENTIAL_SSH_CUSTOM +/** @deprecated use `GIT_CREDENTIAL_DEFAULT` */ #define GIT_CREDTYPE_DEFAULT GIT_CREDENTIAL_DEFAULT +/** @deprecated use `GIT_CREDENTIAL_SSH_INTERACTIVE` */ #define GIT_CREDTYPE_SSH_INTERACTIVE GIT_CREDENTIAL_SSH_INTERACTIVE +/** @deprecated use `GIT_CREDENTIAL_USERNAME` */ #define GIT_CREDTYPE_USERNAME GIT_CREDENTIAL_USERNAME +/** @deprecated use `GIT_CREDENTIAL_SSH_MEMORY` */ #define GIT_CREDTYPE_SSH_MEMORY GIT_CREDENTIAL_SSH_MEMORY GIT_EXTERN(void) git_cred_free(git_credential *cred); @@ -775,6 +886,15 @@ typedef git_trace_cb git_trace_callback; */ /**@{*/ +#ifndef GIT_EXPERIMENTAL_SHA256 +/** Deprecated OID "raw size" definition */ +# define GIT_OID_RAWSZ GIT_OID_SHA1_SIZE +/** Deprecated OID "hex size" definition */ +# define GIT_OID_HEXSZ GIT_OID_SHA1_HEXSIZE +/** Deprecated OID "hex zero" definition */ +# define GIT_OID_HEX_ZERO GIT_OID_SHA1_HEXZERO +#endif + GIT_EXTERN(int) git_oid_iszero(const git_oid *id); /**@}*/ @@ -884,6 +1004,24 @@ GIT_EXTERN(void) git_strarray_free(git_strarray *array); /**@}*/ +/** @name Deprecated Version Constants + * + * These constants are retained for backward compatibility. The newer + * versions of these constants should be preferred in all new code. + * + * There is no plan to remove these backward compatibility constants at + * this time. + */ +/**@{*/ + +#define LIBGIT2_VER_MAJOR LIBGIT2_VERSION_MAJOR +#define LIBGIT2_VER_MINOR LIBGIT2_VERSION_MINOR +#define LIBGIT2_VER_REVISION LIBGIT2_VERSION_REVISION +#define LIBGIT2_VER_PATCH LIBGIT2_VERSION_PATCH +#define LIBGIT2_VER_PRERELEASE LIBGIT2_VERSION_PRERELEASE + +/**@}*/ + /** @name Deprecated Options Initialization Functions * * These functions are retained for backward compatibility. The newer diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/describe.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/describe.h index 1d2ca14..938c470 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/describe.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/describe.h @@ -13,10 +13,14 @@ /** * @file git2/describe.h - * @brief Git describing routines + * @brief Describe a commit in reference to tags * @defgroup git_describe Git describing routines * @ingroup Git * @{ + * + * Describe a commit, showing information about how the current commit + * relates to the tags. This can be useful for showing how the current + * commit has changed from a particular tagged version of the repository. */ GIT_BEGIN_DECL @@ -30,7 +34,7 @@ GIT_BEGIN_DECL typedef enum { GIT_DESCRIBE_DEFAULT, GIT_DESCRIBE_TAGS, - GIT_DESCRIBE_ALL, + GIT_DESCRIBE_ALL } git_describe_strategy_t; /** @@ -60,10 +64,15 @@ typedef struct git_describe_options { int show_commit_oid_as_fallback; } git_describe_options; +/** Default maximum candidate tags */ #define GIT_DESCRIBE_DEFAULT_MAX_CANDIDATES_TAGS 10 +/** Default abbreviated size */ #define GIT_DESCRIBE_DEFAULT_ABBREVIATED_SIZE 7 +/** Current version for the `git_describe_options` structure */ #define GIT_DESCRIBE_OPTIONS_VERSION 1 + +/** Static constructor for `git_describe_options` */ #define GIT_DESCRIBE_OPTIONS_INIT { \ GIT_DESCRIBE_OPTIONS_VERSION, \ GIT_DESCRIBE_DEFAULT_MAX_CANDIDATES_TAGS, \ @@ -110,7 +119,10 @@ typedef struct { const char *dirty_suffix; } git_describe_format_options; +/** Current version for the `git_describe_format_options` structure */ #define GIT_DESCRIBE_FORMAT_OPTIONS_VERSION 1 + +/** Static constructor for `git_describe_format_options` */ #define GIT_DESCRIBE_FORMAT_OPTIONS_INIT { \ GIT_DESCRIBE_FORMAT_OPTIONS_VERSION, \ GIT_DESCRIBE_DEFAULT_ABBREVIATED_SIZE, \ @@ -142,6 +154,7 @@ typedef struct git_describe_result git_describe_result; * you're done with it. * @param committish a committish to describe * @param opts the lookup options (or NULL for defaults) + * @return 0 or an error code. */ GIT_EXTERN(int) git_describe_commit( git_describe_result **result, @@ -152,13 +165,14 @@ GIT_EXTERN(int) git_describe_commit( * 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 + * worktree. After performing 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) + * @return 0 or an error code. */ GIT_EXTERN(int) git_describe_workdir( git_describe_result **out, @@ -172,6 +186,7 @@ GIT_EXTERN(int) git_describe_workdir( * @param result the result from `git_describe_commit()` or * `git_describe_workdir()`. * @param opts the formatting options (or NULL for defaults) + * @return 0 or an error code. */ GIT_EXTERN(int) git_describe_format( git_buf *out, @@ -180,6 +195,8 @@ GIT_EXTERN(int) git_describe_format( /** * Free the describe result. + * + * @param result The result to free. */ GIT_EXTERN(void) git_describe_result_free(git_describe_result *result); diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/diff.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/diff.h index a14c019..b12e8ab 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/diff.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/diff.h @@ -15,7 +15,7 @@ /** * @file git2/diff.h - * @brief Git tree and file differencing routines. + * @brief Indicate the differences between two versions of the repository * @ingroup Git * @{ */ @@ -170,7 +170,7 @@ typedef enum { /** 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_SHOW_BINARY = (1u << 30) } git_diff_option_t; /** @@ -208,6 +208,7 @@ typedef enum { 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_VALID_SIZE = (1u << 4) /**< file size value is known correct */ } git_diff_flag_t; /** @@ -231,7 +232,7 @@ typedef enum { 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_CONFLICTED = 10 /**< entry in the index is conflicted */ } git_delta_t; /** @@ -273,7 +274,7 @@ typedef struct { /** * Represents the known length of the `id` field, when - * converted to a hex string. It is generally `GIT_OID_HEXSZ`, unless this + * converted to a hex string. It is generally `GIT_OID_SHA1_HEXSIZE`, unless this * delta was created from reading a patch file, in which case it may be * abbreviated to something reasonable, like 7 characters. */ @@ -341,6 +342,12 @@ typedef struct { * diff process continues. * - returns 0, the delta is inserted into the diff, and the diff process * continues. + * + * @param diff_so_far the diff structure as it currently exists + * @param delta_to_add the delta that is to be added + * @param matched_pathspec the pathspec + * @param payload the user-specified callback payload + * @return 0 on success, 1 to skip this delta, or an error code */ typedef int GIT_CALLBACK(git_diff_notify_cb)( const git_diff *diff_so_far, @@ -356,7 +363,8 @@ typedef int GIT_CALLBACK(git_diff_notify_cb)( * @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. + * @param payload the user-specified callback payload + * @return 0 or an error code */ typedef int GIT_CALLBACK(git_diff_progress_cb)( const git_diff *diff_so_far, @@ -420,6 +428,22 @@ typedef struct { */ uint32_t interhunk_lines; + /** + * The object ID type to emit in diffs; this is used by functions + * that operate without a repository - namely `git_diff_buffers`, + * or `git_diff_blobs` and `git_diff_blob_to_buffer` when one blob + * is `NULL`. + * + * This may be omitted (set to `0`). If a repository is available, + * the object ID format of the repository will be used. If no + * repository is available then the default is `GIT_OID_SHA`. + * + * If this is specified and a repository is available, then the + * specified `oid_type` must match the repository's object ID + * format. + */ + git_oid_t oid_type; + /** * The abbreviation length to use when formatting object ids. * Defaults to the value of 'core.abbrev' from the config, or 7 if unset. @@ -446,10 +470,10 @@ typedef struct { const char *new_prefix; } git_diff_options; -/* The current version of the diff options structure */ +/** The current version of the diff options structure */ #define GIT_DIFF_OPTIONS_VERSION 1 -/* Stack initializer for diff options. Alternatively use +/** Stack initializer for diff options. Alternatively use * `git_diff_options_init` programmatic initialization. */ #define GIT_DIFF_OPTIONS_INIT \ @@ -475,12 +499,14 @@ GIT_EXTERN(int) git_diff_options_init( * @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 + * @return 0 or an error code */ typedef int GIT_CALLBACK(git_diff_file_cb)( const git_diff_delta *delta, float progress, void *payload); +/** Maximum size of the hunk header */ #define GIT_DIFF_HUNK_HEADER_SIZE 128 /** @@ -497,7 +523,7 @@ typedef enum { GIT_DIFF_BINARY_LITERAL, /** The binary data is the delta from one side to the other. */ - GIT_DIFF_BINARY_DELTA, + GIT_DIFF_BINARY_DELTA } git_diff_binary_t; /** The contents of one of the files in a binary diff. */ @@ -541,6 +567,11 @@ typedef struct { /** * When iterating over a diff, callback that will be made for * binary content within the diff. + * + * @param delta the delta + * @param binary the binary content + * @param payload the user-specified callback payload + * @return 0 or an error code */ typedef int GIT_CALLBACK(git_diff_binary_cb)( const git_diff_delta *delta, @@ -567,6 +598,11 @@ typedef struct { /** * When iterating over a diff, callback that will be made per hunk. + * + * @param delta the delta + * @param hunk the hunk + * @param payload the user-specified callback payload + * @return 0 or an error code */ typedef int GIT_CALLBACK(git_diff_hunk_cb)( const git_diff_delta *delta, @@ -628,6 +664,12 @@ typedef struct { * 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. + * + * @param delta the delta that contains the line + * @param hunk the hunk that contains the line + * @param line the line in the diff + * @param payload the user-specified callback payload + * @return 0 or an error code */ typedef int GIT_CALLBACK(git_diff_line_cb)( const git_diff_delta *delta, /**< delta that contains this data */ @@ -706,7 +748,7 @@ typedef enum { * 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_REMOVE_UNMODIFIED = (1u << 16) } git_diff_find_t; /** @@ -758,7 +800,7 @@ typedef struct { uint16_t copy_threshold; /** - * Treshold below which similar files will be split into a delete/add pair. + * Threshold 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; @@ -768,7 +810,7 @@ typedef struct { * * 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. + * Defaults to 1000. */ size_t rename_limit; @@ -785,7 +827,10 @@ typedef struct { git_diff_similarity_metric *metric; } git_diff_find_options; +/** Current version for the `git_diff_find_options` structure */ #define GIT_DIFF_FIND_OPTIONS_VERSION 1 + +/** Static constructor for `git_diff_find_options` */ #define GIT_DIFF_FIND_OPTIONS_INIT {GIT_DIFF_FIND_OPTIONS_VERSION} /** @@ -831,6 +876,7 @@ GIT_EXTERN(void) git_diff_free(git_diff *diff); * @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. + * @return 0 or an error code. */ GIT_EXTERN(int) git_diff_tree_to_tree( git_diff **diff, @@ -857,6 +903,7 @@ GIT_EXTERN(int) git_diff_tree_to_tree( * @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. + * @return 0 or an error code. */ GIT_EXTERN(int) git_diff_tree_to_index( git_diff **diff, @@ -884,6 +931,7 @@ GIT_EXTERN(int) git_diff_tree_to_index( * @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. + * @return 0 or an error code. */ GIT_EXTERN(int) git_diff_index_to_workdir( git_diff **diff, @@ -913,6 +961,7 @@ GIT_EXTERN(int) git_diff_index_to_workdir( * @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. + * @return 0 or an error code. */ GIT_EXTERN(int) git_diff_tree_to_workdir( git_diff **diff, @@ -932,6 +981,7 @@ GIT_EXTERN(int) git_diff_tree_to_workdir( * @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. + * @return 0 or an error code. */ GIT_EXTERN(int) git_diff_tree_to_workdir_with_index( git_diff **diff, @@ -950,6 +1000,7 @@ GIT_EXTERN(int) git_diff_tree_to_workdir_with_index( * @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. + * @return 0 or an error code. */ GIT_EXTERN(int) git_diff_index_to_index( git_diff **diff, @@ -970,6 +1021,7 @@ GIT_EXTERN(int) git_diff_index_to_index( * * @param onto Diff to merge into. * @param from Diff to merge. + * @return 0 or an error code. */ GIT_EXTERN(int) git_diff_merge( git_diff *onto, @@ -1107,7 +1159,7 @@ typedef enum { 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_PATCH_ID = 6u /**< git diff as used by git patch-id */ } git_diff_format_t; /** @@ -1145,9 +1197,8 @@ GIT_EXTERN(int) git_diff_to_buf( /**@}*/ - /* - * Misc + * Low-level file comparison, invoking callbacks per difference. */ /** @@ -1263,6 +1314,25 @@ GIT_EXTERN(int) git_diff_buffers( git_diff_line_cb line_cb, void *payload); +/* Patch file parsing. */ + +/** + * Options for parsing a diff / patch file. + */ +typedef struct { + unsigned int version; + git_oid_t oid_type; +} git_diff_parse_options; + +/** The current version of the diff parse options structure */ +#define GIT_DIFF_PARSE_OPTIONS_VERSION 1 + +/** Stack initializer for diff parse options. Alternatively use + * `git_diff_parse_options_init` programmatic initialization. + */ +#define GIT_DIFF_PARSE_OPTIONS_INIT \ + { GIT_DIFF_PARSE_OPTIONS_VERSION, GIT_OID_DEFAULT } + /** * Read the contents of a git patch file into a `git_diff` object. * @@ -1285,7 +1355,11 @@ GIT_EXTERN(int) git_diff_buffers( GIT_EXTERN(int) git_diff_from_buffer( git_diff **out, const char *content, - size_t content_len); + size_t content_len +#ifdef GIT_EXPERIMENTAL_SHA256 + , git_diff_parse_options *opts +#endif + ); /** * This is an opaque structure which is allocated by `git_diff_get_stats`. @@ -1311,13 +1385,13 @@ typedef enum { 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_INCLUDE_SUMMARY = (1u << 3) } git_diff_stats_format_t; /** * Accumulate diff statistics for all patches. * - * @param out Structure containg the diff statistics. + * @param out Structure containing the diff statistics. * @param diff A git_diff generated by one of the above functions. * @return 0 on success; non-zero on error */ @@ -1386,7 +1460,10 @@ typedef struct git_diff_patchid_options { unsigned int version; } git_diff_patchid_options; +/** Current version for the `git_diff_patchid_options` structure */ #define GIT_DIFF_PATCHID_OPTIONS_VERSION 1 + +/** Static constructor for `git_diff_patchid_options` */ #define GIT_DIFF_PATCHID_OPTIONS_INIT { GIT_DIFF_PATCHID_OPTIONS_VERSION } /** @@ -1424,8 +1501,7 @@ GIT_EXTERN(int) git_diff_patchid_options_init( */ GIT_EXTERN(int) git_diff_patchid(git_oid *out, git_diff *diff, git_diff_patchid_options *opts); -GIT_END_DECL - /** @} */ +GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/email.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/email.h index b56be5d..ad37e42 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/email.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/email.h @@ -8,10 +8,11 @@ #define INCLUDE_git_email_h__ #include "common.h" +#include "diff.h" /** * @file git2/email.h - * @brief Git email formatting and application routines. + * @brief Produce email-ready patches * @ingroup Git * @{ */ @@ -34,7 +35,7 @@ typedef enum { GIT_EMAIL_CREATE_ALWAYS_NUMBER = (1u << 1), /** Do not perform rename or similarity detection. */ - GIT_EMAIL_CREATE_NO_RENAMES = (1u << 2), + GIT_EMAIL_CREATE_NO_RENAMES = (1u << 2) } git_email_create_flags_t; /** @@ -70,11 +71,14 @@ typedef struct { size_t reroll_number; } git_email_create_options; -/* +/** Current version for the `git_email_create_options` structure */ +#define GIT_EMAIL_CREATE_OPTIONS_VERSION 1 + +/** Static constructor for `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, \ @@ -83,30 +87,6 @@ typedef struct { 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. @@ -114,14 +94,14 @@ GIT_EXTERN(int) git_email_create_from_diff( * @param out buffer to store the e-mail patch in * @param commit commit to create a patch for * @param opts email creation options + * @return 0 or an error code */ GIT_EXTERN(int) git_email_create_from_commit( git_buf *out, git_commit *commit, const git_email_create_options *opts); -GIT_END_DECL - /** @} */ +GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/errors.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/errors.h index de51582..1141390 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/errors.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/errors.h @@ -11,7 +11,7 @@ /** * @file git2/errors.h - * @brief Git error handling routines and variables + * @brief Error handling routines and variables * @ingroup Git * @{ */ @@ -19,25 +19,32 @@ GIT_BEGIN_DECL /** Generic return codes */ typedef enum { - GIT_OK = 0, /**< No error */ + /** + * No error occurred; the call was successful. + */ + GIT_OK = 0, + + /** + * An error occurred; call `git_error_last` for more information. + */ + GIT_ERROR = -1, - 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_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_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_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 */ @@ -58,20 +65,17 @@ typedef enum { 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_EOWNER = -36, /**< The object is not owned by the current user */ + GIT_TIMEOUT = -37, /**< The operation timed out */ + GIT_EUNCHANGED = -38, /**< There were no changes */ + GIT_ENOTSUPPORTED = -39, /**< An option is not supported */ + GIT_EREADONLY = -40 /**< The subject is read-only */ } 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 + * Error classes are the category of error. They reflect the area of the + * code where an error occurred. */ -typedef struct { - char *message; - int klass; -} git_error; - -/** Error classes */ typedef enum { GIT_ERROR_NONE = 0, GIT_ERROR_NOMEMORY, @@ -106,59 +110,45 @@ typedef enum { GIT_ERROR_FILESYSTEM, GIT_ERROR_PATCH, GIT_ERROR_WORKTREE, - GIT_ERROR_SHA1, + GIT_ERROR_SHA, GIT_ERROR_HTTP, - GIT_ERROR_INTERNAL + GIT_ERROR_INTERNAL, + GIT_ERROR_GRAFTS } 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. + * Structure to store extra details of the last error that occurred. * - * @return A git_error object. - */ -GIT_EXTERN(const git_error *) git_error_last(void); - -/** - * Clear the last library error that occurred for this thread. + * 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 */ -GIT_EXTERN(void) git_error_clear(void); +typedef struct { + char *message; /**< The error message for the last error. */ + int klass; /**< The category of the last error. @type git_error_t */ +} git_error; /** - * Set the error message string for this thread. + * Return the last `git_error` object that was generated for the + * current 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 function will never return NULL. * - * This error message is stored in thread-local storage and only applies - * to the particular thread that this libgit2 call is made from. + * Callers should not rely on this to determine whether an error has + * occurred. For error checking, callers should examine the return + * codes of libgit2 functions. * - * @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. + * This call can only reliably report error messages when an error + * has occurred. (It may contain stale information if it is called + * after a different function that succeeds.) + * + * The memory for this object is managed by libgit2. It should not + * be freed. * - * 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. + * @return A pointer to a `git_error` object that describes the error. */ -GIT_EXTERN(void) git_error_set_oom(void); +GIT_EXTERN(const git_error *) git_error_last(void); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/experimental.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/experimental.h new file mode 100644 index 0000000..543f62f --- /dev/null +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/experimental.h @@ -0,0 +1,13 @@ +/* + * 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_experimental_h__ +#define INCLUDE_experimental_h__ + +/* #undef GIT_EXPERIMENTAL_SHA256 */ + +#endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/filter.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/filter.h index 0465e5b..cf6c5f5 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/filter.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/filter.h @@ -14,9 +14,15 @@ /** * @file git2/filter.h - * @brief Git filter APIs - * + * @brief Filters modify files during checkout or commit * @ingroup Git + * + * During checkout, filters update a file from a "canonical" state to + * a format appropriate for the local filesystem; during commit, filters + * produce the canonical state. For example, on Windows, the line ending + * filters _may_ take a canonical state (with Unix-style newlines) in + * the repository, and place the contents on-disk with Windows-style + * `\r\n` line endings. * @{ */ GIT_BEGIN_DECL @@ -32,7 +38,7 @@ 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_CLEAN = GIT_FILTER_TO_ODB } git_filter_mode_t; /** @@ -54,7 +60,7 @@ typedef enum { * 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_ATTRIBUTES_FROM_COMMIT = (1u << 3) } git_filter_flag_t; /** @@ -79,8 +85,11 @@ typedef struct { git_oid attr_commit_id; } git_filter_options; - #define GIT_FILTER_OPTIONS_VERSION 1 - #define GIT_FILTER_OPTIONS_INIT {GIT_FILTER_OPTIONS_VERSION} +/** Current version for the `git_filter_options` structure */ +#define GIT_FILTER_OPTIONS_VERSION 1 + +/** Static constructor for `git_filter_options` */ +#define GIT_FILTER_OPTIONS_INIT {GIT_FILTER_OPTIONS_VERSION} /** * A filter that can transform file data @@ -196,6 +205,7 @@ GIT_EXTERN(int) git_filter_list_apply_to_buffer( * @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 + * @return 0 or an error code. */ GIT_EXTERN(int) git_filter_list_apply_to_file( git_buf *out, @@ -209,6 +219,7 @@ GIT_EXTERN(int) git_filter_list_apply_to_file( * @param out buffer into which to store the filtered file * @param filters the list of filters to apply * @param blob the blob to filter + * @return 0 or an error code. */ GIT_EXTERN(int) git_filter_list_apply_to_blob( git_buf *out, @@ -222,6 +233,7 @@ GIT_EXTERN(int) git_filter_list_apply_to_blob( * @param buffer the buffer to filter * @param len the size of the buffer * @param target the stream into which the data will be written + * @return 0 or an error code. */ GIT_EXTERN(int) git_filter_list_stream_buffer( git_filter_list *filters, @@ -237,6 +249,7 @@ GIT_EXTERN(int) git_filter_list_stream_buffer( * @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 + * @return 0 or an error code. */ GIT_EXTERN(int) git_filter_list_stream_file( git_filter_list *filters, @@ -250,6 +263,7 @@ GIT_EXTERN(int) git_filter_list_stream_file( * @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 + * @return 0 or an error code. */ GIT_EXTERN(int) git_filter_list_stream_blob( git_filter_list *filters, @@ -263,9 +277,7 @@ GIT_EXTERN(int) git_filter_list_stream_blob( */ GIT_EXTERN(void) git_filter_list_free(git_filter_list *filters); - -GIT_END_DECL - /** @} */ +GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/global.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/global.h index 2a87e10..f15eb2d 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/global.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/global.h @@ -9,6 +9,12 @@ #include "common.h" +/** + * @file git2/global.h + * @brief libgit2 library initializer and shutdown functionality + * @ingroup Git + * @{ + */ GIT_BEGIN_DECL /** @@ -32,7 +38,7 @@ GIT_EXTERN(int) git_libgit2_init(void); * 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. */ @@ -40,5 +46,6 @@ GIT_EXTERN(int) git_libgit2_shutdown(void); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/graph.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/graph.h index 712ae47..1792020 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/graph.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/graph.h @@ -13,7 +13,7 @@ /** * @file git2/graph.h - * @brief Git graph traversal routines + * @brief Graph traversal routines * @defgroup git_revwalk Git graph traversal routines * @ingroup Git * @{ @@ -33,6 +33,7 @@ GIT_BEGIN_DECL * @param repo the repository where the commits exist * @param local the commit for local * @param upstream the commit for upstream + * @return 0 or an error code. */ GIT_EXTERN(int) git_graph_ahead_behind(size_t *ahead, size_t *behind, git_repository *repo, const git_oid *local, const git_oid *upstream); @@ -60,8 +61,8 @@ GIT_EXTERN(int) git_graph_descendant_of( * * @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 + * @param length the number of commits in the provided `descendant_array` * @return 1 if the given commit is an ancestor of any of the given potential * descendants, 0 if not, error code otherwise. */ @@ -73,4 +74,5 @@ GIT_EXTERN(int) git_graph_reachable_from_any( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/ignore.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/ignore.h index f5143f3..730f221 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/ignore.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/ignore.h @@ -10,6 +10,15 @@ #include "common.h" #include "types.h" +/** + * @file git2/ignore.h + * @brief Ignore particular untracked files + * @ingroup Git + * @{ + * + * When examining the repository status, git can optionally ignore + * specified untracked files. + */ GIT_BEGIN_DECL /** @@ -29,7 +38,7 @@ GIT_BEGIN_DECL * 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. + * @param rules Text of rules, the contents to add on 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 @@ -73,6 +82,7 @@ GIT_EXTERN(int) git_ignore_path_is_ignored( git_repository *repo, const char *path); +/** @} */ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/index.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/index.h index 532a520..0adff1a 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/index.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/index.h @@ -15,9 +15,14 @@ /** * @file git2/index.h - * @brief Git index parsing and manipulation routines + * @brief Index (aka "cache" aka "staging area") * @defgroup git_index Git index parsing and manipulation routines * @ingroup Git + * + * The index (or "cache", or "staging area") is the contents of the + * next commit. In addition, the index stores other data, such as + * conflicts that occurred during the last merge operation, and + * the "treecache" to speed up various on-disk operations. * @{ */ GIT_BEGIN_DECL @@ -77,8 +82,11 @@ typedef struct git_index_entry { * data in the `flags`. */ +/** Mask for name length */ #define GIT_INDEX_ENTRY_NAMEMASK (0x0fff) +/** Mask for index entry stage */ #define GIT_INDEX_ENTRY_STAGEMASK (0x3000) +/** Shift bits for index entry */ #define GIT_INDEX_ENTRY_STAGESHIFT 12 /** @@ -86,12 +94,20 @@ typedef struct git_index_entry { */ typedef enum { GIT_INDEX_ENTRY_EXTENDED = (0x4000), - GIT_INDEX_ENTRY_VALID = (0x8000), + GIT_INDEX_ENTRY_VALID = (0x8000) } git_index_entry_flag_t; +/** + * Macro to get the stage value (0 for the "main index", or a conflict + * value) from an index entry. + */ #define GIT_INDEX_ENTRY_STAGE(E) \ (((E)->flags & GIT_INDEX_ENTRY_STAGEMASK) >> GIT_INDEX_ENTRY_STAGESHIFT) +/** + * Macro to set the stage value (0 for the "main index", or a conflict + * value) for an index entry. + */ #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) @@ -119,7 +135,7 @@ typedef enum { 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_UPTODATE = (1 << 2) } git_index_entry_extended_flag_t; /** Capabilities of system that affect index actions. */ @@ -127,11 +143,18 @@ 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_FROM_OWNER = -1 } git_index_capability_t; -/** Callback for APIs that add/remove/update files matching pathspec */ +/** + * Callback for APIs that add/remove/update files matching pathspec + * + * @param path the path + * @param matched_pathspec the given pathspec + * @param payload the user-specified payload + * @return 0 to continue with the index operation, positive number to skip this file for the index operation, negative number on failure + */ typedef int GIT_CALLBACK(git_index_matched_path_cb)( const char *path, const char *matched_pathspec, void *payload); @@ -140,7 +163,7 @@ 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_CHECK_PATHSPEC = (1u << 2) } git_index_add_option_t; /** Git index stage states */ @@ -163,9 +186,77 @@ typedef enum { GIT_INDEX_STAGE_OURS = 2, /** The "theirs" side of a conflict. */ - GIT_INDEX_STAGE_THEIRS = 3, + GIT_INDEX_STAGE_THEIRS = 3 } git_index_stage_t; +#ifdef GIT_EXPERIMENTAL_SHA256 + +/** + * The options for opening or creating an index. + * + * Initialize with `GIT_INDEX_OPTIONS_INIT`. Alternatively, you can + * use `git_index_options_init`. + * + * @options[version] GIT_INDEX_OPTIONS_VERSION + * @options[init_macro] GIT_INDEX_OPTIONS_INIT + * @options[init_function] git_index_options_init + */ +typedef struct git_index_options { + unsigned int version; /**< The version */ + + /** + * The object ID type for the object IDs that exist in the index. + * + * If this is not specified, this defaults to `GIT_OID_SHA1`. + */ + git_oid_t oid_type; +} git_index_options; + +/** Current version for the `git_index_options` structure */ +#define GIT_INDEX_OPTIONS_VERSION 1 + +/** Static constructor for `git_index_options` */ +#define GIT_INDEX_OPTIONS_INIT { GIT_INDEX_OPTIONS_VERSION } + +/** + * Initialize git_index_options structure + * + * Initializes a `git_index_options` with default values. Equivalent to creating + * an instance with GIT_INDEX_OPTIONS_INIT. + * + * @param opts The `git_index_options` struct to initialize. + * @param version The struct version; pass `GIT_INDEX_OPTIONS_VERSION`. + * @return Zero on success; -1 on failure. + */ +GIT_EXTERN(int) git_index_options_init( + git_index_options *opts, + unsigned int version); + +/** + * Creates a new bare Git index object, without a repository to back + * it. This index object is capable of storing SHA256 objects. + * + * @param index_out the pointer for the new index + * @param index_path the path to the index file in disk + * @param opts the options for opening the index, or NULL + * @return 0 or an error code + */ +GIT_EXTERN(int) git_index_open( + git_index **index_out, + const char *index_path, + const git_index_options *opts); + +/** + * Create an in-memory index object. + * + * @param index_out the pointer for the new index + * @param opts the options for opening the index, or NULL + * @return 0 or an error code + */ +GIT_EXTERN(int) git_index_new(git_index **index_out, const git_index_options *opts); + +#else + /** * Create a new bare Git index object as a memory representation * of the Git index file in 'index_path', without a repository @@ -180,11 +271,11 @@ typedef enum { * * The index must be freed once it's no longer in use. * - * @param out the pointer for the new index + * @param index_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); +GIT_EXTERN(int) git_index_open(git_index **index_out, const char *index_path); /** * Create an in-memory index object. @@ -194,10 +285,12 @@ GIT_EXTERN(int) git_index_open(git_index **out, const char *index_path); * * The index must be freed once it's no longer in use. * - * @param out the pointer for the new index + * @param index_out the pointer for the new index * @return 0 or an error code */ -GIT_EXTERN(int) git_index_new(git_index **out); +GIT_EXTERN(int) git_index_new(git_index **index_out); + +#endif /** * Free an existing index object. @@ -296,6 +389,7 @@ GIT_EXTERN(int) git_index_write(git_index *index); */ GIT_EXTERN(const char *) git_index_path(const git_index *index); +#ifndef GIT_DEPRECATE_HARD /** * Get the checksum of the index * @@ -303,10 +397,12 @@ GIT_EXTERN(const char *) git_index_path(const git_index *index); * last 20 bytes which are the checksum itself). In cases where the * index does not exist on-disk, it will be zeroed out. * + * @deprecated this function is deprecated with no replacement * @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); +#endif /** * Read a tree into the index file with stats @@ -491,6 +587,7 @@ GIT_EXTERN(int) git_index_entry_is_conflict(const git_index_entry *entry); * * @param iterator_out The newly created iterator * @param index The index to iterate + * @return 0 or an error code. */ GIT_EXTERN(int) git_index_iterator_new( git_index_iterator **iterator_out, @@ -787,6 +884,7 @@ GIT_EXTERN(int) git_index_conflict_cleanup(git_index *index); /** * Determine if the index contains entries representing file conflicts. * + * @param index An existing index object. * @return 1 if at least one conflict is found, 0 otherwise. */ GIT_EXTERN(int) git_index_has_conflicts(const git_index *index); @@ -811,6 +909,7 @@ GIT_EXTERN(int) git_index_conflict_iterator_new( * @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 + * @param iterator The conflict iterator. * @return 0 (no error), GIT_ITEROVER (iteration is done) or an error code * (negative value) */ @@ -830,4 +929,5 @@ GIT_EXTERN(void) git_index_conflict_iterator_free( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/indexer.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/indexer.h index a434d24..9aaedc3 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/indexer.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/indexer.h @@ -4,13 +4,23 @@ * 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__ +#ifndef INCLUDE_git_indexer_h__ +#define INCLUDE_git_indexer_h__ #include "common.h" #include "types.h" #include "oid.h" +/** + * @file git2/indexer.h + * @brief Packfile indexing + * @ingroup Git + * @{ + * + * Indexing is the operation of taking a packfile - which is simply a + * collection of unordered commits - and producing an "index" so that + * one can lookup a commit in the packfile by object ID. + */ GIT_BEGIN_DECL /** A git indexer object */ @@ -53,6 +63,7 @@ typedef struct git_indexer_progress { * * @param stats Structure containing information about the state of the transfer * @param payload Payload provided by caller + * @return 0 on success or an error code */ typedef int GIT_CALLBACK(git_indexer_progress_cb)(const git_indexer_progress *stats, void *payload); @@ -62,6 +73,22 @@ typedef int GIT_CALLBACK(git_indexer_progress_cb)(const git_indexer_progress *st typedef struct git_indexer_options { unsigned int version; +#ifdef GIT_EXPERIMENTAL_SHA256 + /** permissions to use creating packfile or 0 for defaults */ + unsigned int mode; + + /** the type of object ids in the packfile or 0 for SHA1 */ + git_oid_t oid_type; + + /** + * object database from which to read base objects when + * fixing thin packs. This can be NULL if there are no thin + * packs; if a thin pack is encountered, an error will be + * returned if there are bases missing. + */ + git_odb *odb; +#endif + /** progress_cb function to call with progress information */ git_indexer_progress_cb progress_cb; @@ -72,7 +99,10 @@ typedef struct git_indexer_options { unsigned char verify; } git_indexer_options; +/** Current version for the `git_indexer_options` structure */ #define GIT_INDEXER_OPTIONS_VERSION 1 + +/** Static constructor for `git_indexer_options` */ #define GIT_INDEXER_OPTIONS_INIT { GIT_INDEXER_OPTIONS_VERSION } /** @@ -87,6 +117,20 @@ GIT_EXTERN(int) git_indexer_options_init( git_indexer_options *opts, unsigned int version); +#ifdef GIT_EXPERIMENTAL_SHA256 +/** + * 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 opts the options to create the indexer with + * @return 0 or an error code. + */ +GIT_EXTERN(int) git_indexer_new( + git_indexer **out, + const char *path, + git_indexer_options *opts); +#else /** * Create a new indexer instance * @@ -98,6 +142,7 @@ GIT_EXTERN(int) git_indexer_options_init( * will be returned if there are bases missing) * @param opts Optional structure containing additional options. See * `git_indexer_options` above. + * @return 0 or an error code. */ GIT_EXTERN(int) git_indexer_new( git_indexer **out, @@ -105,6 +150,7 @@ GIT_EXTERN(int) git_indexer_new( unsigned int mode, git_odb *odb, git_indexer_options *opts); +#endif /** * Add data to the indexer @@ -113,6 +159,7 @@ GIT_EXTERN(int) git_indexer_new( * @param data the data to add * @param size the size of the data in bytes * @param stats stat storage + * @return 0 or an error code. */ GIT_EXTERN(int) git_indexer_append(git_indexer *idx, const void *data, size_t size, git_indexer_progress *stats); @@ -122,18 +169,35 @@ GIT_EXTERN(int) git_indexer_append(git_indexer *idx, const void *data, size_t si * Resolve any pending deltas and write out the index file * * @param idx the indexer + * @param stats Stat storage. + * @return 0 or an error code. */ GIT_EXTERN(int) git_indexer_commit(git_indexer *idx, git_indexer_progress *stats); +#ifndef GIT_DEPRECATE_HARD /** * 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. * + * @deprecated use git_indexer_name * @param idx the indexer instance + * @return the packfile's hash */ GIT_EXTERN(const git_oid *) git_indexer_hash(const git_indexer *idx); +#endif + +/** + * Get the unique name for the resulting packfile. + * + * The packfile's name is derived from the packfile's content. + * This is only correct after the index has been finalized. + * + * @param idx the indexer instance + * @return a NUL terminated string for the packfile name + */ +GIT_EXTERN(const char *) git_indexer_name(const git_indexer *idx); /** * Free the indexer and its resources @@ -142,6 +206,7 @@ GIT_EXTERN(const git_oid *) git_indexer_hash(const git_indexer *idx); */ GIT_EXTERN(void) git_indexer_free(git_indexer *idx); +/** @} */ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/mailmap.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/mailmap.h index 7c3f60f..fd6ae71 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/mailmap.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/mailmap.h @@ -13,10 +13,15 @@ /** * @file git2/mailmap.h - * @brief Mailmap parsing routines + * @brief Mailmaps provide alternate email addresses for users * @defgroup git_mailmap Git mailmap routines * @ingroup Git * @{ + * + * A mailmap can be used to specify alternate email addresses for + * repository committers or authors. This allows systems to map + * commits made using different email addresses to the same logical + * person. */ GIT_BEGIN_DECL @@ -112,4 +117,5 @@ GIT_EXTERN(int) git_mailmap_resolve_signature( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/merge.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/merge.h index fc27c9d..be3b065 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/merge.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/merge.h @@ -17,9 +17,12 @@ /** * @file git2/merge.h - * @brief Git merge routines + * @brief Merge re-joins diverging branches of history * @defgroup git_merge Git merge routines * @ingroup Git + * + * Merge will take two commits and attempt to produce a commit that + * includes the changes that were made in both branches. * @{ */ GIT_BEGIN_DECL @@ -45,7 +48,10 @@ typedef struct { unsigned int mode; } git_merge_file_input; +/** Current version for the `git_merge_file_input_options` structure */ #define GIT_MERGE_FILE_INPUT_VERSION 1 + +/** Static constructor for `git_merge_file_input_options` */ #define GIT_MERGE_FILE_INPUT_INIT {GIT_MERGE_FILE_INPUT_VERSION} /** @@ -92,6 +98,14 @@ typedef enum { * merge base to `git-merge-resolve`. */ GIT_MERGE_NO_RECURSIVE = (1 << 3), + + /** + * Treat this merge as if it is to produce the virtual base + * of a recursive merge. This will ensure that there are + * no conflicts, any conflicting regions will keep conflict + * markers in the merge result. + */ + GIT_MERGE_VIRTUAL_BASE = (1 << 4) } git_merge_flag_t; /** @@ -127,7 +141,7 @@ typedef enum { * 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_UNION = 3 } git_merge_file_favor_t; /** @@ -160,8 +174,19 @@ typedef enum { /** Take extra time to find minimal diff */ GIT_MERGE_FILE_DIFF_MINIMAL = (1 << 7), + + /** Create zdiff3 ("zealous diff3")-style files */ + GIT_MERGE_FILE_STYLE_ZDIFF3 = (1 << 8), + + /** + * Do not produce file conflicts when common regions have + * changed; keep the conflict markers in the file and accept + * that as the merge result. + */ + GIT_MERGE_FILE_ACCEPT_CONFLICTS = (1 << 9) } git_merge_file_flag_t; +/** Default size for conflict markers */ #define GIT_MERGE_CONFLICT_MARKER_SIZE 7 /** @@ -199,7 +224,10 @@ typedef struct { unsigned short marker_size; } git_merge_file_options; +/** Current version for the `git_merge_file_options` structure */ #define GIT_MERGE_FILE_OPTIONS_VERSION 1 + +/** Static constructor for `git_merge_file_options` */ #define GIT_MERGE_FILE_OPTIONS_INIT {GIT_MERGE_FILE_OPTIONS_VERSION} /** @@ -294,7 +322,10 @@ typedef struct { uint32_t file_flags; } git_merge_options; +/** Current version for the `git_merge_options` structure */ #define GIT_MERGE_OPTIONS_VERSION 1 + +/** Static constructor for `git_merge_options` */ #define GIT_MERGE_OPTIONS_INIT { \ GIT_MERGE_OPTIONS_VERSION, GIT_MERGE_FIND_RENAMES } @@ -341,7 +372,7 @@ typedef enum { * 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_UNBORN = (1 << 3) } git_merge_analysis_t; /** @@ -364,7 +395,7 @@ typedef enum { * 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_FASTFORWARD_ONLY = (1 << 1) } git_merge_preference_t; /** @@ -372,6 +403,7 @@ typedef enum { * merging them into the HEAD of the repository. * * @param analysis_out analysis enumeration that the result is written into + * @param preference_out One of the `git_merge_preference_t` flag. * @param repo the repository to merge * @param their_heads the heads to merge into * @param their_heads_len the number of heads to merge @@ -389,6 +421,7 @@ GIT_EXTERN(int) git_merge_analysis( * merging them into a reference. * * @param analysis_out analysis enumeration that the result is written into + * @param preference_out One of the `git_merge_preference_t` flag. * @param repo the repository to merge * @param our_ref the reference to perform the analysis from * @param their_heads the heads to merge into @@ -451,6 +484,37 @@ GIT_EXTERN(int) git_merge_base_many( /** * Find all merge bases given a list of commits * + * This behaves similar to [`git merge-base`](https://git-scm.com/docs/git-merge-base#_discussion). + * + * Given three commits `a`, `b`, and `c`, `merge_base_many` + * will compute a hypothetical commit `m`, which is a merge between `b` + * and `c`. + + * For example, with the following topology: + * ```text + * o---o---o---o---C + * / + * / o---o---o---B + * / / + * ---2---1---o---o---o---A + * ``` + * + * the result of `merge_base_many` given `a`, `b`, and `c` is 1. This is + * because the equivalent topology with the imaginary merge commit `m` + * between `b` and `c` is: + * ```text + * o---o---o---o---o + * / \ + * / o---o---o---o---M + * / / + * ---2---1---o---o---o---A + * ``` + * + * and the result of `merge_base_many` given `a` and `m` is 1. + * + * If you're looking to recieve the common ancestor between all the + * given commits, use `merge_base_octopus`. + * * @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` @@ -583,7 +647,7 @@ GIT_EXTERN(int) git_merge_commits( * 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), + * state. Once the commit is done (or if the user wishes to abort), * you should clear this state by calling * `git_repository_state_cleanup()`. * @@ -603,4 +667,5 @@ GIT_EXTERN(int) git_merge( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/message.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/message.h index 42ca3e5..874d027 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/message.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/message.h @@ -12,7 +12,7 @@ /** * @file git2/message.h - * @brief Git message management routines + * @brief Commit messages * @ingroup Git * @{ */ @@ -75,10 +75,12 @@ GIT_EXTERN(int) git_message_trailers(git_message_trailer_array *arr, const char /** * Clean's up any allocated memory in the git_message_trailer_array filled by * a call to git_message_trailers. + * + * @param arr The trailer to free. */ GIT_EXTERN(void) git_message_trailer_array_free(git_message_trailer_array *arr); /** @} */ GIT_END_DECL -#endif /* INCLUDE_git_message_h__ */ +#endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/net.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/net.h index 8103eaf..93bdac4 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/net.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/net.h @@ -13,12 +13,13 @@ /** * @file git2/net.h - * @brief Git networking declarations + * @brief Low-level networking functionality * @ingroup Git * @{ */ GIT_BEGIN_DECL +/** Default git protocol port number */ #define GIT_DEFAULT_PORT "9418" /** @@ -51,4 +52,5 @@ struct git_remote_head { /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/notes.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/notes.h index c135881..3784d5f 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/notes.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/notes.h @@ -11,7 +11,7 @@ /** * @file git2/notes.h - * @brief Git notes management routines + * @brief Notes are metadata attached to an object * @defgroup git_note Git notes management routines * @ingroup Git * @{ @@ -21,13 +21,15 @@ 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` + * @param blob_id object id of the blob containing the message + * @param annotated_object_id the id of the object being annotated + * @param payload user-specified data to the foreach function + * @return 0 on success, or a negative number on failure */ typedef int GIT_CALLBACK(git_note_foreach_cb)( - const git_oid *blob_id, const git_oid *annotated_object_id, void *payload); + const git_oid *blob_id, + const git_oid *annotated_object_id, + void *payload); /** * note iterator @@ -303,4 +305,5 @@ GIT_EXTERN(int) git_note_foreach( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/object.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/object.h index 984dbb7..8a50239 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/object.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/object.h @@ -14,13 +14,14 @@ /** * @file git2/object.h - * @brief Git revision object management routines + * @brief Objects are blobs (files), trees (directories), commits, and annotated tags * @defgroup git_object Git revision object management routines * @ingroup Git * @{ */ GIT_BEGIN_DECL +/** Maximum size of a git object */ #define GIT_OBJECT_SIZE_MAX UINT64_MAX /** @@ -53,18 +54,18 @@ GIT_EXTERN(int) git_object_lookup( * * 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. + * (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 + * 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 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 @@ -221,9 +222,58 @@ GIT_EXTERN(int) git_object_peel( * * @param dest Pointer to store the copy of the object * @param source Original object to copy + * @return 0 or an error code */ GIT_EXTERN(int) git_object_dup(git_object **dest, git_object *source); +#ifdef GIT_EXPERIMENTAL_SHA256 +/** + * Analyzes a buffer of raw object content and determines its validity. + * Tree, commit, and tag objects will be parsed and ensured that they + * are valid, parseable content. (Blobs are always valid by definition.) + * An error message will be set with an informative message if the object + * is not valid. + * + * @warning This function is experimental and its signature may change in + * the future. + * + * @param valid Output pointer to set with validity of the object content + * @param buf The contents to validate + * @param len The length of the buffer + * @param object_type The type of the object in the buffer + * @param oid_type The object ID type for the OIDs in the given buffer + * @return 0 on success or an error code + */ +GIT_EXTERN(int) git_object_rawcontent_is_valid( + int *valid, + const char *buf, + size_t len, + git_object_t object_type, + git_oid_t oid_type); +#else +/** + * Analyzes a buffer of raw object content and determines its validity. + * Tree, commit, and tag objects will be parsed and ensured that they + * are valid, parseable content. (Blobs are always valid by definition.) + * An error message will be set with an informative message if the object + * is not valid. + * + * @warning This function is experimental and its signature may change in + * the future. + * + * @param[out] valid Output pointer to set with validity of the object content + * @param buf The contents to validate + * @param len The length of the buffer + * @param object_type The type of the object in the buffer + * @return 0 on success or an error code + */ +GIT_EXTERN(int) git_object_rawcontent_is_valid( + int *valid, + const char *buf, + size_t len, + git_object_t object_type); +#endif + /** @} */ GIT_END_DECL diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/odb.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/odb.h index dd48455..e809c36 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/odb.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/odb.h @@ -15,29 +15,91 @@ /** * @file git2/odb.h - * @brief Git object database routines + * @brief An object database manages the storage of git objects * @defgroup git_odb Git object database routines * @ingroup Git * @{ */ GIT_BEGIN_DECL +/** Flags controlling the behavior of ODB lookup operations */ +typedef enum { + /** + * Don't call `git_odb_refresh` if the lookup fails. Useful when doing + * a batch of lookup operations for objects that may legitimately not + * exist. When using this flag, you may wish to manually call + * `git_odb_refresh` before processing a batch of objects. + */ + GIT_ODB_LOOKUP_NO_REFRESH = (1 << 0) +} git_odb_lookup_flags_t; + /** * Function type for callbacks from git_odb_foreach. + * + * @param id an id of an object in the object database + * @param payload the payload from the initial call to git_odb_foreach + * @return 0 on success, or an error code */ typedef int GIT_CALLBACK(git_odb_foreach_cb)(const git_oid *id, void *payload); +/** Options for configuring a loose object backend. */ +typedef struct { + unsigned int version; /**< version for the struct */ + + /** + * Type of object IDs to use for this object database, or + * 0 for default (currently SHA1). + */ + git_oid_t oid_type; +} git_odb_options; + +/** The current version of the diff options structure */ +#define GIT_ODB_OPTIONS_VERSION 1 + +/** + * Stack initializer for odb options. Alternatively use + * `git_odb_options_init` programmatic initialization. + */ +#define GIT_ODB_OPTIONS_INIT { GIT_ODB_OPTIONS_VERSION } + +#ifdef GIT_EXPERIMENTAL_SHA256 + +/** + * Create a new object database with no backends. + * + * @param[out] odb location to store the database pointer, if opened. + * @param opts the options for this object database or NULL for defaults + * @return 0 or an error code + */ +GIT_EXTERN(int) git_odb_new(git_odb **odb, const git_odb_options *opts); + +/** + * Create a new object database and automatically add loose and packed + * backends. + * + * @param[out] odb_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. + * @param opts the options for this object database or NULL for defaults + * @return 0 or an error code + */ +GIT_EXTERN(int) git_odb_open( + git_odb **odb_out, + const char *objects_dir, + const git_odb_options *opts); + +#else + /** * 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. + * @param[out] odb location to store the database pointer, if opened. * @return 0 or an error code */ -GIT_EXTERN(int) git_odb_new(git_odb **out); +GIT_EXTERN(int) git_odb_new(git_odb **odb); /** * Create a new object database and automatically add @@ -50,12 +112,13 @@ GIT_EXTERN(int) git_odb_new(git_odb **out); * 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. + * @param[out] odb_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); +GIT_EXTERN(int) git_odb_open(git_odb **odb_out, const char *objects_dir); +#endif /** * Add an on-disk alternate to an existing Object DB. @@ -91,13 +154,13 @@ GIT_EXTERN(void) git_odb_free(git_odb *db); * 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[out] obj 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); +GIT_EXTERN(int) git_odb_read(git_odb_object **obj, git_odb *db, const git_oid *id); /** * Read an object from the database, given a prefix @@ -106,7 +169,7 @@ GIT_EXTERN(int) git_odb_read(git_odb_object **out, git_odb *db, const git_oid *i * 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 + * The remaining (GIT_OID_SHA1_HEXSIZE-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 @@ -117,7 +180,7 @@ GIT_EXTERN(int) git_odb_read(git_odb_object **out, git_odb *db, const git_oid *i * 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[out] obj 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 @@ -125,7 +188,7 @@ GIT_EXTERN(int) git_odb_read(git_odb_object **out, git_odb *db, const git_oid *i * 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); +GIT_EXTERN(int) git_odb_read_prefix(git_odb_object **obj, git_odb *db, const git_oid *short_id, size_t len); /** * Read the header of an object from the database, without @@ -137,8 +200,8 @@ GIT_EXTERN(int) git_odb_read_prefix(git_odb_object **out, git_odb *db, const git * 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[out] len_out pointer where to store the length + * @param[out] 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 @@ -155,6 +218,17 @@ GIT_EXTERN(int) git_odb_read_header(size_t *len_out, git_object_t *type_out, git */ GIT_EXTERN(int) git_odb_exists(git_odb *db, const git_oid *id); +/** + * Determine if the given object can be found in the object database, with + * extended options. + * + * @param db database to be searched for the given object. + * @param id the object to search for. + * @param flags flags affecting the lookup (see `git_odb_lookup_flags_t`) + * @return 1 if the object was found, 0 otherwise + */ +GIT_EXTERN(int) git_odb_exists_ext(git_odb *db, const git_oid *id, unsigned int flags); + /** * Determine if an object can be found in the object database by an * abbreviated object ID. @@ -192,12 +266,13 @@ typedef struct 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. + * 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_SHA1_HEXSIZE`) 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 @@ -231,7 +306,7 @@ GIT_EXTERN(int) git_odb_expand_ids( * @param db database to refresh * @return 0 on success, error code otherwise */ -GIT_EXTERN(int) git_odb_refresh(struct git_odb *db); +GIT_EXTERN(int) git_odb_refresh(git_odb *db); /** * List all objects available in the database @@ -246,7 +321,10 @@ GIT_EXTERN(int) git_odb_refresh(struct git_odb *db); * @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); +GIT_EXTERN(int) git_odb_foreach( + git_odb *db, + git_odb_foreach_cb cb, + void *payload); /** * Write an object directly into the ODB @@ -261,7 +339,7 @@ GIT_EXTERN(int) git_odb_foreach(git_odb *db, git_odb_foreach_cb cb, void *payloa * * @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 data @type `const unsigned char *` 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 @@ -323,6 +401,11 @@ GIT_EXTERN(int) git_odb_stream_finalize_write(git_oid *out, git_odb_stream *stre * Read from an odb stream * * Most backends don't implement streaming reads + * + * @param stream the stream + * @param buffer a user-allocated buffer to store the data in. + * @param len the buffer's length + * @return the number of bytes read if succeeded, error code otherwise */ GIT_EXTERN(int) git_odb_stream_read(git_odb_stream *stream, char *buffer, size_t len); @@ -383,6 +466,7 @@ GIT_EXTERN(int) git_odb_open_rstream( * 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 + * @return 0 or an error code. */ GIT_EXTERN(int) git_odb_write_pack( git_odb_writepack **out, @@ -400,23 +484,59 @@ GIT_EXTERN(int) git_odb_write_pack( * exist). * * @param db object database where the `multi-pack-index` file will be written. + * @return 0 or an error code. */ GIT_EXTERN(int) git_odb_write_multi_pack_index( git_odb *db); +#ifdef GIT_EXPERIMENTAL_SHA256 + /** - * Determine the object-ID (sha1 hash) of a data buffer + * Generate the object ID (in SHA1 or SHA256 format) for a given 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] oid the resulting object ID. + * @param data data to hash + * @param len size of the data + * @param object_type of the data to hash + * @param oid_type the oid type to hash to + * @return 0 or an error code + */ +GIT_EXTERN(int) git_odb_hash( + git_oid *oid, + const void *data, + size_t len, + git_object_t object_type, + git_oid_t oid_type); + +/** + * Determine the object ID of a file on disk. + * + * @param[out] oid oid structure the result is written into. + * @param path file to read and determine object id for + * @param object_type of the data to hash + * @param oid_type the oid type to hash to + * @return 0 or an error code + */ +GIT_EXTERN(int) git_odb_hashfile( + git_oid *oid, + const char *path, + git_object_t object_type, + git_oid_t oid_type); +#else + +/** + * Determine the object-ID (sha1 or sha256 hash) of a data buffer + * + * The resulting 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[out] oid the resulting object-ID. * @param data data to hash * @param len size of the data - * @param type of the data to hash + * @param object_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); +GIT_EXTERN(int) git_odb_hash(git_oid *oid, const void *data, size_t len, git_object_t object_type); /** * Read a file from disk and fill a git_oid with the object id @@ -426,12 +546,14 @@ GIT_EXTERN(int) git_odb_hash(git_oid *out, const void *data, size_t len, git_obj * 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[out] oid 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 + * @param object_type of the data to hash * @return 0 or an error code */ -GIT_EXTERN(int) git_odb_hashfile(git_oid *out, const char *path, git_object_t type); +GIT_EXTERN(int) git_odb_hashfile(git_oid *oid, const char *path, git_object_t object_type); + +#endif /** * Create a copy of an odb_object @@ -476,7 +598,7 @@ GIT_EXTERN(const git_oid *) git_odb_object_id(git_odb_object *object); * This pointer is owned by the object and shall not be free'd. * * @param object the object - * @return a pointer to the data + * @return @type `const unsigned char *` a pointer to the data */ GIT_EXTERN(const void *) git_odb_object_data(git_odb_object *object); @@ -556,7 +678,7 @@ GIT_EXTERN(int) git_odb_get_backend(git_odb_backend **out, git_odb *odb, size_t /** * Set the git commit-graph for the ODB. * - * After a successfull call, the ownership of the cgraph parameter will be + * After a successful 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 @@ -570,4 +692,5 @@ GIT_EXTERN(int) git_odb_set_commit_graph(git_odb *odb, git_commit_graph *cgraph) /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/odb_backend.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/odb_backend.h index c593bac..88ca29f 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/odb_backend.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/odb_backend.h @@ -13,46 +13,135 @@ /** * @file git2/backend.h - * @brief Git custom backend functions + * @brief Object database backends manage the storage of git objects * @defgroup git_odb Git object database routines * @ingroup Git * @{ */ GIT_BEGIN_DECL +/** Options for configuring a packfile object backend. */ +typedef struct { + unsigned int version; /**< version for the struct */ + + /** + * Type of object IDs to use for this object database, or + * 0 for default (currently SHA1). + */ + git_oid_t oid_type; +} git_odb_backend_pack_options; + +/** The current version of the diff options structure */ +#define GIT_ODB_BACKEND_PACK_OPTIONS_VERSION 1 + +/** + * Stack initializer for odb pack backend options. Alternatively use + * `git_odb_backend_pack_options_init` programmatic initialization. + */ +#define GIT_ODB_BACKEND_PACK_OPTIONS_INIT \ + { GIT_ODB_BACKEND_PACK_OPTIONS_VERSION } + +typedef enum { + GIT_ODB_BACKEND_LOOSE_FSYNC = (1 << 0) +} git_odb_backend_loose_flag_t; + +/** Options for configuring a loose object backend. */ +typedef struct { + unsigned int version; /**< version for the struct */ + + /** A combination of the `git_odb_backend_loose_flag_t` types. */ + uint32_t flags; + + /** + * zlib compression level to use (0-9), where 1 is the fastest + * at the expense of larger files, and 9 produces the best + * compression at the expense of speed. 0 indicates that no + * compression should be performed. -1 is the default (currently + * optimizing for speed). + */ + int compression_level; + + /** Permissions to use creating a directory or 0 for defaults */ + unsigned int dir_mode; + + /** Permissions to use creating a file or 0 for defaults */ + unsigned int file_mode; + + /** + * Type of object IDs to use for this object database, or + * 0 for default (currently SHA1). + */ + git_oid_t oid_type; +} git_odb_backend_loose_options; + +/** The current version of the diff options structure */ +#define GIT_ODB_BACKEND_LOOSE_OPTIONS_VERSION 1 + +/** + * Stack initializer for odb loose backend options. Alternatively use + * `git_odb_backend_loose_options_init` programmatic initialization. + */ +#define GIT_ODB_BACKEND_LOOSE_OPTIONS_INIT \ + { GIT_ODB_BACKEND_LOOSE_OPTIONS_VERSION, 0, -1 } + /* * Constructors for in-box ODB backends. */ +#ifdef GIT_EXPERIMENTAL_SHA256 + /** - * Create a backend for the packfiles. + * Create a backend for a directory containing packfiles. * - * @param out location to store the odb backend pointer + * @param[out] out location to store the odb backend pointer * @param objects_dir the Git repository's objects directory + * @param opts the options to use when creating the pack backend + * @return 0 or an error code + */ +GIT_EXTERN(int) git_odb_backend_pack( + git_odb_backend **out, + const char *objects_dir, + const git_odb_backend_pack_options *opts); + +/** + * Create a backend for a single packfile. * + * @param[out] out location to store the odb backend pointer + * @param index_file path to the packfile's .idx file + * @param opts the options to use when creating the pack backend * @return 0 or an error code */ -GIT_EXTERN(int) git_odb_backend_pack(git_odb_backend **out, const char *objects_dir); +GIT_EXTERN(int) git_odb_backend_one_pack( + git_odb_backend **out, + const char *index_file, + const git_odb_backend_pack_options *opts); /** * Create a backend for loose objects * - * @param out location to store the odb backend pointer + * @param[out] 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 + * @param opts options for the loose object backend or NULL * * @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); + git_odb_backend_loose_options *opts); + +#else + +/** + * Create a backend for a directory containing packfiles. + * + * @param[out] 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 out of a single packfile @@ -60,18 +149,40 @@ GIT_EXTERN(int) git_odb_backend_loose( * This can be useful for inspecting the contents of a single * packfile. * - * @param out location to store the odb backend pointer + * @param[out] 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); + +/** + * Create a backend for loose objects * + * @param[out] out location to store the odb backend pointer + * @param objects_dir the Git repository's objects directory + * @param compression_level zlib compression level (0-9), or -1 for the default + * @param do_fsync if non-zero, perform an fsync on write + * @param dir_mode permission to use when creating directories, or 0 for default + * @param file_mode permission to use when creating directories, or 0 for default * @return 0 or an error code */ -GIT_EXTERN(int) git_odb_backend_one_pack(git_odb_backend **out, const char *index_file); +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); + +#endif /** Streaming mode */ typedef enum { GIT_STREAM_RDONLY = (1 << 1), GIT_STREAM_WRONLY = (1 << 2), - GIT_STREAM_RW = (GIT_STREAM_RDONLY | GIT_STREAM_WRONLY), + GIT_STREAM_RW = (GIT_STREAM_RDONLY | GIT_STREAM_WRONLY) } git_odb_stream_t; /** @@ -87,6 +198,10 @@ struct git_odb_stream { unsigned int mode; void *hash_ctx; +#ifdef GIT_EXPERIMENTAL_SHA256 + git_oid_t oid_type; +#endif + git_object_size_t declared_size; git_object_size_t received_bytes; @@ -130,6 +245,7 @@ struct git_odb_writepack { void GIT_CALLBACK(free)(git_odb_writepack *writepack); }; +/** @} */ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/oid.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/oid.h index 549df4e..8539b4e 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/oid.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/oid.h @@ -8,22 +8,92 @@ #define INCLUDE_git_oid_h__ #include "common.h" -#include "types.h" +#include "experimental.h" /** * @file git2/oid.h - * @brief Git object id routines + * @brief Object IDs * @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 +/** The type of object id. */ +typedef enum { -/** Size (in bytes) of a hex formatted oid */ -#define GIT_OID_HEXSZ (GIT_OID_RAWSZ * 2) +#ifdef GIT_EXPERIMENTAL_SHA256 + GIT_OID_SHA1 = 1, /**< SHA1 */ + GIT_OID_SHA256 = 2 /**< SHA256 */ +#else + GIT_OID_SHA1 = 1 /**< SHA1 */ +#endif + +} git_oid_t; + +/* + * SHA1 is currently the only supported object ID type. + */ + +/** SHA1 is currently libgit2's default oid type. */ +#define GIT_OID_DEFAULT GIT_OID_SHA1 + +/** Size (in bytes) of a raw/binary sha1 oid */ +#define GIT_OID_SHA1_SIZE 20 +/** Size (in bytes) of a hex formatted sha1 oid */ +#define GIT_OID_SHA1_HEXSIZE (GIT_OID_SHA1_SIZE * 2) + +/** + * The binary representation of the null sha1 object ID. + */ +#ifndef GIT_EXPERIMENTAL_SHA256 +# define GIT_OID_SHA1_ZERO { { 0 } } +#else +# define GIT_OID_SHA1_ZERO { GIT_OID_SHA1, { 0 } } +#endif + +/** + * The string representation of the null sha1 object ID. + */ +#define GIT_OID_SHA1_HEXZERO "0000000000000000000000000000000000000000" + +/* + * Experimental SHA256 support is a breaking change to the API. + * This exists for application compatibility testing. + */ + +#ifdef GIT_EXPERIMENTAL_SHA256 + +/** Size (in bytes) of a raw/binary sha256 oid */ +# define GIT_OID_SHA256_SIZE 32 +/** Size (in bytes) of a hex formatted sha256 oid */ +# define GIT_OID_SHA256_HEXSIZE (GIT_OID_SHA256_SIZE * 2) + +/** + * The binary representation of the null sha256 object ID. + */ +# define GIT_OID_SHA256_ZERO { GIT_OID_SHA256, { 0 } } + +/** + * The string representation of the null sha256 object ID. + */ +# define GIT_OID_SHA256_HEXZERO "0000000000000000000000000000000000000000000000000000000000000000" + +#endif + +/** Maximum possible object ID size in raw format */ +#ifdef GIT_EXPERIMENTAL_SHA256 +# define GIT_OID_MAX_SIZE GIT_OID_SHA256_SIZE +#else +# define GIT_OID_MAX_SIZE GIT_OID_SHA1_SIZE +#endif + +/** Maximum possible object ID size in hex format */ +#ifdef GIT_EXPERIMENTAL_SHA256 +# define GIT_OID_MAX_HEXSIZE GIT_OID_SHA256_HEXSIZE +#else +# define GIT_OID_MAX_HEXSIZE GIT_OID_SHA1_HEXSIZE +#endif /** Minimum length (in number of hex characters, * i.e. packets of 4 bits) of an oid prefix */ @@ -31,23 +101,43 @@ GIT_BEGIN_DECL /** Unique identity of any object (commit, tree, blob, tag). */ typedef struct git_oid { + +#ifdef GIT_EXPERIMENTAL_SHA256 + /** type of object id */ + unsigned char type; +#endif + /** raw binary formatted id */ - unsigned char id[GIT_OID_RAWSZ]; + unsigned char id[GIT_OID_MAX_SIZE]; } git_oid; +#ifdef GIT_EXPERIMENTAL_SHA256 + +GIT_EXTERN(int) git_oid_fromstr(git_oid *out, const char *str, git_oid_t type); +GIT_EXTERN(int) git_oid_fromstrp(git_oid *out, const char *str, git_oid_t type); +GIT_EXTERN(int) git_oid_fromstrn(git_oid *out, const char *str, size_t length, git_oid_t type); +GIT_EXTERN(int) git_oid_fromraw(git_oid *out, const unsigned char *raw, git_oid_t type); + +#else + /** * Parse a hex formatted object id into a git_oid. * + * The appropriate number of bytes for the given object ID type will + * be read from the string - 40 bytes for SHA1, 64 bytes for SHA256. + * The given string need not be NUL terminated. + * * @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). + * needed for an oid encoded in hex (40 bytes for sha1, + * 256 bytes for sha256). * @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. + * Parse a hex formatted NUL-terminated string into a git_oid. * * @param out oid structure the result is written into. * @param str input hex string; must be null-terminated. @@ -77,14 +167,17 @@ GIT_EXTERN(int) git_oid_fromstrn(git_oid *out, const char *str, size_t length); */ GIT_EXTERN(int) git_oid_fromraw(git_oid *out, const unsigned char *raw); +#endif + /** * 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. + * needed for an oid encoded in hex (40 bytes for SHA1, + * 64 bytes for SHA256). 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 */ @@ -94,7 +187,7 @@ 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 + * If the number of bytes is > GIT_OID_SHA1_HEXSIZE, 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. @@ -110,9 +203,10 @@ GIT_EXTERN(int) git_oid_nfmt(char *out, size_t n, const git_oid *id); * * @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. + * needed for an oid encoded in hex (41 bytes for SHA1, + * 65 bytes for SHA256). 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 */ @@ -127,14 +221,16 @@ GIT_EXTERN(int) git_oid_pathfmt(char *out, const git_oid *id); * concurrent calls of the function. * * @param oid The oid structure to format - * @return the c-string + * @return the c-string or NULL on failure */ 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 + * If the buffer is smaller than the size of a hex-formatted oid string + * plus an additional byte (GIT_OID_SHA_HEXSIZE + 1 for SHA1 or + * GIT_OID_SHA256_HEXSIZE + 1 for SHA256), then the resulting * oid c-string will be truncated to n-1 characters (but will still be * NUL-byte terminated). * @@ -210,6 +306,7 @@ GIT_EXTERN(int) git_oid_strcmp(const git_oid *id, const char *str); /** * Check is an oid is all zeros. * + * @param id the object ID to check * @return 1 if all zeros, 0 otherwise. */ GIT_EXTERN(int) git_oid_is_zero(const git_oid *id); @@ -270,4 +367,5 @@ GIT_EXTERN(void) git_oid_shorten_free(git_oid_shorten *os); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/oidarray.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/oidarray.h index 94fc58d..e79a559 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/oidarray.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/oidarray.h @@ -10,6 +10,13 @@ #include "common.h" #include "oid.h" +/** + * @file git2/oidarray.h + * @brief An array of object IDs + * @defgroup git_oidarray Arrays of object IDs + * @ingroup Git + * @{ + */ GIT_BEGIN_DECL /** Array of object ids */ @@ -34,4 +41,3 @@ GIT_EXTERN(void) git_oidarray_dispose(git_oidarray *array); GIT_END_DECL #endif - diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/pack.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/pack.h index 3b9beb6..3837e04 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/pack.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/pack.h @@ -51,7 +51,7 @@ GIT_BEGIN_DECL */ typedef enum { GIT_PACKBUILDER_ADDING_OBJECTS = 0, - GIT_PACKBUILDER_DELTAFICATION = 1, + GIT_PACKBUILDER_DELTAFICATION = 1 } git_packbuilder_stage_t; /** @@ -148,6 +148,7 @@ GIT_EXTERN(int) git_packbuilder_insert_recur(git_packbuilder *pb, const git_oid * * @param buf Buffer where to write the packfile * @param pb The packbuilder + * @return 0 or an error code */ GIT_EXTERN(int) git_packbuilder_write_buf(git_buf *buf, git_packbuilder *pb); @@ -169,15 +170,30 @@ GIT_EXTERN(int) git_packbuilder_write( git_indexer_progress_cb progress_cb, void *progress_cb_payload); +#ifndef GIT_DEPRECATE_HARD /** -* 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 -*/ + * 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. + * + * @deprecated use git_packbuilder_name + * @param pb The packbuilder object + * @return 0 or an error code + */ GIT_EXTERN(const git_oid *) git_packbuilder_hash(git_packbuilder *pb); +#endif + +/** + * Get the unique name for the resulting packfile. + * + * The packfile's name is derived from the packfile's content. + * This is only correct after the packfile has been written. + * + * @param pb the packbuilder instance + * @return a NUL terminated string for the packfile name + */ +GIT_EXTERN(const char *) git_packbuilder_name(git_packbuilder *pb); /** * Callback used to iterate over packed objects @@ -217,7 +233,15 @@ GIT_EXTERN(size_t) git_packbuilder_object_count(git_packbuilder *pb); */ GIT_EXTERN(size_t) git_packbuilder_written(git_packbuilder *pb); -/** Packbuilder progress notification function */ +/** + * Packbuilder progress notification function. + * + * @param stage the stage of the packbuilder + * @param current the current object + * @param total the total number of objects + * @param payload the callback payload + * @return 0 on success or an error code + */ typedef int GIT_CALLBACK(git_packbuilder_progress)( int stage, uint32_t current, @@ -231,6 +255,9 @@ typedef int GIT_CALLBACK(git_packbuilder_progress)( * @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. + * When progress_cb returns an error, the pack building process will be + * aborted and the error will be returned from the invoked function. + * `pb` must then be freed. * @param progress_cb_payload Payload for progress callback. * @return 0 or an error code */ @@ -248,4 +275,5 @@ GIT_EXTERN(void) git_packbuilder_free(git_packbuilder *pb); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/patch.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/patch.h index fde9659..7824821 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/patch.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/patch.h @@ -14,7 +14,7 @@ /** * @file git2/patch.h - * @brief Patch handling routines. + * @brief Patches store the textual diffs in a delta * @ingroup Git * @{ */ @@ -139,17 +139,25 @@ GIT_EXTERN(int) git_patch_from_buffers( /** * Free a git_patch object. + * + * @param patch The patch to free. */ 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. + * + * @param patch The patch in which to get the delta. + * @return The delta associated with the patch. */ GIT_EXTERN(const git_diff_delta *) git_patch_get_delta(const git_patch *patch); /** * Get the number of hunks in a patch + * + * @param patch The patch in which to get the number of hunks. + * @return The number of hunks of the patch. */ GIT_EXTERN(size_t) git_patch_num_hunks(const git_patch *patch); @@ -275,8 +283,7 @@ GIT_EXTERN(int) git_patch_to_buf( git_buf *out, git_patch *patch); -GIT_END_DECL - /**@}*/ +GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/pathspec.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/pathspec.h index 3299657..6f6918c 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/pathspec.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/pathspec.h @@ -12,6 +12,13 @@ #include "strarray.h" #include "diff.h" +/** + * @file git2/pathspec.h + * @brief Specifiers for path matching + * @defgroup git_pathspec Specifiers for path matching + * @ingroup Git + * @{ + */ GIT_BEGIN_DECL /** @@ -69,7 +76,7 @@ typedef enum { * 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_FAILURES_ONLY = (1u << 5) } git_pathspec_flag_t; /** @@ -276,5 +283,7 @@ GIT_EXTERN(size_t) git_pathspec_match_list_failed_entrycount( 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/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/proxy.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/proxy.h index 653425d..195ab75 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/proxy.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/proxy.h @@ -12,6 +12,12 @@ #include "cert.h" #include "credential.h" +/** + * @file git2/proxy.h + * @brief TLS proxies + * @ingroup Git + * @{ + */ GIT_BEGIN_DECL /** @@ -32,7 +38,7 @@ typedef enum { /** * Connect via the URL given in the options */ - GIT_PROXY_SPECIFIED, + GIT_PROXY_SPECIFIED } git_proxy_t; /** @@ -78,7 +84,10 @@ typedef struct { void *payload; } git_proxy_options; +/** Current version for the `git_proxy_options` structure */ #define GIT_PROXY_OPTIONS_VERSION 1 + +/** Static constructor for `git_proxy_options` */ #define GIT_PROXY_OPTIONS_INIT {GIT_PROXY_OPTIONS_VERSION} /** @@ -93,6 +102,7 @@ typedef struct { */ GIT_EXTERN(int) git_proxy_options_init(git_proxy_options *opts, unsigned int version); +/** @} */ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/rebase.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/rebase.h index 11e452c..3fb3e57 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/rebase.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/rebase.h @@ -17,8 +17,8 @@ /** * @file git2/rebase.h - * @brief Git rebase routines - * @defgroup git_rebase Git merge routines + * @brief Rebase manipulates commits, placing them on a new parent + * @defgroup git_rebase Rebase manipulates commits, placing them on a new parent * @ingroup Git * @{ */ @@ -67,10 +67,9 @@ typedef struct { /** * 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_rebase_next` and `git_rebase_abort`. Note that during + * `abort`, these options will add an implied `GIT_CHECKOUT_FORCE` + * to match git semantics. */ git_checkout_options checkout_options; @@ -152,10 +151,13 @@ typedef enum { * No commit will be cherry-picked. The client should run the given * command and (if successful) continue. */ - GIT_REBASE_OPERATION_EXEC, + GIT_REBASE_OPERATION_EXEC } git_rebase_operation_t; +/** Current version for the `git_rebase_options` structure */ #define GIT_REBASE_OPTIONS_VERSION 1 + +/** Static constructor for `git_rebase_options` */ #define GIT_REBASE_OPTIONS_INIT \ { GIT_REBASE_OPTIONS_VERSION, 0, 0, NULL, GIT_MERGE_OPTIONS_INIT, \ GIT_CHECKOUT_OPTIONS_INIT, NULL, NULL } @@ -242,6 +244,7 @@ GIT_EXTERN(int) git_rebase_open( /** * Gets the original `HEAD` ref name for merge rebases. * + * @param rebase The in-progress rebase. * @return The original `HEAD` ref name */ GIT_EXTERN(const char *) git_rebase_orig_head_name(git_rebase *rebase); @@ -249,6 +252,7 @@ GIT_EXTERN(const char *) git_rebase_orig_head_name(git_rebase *rebase); /** * Gets the original `HEAD` id for merge rebases. * + * @param rebase The in-progress rebase. * @return The original `HEAD` id */ GIT_EXTERN(const git_oid *) git_rebase_orig_head_id(git_rebase *rebase); @@ -256,6 +260,7 @@ GIT_EXTERN(const git_oid *) git_rebase_orig_head_id(git_rebase *rebase); /** * Gets the `onto` ref name for merge rebases. * + * @param rebase The in-progress rebase. * @return The `onto` ref name */ GIT_EXTERN(const char *) git_rebase_onto_name(git_rebase *rebase); @@ -263,6 +268,7 @@ GIT_EXTERN(const char *) git_rebase_onto_name(git_rebase *rebase); /** * Gets the `onto` id for merge rebases. * + * @param rebase The in-progress rebase. * @return The `onto` id */ GIT_EXTERN(const git_oid *) git_rebase_onto_id(git_rebase *rebase); @@ -322,6 +328,10 @@ GIT_EXTERN(int) git_rebase_next( * This is only applicable for in-memory rebases; for rebases within * a working directory, the changes were applied to the repository's * index. + * + * @param index The result index of the last operation. + * @param rebase The in-progress rebase. + * @return 0 or an error code */ GIT_EXTERN(int) git_rebase_inmemory_index( git_index **index, @@ -388,4 +398,5 @@ GIT_EXTERN(void) git_rebase_free(git_rebase *rebase); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/refdb.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/refdb.h index a315876..536ef10 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/refdb.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/refdb.h @@ -14,8 +14,8 @@ /** * @file git2/refdb.h - * @brief Git custom refs backend functions - * @defgroup git_refdb Git custom refs backend API + * @brief A database for references (branches and tags) + * @defgroup git_refdb A database for references (branches and tags) * @ingroup Git * @{ */ @@ -52,6 +52,9 @@ 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. + * + * @param refdb The reference database to optimize. + * @return 0 or an error code. */ GIT_EXTERN(int) git_refdb_compress(git_refdb *refdb); diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/reflog.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/reflog.h index c949a28..a0956c6 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/reflog.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/reflog.h @@ -13,8 +13,8 @@ /** * @file git2/reflog.h - * @brief Git reflog management routines - * @defgroup git_reflog Git reflog management routines + * @brief Reference logs store how references change + * @defgroup git_reflog Reference logs store how references change * @ingroup Git * @{ */ @@ -31,7 +31,7 @@ GIT_BEGIN_DECL * git_reflog_free(). * * @param out pointer to reflog - * @param repo the repostiory + * @param repo the repository * @param name reference to look up * @return 0 or an error code */ @@ -167,4 +167,5 @@ GIT_EXTERN(void) git_reflog_free(git_reflog *reflog); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/refs.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/refs.h index 7ebb209..d820f2a 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/refs.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/refs.h @@ -14,8 +14,8 @@ /** * @file git2/refs.h - * @brief Git reference management routines - * @defgroup git_reference Git reference management routines + * @brief References point to a commit; generally these are branches and tags + * @defgroup git_reference References point to a commit; generally these are branches and tags * @ingroup Git * @{ */ @@ -29,7 +29,7 @@ GIT_BEGIN_DECL * 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[out] 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. @@ -57,7 +57,7 @@ GIT_EXTERN(int) git_reference_name_to_id( /** * Lookup a reference by DWIMing its short name * - * Apply the git precendence rules to the given shorthand to determine + * Apply the git precedence rules to the given shorthand to determine * which reference the user is referring to. * * @param out pointer in which to store the reference @@ -371,6 +371,7 @@ GIT_EXTERN(int) git_reference_set_target( * reflog is enabled for the repository. We only rename * the reflog if it exists. * + * @param[out] new_ref The new reference * @param ref The reference to rename * @param new_name The new name for the reference * @param force Overwrite an existing reference @@ -406,6 +407,7 @@ GIT_EXTERN(int) git_reference_delete(git_reference *ref); * This method removes the named reference from the repository without * looking at its old value. * + * @param repo The repository to remove the reference from * @param name The reference to remove * @return 0 or an error code */ @@ -518,7 +520,7 @@ GIT_EXTERN(int) git_reference_cmp( /** * Create an iterator for the repo's references * - * @param out pointer in which to store the iterator + * @param[out] out pointer in which to store the iterator * @param repo the repository * @return 0 or an error code */ @@ -543,7 +545,7 @@ GIT_EXTERN(int) git_reference_iterator_glob_new( /** * Get the next reference * - * @param out pointer in which to store the reference + * @param[out] 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 */ @@ -686,7 +688,7 @@ typedef enum { * so the `ONELEVEL` naming rules aren't enforced and 'master' * becomes a valid name. */ - GIT_REFERENCE_FORMAT_REFSPEC_SHORTHAND = (1u << 2), + GIT_REFERENCE_FORMAT_REFSPEC_SHORTHAND = (1u << 2) } git_reference_format_t; /** @@ -724,7 +726,7 @@ GIT_EXTERN(int) git_reference_normalize_name( * 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[out] 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). @@ -768,4 +770,5 @@ GIT_EXTERN(const char *) git_reference_shorthand(const git_reference *ref); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/refspec.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/refspec.h index eaf7747..49d5f89 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/refspec.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/refspec.h @@ -14,8 +14,8 @@ /** * @file git2/refspec.h - * @brief Git refspec attributes - * @defgroup git_refspec Git refspec attributes + * @brief Refspecs map local references to remote references + * @defgroup git_refspec Refspecs map local references to remote references * @ingroup Git * @{ */ @@ -58,7 +58,7 @@ 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 + * @return the refspec's original string */ GIT_EXTERN(const char *) git_refspec_string(const git_refspec *refspec); @@ -79,7 +79,16 @@ GIT_EXTERN(int) git_refspec_force(const git_refspec *refspec); GIT_EXTERN(git_direction) git_refspec_direction(const git_refspec *spec); /** - * Check if a refspec's source descriptor matches a reference + * Check if a refspec's source descriptor matches a negative 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_negative(const git_refspec *refspec, const char *refname); + +/** + * Check if a refspec's source descriptor matches a reference * * @param refspec the refspec * @param refname the name of the reference to check @@ -116,6 +125,7 @@ GIT_EXTERN(int) git_refspec_transform(git_buf *out, const git_refspec *spec, con */ GIT_EXTERN(int) git_refspec_rtransform(git_buf *out, const git_refspec *spec, const char *name); +/** @} */ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/remote.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/remote.h index 4d57eaa..2472ded 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/remote.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/remote.h @@ -19,8 +19,8 @@ /** * @file git2/remote.h - * @brief Git remote management functions - * @defgroup git_remote remote management functions + * @brief Remotes are where local repositories fetch from and push to + * @defgroup git_remote Remotes are where local repositories fetch from and push to * @ingroup Git * @{ */ @@ -41,6 +41,30 @@ GIT_EXTERN(int) git_remote_create( const char *name, const char *url); +/** + * Remote redirection settings; whether redirects to another host + * are permitted. By default, git will follow a redirect on the + * initial request (`/info/refs`), but not subsequent requests. + */ +typedef enum { + /** + * Do not follow any off-site redirects at any stage of + * the fetch or push. + */ + GIT_REMOTE_REDIRECT_NONE = (1 << 0), + + /** + * Allow off-site redirects only upon the initial request. + * This is the default. + */ + GIT_REMOTE_REDIRECT_INITIAL = (1 << 1), + + /** + * Allow redirects at any stage in the fetch or push. + */ + GIT_REMOTE_REDIRECT_ALL = (1 << 2) +} git_remote_redirect_t; + /** * Remote creation options flags */ @@ -49,9 +73,20 @@ typedef enum { 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_SKIP_DEFAULT_FETCHSPEC = (1 << 1) } git_remote_create_flags; +/** + * How to handle reference updates. + */ +typedef enum { + /* Write the fetch results to FETCH_HEAD. */ + GIT_REMOTE_UPDATE_FETCHHEAD = (1 << 0), + + /* Report unchanged tips in the update_refs callback. */ + GIT_REMOTE_UPDATE_REPORT_UNCHANGED = (1 << 1) +} git_remote_update_flags; + /** * Remote creation options structure * @@ -81,7 +116,10 @@ typedef struct git_remote_create_options { unsigned int flags; } git_remote_create_options; +/** Current version for the `git_remote_create_options` structure */ #define GIT_REMOTE_CREATE_OPTIONS_VERSION 1 + +/** Static constructor for `git_remote_create_options` */ #define GIT_REMOTE_CREATE_OPTIONS_INIT {GIT_REMOTE_CREATE_OPTIONS_VERSION} /** @@ -211,9 +249,9 @@ 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. + * If url.*.insteadOf has been configured for this URL, it will return + * the modified URL. This function does not consider if a push url has + * been configured for this remote (use `git_remote_pushurl` if needed). * * @param remote the remote * @return a pointer to the url @@ -300,6 +338,7 @@ GIT_EXTERN(int) git_remote_add_fetch(git_repository *repo, const char *remote, c * * @param array pointer to the array in which to store the strings * @param remote the remote to query + * @return 0 or an error code. */ GIT_EXTERN(int) git_remote_get_fetch_refspecs(git_strarray *array, const git_remote *remote); @@ -324,6 +363,7 @@ GIT_EXTERN(int) git_remote_add_push(git_repository *repo, const char *remote, co * * @param array pointer to the array in which to store the strings * @param remote the remote to query + * @return 0 or an error code. */ GIT_EXTERN(int) git_remote_get_push_refspecs(git_strarray *array, const git_remote *remote); @@ -344,23 +384,6 @@ GIT_EXTERN(size_t) git_remote_refspec_count(const git_remote *remote); */ 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 * @@ -443,10 +466,18 @@ GIT_EXTERN(int) git_remote_list(git_strarray *out, git_repository *repo); typedef enum git_remote_completion_t { GIT_REMOTE_COMPLETION_DOWNLOAD, GIT_REMOTE_COMPLETION_INDEXING, - GIT_REMOTE_COMPLETION_ERROR, + GIT_REMOTE_COMPLETION_ERROR } git_remote_completion_t; -/** Push network progress notification function */ +/** + * Push network progress notification callback. + * + * @param current The number of objects pushed so far + * @param total The total number of objects to push + * @param bytes The number of bytes pushed + * @param payload The user-specified payload callback + * @return 0 or an error code to stop the transfer + */ typedef int GIT_CALLBACK(git_push_transfer_progress_cb)( unsigned int current, unsigned int total, @@ -482,8 +513,12 @@ typedef struct { * as commands to the destination. * @param len number of elements in `updates` * @param payload Payload provided by the caller + * @return 0 or an error code to stop the push */ -typedef int GIT_CALLBACK(git_push_negotiation)(const git_push_update **updates, size_t len, void *payload); +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. @@ -548,7 +583,8 @@ struct git_remote_callbacks { * 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); + int GIT_CALLBACK(completion)(git_remote_completion_t type, + void *data); /** * This will be called if the remote host requires @@ -574,11 +610,22 @@ struct git_remote_callbacks { */ git_indexer_progress_cb transfer_progress; +#ifdef GIT_DEPRECATE_HARD + void *reserved_update_tips; +#else /** - * Each time a reference is updated locally, this function - * will be called with information about it. + * Deprecated callback for reference updates, callers should + * set `update_refs` instead. This is retained for backward + * compatibility; if you specify both `update_refs` and + * `update_tips`, then only the `update_refs` function will + * be called. + * + * @deprecated the `update_refs` callback in this structure + * should be preferred */ - int GIT_CALLBACK(update_tips)(const char *refname, const git_oid *a, const git_oid *b, void *data); + int GIT_CALLBACK(update_tips)(const char *refname, + const git_oid *a, const git_oid *b, void *data); +#endif /** * Function to call with progress information during pack @@ -635,9 +682,25 @@ struct git_remote_callbacks { */ git_url_resolve_cb resolve_url; #endif + + /** + * Each time a reference is updated locally, this function + * will be called with information about it. This should be + * preferred over the `update_tips` callback in this + * structure. + */ + int GIT_CALLBACK(update_refs)( + const char *refname, + const git_oid *a, + const git_oid *b, + git_refspec *spec, + void *data); }; +/** Current version for the `git_remote_callbacks_options` structure */ #define GIT_REMOTE_CALLBACKS_VERSION 1 + +/** Static constructor for `git_remote_callbacks_options` */ #define GIT_REMOTE_CALLBACKS_INIT {GIT_REMOTE_CALLBACKS_VERSION} /** @@ -665,7 +728,7 @@ typedef enum { /** * Force pruning off */ - GIT_FETCH_NO_PRUNE, + GIT_FETCH_NO_PRUNE } git_fetch_prune_t; /** @@ -690,9 +753,18 @@ typedef enum { /** * Ask for the all the tags. */ - GIT_REMOTE_DOWNLOAD_TAGS_ALL, + GIT_REMOTE_DOWNLOAD_TAGS_ALL } git_remote_autotag_option_t; +/** Constants for fetch depth (shallowness of fetch). */ +typedef enum { + /** The fetch is "full" (not shallow). This is the default. */ + GIT_FETCH_DEPTH_FULL = 0, + + /** The fetch should "unshallow" and fetch missing data. */ + GIT_FETCH_DEPTH_UNSHALLOW = 2147483647 +} git_fetch_depth_t; + /** * Fetch options structure. * @@ -715,10 +787,9 @@ typedef struct { 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. + * How to handle reference updates; see `git_remote_update_flags`. */ - int update_fetchhead; + unsigned int update_fetchhead; /** * Determines how to behave regarding tags on the remote, such @@ -734,15 +805,39 @@ typedef struct { */ git_proxy_options proxy_opts; + /** + * Depth of the fetch to perform, or `GIT_FETCH_DEPTH_FULL` + * (or `0`) for full history, or `GIT_FETCH_DEPTH_UNSHALLOW` + * to "unshallow" a shallow repository. + * + * The default is full (`GIT_FETCH_DEPTH_FULL` or `0`). + */ + int depth; + + /** + * Whether to allow off-site redirects. If this is not + * specified, the `http.followRedirects` configuration setting + * will be consulted. + */ + git_remote_redirect_t follow_redirects; + /** * Extra headers for this fetch operation */ git_strarray custom_headers; } git_fetch_options; +/** Current version for the `git_fetch_options` structure */ #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 } + +/** Static constructor for `git_fetch_options` */ +#define GIT_FETCH_OPTIONS_INIT { \ + GIT_FETCH_OPTIONS_VERSION, \ + GIT_REMOTE_CALLBACKS_INIT, \ + GIT_FETCH_PRUNE_UNSPECIFIED, \ + GIT_REMOTE_UPDATE_FETCHHEAD, \ + GIT_REMOTE_DOWNLOAD_TAGS_UNSPECIFIED, \ + GIT_PROXY_OPTIONS_INIT } /** * Initialize git_fetch_options structure @@ -785,13 +880,28 @@ typedef struct { */ git_proxy_options proxy_opts; + /** + * Whether to allow off-site redirects. If this is not + * specified, the `http.followRedirects` configuration setting + * will be consulted. + */ + git_remote_redirect_t follow_redirects; + /** * Extra headers for this push operation */ git_strarray custom_headers; + + /** + * "Push options" to deliver to the remote. + */ + git_strarray remote_push_options; } git_push_options; +/** Current version for the `git_push_options` structure */ #define GIT_PUSH_OPTIONS_VERSION 1 + +/** Static constructor for `git_push_options` */ #define GIT_PUSH_OPTIONS_INIT { GIT_PUSH_OPTIONS_VERSION, 1, GIT_REMOTE_CALLBACKS_INIT, GIT_PROXY_OPTIONS_INIT } /** @@ -809,7 +919,103 @@ GIT_EXTERN(int) git_push_options_init( unsigned int version); /** - * Download and index the packfile + * Remote creation options structure + * + * Initialize with `GIT_REMOTE_CREATE_OPTIONS_INIT`. Alternatively, you can + * use `git_remote_create_options_init`. + * + */ +typedef struct { + unsigned int version; + + /** Callbacks to use for this connection */ + git_remote_callbacks callbacks; + + /** HTTP Proxy settings */ + git_proxy_options proxy_opts; + + /** + * Whether to allow off-site redirects. If this is not + * specified, the `http.followRedirects` configuration setting + * will be consulted. + */ + git_remote_redirect_t follow_redirects; + + /** Extra HTTP headers to use in this connection */ + git_strarray custom_headers; +} git_remote_connect_options; + +/** Current version for the `git_remote_connect_options` structure */ +#define GIT_REMOTE_CONNECT_OPTIONS_VERSION 1 + +/** Static constructor for `git_remote_connect_options` */ +#define GIT_REMOTE_CONNECT_OPTIONS_INIT { \ + GIT_REMOTE_CONNECT_OPTIONS_VERSION, \ + GIT_REMOTE_CALLBACKS_INIT, \ + GIT_PROXY_OPTIONS_INIT } + +/** + * Initialize git_remote_connect_options structure. + * + * Initializes a `git_remote_connect_options` with default values. + * Equivalent to creating an instance with + * `GIT_REMOTE_CONNECT_OPTIONS_INIT`. + * + * @param opts The `git_remote_connect_options` struct to initialize. + * @param version The struct version; pass `GIT_REMOTE_CONNECT_OPTIONS_VERSION`. + * @return Zero on success; -1 on failure. + */ +GIT_EXTERN(int) git_remote_connect_options_init( + git_remote_connect_options *opts, + unsigned int version); + +/** + * 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 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); + +/** + * Open a connection to a remote with extended options. + * + * The transport is selected based on the URL; the direction argument + * is due to a limitation of the git protocol which starts up a + * specific binary which can only do the one or the other. + * + * The given options structure will form the defaults for connection + * options and callback setup. Callers may override these defaults + * by specifying `git_fetch_options` or `git_push_options` in + * subsequent calls. + * + * @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 opts the remote connection options + * @return 0 or an error code + */ +GIT_EXTERN(int) git_remote_connect_ext( + git_remote *remote, + git_direction direction, + const git_remote_connect_options *opts); + +/** + * 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 @@ -818,19 +1024,31 @@ GIT_EXTERN(int) git_push_options_init( * The .idx file will be created and both it and the packfile with be * renamed to their final name. * + * If options are specified and this remote is already connected then + * the existing remote connection options will be discarded and the + * remote will now use the new options. + * * @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 + * @param opts the options to use for this fetch or NULL * @return 0 or an error code */ - GIT_EXTERN(int) git_remote_download(git_remote *remote, const git_strarray *refspecs, const git_fetch_options *opts); + 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. + * the remote git which objects are missing, create a packfile with + * the missing objects and send it. + * + * If options are specified and this remote is already connected then + * the existing remote connection options will be discarded and the + * remote will now use the new options. * * @param remote the remote * @param refspecs the refspecs to use for this negotiation and @@ -838,39 +1056,49 @@ GIT_EXTERN(int) git_push_options_init( * @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); +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 + * Update the tips to the new state. + * + * If callbacks are not specified then the callbacks specified to + * `git_remote_connect` will be used (if it was called). * * @param remote the remote to update + * @param callbacks pointer to the callback structure to use or NULL + * @param update_flags the git_remote_update_flags for these tips. + * @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()`. * @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, + unsigned int update_flags, git_remote_autotag_option_t download_tags, const char *reflog_message); /** - * Download new data and update tips + * Download new data and update tips. * * Convenience function to connect to a remote, download the data, * disconnect and update the remote-tracking branches. * + * If options are specified and this remote is already connected then + * the existing remote connection options will be discarded and the + * remote will now use the new options. + * * @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 opts options to use for this fetch or NULL * @param reflog_message The message to insert into the reflogs. If NULL, the * default is "fetch" * @return 0 or an error code @@ -882,30 +1110,42 @@ GIT_EXTERN(int) git_remote_fetch( const char *reflog_message); /** - * Prune tracking refs that are no longer present on remote + * Prune tracking refs that are no longer present on remote. + * + * If callbacks are not specified then the callbacks specified to + * `git_remote_connect` will be used (if it was called). * * @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); +GIT_EXTERN(int) git_remote_prune( + git_remote *remote, + const git_remote_callbacks *callbacks); /** - * Perform a push + * Perform a push. * - * Peform all the steps from a push. + * If options are specified and this remote is already connected then + * the existing remote connection options will be discarded and the + * remote will now use the new options. * * @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 + * @return 0 or an error code. */ -GIT_EXTERN(int) git_remote_push(git_remote *remote, - const git_strarray *refspecs, - const git_push_options *opts); +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. + * + * @param remote the remote to get statistics for + * @return the git_indexer_progress for the remote */ GIT_EXTERN(const git_indexer_progress *) git_remote_stats(git_remote *remote); @@ -1005,4 +1245,5 @@ GIT_EXTERN(int) git_remote_default_branch(git_buf *out, git_remote *remote); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/repository.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/repository.h index 8d1cffc..b203576 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/repository.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/repository.h @@ -10,12 +10,14 @@ #include "common.h" #include "types.h" #include "oid.h" +#include "odb.h" #include "buffer.h" +#include "commit.h" /** * @file git2/repository.h - * @brief Git repository management routines - * @defgroup git_repository Git repository management routines + * @brief The repository stores revisions for a source tree + * @defgroup git_repository The repository stores revisions for a source tree * @ingroup Git * @{ */ @@ -30,7 +32,11 @@ GIT_BEGIN_DECL * 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 + * Note that the libgit2 library _must_ be initialized using + * `git_libgit2_init` before any APIs can be called, including + * this one. + * + * @param[out] out pointer to the repo which will be opened * @param path the path to the repository * @return 0 or an error code */ @@ -58,7 +64,9 @@ GIT_EXTERN(int) git_repository_open_from_worktree(git_repository **out, git_work * @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); +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. @@ -70,6 +78,10 @@ GIT_EXTERN(int) git_repository_wrap_odb(git_repository **out, git_odb *odb); * The method will automatically detect if the repository is bare * (if there is a repository). * + * Note that the libgit2 library _must_ be initialized using + * `git_libgit2_init` before any APIs can be called, including + * this one. + * * @param out A pointer to a user-allocated git_buf which will contain * the found path. * @@ -141,13 +153,17 @@ typedef enum { * `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_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 + * Note that the libgit2 library _must_ be initialized using + * `git_libgit2_init` before any APIs can be called, including + * this one. + * + * @param[out] 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 @@ -175,7 +191,11 @@ GIT_EXTERN(int) git_repository_open_ext( * if you're e.g. hosting git repositories and need to access them * efficiently * - * @param out Pointer to the repo which will be opened. + * Note that the libgit2 library _must_ be initialized using + * `git_libgit2_init` before any APIs can be called, including + * this one. + * + * @param[out] 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 */ @@ -200,7 +220,11 @@ GIT_EXTERN(void) git_repository_free(git_repository *repo); * TODO: * - Reinit the repository * - * @param out pointer to the repo which will be created or reinitialized + * Note that the libgit2 library _must_ be initialized using + * `git_libgit2_init` before any APIs can be called, including + * this one. + * + * @param[out] 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 @@ -267,7 +291,7 @@ typedef enum { * 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_RELATIVE_GITLINK = (1u << 6) } git_repository_init_flag_t; /** @@ -292,7 +316,7 @@ typedef enum { /** * Use "--shared=all" behavior, adding world readability. */ - GIT_REPOSITORY_INIT_SHARED_ALL = 0002777, + GIT_REPOSITORY_INIT_SHARED_ALL = 0002777 } git_repository_init_mode_t; /** @@ -351,9 +375,21 @@ typedef struct { * pointing to this URL. */ const char *origin_url; + +#ifdef GIT_EXPERIMENTAL_SHA256 + /** + * + * Type of object IDs to use for this repository, or 0 for + * default (currently SHA1). + */ + git_oid_t oid_type; +#endif } git_repository_init_options; +/** Current version for the `git_repository_init_options` structure */ #define GIT_REPOSITORY_INIT_OPTIONS_VERSION 1 + +/** Static constructor for `git_repository_init_options` */ #define GIT_REPOSITORY_INIT_OPTIONS_INIT {GIT_REPOSITORY_INIT_OPTIONS_VERSION} /** @@ -378,6 +414,10 @@ GIT_EXTERN(int) git_repository_init_options_init( * auto-detect the case sensitivity of the file system and if the * file system supports file mode bits correctly. * + * Note that the libgit2 library _must_ be initialized using + * `git_libgit2_init` before any APIs can be called, including + * this one. + * * @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. @@ -395,7 +435,7 @@ GIT_EXTERN(int) git_repository_init_ext( * `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[out] 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 @@ -456,7 +496,9 @@ 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. + * apart from HEAD, which must be pointing to the unborn master branch, + * or the branch specified for the repository in the `init.defaultBranch` + * configuration variable. * * @param repo Repo to test * @return 1 if the repository is empty, 0 if it isn't, error code @@ -482,6 +524,7 @@ typedef enum { GIT_REPOSITORY_ITEM_LOGS, GIT_REPOSITORY_ITEM_MODULES, GIT_REPOSITORY_ITEM_WORKTREES, + GIT_REPOSITORY_ITEM_WORKTREE_CONFIG, GIT_REPOSITORY_ITEM__LAST } git_repository_item_t; @@ -525,7 +568,7 @@ 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. @@ -613,7 +656,7 @@ GIT_EXTERN(int) git_repository_config_snapshot(git_config **out, git_repository * The ODB must be freed once it's no longer being used by * the user. * - * @param out Pointer to store the loaded ODB + * @param[out] out Pointer to store the loaded ODB * @param repo A repository object * @return 0, or an error code */ @@ -629,7 +672,7 @@ GIT_EXTERN(int) git_repository_odb(git_odb **out, git_repository *repo); * The refdb must be freed once it's no longer being used by * the user. * - * @param out Pointer to store the loaded refdb + * @param[out] out Pointer to store the loaded refdb * @param repo A repository object * @return 0, or an error code */ @@ -645,7 +688,7 @@ GIT_EXTERN(int) git_repository_refdb(git_refdb **out, git_repository *repo); * The index must be freed once it's no longer being used by * the user. * - * @param out Pointer to store the loaded index + * @param[out] out Pointer to store the loaded index * @param repo A repository object * @return 0, or an error code */ @@ -673,6 +716,9 @@ 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. + * + * @param repo Repository to remove prepared message from. + * @return 0 or an error code. */ GIT_EXTERN(int) git_repository_message_remove(git_repository *repo); @@ -808,19 +854,19 @@ GIT_EXTERN(int) git_repository_set_head( * 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 + * If the provided committish 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 + * @param committish 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); + const git_oid *committish); /** * Make the repository HEAD directly point to the Commit. @@ -832,11 +878,13 @@ GIT_EXTERN(int) git_repository_set_head_detached( * * See the documentation for `git_repository_set_head_detached()`. * - * @see git_repository_set_head_detached + * @param repo Repository pointer + * @param committish annotated commit to point HEAD to + * @return 0 on success, or an error code */ GIT_EXTERN(int) git_repository_set_head_detached_from_annotated( git_repository *repo, - const git_annotated_commit *commitish); + const git_annotated_commit *committish); /** * Detach the HEAD. @@ -846,7 +894,7 @@ GIT_EXTERN(int) git_repository_set_head_detached_from_annotated( * 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 + * If the HEAD is already detached and points to a non committish, the HEAD is * unaltered, and -1 is returned. * * Otherwise, the HEAD will be detached and point to the peeled Commit. @@ -876,7 +924,7 @@ typedef enum { 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_APPLY_MAILBOX_OR_REBASE } git_repository_state_t; /** @@ -925,9 +973,10 @@ GIT_EXTERN(int) git_repository_is_shallow(git_repository *repo); * 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[out] name where to store the pointer to the name + * @param[out] email where to store the pointer to the email * @param repo the repository + * @return 0 or an error code */ GIT_EXTERN(int) git_repository_ident(const char **name, const char **email, const git_repository *repo); @@ -941,9 +990,30 @@ GIT_EXTERN(int) git_repository_ident(const char **name, const char **email, cons * @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 + * @return 0 or an error code. */ GIT_EXTERN(int) git_repository_set_ident(git_repository *repo, const char *name, const char *email); +/** + * Gets the object type used by this repository. + * + * @param repo the repository + * @return the object id type + */ +GIT_EXTERN(git_oid_t) git_repository_oid_type(git_repository *repo); + +/** + * Gets the parents of the next commit, given the current repository state. + * Generally, this is the HEAD commit, except when performing a merge, in + * which case it is two or more commits. + * + * @param commits a `git_commitarray` that will contain the commit parents + * @param repo the repository + * @return 0 or an error code + */ +GIT_EXTERN(int) git_repository_commit_parents(git_commitarray *commits, git_repository *repo); + /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/reset.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/reset.h index be25414..0123f7c 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/reset.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/reset.h @@ -14,7 +14,7 @@ /** * @file git2/reset.h - * @brief Git reset management routines + * @brief Reset will update the local repository to a prior state * @ingroup Git * @{ */ @@ -26,7 +26,7 @@ GIT_BEGIN_DECL 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_HARD = 3 /**< MIXED plus changes in working tree discarded */ } git_reset_t; /** @@ -48,7 +48,7 @@ typedef enum { * * @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 + * git_tag. When a git_tag is being passed, it should be dereferenceable * to a git_commit which oid will be used as the target of the branch. * * @param reset_type Kind of reset operation to perform. @@ -75,11 +75,23 @@ GIT_EXTERN(int) git_reset( * * See the documentation for `git_reset()`. * - * @see git_reset + * @param repo Repository where to perform the reset operation. + * + * @param target Annotated commit to which the Head should be moved to. + * This object must belong to the given `repo`, it will be dereferenced + * 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_from_annotated( git_repository *repo, - const git_annotated_commit *commit, + const git_annotated_commit *target, git_reset_t reset_type, const git_checkout_options *checkout_opts); @@ -108,4 +120,5 @@ GIT_EXTERN(int) git_reset_default( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/revert.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/revert.h index 331e90d..ec51eca 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/revert.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/revert.h @@ -13,8 +13,8 @@ /** * @file git2/revert.h - * @brief Git revert routines - * @defgroup git_revert Git revert routines + * @brief Cherry-pick the inverse of a change to "undo" its effects + * @defgroup git_revert Cherry-pick the inverse of a change to "undo" its effects * @ingroup Git * @{ */ @@ -33,8 +33,13 @@ typedef struct { git_checkout_options checkout_opts; /**< Options for the checkout */ } git_revert_options; +/** Current version for the `git_revert_options` structure */ #define GIT_REVERT_OPTIONS_VERSION 1 -#define GIT_REVERT_OPTIONS_INIT {GIT_REVERT_OPTIONS_VERSION, 0, GIT_MERGE_OPTIONS_INIT, GIT_CHECKOUT_OPTIONS_INIT} + +/** Static constructor for `git_revert_options` */ +#define GIT_REVERT_OPTIONS_INIT { \ + GIT_REVERT_OPTIONS_VERSION, 0, \ + GIT_MERGE_OPTIONS_INIT, GIT_CHECKOUT_OPTIONS_INIT } /** * Initialize git_revert_options structure @@ -87,5 +92,5 @@ GIT_EXTERN(int) git_revert( /** @} */ GIT_END_DECL -#endif +#endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/revparse.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/revparse.h index e14ddee..c14fe3d 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/revparse.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/revparse.h @@ -12,8 +12,8 @@ /** * @file git2/revparse.h - * @brief Git revision parsing routines - * @defgroup git_revparse Git revision parsing routines + * @brief Parse the textual revision information + * @defgroup git_revparse Parse the textual revision information * @ingroup Git * @{ */ @@ -74,7 +74,7 @@ typedef enum { /** 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_MERGE_BASE = 1 << 2 } git_revspec_t; /** @@ -107,7 +107,7 @@ GIT_EXTERN(int) git_revparse( git_repository *repo, const char *spec); - /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/revwalk.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/revwalk.h index 98dcbf8..7c4ac54 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/revwalk.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/revwalk.h @@ -13,8 +13,8 @@ /** * @file git2/revwalk.h - * @brief Git revision traversal routines - * @defgroup git_revwalk Git revision traversal routines + * @brief Traverse (walk) the commit graph (revision history) + * @defgroup git_revwalk Traverse (walk) the commit graph (revision history) * @ingroup Git * @{ */ @@ -49,7 +49,7 @@ typedef enum { * order; this sorting mode can be combined with * any of the above. */ - GIT_SORT_REVERSE = 1 << 2, + GIT_SORT_REVERSE = 1 << 2 } git_sort_t; /** @@ -249,6 +249,7 @@ GIT_EXTERN(int) git_revwalk_push_range(git_revwalk *walk, const char *range); * * No parents other than the first for each commit will be enqueued. * + * @param walk The revision walker. * @return 0 or an error code */ GIT_EXTERN(int) git_revwalk_simplify_first_parent(git_revwalk *walk); @@ -277,6 +278,7 @@ GIT_EXTERN(git_repository *) git_revwalk_repository(git_revwalk *walk); * * @param commit_id oid of Commit * @param payload User-specified pointer to data to be passed as data payload + * @return non-zero to hide the commmit and it parent. */ typedef int GIT_CALLBACK(git_revwalk_hide_cb)( const git_oid *commit_id, @@ -288,6 +290,7 @@ typedef int GIT_CALLBACK(git_revwalk_hide_cb)( * @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 + * @return 0 or an error code. */ GIT_EXTERN(int) git_revwalk_add_hide_cb( git_revwalk *walk, @@ -296,4 +299,5 @@ GIT_EXTERN(int) git_revwalk_add_hide_cb( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/signature.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/signature.h index b14f3ea..20ec24b 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/signature.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/signature.h @@ -12,9 +12,13 @@ /** * @file git2/signature.h - * @brief Git signature creation + * @brief Signatures are the actor in a repository and when they acted * @defgroup git_signature Git signature creation * @ingroup Git + * + * Signatures contain the information about the actor (committer or + * author) in a repository, and the time that they performed the + * commit, or authoring. * @{ */ GIT_BEGIN_DECL @@ -48,6 +52,42 @@ GIT_EXTERN(int) git_signature_new(git_signature **out, const char *name, const c */ GIT_EXTERN(int) git_signature_now(git_signature **out, const char *name, const char *email); +/** + * Create a new author and/or committer signatures with default + * information based on the configuration and environment variables. + * + * If `author_out` is set, it will be populated with the author + * information. The `GIT_AUTHOR_NAME` and `GIT_AUTHOR_EMAIL` + * environment variables will be honored, and `user.name` and + * `user.email` configuration options will be honored if the + * environment variables are unset. For timestamps, `GIT_AUTHOR_DATE` + * will be used, otherwise the current time will be used. + * + * If `committer_out` is set, it will be populated with the + * committer information. The `GIT_COMMITTER_NAME` and + * `GIT_COMMITTER_EMAIL` environment variables will be honored, + * and `user.name` and `user.email` configuration options will + * be honored if the environment variables are unset. For timestamps, + * `GIT_COMMITTER_DATE` will be used, otherwise the current time will + * be used. + * + * If neither `GIT_AUTHOR_DATE` nor `GIT_COMMITTER_DATE` are set, + * both timestamps will be set to the same time. + * + * It will return `GIT_ENOTFOUND` if either the `user.name` or + * `user.email` are not set and there is no fallback from an environment + * variable. One of `author_out` or `committer_out` must be set. + * + * @param author_out pointer to set the author signature, or NULL + * @param committer_out pointer to set the committer signature, or NULL + * @param repo repository pointer + * @return 0 on success, GIT_ENOTFOUND if config is missing, or error code + */ +GIT_EXTERN(int) git_signature_default_from_env( + git_signature **author_out, + git_signature **committer_out, + git_repository *repo); + /** * Create a new action signature with default user and now timestamp. * @@ -56,6 +96,10 @@ GIT_EXTERN(int) git_signature_now(git_signature **out, const char *name, const c * based on that information. It will return GIT_ENOTFOUND if either the * user.name or user.email are not set. * + * Note that these do not examine environment variables, only the + * configuration files. Use `git_signature_default_from_env` to + * consider the environment variables. + * * @param out new signature * @param repo repository pointer * @return 0 on success, GIT_ENOTFOUND if config is missing, or error code @@ -71,7 +115,7 @@ GIT_EXTERN(int) git_signature_default(git_signature **out, git_repository *repo) * * @param out new signature * @param buf signature string - * @return 0 on success, or an error code + * @return 0 on success, GIT_EINVALID if the signature is not parseable, or an error code */ GIT_EXTERN(int) git_signature_from_buffer(git_signature **out, const char *buf); @@ -100,4 +144,5 @@ GIT_EXTERN(void) git_signature_free(git_signature *sig); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/stash.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/stash.h index 795920e..ad28c32 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/stash.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/stash.h @@ -13,8 +13,13 @@ /** * @file git2/stash.h - * @brief Git stash management routines + * @brief Stashes stores some uncommitted state in the repository * @ingroup Git + * + * Stashes stores some uncommitted state in the repository; generally + * this allows a user to stash some changes so that they can restore + * the working directory to an unmodified state. This can allow a + * developer to work on two different changes in parallel. * @{ */ GIT_BEGIN_DECL @@ -45,6 +50,11 @@ typedef enum { * the working directory */ GIT_STASH_INCLUDE_IGNORED = (1 << 2), + + /** + * All changes in the index and working directory are left intact + */ + GIT_STASH_KEEP_ALL = (1 << 3) } git_stash_flags; /** @@ -52,15 +62,10 @@ typedef enum { * * @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. */ @@ -71,6 +76,63 @@ GIT_EXTERN(int) git_stash_save( const char *message, uint32_t flags); +/** + * Stash save options structure + * + * Initialize with `GIT_STASH_SAVE_OPTIONS_INIT`. Alternatively, you can + * use `git_stash_save_options_init`. + * + */ +typedef struct git_stash_save_options { + unsigned int version; + + /** Flags to control the stashing process. (see GIT_STASH_* above) */ + uint32_t flags; + + /** The identity of the person performing the stashing. */ + const git_signature *stasher; + + /** Optional description along with the stashed state. */ + const char *message; + + /** Optional paths that control which files are stashed. */ + git_strarray paths; +} git_stash_save_options; + +/** Current version for the `git_stash_save_options` structure */ +#define GIT_STASH_SAVE_OPTIONS_VERSION 1 + +/** Static constructor for `git_stash_save_options` */ +#define GIT_STASH_SAVE_OPTIONS_INIT { GIT_STASH_SAVE_OPTIONS_VERSION } + +/** + * Initialize git_stash_save_options structure + * + * Initializes a `git_stash_save_options` with default values. Equivalent to + * creating an instance with `GIT_STASH_SAVE_OPTIONS_INIT`. + * + * @param opts The `git_stash_save_options` struct to initialize. + * @param version The struct version; pass `GIT_STASH_SAVE_OPTIONS_VERSION`. + * @return Zero on success; -1 on failure. + */ +GIT_EXTERN(int) git_stash_save_options_init( + git_stash_save_options *opts, unsigned int version); + +/** + * Save the local modifications to a new stash, with options. + * + * @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 opts The stash options. + * @return 0 on success, GIT_ENOTFOUND where there's nothing to stash, + * or error code. + */ +GIT_EXTERN(int) git_stash_save_with_opts( + git_oid *out, + git_repository *repo, + const git_stash_save_options *opts); + /** Stash application flags. */ typedef enum { GIT_STASH_APPLY_DEFAULT = 0, @@ -78,7 +140,7 @@ typedef enum { /* 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_REINSTATE_INDEX = (1 << 0) } git_stash_apply_flags; /** Stash apply progression states */ @@ -104,13 +166,17 @@ typedef enum { GIT_STASH_APPLY_PROGRESS_CHECKOUT_MODIFIED, /** The stash was applied successfully. */ - GIT_STASH_APPLY_PROGRESS_DONE, + 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. + * + * @param progress the progress information + * @param payload the user-specified payload to the apply function + * @return 0 on success, -1 on error */ typedef int GIT_CALLBACK(git_stash_apply_progress_cb)( git_stash_apply_progress_t progress, @@ -137,7 +203,10 @@ typedef struct git_stash_apply_options { void *progress_payload; } git_stash_apply_options; +/** Current version for the `git_stash_apply_options` structure */ #define GIT_STASH_APPLY_OPTIONS_VERSION 1 + +/** Static constructor for `git_stash_apply_options` */ #define GIT_STASH_APPLY_OPTIONS_INIT { \ GIT_STASH_APPLY_OPTIONS_VERSION, \ GIT_STASH_APPLY_DEFAULT, \ @@ -171,8 +240,6 @@ GIT_EXTERN(int) git_stash_apply_options_init( * 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. @@ -257,4 +324,5 @@ GIT_EXTERN(int) git_stash_pop( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/status.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/status.h index 543e3fa..e13783b 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/status.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/status.h @@ -14,7 +14,7 @@ /** * @file git2/status.h - * @brief Git file status routines + * @brief Status indicates how a user has changed the working directory and index * @defgroup git_status Git file status routines * @ingroup Git * @{ @@ -48,17 +48,16 @@ typedef enum { GIT_STATUS_WT_UNREADABLE = (1u << 12), GIT_STATUS_IGNORED = (1u << 14), - GIT_STATUS_CONFLICTED = (1u << 15), + 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. + * @param path is the path to the file + * @param status_flags the `git_status_t` values for file's status + * @param payload the user-specified payload to the foreach function + * @return 0 on success, or a negative number on failure */ typedef int GIT_CALLBACK(git_status_cb)( const char *path, unsigned int status_flags, void *payload); @@ -87,7 +86,7 @@ typedef enum { * 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_WORKDIR_ONLY = 2 } git_status_show_t; /** @@ -204,9 +203,10 @@ typedef enum { * 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_INCLUDE_UNREADABLE_AS_UNTRACKED = (1u << 15) } git_status_opt_t; +/** Default `git_status_opt_t` values */ #define GIT_STATUS_OPT_DEFAULTS \ (GIT_STATUS_OPT_INCLUDE_IGNORED | \ GIT_STATUS_OPT_INCLUDE_UNTRACKED | \ @@ -227,13 +227,16 @@ typedef struct { /** * The `show` value is one of the `git_status_show_t` constants that - * control which files to scan and in what order. + * control which files to scan and in what order. The default is + * `GIT_STATUS_SHOW_INDEX_AND_WORKDIR`. */ git_status_show_t show; /** * The `flags` value is an OR'ed combination of the - * `git_status_opt_t` values above. + * `git_status_opt_t` values above. The default is + * `GIT_STATUS_OPT_DEFAULTS`, which matches git's default + * behavior. */ unsigned int flags; @@ -250,9 +253,18 @@ typedef struct { * working directory and index; defaults to HEAD. */ git_tree *baseline; + + /** + * Threshold above which similar files will be considered renames. + * This is equivalent to the -M option. Defaults to 50. + */ + uint16_t rename_threshold; } git_status_options; +/** Current version for the `git_status_options` structure */ #define GIT_STATUS_OPTIONS_VERSION 1 + +/** Static constructor for `git_status_options` */ #define GIT_STATUS_OPTIONS_INIT {GIT_STATUS_OPTIONS_VERSION} /** @@ -440,4 +452,5 @@ GIT_EXTERN(int) git_status_should_ignore( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/stdint.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/stdint.h index 6950427..4f532e1 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/stdint.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/stdint.h @@ -1,37 +1,37 @@ -// 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_ // [ +/* 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 @@ -40,10 +40,11 @@ #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 +/* 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 @@ -52,7 +53,7 @@ extern "C" { } #endif -// Define _W64 macros to mark types changing their size, like intptr_t. +/* 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 @@ -62,13 +63,14 @@ extern "C" { #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. +/* 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; @@ -88,7 +90,7 @@ typedef signed __int64 int64_t; typedef unsigned __int64 uint64_t; -// 7.18.1.2 Minimum-width integer types +/* 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; @@ -98,7 +100,7 @@ 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 +/* 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; @@ -108,25 +110,25 @@ 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 // [ +/* 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 ][ +#else /* _WIN64 ][ */ typedef _W64 signed int intptr_t; typedef _W64 unsigned int uintptr_t; -#endif // _WIN64 ] +#endif /* _WIN64 ] */ -// 7.18.1.5 Greatest-width integer types +/* 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 +/* 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 +#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 +/* 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) @@ -140,7 +142,7 @@ typedef uint64_t uintmax_t; #define UINT32_MAX _UI32_MAX #define UINT64_MAX _UI64_MAX -// 7.18.2.2 Limits of minimum-width integer types +/* 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 @@ -154,7 +156,7 @@ typedef uint64_t uintmax_t; #define UINT_LEAST32_MAX UINT32_MAX #define UINT_LEAST64_MAX UINT64_MAX -// 7.18.2.3 Limits of fastest minimum-width integer types +/* 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 @@ -168,62 +170,62 @@ typedef uint64_t uintmax_t; #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 // [ +/* 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 ][ +#else /* _WIN64 ][ */ # define INTPTR_MIN INT32_MIN # define INTPTR_MAX INT32_MAX # define UINTPTR_MAX UINT32_MAX -#endif // _WIN64 ] +#endif /* _WIN64 ] */ -// 7.18.2.5 Limits of greatest-width integer types +/* 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 +/* 7.18.3 Limits of other integer types */ -#ifdef _WIN64 // [ +#ifdef _WIN64 /* [ */ # define PTRDIFF_MIN _I64_MIN # define PTRDIFF_MAX _I64_MAX -#else // _WIN64 ][ +#else /* _WIN64 ][ */ # define PTRDIFF_MIN _I32_MIN # define PTRDIFF_MAX _I32_MAX -#endif // _WIN64 ] +#endif /* _WIN64 ] */ #define SIG_ATOMIC_MIN INT_MIN #define SIG_ATOMIC_MAX INT_MAX -#ifndef SIZE_MAX // [ -# ifdef _WIN64 // [ +#ifndef SIZE_MAX /* [ */ +# ifdef _WIN64 /* [ */ # define SIZE_MAX _UI64_MAX -# else // _WIN64 ][ +# else /* _WIN64 ][ */ # define SIZE_MAX _UI32_MAX -# endif // _WIN64 ] -#endif // SIZE_MAX ] +# endif /* _WIN64 ] */ +#endif /* SIZE_MAX ] */ -// WCHAR_MIN and WCHAR_MAX are also defined in -#ifndef WCHAR_MIN // [ +/* WCHAR_MIN and WCHAR_MAX are also defined in */ +#ifndef WCHAR_MIN /* [ */ # define WCHAR_MIN 0 -#endif // WCHAR_MIN ] -#ifndef WCHAR_MAX // [ +#endif /* WCHAR_MIN ] */ +#ifndef WCHAR_MAX /* [ */ # define WCHAR_MAX _UI16_MAX -#endif // WCHAR_MAX ] +#endif /* WCHAR_MAX ] */ #define WINT_MIN 0 #define WINT_MAX _UI16_MAX -#endif // __STDC_LIMIT_MACROS ] +#endif /* __STDC_LIMIT_MACROS ] */ -// 7.18.4 Limits of other integer types +/* 7.18.4 Limits of other integer types */ -#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [ See footnote 224 at page 260 +#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) /* [ See footnote 224 at page 260 */ -// 7.18.4.1 Macros for minimum-width integer constants +/* 7.18.4.1 Macros for minimum-width integer constants */ #define INT8_C(val) val##i8 #define INT16_C(val) val##i16 @@ -235,13 +237,13 @@ typedef uint64_t uintmax_t; #define UINT32_C(val) val##ui32 #define UINT64_C(val) val##ui64 -// 7.18.4.2 Macros for greatest-width integer constants +/* 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 /* __STDC_CONSTANT_MACROS ] */ -#endif // _MSC_STDINT_H_ ] +#endif /* _MSC_STDINT_H_ ] */ -#endif // _MSC_VER ] \ No newline at end of file +#endif /* _MSC_VER ] */ diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/strarray.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/strarray.h index 0f657e6..dcb628a 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/strarray.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/strarray.h @@ -11,8 +11,8 @@ /** * @file git2/strarray.h - * @brief Git string array routines - * @defgroup git_strarray Git string array routines + * @brief An array of strings for the user to free + * @defgroup git_strarray An array of strings for the user to free * @ingroup Git * @{ */ @@ -36,21 +36,7 @@ typedef struct git_strarray { */ 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/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/submodule.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/submodule.h index 29d8bc1..911b3ce 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/submodule.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/submodule.h @@ -15,7 +15,7 @@ /** * @file git2/submodule.h - * @brief Git submodule management utilities + * @brief Submodules place another repository's contents within this one * * 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 @@ -85,23 +85,30 @@ typedef enum { 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_WD_UNTRACKED = (1u << 13) } git_submodule_status_t; +/** Submodule source bits */ #define GIT_SUBMODULE_STATUS__IN_FLAGS 0x000Fu +/** Submodule index status */ #define GIT_SUBMODULE_STATUS__INDEX_FLAGS 0x0070u +/** Submodule working directory status */ #define GIT_SUBMODULE_STATUS__WD_FLAGS 0x3F80u +/** Whether the submodule is modified */ #define GIT_SUBMODULE_STATUS_IS_UNMODIFIED(S) \ (((S) & ~GIT_SUBMODULE_STATUS__IN_FLAGS) == 0) +/** Whether the submodule is modified (in the index) */ #define GIT_SUBMODULE_STATUS_IS_INDEX_UNMODIFIED(S) \ (((S) & GIT_SUBMODULE_STATUS__INDEX_FLAGS) == 0) +/** Whether the submodule is modified (in the working directory) */ #define GIT_SUBMODULE_STATUS_IS_WD_UNMODIFIED(S) \ (((S) & (GIT_SUBMODULE_STATUS__WD_FLAGS & \ ~GIT_SUBMODULE_STATUS_WD_UNINITIALIZED)) == 0) +/** Whether the submodule working directory is dirty */ #define GIT_SUBMODULE_STATUS_IS_WD_DIRTY(S) \ (((S) & (GIT_SUBMODULE_STATUS_WD_INDEX_MODIFIED | \ GIT_SUBMODULE_STATUS_WD_WD_MODIFIED | \ @@ -130,10 +137,8 @@ typedef struct git_submodule_update_options { /** * 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. + * checkout, set the `checkout_strategy` to `GIT_CHECKOUT_NONE` + * or `GIT_CHECKOUT_DRY_RUN`. */ git_checkout_options checkout_opts; @@ -152,11 +157,15 @@ typedef struct git_submodule_update_options { int allow_fetch; } git_submodule_update_options; +/** Current version for the `git_submodule_update_options` structure */ #define GIT_SUBMODULE_UPDATE_OPTIONS_VERSION 1 + +/** Static constructor for `git_submodule_update_options` */ #define GIT_SUBMODULE_UPDATE_OPTIONS_INIT \ { GIT_SUBMODULE_UPDATE_OPTIONS_VERSION, \ - { GIT_CHECKOUT_OPTIONS_VERSION, GIT_CHECKOUT_SAFE }, \ - GIT_FETCH_OPTIONS_INIT, 1 } + GIT_CHECKOUT_OPTIONS_INIT, \ + GIT_FETCH_OPTIONS_INIT, \ + 1 } /** * Initialize git_submodule_update_options structure @@ -181,7 +190,7 @@ GIT_EXTERN(int) git_submodule_update_options_init( * @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. + * return an error if attempting to update an uninitialized 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. @@ -229,6 +238,7 @@ GIT_EXTERN(int) git_submodule_lookup( * * @param out Pointer to store the copy of the submodule. * @param source Original submodule to copy. + * @return 0 */ GIT_EXTERN(int) git_submodule_dup(git_submodule **out, git_submodule *source); @@ -320,6 +330,7 @@ GIT_EXTERN(int) git_submodule_clone( * (but doesn't actually do the commit). * * @param submodule The submodule to finish adding. + * @return 0 or an error code. */ GIT_EXTERN(int) git_submodule_add_finalize(git_submodule *submodule); @@ -529,7 +540,8 @@ GIT_EXTERN(int) git_submodule_set_update( * 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 + * @param submodule the submodule to examine + * @return the submodule recursion configuration */ GIT_EXTERN(git_submodule_recurse_t) git_submodule_fetch_recurse_submodules( git_submodule *submodule); @@ -541,7 +553,7 @@ GIT_EXTERN(git_submodule_recurse_t) git_submodule_fetch_recurse_submodules( * * @param repo the repository to affect * @param name the submodule to configure - * @param fetch_recurse_submodules Boolean value + * @param fetch_recurse_submodules the submodule recursion configuration * @return old value for fetchRecurseSubmodules */ GIT_EXTERN(int) git_submodule_set_fetch_recurse_submodules( @@ -589,6 +601,9 @@ GIT_EXTERN(int) git_submodule_repo_init( * 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. + * + * @param submodule The submodule to copy. + * @return 0 or an error code. */ GIT_EXTERN(int) git_submodule_sync(git_submodule *submodule); @@ -660,4 +675,5 @@ GIT_EXTERN(int) git_submodule_location( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/alloc.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/alloc.h index c295807..67506f2 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/alloc.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/alloc.h @@ -10,6 +10,17 @@ #include "git2/common.h" +/** + * @file git2/sys/alloc.h + * @brief Custom memory allocators + * @defgroup git_merge Git merge routines + * @ingroup Git + * + * Users can configure custom allocators; this is particularly + * interesting when running in constrained environments, when calling + * from another language, or during testing. + * @{ + */ GIT_BEGIN_DECL /** @@ -24,28 +35,6 @@ 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 @@ -53,18 +42,6 @@ typedef struct { */ 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. @@ -96,6 +73,7 @@ int git_stdalloc_init_allocator(git_allocator *allocator); */ int git_win32_crtdbg_init_allocator(git_allocator *allocator); +/** @} */ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/commit.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/commit.h index ba67106..a8253c0 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/commit.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/commit.h @@ -14,7 +14,7 @@ /** * @file git2/sys/commit.h * @brief Low-level Git commit creation - * @defgroup git_backend Git custom backend APIs + * @defgroup git_commit Low-level Git commit creation * @ingroup Git * @{ */ @@ -29,7 +29,43 @@ GIT_BEGIN_DECL * the `tree`, neither the `parents` list of `git_oid`s are checked for * validity. * - * @see git_commit_create + * @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_from_ids( git_oid *id, @@ -49,6 +85,10 @@ GIT_EXTERN(int) git_commit_create_from_ids( * 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. + * + * @param idx the index of the parent + * @param payload the user-specified payload + * @return the object id of the parent, or NULL if there are no further parents */ typedef const git_oid * GIT_CALLBACK(git_commit_parent_callback)(size_t idx, void *payload); @@ -61,7 +101,40 @@ typedef const git_oid * GIT_CALLBACK(git_commit_parent_callback)(size_t idx, voi * with `parent_payload` and should return `git_oid` values or NULL to * indicate that all parents are accounted for. * - * @see git_commit_create + * @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_cb Callback to invoke to obtain parent information + * + * @param parent_payload User-specified payload to provide to the callback + * + * @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_from_callback( git_oid *id, @@ -77,4 +150,5 @@ GIT_EXTERN(int) git_commit_create_from_callback( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/commit_graph.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/commit_graph.h index f6c0fc4..ff547ef 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/commit_graph.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/commit_graph.h @@ -12,13 +12,52 @@ /** * @file git2/sys/commit_graph.h - * @brief Git commit-graph - * @defgroup git_commit_graph Git commit-graph APIs + * @brief Commit graphs store information about commit relationships + * @defgroup git_commit_graph Commit graphs * @ingroup Git * @{ */ GIT_BEGIN_DECL +/** + * Options structure for `git_commit_graph_open_new`. + * + * Initialize with `GIT_COMMIT_GRAPH_OPEN_OPTIONS_INIT`. Alternatively, + * you can use `git_commit_graph_open_options_init`. + */ +typedef struct { + unsigned int version; + +#ifdef GIT_EXPERIMENTAL_SHA256 + /** The object ID type that this commit graph contains. */ + git_oid_t oid_type; +#endif +} git_commit_graph_open_options; + +/** Current version for the `git_commit_graph_open_options` structure */ +#define GIT_COMMIT_GRAPH_OPEN_OPTIONS_VERSION 1 + +/** Static constructor for `git_commit_graph_open_options` */ +#define GIT_COMMIT_GRAPH_OPEN_OPTIONS_INIT { \ + GIT_COMMIT_GRAPH_OPEN_OPTIONS_VERSION \ + } + +/** + * Initialize git_commit_graph_open_options structure + * + * Initializes a `git_commit_graph_open_options` with default values. + * Equivalent to creating an instance with + * `GIT_COMMIT_GRAPH_OPEN_OPTIONS_INIT`. + * + * @param opts The `git_commit_graph_open_options` struct to initialize. + * @param version The struct version; pass `GIT_COMMIT_GRAPH_OPEN_OPTIONS_VERSION`. + * @return Zero on success; -1 on failure. + */ +GIT_EXTERN(int) git_commit_graph_open_options_init( + git_commit_graph_open_options *opts, + unsigned int version); + + /** * Opens a `git_commit_graph` from a path to an objects directory. * @@ -28,7 +67,13 @@ GIT_BEGIN_DECL * @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); +GIT_EXTERN(int) git_commit_graph_open( + git_commit_graph **cgraph_out, + const char *objects_dir +#ifdef GIT_EXPERIMENTAL_SHA256 + , const git_commit_graph_open_options *options +#endif + ); /** * Frees commit-graph data. This should only be called when memory allocated @@ -40,50 +85,6 @@ GIT_EXTERN(int) git_commit_graph_open(git_commit_graph **cgraph_out, const char */ 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 @@ -94,19 +95,23 @@ 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_SINGLE_FILE = 0 } git_commit_graph_split_strategy_t; /** - * Options structure for - * `git_commit_graph_writer_commit`/`git_commit_graph_writer_dump`. + * Options structure for `git_commit_graph_writer_new`. * - * Initialize with `GIT_COMMIT_GRAPH_WRITER_OPTIONS_INIT`. Alternatively, you - * can use `git_commit_graph_writer_options_init`. + * Initialize with `GIT_COMMIT_GRAPH_WRITER_OPTIONS_INIT`. Alternatively, + * you can use `git_commit_graph_writer_options_init`. */ typedef struct { unsigned int version; +#ifdef GIT_EXPERIMENTAL_SHA256 + /** The object ID type that this commit graph contains. */ + git_oid_t oid_type; +#endif + /** * The strategy to use when adding new commits to a pre-existing commit-graph * chain. @@ -126,7 +131,10 @@ typedef struct { size_t max_commits; } git_commit_graph_writer_options; +/** Current version for the `git_commit_graph_writer_options` structure */ #define GIT_COMMIT_GRAPH_WRITER_OPTIONS_VERSION 1 + +/** Static constructor for `git_commit_graph_writer_options` */ #define GIT_COMMIT_GRAPH_WRITER_OPTIONS_INIT { \ GIT_COMMIT_GRAPH_WRITER_OPTIONS_VERSION \ } @@ -145,30 +153,73 @@ GIT_EXTERN(int) git_commit_graph_writer_options_init( git_commit_graph_writer_options *opts, unsigned int version); +/** + * 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. + * @param options The options for the commit graph writer. + * @return 0 or an error code + */ +GIT_EXTERN(int) git_commit_graph_writer_new( + git_commit_graph_writer **out, + const char *objects_info_dir, + const git_commit_graph_writer_options *options); + +/** + * 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); + /** * 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); + git_commit_graph_writer *w); /** * 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[out] 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_commit_graph_writer *w); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/config.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/config.h index 0a9005e..cc4a399 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/config.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/config.h @@ -13,13 +13,28 @@ /** * @file git2/sys/config.h - * @brief Git config backend routines - * @defgroup git_backend Git custom backend APIs + * @brief Custom configuration database backends + * @defgroup git_backend Custom configuration database backends * @ingroup Git * @{ */ GIT_BEGIN_DECL +/** + * An entry in a configuration backend. This is provided so that + * backend implementors can have a mechanism to free their data. + */ +typedef struct git_config_backend_entry { + /** The base configuration entry */ + struct git_config_entry entry; + + /** + * Free function for this entry; for internal purposes. Callers + * should call `git_config_entry_free` to free data. + */ + void GIT_CALLBACK(free)(struct git_config_backend_entry *entry); +} git_config_backend_entry; + /** * Every iterator must have this struct as its first element, so the * API can talk to it. You'd define your iterator as @@ -39,7 +54,7 @@ struct git_config_iterator { * 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); + int GIT_CALLBACK(next)(git_config_backend_entry **entry, git_config_iterator *iter); /** * Free the iterator @@ -59,7 +74,7 @@ struct git_config_backend { /* 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(get)(struct git_config_backend *, const char *key, git_config_backend_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); @@ -83,7 +98,11 @@ struct git_config_backend { int GIT_CALLBACK(unlock)(struct git_config_backend *, int success); void GIT_CALLBACK(free)(struct git_config_backend *); }; + +/** Current version for the `git_config_backend_options` structure */ #define GIT_CONFIG_BACKEND_VERSION 1 + +/** Static constructor for `git_config_backend_options` */ #define GIT_CONFIG_BACKEND_INIT {GIT_CONFIG_BACKEND_VERSION} /** @@ -125,6 +144,63 @@ GIT_EXTERN(int) git_config_add_backend( const git_repository *repo, int force); +/** Options for in-memory configuration backends. */ +typedef struct { + unsigned int version; + + /** + * The type of this backend (eg, "command line"). If this is + * NULL, then this will be "in-memory". + */ + const char *backend_type; + + /** + * The path to the origin; if this is NULL then it will be + * left unset in the resulting configuration entries. + */ + const char *origin_path; +} git_config_backend_memory_options; + +/** Current version for the `git_config_backend_memory_options` structure */ +#define GIT_CONFIG_BACKEND_MEMORY_OPTIONS_VERSION 1 + +/** Static constructor for `git_config_backend_memory_options` */ +#define GIT_CONFIG_BACKEND_MEMORY_OPTIONS_INIT { GIT_CONFIG_BACKEND_MEMORY_OPTIONS_VERSION } + + +/** + * Create an in-memory configuration backend from a string in standard + * git configuration file format. + * + * @param out the new backend + * @param cfg the configuration that is to be parsed + * @param len the length of the string pointed to by `cfg` + * @param opts the options to initialize this backend with, or NULL + * @return 0 on success or an error code + */ +extern int git_config_backend_from_string( + git_config_backend **out, + const char *cfg, + size_t len, + git_config_backend_memory_options *opts); + +/** + * Create an in-memory configuration backend from a list of name/value + * pairs. + * + * @param out the new backend + * @param values the configuration values to set (in "key=value" format) + * @param len the length of the values array + * @param opts the options to initialize this backend with, or NULL + * @return 0 on success or an error code + */ +extern int git_config_backend_from_values( + git_config_backend **out, + const char **values, + size_t len, + git_config_backend_memory_options *opts); + /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/credential.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/credential.h index bb4c9f9..0d573a3 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/credential.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/credential.h @@ -11,9 +11,9 @@ #include "git2/credential.h" /** - * @file git2/sys/cred.h - * @brief Git credentials low-level implementation - * @defgroup git_credential Git credentials low-level implementation + * @file git2/sys/credential.h + * @brief Low-level credentials implementation + * @defgroup git_credential Low-level credentials implementation * @ingroup Git * @{ */ @@ -85,6 +85,7 @@ struct git_credential_ssh_custom { void *payload; /**< Payload passed to prompt_callback */ }; +/** @} */ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/diff.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/diff.h index aefd7b9..a398f54 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/diff.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/diff.h @@ -15,7 +15,7 @@ /** * @file git2/sys/diff.h - * @brief Low-level Git diff utilities + * @brief Low-level diff utilities * @ingroup Git * @{ */ @@ -33,6 +33,12 @@ GIT_BEGIN_DECL * 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). + * + * @param delta the delta being processed + * @param hunk the hunk being processed + * @param line the line being processed + * @param payload the payload provided by the diff generator + * @return 0 on success or an error code */ GIT_EXTERN(int) git_diff_print_callback__to_buf( const git_diff_delta *delta, @@ -53,6 +59,12 @@ GIT_EXTERN(int) git_diff_print_callback__to_buf( * 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`. + * + * @param delta the delta being processed + * @param hunk the hunk being processed + * @param line the line being processed + * @param payload the payload provided by the diff generator + * @return 0 on success or an error code */ GIT_EXTERN(int) git_diff_print_callback__to_file_handle( const git_diff_delta *delta, @@ -70,7 +82,10 @@ typedef struct { size_t oid_calculations; /**< Number of ID calculations */ } git_diff_perfdata; +/** Current version for the `git_diff_perfdata_options` structure */ #define GIT_DIFF_PERFDATA_VERSION 1 + +/** Static constructor for `git_diff_perfdata_options` */ #define GIT_DIFF_PERFDATA_INIT {GIT_DIFF_PERFDATA_VERSION,0,0} /** @@ -85,10 +100,15 @@ GIT_EXTERN(int) git_diff_get_perfdata( /** * Get performance data for diffs from a git_status_list + * + * @param out Structure to be filled with diff performance data + * @param status Diff to read performance data from + * @return 0 for success, <0 for error */ GIT_EXTERN(int) git_status_list_get_perfdata( git_diff_perfdata *out, const git_status_list *status); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/email.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/email.h index 6f4a286..26e792a 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/email.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/email.h @@ -7,6 +7,11 @@ #ifndef INCLUDE_sys_git_email_h__ #define INCLUDE_sys_git_email_h__ +#include "git2/common.h" +#include "git2/diff.h" +#include "git2/email.h" +#include "git2/types.h" + /** * @file git2/sys/email.h * @brief Advanced git email creation routines @@ -28,6 +33,7 @@ GIT_BEGIN_DECL * @param body optional text to include above the diffstat * @param author the person who authored this commit * @param opts email creation options + * @return 0 on success or an error code */ GIT_EXTERN(int) git_email_create_from_diff( git_buf *out, @@ -42,4 +48,5 @@ GIT_EXTERN(int) git_email_create_from_diff( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/errors.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/errors.h new file mode 100644 index 0000000..44e8ecb --- /dev/null +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/errors.h @@ -0,0 +1,76 @@ +/* + * 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_errors_h__ +#define INCLUDE_sys_git_errors_h__ + +#include "git2/common.h" + +/** + * @file git2/sys/errors.h + * @brief Advanced error handling + * @ingroup Git + * + * Error handling for advanced consumers; those who use callbacks + * or those who create custom databases. + * @{ + */ +GIT_BEGIN_DECL + +/** + * 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, using `printf`-style + * formatting. + * + * 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 fmt The `printf`-style format string; subsequent arguments must + * be the arguments for the format string. + */ +GIT_EXTERN(void) git_error_set(int error_class, const char *fmt, ...) + GIT_FORMAT_PRINTF(2, 3); + +/** + * Set the error message string for this thread. This function is like + * `git_error_set` but takes a static string instead of a `printf`-style + * format. + * + * @param error_class One of the `git_error_t` enum above describing the + * general subsystem that is responsible for the error. + * @param string The 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/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/filter.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/filter.h index b375941..60466d1 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/filter.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/filter.h @@ -11,8 +11,8 @@ /** * @file git2/sys/filter.h - * @brief Git filter backend and plugin routines - * @defgroup git_backend Git custom backend APIs + * @brief Custom filter backends and plugins + * @defgroup git_backend Custom filter backends and plugins * @ingroup Git * @{ */ @@ -26,7 +26,10 @@ GIT_BEGIN_DECL */ GIT_EXTERN(git_filter *) git_filter_lookup(const char *name); +/** The "crlf" filter */ #define GIT_FILTER_CRLF "crlf" + +/** The "ident" filter */ #define GIT_FILTER_IDENT "ident" /** @@ -53,6 +56,12 @@ GIT_EXTERN(git_filter *) git_filter_lookup(const char *name); * 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. + * + * @param out the filter list + * @param repo the repository to use for configuration + * @param mode the filter mode (direction) + * @param options the options + * @return 0 on success or an error code */ GIT_EXTERN(int) git_filter_list_new( git_filter_list **out, @@ -72,6 +81,11 @@ GIT_EXTERN(int) git_filter_list_new( * 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! + * + * @param fl the filter list + * @param filter the filter to push + * @param payload the payload for the filter + * @return 0 on success or an error code */ GIT_EXTERN(int) git_filter_list_push( git_filter_list *fl, git_filter *filter, void *payload); @@ -96,17 +110,26 @@ typedef struct git_filter_source git_filter_source; /** * Get the repository that the source data is coming from. + * + * @param src the filter source + * @return the repository for the filter information */ GIT_EXTERN(git_repository *) git_filter_source_repo(const git_filter_source *src); /** * Get the path that the source data is coming from. + * + * @param src the filter source + * @return the path that is being filtered */ 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 + * + * @param src the filter source + * @return the file mode for the file being filtered */ GIT_EXTERN(uint16_t) git_filter_source_filemode(const git_filter_source *src); @@ -114,16 +137,25 @@ 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. + * + * @param src the filter source + * @return the object id of the file being filtered */ GIT_EXTERN(const git_oid *) git_filter_source_id(const git_filter_source *src); /** * Get the git_filter_mode_t to be used + * + * @param src the filter source + * @return the mode (direction) of the filter */ 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 + * + * @param src the filter source + * @return the flags of the filter */ GIT_EXTERN(uint32_t) git_filter_source_flags(const git_filter_source *src); @@ -137,6 +169,9 @@ GIT_EXTERN(uint32_t) git_filter_source_flags(const git_filter_source *src); * 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). + * + * @param self the filter to initialize + * @return 0 on success, negative number on failure */ typedef int GIT_CALLBACK(git_filter_init_fn)(git_filter *self); @@ -149,6 +184,8 @@ typedef int GIT_CALLBACK(git_filter_init_fn)(git_filter *self); * This may be called even if the `initialize` callback was not made. * * Typically this function will free the `git_filter` object itself. + * + * @param self the filter to shutdown */ typedef void GIT_CALLBACK(git_filter_shutdown_fn)(git_filter *self); @@ -171,6 +208,12 @@ typedef void GIT_CALLBACK(git_filter_shutdown_fn)(git_filter *self); * 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. + * + * @param self the filter check + * @param payload a data for future filter functions + * @param src the filter source + * @param attr_values the attribute values + * @return 0 on success or a negative value on error */ typedef int GIT_CALLBACK(git_filter_check_fn)( git_filter *self, @@ -191,6 +234,12 @@ typedef int GIT_CALLBACK(git_filter_check_fn)( * 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. * + * @param self the filter check + * @param payload a data for future filter functions + * @param to the input buffer + * @param from the output buffer + * @param src the filter source + * @return 0 on success or a negative value on error * @deprecated use git_filter_stream_fn */ typedef int GIT_CALLBACK(git_filter_apply_fn)( @@ -209,6 +258,13 @@ typedef int GIT_CALLBACK(git_filter_apply_fn)( * `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. + * + * @param out the write stream + * @param self the filter + * @param payload a data for future filter functions + * @param src the filter source + * @param next the output stream + * @return 0 on success or a negative value on error */ typedef int GIT_CALLBACK(git_filter_stream_fn)( git_writestream **out, @@ -225,6 +281,9 @@ typedef int GIT_CALLBACK(git_filter_stream_fn)( * `stream` callbacks allocated a `payload` to keep per-source filter * state, use this callback to free that payload and release resources * as required. + * + * @param self the filter + * @param payload a data for future filter functions */ typedef void GIT_CALLBACK(git_filter_cleanup_fn)( git_filter *self, @@ -291,7 +350,10 @@ struct git_filter { git_filter_cleanup_fn cleanup; }; +/** Current version for the `git_filter_options` structure */ #define GIT_FILTER_VERSION 1 + +/** Static constructor for `git_filter_options` */ #define GIT_FILTER_INIT {GIT_FILTER_VERSION} /** @@ -300,7 +362,7 @@ struct git_filter { * * @param filter the `git_filter` struct to initialize. * @param version Version the struct; pass `GIT_FILTER_VERSION` - * @return Zero on success; -1 on failure. + * @return 0 on success; -1 on failure. */ GIT_EXTERN(int) git_filter_init(git_filter *filter, unsigned int version); @@ -350,4 +412,5 @@ GIT_EXTERN(int) git_filter_unregister(const char *name); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/hashsig.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/hashsig.h index 09c19ae..0d7be53 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/hashsig.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/hashsig.h @@ -9,6 +9,16 @@ #include "git2/common.h" +/** + * @file git2/sys/hashsig.h + * @brief Signatures for file similarity comparison + * @defgroup git_hashsig Git merge routines + * @ingroup Git + * + * Hash signatures are used for file similary comparison; this is + * used for git's rename handling. + * @{ + */ GIT_BEGIN_DECL /** @@ -101,6 +111,7 @@ GIT_EXTERN(int) git_hashsig_compare( const git_hashsig *a, const git_hashsig *b); +/** @} */ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/index.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/index.h index 1f6d93f..b3b86a0 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/index.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/index.h @@ -12,8 +12,8 @@ /** * @file git2/sys/index.h - * @brief Low-level Git index manipulation routines - * @defgroup git_backend Git custom backend APIs + * @brief Low-level index manipulation routines + * @defgroup git_index Low-level index manipulation routines * @ingroup Git * @{ */ @@ -67,6 +67,7 @@ GIT_EXTERN(const git_index_name_entry *) git_index_name_get_byindex( * @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 + * @return 0 on success, or an error code */ GIT_EXTERN(int) git_index_name_add(git_index *index, const char *ancestor, const char *ours, const char *theirs); diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/mempack.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/mempack.h index 17da590..be902be 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/mempack.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/mempack.h @@ -15,8 +15,8 @@ /** * @file git2/sys/mempack.h - * @brief Custom ODB backend that permits packing objects in-memory - * @defgroup git_backend Git custom backend APIs + * @brief A custom object database backend for storing objects in-memory + * @defgroup git_mempack A custom object database backend for storing objects in-memory * @ingroup Git * @{ */ @@ -44,6 +44,26 @@ GIT_BEGIN_DECL */ GIT_EXTERN(int) git_mempack_new(git_odb_backend **out); +/** + * Write a thin packfile with the objects in the memory store. + * + * A thin packfile is a packfile that does not contain its transitive closure of + * references. This is useful for efficiently distributing additions to a + * repository over the network, but also finds use in the efficient bulk + * addition of objects to a repository, locally. + * + * This operation performs the (shallow) insert operations into the + * `git_packbuilder`, but does not write the packfile to disk; + * see `git_packbuilder_write_buf`. + * + * It also does not reset the in-memory object database; see `git_mempack_reset`. + * + * @param backend The mempack backend + * @param pb The packbuilder to use to write the packfile + * @return 0 on success or an error code + */ +GIT_EXTERN(int) git_mempack_write_thin_pack(git_odb_backend *backend, git_packbuilder *pb); + /** * Dump all the queued in-memory writes to a packfile. * @@ -82,6 +102,16 @@ GIT_EXTERN(int) git_mempack_dump(git_buf *pack, git_repository *repo, git_odb_ba */ GIT_EXTERN(int) git_mempack_reset(git_odb_backend *backend); +/** + * Get the total number of objects in mempack + * + * @param count The count of objects in the mempack + * @param backend The mempack backend + * @return 0 on success, or -1 on error + */ +GIT_EXTERN(int) git_mempack_object_count(size_t *count, git_odb_backend *backend); + +/** @} */ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/merge.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/merge.h index ef4bc5a..a9f5220 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/merge.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/merge.h @@ -14,13 +14,18 @@ /** * @file git2/sys/merge.h - * @brief Git merge driver backend and plugin routines - * @defgroup git_merge Git merge driver APIs + * @brief Custom merge drivers + * @defgroup git_merge Custom merge drivers * @ingroup Git * @{ */ GIT_BEGIN_DECL +/** + * A "merge driver" is a mechanism that can be configured to handle + * conflict resolution for files changed in both the "ours" and "theirs" + * side of a merge. + */ typedef struct git_merge_driver git_merge_driver; /** @@ -31,8 +36,11 @@ typedef struct git_merge_driver git_merge_driver; */ GIT_EXTERN(git_merge_driver *) git_merge_driver_lookup(const char *name); +/** The "text" merge driver */ #define GIT_MERGE_DRIVER_TEXT "text" +/** The "binary" merge driver */ #define GIT_MERGE_DRIVER_BINARY "binary" +/** The "union" merge driver */ #define GIT_MERGE_DRIVER_UNION "union" /** @@ -40,23 +48,48 @@ GIT_EXTERN(git_merge_driver *) git_merge_driver_lookup(const char *name); */ typedef struct git_merge_driver_source git_merge_driver_source; -/** Get the repository that the source data is coming from. */ +/** + * Get the repository that the source data is coming from. + * + * @param src the merge driver source + * @return the repository + */ GIT_EXTERN(git_repository *) git_merge_driver_source_repo( const git_merge_driver_source *src); -/** Gets the ancestor of the file to merge. */ +/** + * Gets the ancestor of the file to merge. + * + * @param src the merge driver source + * @return the ancestor or NULL if there was no ancestor + */ 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. */ +/** + * Gets the ours side of the file to merge. + * + * @param src the merge driver source + * @return the ours side or NULL if there was no ours side + */ 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. */ +/** + * Gets the theirs side of the file to merge. + * + * @param src the merge driver source + * @return the theirs side or NULL if there was no theirs side + */ 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 */ +/** + * Gets the merge file options that the merge was invoked with. + * + * @param src the merge driver source + * @return the options + */ GIT_EXTERN(const git_merge_file_options *) git_merge_driver_source_file_options( const git_merge_driver_source *src); @@ -72,6 +105,9 @@ GIT_EXTERN(const git_merge_file_options *) git_merge_driver_source_file_options( * 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). + * + * @param self the merge driver to initialize + * @return 0 on success, or a negative number on failure */ typedef int GIT_CALLBACK(git_merge_driver_init_fn)(git_merge_driver *self); @@ -84,6 +120,8 @@ typedef int GIT_CALLBACK(git_merge_driver_init_fn)(git_merge_driver *self); * This may be called even if the `initialize` callback was not made. * * Typically this function will free the `git_merge_driver` object itself. + * + * @param self the merge driver to shutdown */ typedef void GIT_CALLBACK(git_merge_driver_shutdown_fn)(git_merge_driver *self); @@ -104,6 +142,14 @@ typedef void GIT_CALLBACK(git_merge_driver_shutdown_fn)(git_merge_driver *self); * specified by the file's attributes. * * The `src` contains the data about the file to be merged. + * + * @param self the merge driver + * @param path_out the resolved path + * @param mode_out the resolved mode + * @param merged_out the merged output contents + * @param filter_name the filter that was invoked + * @param src the data about the unmerged file + * @return 0 on success, or an error code */ typedef int GIT_CALLBACK(git_merge_driver_apply_fn)( git_merge_driver *self, @@ -139,6 +185,7 @@ struct git_merge_driver { git_merge_driver_apply_fn apply; }; +/** The version for the `git_merge_driver` */ #define GIT_MERGE_DRIVER_VERSION 1 /** @@ -179,4 +226,5 @@ GIT_EXTERN(int) git_merge_driver_unregister(const char *name); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/midx.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/midx.h index e3d7498..b3a68af 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/midx.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/midx.h @@ -11,14 +11,52 @@ #include "git2/types.h" /** - * @file git2/midx.h - * @brief Git multi-pack-index routines - * @defgroup git_midx Git multi-pack-index routines + * @file git2/sys/midx.h + * @brief Incremental multi-pack indexes + * @defgroup git_midx Incremental multi-pack indexes * @ingroup Git * @{ */ GIT_BEGIN_DECL +/** + * Options structure for `git_midx_writer_options`. + * + * Initialize with `GIT_MIDX_WRITER_OPTIONS_INIT`. Alternatively, + * you can use `git_midx_writer_options_init`. + */ +typedef struct { + unsigned int version; + +#ifdef GIT_EXPERIMENTAL_SHA256 + /** The object ID type that this commit graph contains. */ + git_oid_t oid_type; +#endif +} git_midx_writer_options; + +/** Current version for the `git_midx_writer_options` structure */ +#define GIT_MIDX_WRITER_OPTIONS_VERSION 1 + +/** Static constructor for `git_midx_writer_options` */ +#define GIT_MIDX_WRITER_OPTIONS_INIT { \ + GIT_MIDX_WRITER_OPTIONS_VERSION \ + } + +/** + * Initialize git_midx_writer_options structure + * + * Initializes a `git_midx_writer_options` with default values. + * Equivalent to creating an instance with + * `GIT_MIDX_WRITER_OPTIONS_INIT`. + * + * @param opts The `git_midx_writer_options` struct to initialize. + * @param version The struct version; pass `GIT_MIDX_WRITER_OPTIONS_VERSION`. + * @return Zero on success; -1 on failure. + */ +GIT_EXTERN(int) git_midx_writer_options_init( + git_midx_writer_options *opts, + unsigned int version); + /** * Create a new writer for `multi-pack-index` files. * @@ -29,7 +67,11 @@ GIT_BEGIN_DECL */ GIT_EXTERN(int) git_midx_writer_new( git_midx_writer **out, - const char *pack_dir); + const char *pack_dir +#ifdef GIT_EXPERIMENTAL_SHA256 + , git_midx_writer_options *options +#endif + ); /** * Free the multi-pack-index writer and its resources. @@ -71,4 +113,5 @@ GIT_EXTERN(int) git_midx_writer_dump( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/odb_backend.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/odb_backend.h index 9ae0ed9..53d8d06 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/odb_backend.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/odb_backend.h @@ -13,9 +13,9 @@ #include "git2/odb.h" /** - * @file git2/sys/backend.h - * @brief Git custom backend implementors functions - * @defgroup git_backend Git custom backend APIs + * @file git2/sys/odb_backend.h + * @brief Object database backends for custom object storage + * @defgroup git_backend Object database backends for custom object storage * @ingroup Git * @{ */ @@ -36,7 +36,7 @@ struct git_odb_backend { 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. + * must be so that the remaining (GIT_OID_SHA1_HEXSIZE - len)*4 bits are 0s. */ int GIT_CALLBACK(read_prefix)( git_oid *, void **, size_t *, git_object_t *, @@ -69,11 +69,8 @@ struct git_odb_backend { * 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()`). + * The odb layer will automatically call this when needed on failed + * lookups (ie. `exists()`, `read()`, `read_header()`). */ int GIT_CALLBACK(refresh)(git_odb_backend *); @@ -109,7 +106,10 @@ struct git_odb_backend { void GIT_CALLBACK(free)(git_odb_backend *); }; +/** Current version for the `git_odb_backend_options` structure */ #define GIT_ODB_BACKEND_VERSION 1 + +/** Static constructor for `git_odb_backend_options` */ #define GIT_ODB_BACKEND_INIT {GIT_ODB_BACKEND_VERSION} /** @@ -170,6 +170,7 @@ GIT_EXTERN(void *) git_odb_backend_malloc(git_odb_backend *backend, size_t len); #endif +/** @} */ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/openssl.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/openssl.h index b41c55c..8b74a98 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/openssl.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/openssl.h @@ -9,6 +9,12 @@ #include "git2/common.h" +/** + * @file git2/sys/openssl.h + * @brief Custom OpenSSL functionality + * @defgroup git_openssl Custom OpenSSL functionality + * @{ + */ GIT_BEGIN_DECL /** @@ -33,6 +39,7 @@ GIT_BEGIN_DECL */ GIT_EXTERN(int) git_openssl_set_locking(void); +/** @} */ GIT_END_DECL -#endif +#endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/path.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/path.h index 2a0c7e0..2963bca 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/path.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/path.h @@ -10,6 +10,16 @@ #include "git2/common.h" +/** + * @file git2/sys/path.h + * @brief Custom path handling + * @defgroup git_path Custom path handling + * @ingroup Git + * + * Merge will take two commits and attempt to produce a commit that + * includes the changes that were made in both branches. + * @{ + */ GIT_BEGIN_DECL /** @@ -59,6 +69,7 @@ typedef enum { */ 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 */ +#endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/refdb_backend.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/refdb_backend.h index c31e26d..813822a 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/refdb_backend.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/refdb_backend.h @@ -12,9 +12,9 @@ #include "git2/oid.h" /** - * @file git2/refdb_backend.h - * @brief Git custom refs backend functions - * @defgroup git_refdb_backend Git custom refs backend API + * @file git2/sys/refdb_backend.h + * @brief Custom reference database backends for refs storage + * @defgroup git_refdb_backend Custom reference database backends for refs storage * @ingroup Git * @{ */ @@ -65,9 +65,9 @@ struct git_refdb_backend { * * A refdb implementation must provide this function. * - * @arg exists The implementation shall set this to `0` if a ref does + * @param 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 + * @param ref_name The reference's name that should be checked for * existence. * @return `0` on success, a negative error value code. */ @@ -81,9 +81,9 @@ struct git_refdb_backend { * * A refdb implementation must provide this function. * - * @arg out The implementation shall set this to the allocated + * @param 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 + * @param 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. @@ -98,12 +98,12 @@ struct git_refdb_backend { * * A refdb implementation must provide this function. * - * @arg out The implementation shall set this to the allocated + * @param 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 + * @param 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. @@ -118,20 +118,20 @@ struct git_refdb_backend { * * A refdb implementation must provide this function. * - * @arg ref The reference to persist. May either be a symbolic or + * @param 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 + * @param 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 + * @param 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 + * @param 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 + * @param 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 + * @param 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 @@ -149,15 +149,15 @@ struct git_refdb_backend { * * A refdb implementation must provide this function. * - * @arg out The implementation shall set this to the newly created + * @param 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 + * @param old_name The current name of the reference that is to be renamed. + * @param new_name The new name that the old reference shall be renamed to. + * @param 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 + * @param 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 + * @param 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. */ @@ -173,11 +173,11 @@ struct git_refdb_backend { * * 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 + * @param ref_name The name of the reference name that shall be deleted. + * @param 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 + * @param 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. @@ -243,7 +243,7 @@ struct git_refdb_backend { * * A refdb implementation must provide this function. * - * @arg reflog The complete reference log for a given reference. Note + * @param 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 @@ -255,8 +255,8 @@ struct git_refdb_backend { * * 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. + * @param old_name The name of old reference whose reflog shall be renamed from. + * @param 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); @@ -266,7 +266,7 @@ struct git_refdb_backend { * * A refdb implementation must provide this function. * - * @arg name The name of the reference whose reflog shall be deleted. + * @param 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); @@ -277,9 +277,9 @@ struct git_refdb_backend { * 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 + * @param payload_out Opaque parameter that will be passed verbosely to * `unlock`. - * @arg refname Reference that shall be locked. + * @param 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); @@ -294,16 +294,16 @@ struct git_refdb_backend { * 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 + * @param payload The payload returned by `lock`. + * @param 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` + * @param 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 + * @param ref The reference which should be unlocked. + * @param 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 + * @param 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 @@ -312,7 +312,10 @@ struct git_refdb_backend { const git_reference *ref, const git_signature *sig, const char *message); }; +/** Current version for the `git_refdb_backend_options` structure */ #define GIT_REFDB_BACKEND_VERSION 1 + +/** Static constructor for `git_refdb_backend_options` */ #define GIT_REFDB_BACKEND_INIT {GIT_REFDB_BACKEND_VERSION} /** @@ -356,6 +359,7 @@ GIT_EXTERN(int) git_refdb_set_backend( git_refdb *refdb, git_refdb_backend *backend); +/** @} */ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/reflog.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/reflog.h deleted file mode 100644 index c9d0041..0000000 --- a/Clibgit2.xcframework/ios-arm64-simulator/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/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/refs.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/refs.h index d2ce2e0..e434e67 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/refs.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/refs.h @@ -13,8 +13,8 @@ /** * @file git2/sys/refs.h - * @brief Low-level Git ref creation - * @defgroup git_backend Git custom backend APIs + * @brief Low-level git reference creation + * @defgroup git_backend Low-level git reference creation * @ingroup Git * @{ */ @@ -46,4 +46,5 @@ GIT_EXTERN(git_reference *) git_reference__alloc_symbolic( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/remote.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/remote.h new file mode 100644 index 0000000..476965d --- /dev/null +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/remote.h @@ -0,0 +1,53 @@ +/* + * 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_remote_h +#define INCLUDE_sys_git_remote_h + +#include "git2/remote.h" + +/** + * @file git2/sys/remote.h + * @brief Low-level remote functionality for custom transports + * @defgroup git_remote Low-level remote functionality for custom transports + * @ingroup Git + * @{ +*/ + +GIT_BEGIN_DECL + +/** + * A remote's capabilities. + */ +typedef enum { + /** Remote supports fetching an advertised object by ID. */ + GIT_REMOTE_CAPABILITY_TIP_OID = (1 << 0), + + /** Remote supports fetching an individual reachable object. */ + GIT_REMOTE_CAPABILITY_REACHABLE_OID = (1 << 1), + + /** Remote supports push options. */ + GIT_REMOTE_CAPABILITY_PUSH_OPTIONS = (1 << 2), +} git_remote_capability_t; + +/** + * Disposes libgit2-initialized fields from a git_remote_connect_options. + * This should only be used for git_remote_connect_options returned by + * git_transport_remote_connect_options. + * + * Note that this does not free the `git_remote_connect_options` itself, just + * the memory pointed to by it. + * + * @param opts The `git_remote_connect_options` struct to dispose. + */ +GIT_EXTERN(void) git_remote_connect_options_dispose( + git_remote_connect_options *opts); + +/** @} */ +GIT_END_DECL + +#endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/repository.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/repository.h index 892be66..026ac8a 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/repository.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/repository.h @@ -9,16 +9,71 @@ #include "git2/common.h" #include "git2/types.h" +#include "git2/oid.h" /** * @file git2/sys/repository.h - * @brief Git repository custom implementation routines - * @defgroup git_backend Git custom backend APIs + * @brief Custom repository handling + * @defgroup git_repository Custom repository handling * @ingroup Git * @{ */ GIT_BEGIN_DECL +#ifdef GIT_EXPERIMENTAL_SHA256 + +/** + * The options for creating an repository from scratch. + * + * Initialize with `GIT_REPOSITORY_NEW_OPTIONS_INIT`. Alternatively, + * you can use `git_repository_new_options_init`. + * + * @options[version] GIT_REPOSITORY_NEW_OPTIONS_VERSION + * @options[init_macro] GIT_REPOSITORY_NEW_OPTIONS_INIT + * @options[init_function] git_repository_new_options_init + */ +typedef struct git_repository_new_options { + unsigned int version; /**< The version */ + + /** + * The object ID type for the object IDs that exist in the index. + * + * If this is not specified, this defaults to `GIT_OID_SHA1`. + */ + git_oid_t oid_type; +} git_repository_new_options; + +/** Current version for the `git_repository_new_options` structure */ +#define GIT_REPOSITORY_NEW_OPTIONS_VERSION 1 + +/** Static constructor for `git_repository_new_options` */ +#define GIT_REPOSITORY_NEW_OPTIONS_INIT { GIT_REPOSITORY_NEW_OPTIONS_VERSION } + +/** + * Initialize git_repository_new_options structure + * + * Initializes a `git_repository_new_options` with default values. + * Equivalent to creating an instance with + * `GIT_REPOSITORY_NEW_OPTIONS_INIT`. + * + * @param opts The `git_repository_new_options` struct to initialize. + * @param version The struct version; pass `GIT_REPOSITORY_NEW_OPTIONS_VERSION`. + * @return Zero on success; -1 on failure. + */ +GIT_EXTERN(int) git_repository_new_options_init( + git_repository_new_options *opts, + unsigned int version); + +/** + * Create a new repository with no backends. + * + * @param[out] out The blank repository + * @param opts the options for repository creation, or NULL for defaults + * @return 0 on success, or an error code + */ +GIT_EXTERN(int) git_repository_new(git_repository **out, git_repository_new_options *opts); +#else + /** * Create a new repository with neither backends nor config object * @@ -29,11 +84,13 @@ GIT_BEGIN_DECL * can fail to function properly: locations under $GIT_DIR, $GIT_COMMON_DIR, * or $GIT_INFO_DIR are impacted. * - * @param out The blank repository + * @param[out] out The blank repository * @return 0 on success, or an error code */ GIT_EXTERN(int) git_repository_new(git_repository **out); +#endif + /** * Reset all the internal state in a repository. * @@ -156,6 +213,7 @@ GIT_EXTERN(int) git_repository_set_bare(git_repository *repo); * and caches them so that subsequent calls to `git_submodule_lookup` are O(1). * * @param repo the repository whose submodules will be cached. + * @return 0 on success, or an error code */ GIT_EXTERN(int) git_repository_submodule_cache_all( git_repository *repo); @@ -171,10 +229,12 @@ GIT_EXTERN(int) git_repository_submodule_cache_all( * of these has changed, the cache might become invalid. * * @param repo the repository whose submodule cache will be cleared + * @return 0 on success, or an error code */ GIT_EXTERN(int) git_repository_submodule_cache_clear( git_repository *repo); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/stream.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/stream.h index 6f93cc4..eabff68 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/stream.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/stream.h @@ -11,8 +11,16 @@ #include "git2/types.h" #include "git2/proxy.h" +/** + * @file git2/sys/stream.h + * @brief Streaming file I/O functionality + * @defgroup git_stream Streaming file I/O functionality + * @ingroup Git + * @{ + */ GIT_BEGIN_DECL +/** Current version for the `git_stream` structures */ #define GIT_STREAM_VERSION 1 /** @@ -29,8 +37,22 @@ GIT_BEGIN_DECL typedef struct git_stream { int version; - int encrypted; - int proxy_support; + unsigned int encrypted : 1, + proxy_support : 1; + + /** + * Timeout for read and write operations; can be set to `0` to + * block indefinitely. + */ + int timeout; + + /** + * Timeout to connect to the remote server; can be set to `0` + * to use the system defaults. This can be shorter than the + * system default - often 75 seconds - but cannot be longer. + */ + int connect_timeout; + 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); @@ -79,7 +101,7 @@ typedef enum { GIT_STREAM_STANDARD = 1, /** A TLS-encrypted socket. */ - GIT_STREAM_TLS = 2, + GIT_STREAM_TLS = 2 } git_stream_t; /** @@ -133,6 +155,7 @@ GIT_EXTERN(int) git_stream_register_tls(git_stream_cb ctor); #endif +/**@}*/ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/transport.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/transport.h index fee3454..ad6765c 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/transport.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/sys/transport.h @@ -9,46 +9,40 @@ #define INCLUDE_sys_git_transport_h #include "git2/net.h" +#include "git2/oidarray.h" +#include "git2/proxy.h" +#include "git2/remote.h" +#include "git2/strarray.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 + * @brief Custom transport registration interfaces and functions + * @defgroup git_transport Custom transport registration * @ingroup Git + * + * Callers can override the default HTTPS or SSH implementation by + * specifying a custom transport. * @{ */ GIT_BEGIN_DECL /** - * Flags to pass to transport - * - * Currently unused. + * The negotiation state during a fetch smart transport negotiation. */ -typedef enum { - GIT_TRANSPORTFLAGS_NONE = 0, -} git_transport_flags_t; +typedef struct { + const git_remote_head * const *refs; + size_t refs_len; + git_oid *shallow_roots; + size_t shallow_roots_len; + int depth; +} git_fetch_negotiation; 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. @@ -56,11 +50,39 @@ struct git_transport { 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); + const git_remote_connect_options *connect_opts); + + /** + * Resets the connect options for the given transport. This + * is useful for updating settings or callbacks for an already + * connected transport. + */ + int GIT_CALLBACK(set_connect_opts)( + git_transport *transport, + const git_remote_connect_options *connect_opts); + + /** + * Gets the capabilities for this remote repository. + * + * This function may be called after a successful call to + * `connect()`. + */ + int GIT_CALLBACK(capabilities)( + unsigned int *capabilities, + git_transport *transport); + +#ifdef GIT_EXPERIMENTAL_SHA256 + /** + * Gets the object type for the remote repository. + * + * This function may be called after a successful call to + * `connect()`. + */ + int GIT_CALLBACK(oid_type)( + git_oid_t *object_type, + git_transport *transport); +#endif /** * Get the list of available references in the remote repository. @@ -75,7 +97,9 @@ struct git_transport { 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); + int GIT_CALLBACK(push)( + git_transport *transport, + git_push *push); /** * Negotiate a fetch with the remote repository. @@ -87,8 +111,17 @@ struct git_transport { int GIT_CALLBACK(negotiate_fetch)( git_transport *transport, git_repository *repo, - const git_remote_head * const *refs, - size_t count); + const git_fetch_negotiation *fetch_data); + + /** + * Return the shallow roots of the remote. + * + * This function may be called after a successful call to + * `negotiate_fetch`. + */ + int GIT_CALLBACK(shallow_roots)( + git_oidarray *out, + git_transport *transport); /** * Start downloading the packfile from the remote repository. @@ -99,16 +132,11 @@ struct git_transport { int GIT_CALLBACK(download_pack)( git_transport *transport, git_repository *repo, - git_indexer_progress *stats, - git_indexer_progress_cb progress_cb, - void *progress_payload); + git_indexer_progress *stats); /** 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); @@ -124,7 +152,10 @@ struct git_transport { void GIT_CALLBACK(free)(git_transport *transport); }; +/** Current version for the `git_transport` structure */ #define GIT_TRANSPORT_VERSION 1 + +/** Static constructor for `git_transport` */ #define GIT_TRANSPORT_INIT {GIT_TRANSPORT_VERSION} /** @@ -270,14 +301,18 @@ GIT_EXTERN(int) git_transport_smart_certificate_check(git_transport *transport, 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 + * Get a copy of the remote connect options * - * The url is copied and must be freed by the caller. + * All data is copied and must be freed by the caller by calling + * `git_remote_connect_options_dispose`. * * @param out options struct to fill * @param transport the transport to extract the data from. + * @return 0 on success, or an error code */ -GIT_EXTERN(int) git_transport_smart_proxy_options(git_proxy_options *out, git_transport *transport); +GIT_EXTERN(int) git_transport_remote_connect_options( + git_remote_connect_options *out, + git_transport *transport); /* *** End of base transport interface *** @@ -289,7 +324,7 @@ typedef enum { GIT_SERVICE_UPLOADPACK_LS = 1, GIT_SERVICE_UPLOADPACK = 2, GIT_SERVICE_RECEIVEPACK_LS = 3, - GIT_SERVICE_RECEIVEPACK = 4, + GIT_SERVICE_RECEIVEPACK = 4 } git_smart_service_t; typedef struct git_smart_subtransport git_smart_subtransport; @@ -361,7 +396,14 @@ struct git_smart_subtransport { void GIT_CALLBACK(free)(git_smart_subtransport *transport); }; -/** A function which creates a new subtransport for the smart transport */ +/** + * A function that creates a new subtransport for the smart transport + * + * @param out the smart subtransport + * @param owner the transport owner + * @param param the input parameter + * @return 0 on success, or an error code + */ typedef int GIT_CALLBACK(git_smart_subtransport_cb)( git_smart_subtransport **out, git_transport *owner, @@ -404,6 +446,7 @@ typedef struct git_smart_subtransport_definition { * * @param out The newly created subtransport * @param owner The smart transport to own this subtransport + * @param param custom parameters for the subtransport * @return 0 or an error code */ GIT_EXTERN(int) git_smart_subtransport_http( @@ -416,6 +459,7 @@ GIT_EXTERN(int) git_smart_subtransport_http( * * @param out The newly created subtransport * @param owner The smart transport to own this subtransport + * @param param custom parameters for the subtransport * @return 0 or an error code */ GIT_EXTERN(int) git_smart_subtransport_git( @@ -428,6 +472,7 @@ GIT_EXTERN(int) git_smart_subtransport_git( * * @param out The newly created subtransport * @param owner The smart transport to own this subtransport + * @param param custom parameters for the subtransport * @return 0 or an error code */ GIT_EXTERN(int) git_smart_subtransport_ssh( @@ -437,4 +482,5 @@ GIT_EXTERN(int) git_smart_subtransport_ssh( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/tag.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/tag.h index a392136..3b0c12e 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/tag.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/tag.h @@ -15,7 +15,7 @@ /** * @file git2/tag.h - * @brief Git tag parsing routines + * @brief A (nearly) immutable pointer to a commit; useful for versioning * @defgroup git_tag Git tag management * @ingroup Git * @{ @@ -335,6 +335,7 @@ typedef int GIT_CALLBACK(git_tag_foreach_cb)(const char *name, git_oid *oid, voi * @param repo Repository * @param callback Callback function * @param payload Pointer to callback data (optional) + * @return 0 on success or an error code */ GIT_EXTERN(int) git_tag_foreach( git_repository *repo, @@ -362,6 +363,7 @@ GIT_EXTERN(int) git_tag_peel( * * @param out Pointer to store the copy of the tag * @param source Original tag to copy + * @return 0 */ GIT_EXTERN(int) git_tag_dup(git_tag **out, git_tag *source); @@ -379,4 +381,5 @@ GIT_EXTERN(int) git_tag_name_is_valid(int *valid, const char *name); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/trace.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/trace.h index 8cee3a9..62cb87c 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/trace.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/trace.h @@ -12,8 +12,8 @@ /** * @file git2/trace.h - * @brief Git tracing configuration routines - * @defgroup git_trace Git tracing configuration routines + * @brief Tracing functionality to introspect libgit2 in your application + * @defgroup git_trace Tracing functionality to introspect libgit2 in your application * @ingroup Git * @{ */ @@ -48,8 +48,13 @@ typedef enum { /** * An instance for a tracing function + * + * @param level the trace level + * @param msg the trace message */ -typedef void GIT_CALLBACK(git_trace_cb)(git_trace_level_t level, const char *msg); +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 @@ -64,4 +69,5 @@ GIT_EXTERN(int) git_trace_set(git_trace_level_t level, git_trace_cb cb); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/transaction.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/transaction.h index 4938570..212d329 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/transaction.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/transaction.h @@ -12,8 +12,8 @@ /** * @file git2/transaction.h - * @brief Git transactional reference routines - * @defgroup git_transaction Git transactional reference routines + * @brief Transactional reference handling + * @defgroup git_transaction Transactional reference handling * @ingroup Git * @{ */ @@ -118,4 +118,5 @@ GIT_EXTERN(void) git_transaction_free(git_transaction *tx); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/transport.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/transport.h index 5a27de9..04a7390 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/transport.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/transport.h @@ -15,8 +15,8 @@ /** * @file git2/transport.h - * @brief Git transport interfaces and functions - * @defgroup git_transport interfaces and functions + * @brief Transports are the low-level mechanism to connect to a remote server + * @defgroup git_transport Transports are the low-level mechanism to connect to a remote server * @ingroup Git * @{ */ @@ -30,10 +30,18 @@ GIT_BEGIN_DECL * @param str The message from the transport * @param len The length of the message * @param payload Payload provided by the caller + * @return 0 on success or an error code */ typedef int GIT_CALLBACK(git_transport_message_cb)(const char *str, int len, void *payload); -/** Signature of a function which creates a transport */ +/** + * Signature of a function which creates a transport. + * + * @param out the transport generate + * @param owner the owner for the transport + * @param param the param to the transport creation + * @return 0 on success or an error code + */ typedef int GIT_CALLBACK(git_transport_cb)(git_transport **out, git_remote *owner, void *param); /** @} */ diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/tree.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/tree.h index f2289fc..b8e2de2 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/tree.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/tree.h @@ -14,8 +14,8 @@ /** * @file git2/tree.h - * @brief Git tree parsing, loading routines - * @defgroup git_tree Git tree parsing, loading routines + * @brief Trees are collections of files and folders to make up the repository hierarchy + * @defgroup git_tree Trees are collections of files and folders to make up the repository hierarchy * @ingroup Git * @{ */ @@ -24,7 +24,7 @@ GIT_BEGIN_DECL /** * Lookup a tree object from the repository. * - * @param out Pointer to the looked up tree + * @param[out] 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 @@ -255,7 +255,7 @@ GIT_EXTERN(int) git_treebuilder_new( git_treebuilder **out, git_repository *repo, const git_tree *source); /** - * Clear all the entires in the builder + * Clear all the entries in the builder * * @param bld Builder to clear * @return 0 on success; error code otherwise @@ -345,6 +345,10 @@ GIT_EXTERN(int) git_treebuilder_remove( * 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). + * + * @param entry the tree entry for the callback to examine + * @param payload the payload from the caller + * @return 0 to do nothing, non-zero to remove the entry */ typedef int GIT_CALLBACK(git_treebuilder_filter_cb)( const git_tree_entry *entry, void *payload); @@ -379,14 +383,21 @@ GIT_EXTERN(int) git_treebuilder_filter( GIT_EXTERN(int) git_treebuilder_write( git_oid *id, git_treebuilder *bld); -/** Callback for the tree traversal method */ +/** + * Callback for the tree traversal method. + * + * @param root the current (relative) root to the entry + * @param entry the tree entry + * @param payload the caller-provided callback payload + * @return a positive value to skip the entry, a negative value to stop the walk + */ 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_POST = 1 /* Post-order */ } git_treewalk_mode; /** @@ -418,6 +429,7 @@ GIT_EXTERN(int) git_tree_walk( * * @param out Pointer to store the copy of the tree * @param source Original tree to copy + * @return 0 */ GIT_EXTERN(int) git_tree_dup(git_tree **out, git_tree *source); @@ -428,7 +440,7 @@ 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_REMOVE } git_tree_update_t; /** @@ -469,6 +481,6 @@ typedef struct { 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/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/types.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/types.h index aac8e42..a4afd18 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/types.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/types.h @@ -78,16 +78,21 @@ typedef enum { 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_REF_DELTA = 7 /**< A delta, base is given by object id. */ } git_object_t; -/** An open object database handle. */ +/** + * An object database stores the objects (commit, trees, blobs, tags, + * etc) for a repository. + */ 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 */ +/** + * A "raw" object read from the object database. + */ typedef struct git_odb_object git_odb_object; /** A stream to read/write from the ODB */ @@ -194,7 +199,18 @@ 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. */ +/** + * Annotated commits are commits with additional metadata about how the + * commit was resolved, which can be used for maintaining the user's + * "intent" through commands like merge and rebase. + * + * For example, if a user wants to conceptually "merge `HEAD`", then the + * commit portion of an annotated commit will point to the `HEAD` commit, + * but the _annotation_ will denote the ref `HEAD`. This allows git to + * perform the internal bookkeeping so that the system knows both the + * content of what is being merged but also how the content was looked up + * so that it can be recorded in the reflog appropriately. + */ typedef struct git_annotated_commit git_annotated_commit; /** Representation of a status collection */ @@ -208,14 +224,14 @@ 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_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_ALL = GIT_BRANCH_LOCAL|GIT_BRANCH_REMOTE } git_branch_t; /** Valid modes for index and tree entries. */ @@ -225,7 +241,7 @@ typedef enum { GIT_FILEMODE_BLOB = 0100644, GIT_FILEMODE_BLOB_EXECUTABLE = 0100755, GIT_FILEMODE_LINK = 0120000, - GIT_FILEMODE_COMMIT = 0160000, + GIT_FILEMODE_COMMIT = 0160000 } git_filemode_t; /** @@ -236,7 +252,7 @@ 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). + * which case it does not have backing configuration entries). */ typedef struct git_remote git_remote; @@ -334,7 +350,7 @@ typedef enum { 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_ALL = 4 /**< never dirty */ } git_submodule_ignore_t; /** @@ -350,7 +366,7 @@ typedef enum { typedef enum { GIT_SUBMODULE_RECURSE_NO = 0, GIT_SUBMODULE_RECURSE_YES = 1, - GIT_SUBMODULE_RECURSE_ONDEMAND = 2, + GIT_SUBMODULE_RECURSE_ONDEMAND = 2 } git_submodule_recurse_t; typedef struct git_writestream git_writestream; diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/version.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/version.h index 3503a62..587a101 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/version.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/version.h @@ -7,12 +7,71 @@ #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 +#include "common.h" -#define LIBGIT2_SOVERSION "1.3" +/** + * @file git2/version.h + * @brief The version of libgit2 + * @ingroup Git + * @{ + */ +GIT_BEGIN_DECL + +/** + * The version string for libgit2. This string follows semantic + * versioning (v2) guidelines. + */ +#define LIBGIT2_VERSION "1.9.1" + +/** The major version number for this version of libgit2. */ +#define LIBGIT2_VERSION_MAJOR 1 + +/** The minor version number for this version of libgit2. */ +#define LIBGIT2_VERSION_MINOR 9 + +/** The revision ("teeny") version number for this version of libgit2. */ +#define LIBGIT2_VERSION_REVISION 1 + +/** The Windows DLL patch number for this version of libgit2. */ +#define LIBGIT2_VERSION_PATCH 0 + +/** + * The prerelease string for this version of libgit2. For development + * (nightly) builds, this will be "alpha". For prereleases, this will be + * a prerelease name like "beta" or "rc1". For final releases, this will + * be `NULL`. + */ +#define LIBGIT2_VERSION_PRERELEASE NULL + +/** + * The library ABI soversion for this version of libgit2. This should + * only be changed when the library has a breaking ABI change, and so + * may not reflect the library's API version number. + */ +#define LIBGIT2_SOVERSION "1.9" + +/** + * An integer value representing the libgit2 version number. For example, + * libgit2 1.6.3 is 1060300. + */ +#define LIBGIT2_VERSION_NUMBER ( \ + (LIBGIT2_VERSION_MAJOR * 1000000) + \ + (LIBGIT2_VERSION_MINOR * 10000) + \ + (LIBGIT2_VERSION_REVISION * 100)) + +/** + * Compare the libgit2 version against a given version. Evaluates to true + * if the given major, minor, and revision values are greater than or equal + * to the currently running libgit2 version. For example: + * + * #if LIBGIT2_VERSION_CHECK(1, 6, 3) + * # error libgit2 version is >= 1.6.3 + * #endif + */ +#define LIBGIT2_VERSION_CHECK(major, minor, revision) \ + (LIBGIT2_VERSION_NUMBER >= ((major)*1000000)+((minor)*10000)+((revision)*100)) + +/** @} */ +GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/worktree.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/worktree.h index 23084d8..fd37517 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/worktree.h +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/git2/worktree.h @@ -11,11 +11,12 @@ #include "buffer.h" #include "types.h" #include "strarray.h" +#include "checkout.h" /** - * @file git2/worktrees.h - * @brief Git worktree related functions - * @defgroup git_commit Git worktree related functions + * @file git2/worktree.h + * @brief Additional working directories for a repository + * @defgroup git_commit Additional working directories for a repository * @ingroup Git * @{ */ @@ -52,6 +53,7 @@ GIT_EXTERN(int) git_worktree_lookup(git_worktree **out, git_repository *repo, co * * @param out Out-pointer for the newly allocated worktree * @param repo Repository to look up worktree for + * @return 0 or an error code */ GIT_EXTERN(int) git_worktree_open_from_repository(git_worktree **out, git_repository *repo); @@ -84,12 +86,22 @@ GIT_EXTERN(int) git_worktree_validate(const git_worktree *wt); 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 */ + int lock; /**< lock newly created worktree */ + int checkout_existing; /**< allow checkout of existing branch matching worktree name */ + git_reference *ref; /**< reference to use for the new worktree HEAD */ + + /** + * Options for the checkout. + */ + git_checkout_options checkout_options; } git_worktree_add_options; +/** Current version for the `git_worktree_add_options` structure */ #define GIT_WORKTREE_ADD_OPTIONS_VERSION 1 -#define GIT_WORKTREE_ADD_OPTIONS_INIT {GIT_WORKTREE_ADD_OPTIONS_VERSION,0,NULL} + +/** Static constructor for `git_worktree_add_options` */ +#define GIT_WORKTREE_ADD_OPTIONS_INIT { GIT_WORKTREE_ADD_OPTIONS_VERSION, \ + 0, 0, NULL, GIT_CHECKOUT_OPTIONS_INIT } /** * Initialize git_worktree_add_options structure @@ -185,7 +197,7 @@ typedef enum { /* 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_WORKING_TREE = 1u << 2 } git_worktree_prune_t; /** @@ -202,7 +214,10 @@ typedef struct git_worktree_prune_options { uint32_t flags; } git_worktree_prune_options; +/** Current version for the `git_worktree_prune_options` structure */ #define GIT_WORKTREE_PRUNE_OPTIONS_VERSION 1 + +/** Static constructor for `git_worktree_prune_options` */ #define GIT_WORKTREE_PRUNE_OPTIONS_INIT {GIT_WORKTREE_PRUNE_OPTIONS_VERSION,0} /** @@ -231,7 +246,13 @@ GIT_EXTERN(int) git_worktree_prune_options_init( * * 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. + * positive value. If the worktree is not prunable, an error + * message will be set (visible in `giterr_last`) with details about + * why. + * + * @param wt Worktree to check. + * @param opts The prunable options. + * @return 1 if the worktree is prunable, 0 otherwise, or an error code. */ GIT_EXTERN(int) git_worktree_is_prunable(git_worktree *wt, git_worktree_prune_options *opts); @@ -253,4 +274,5 @@ GIT_EXTERN(int) git_worktree_prune(git_worktree *wt, /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/libssh2.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/libssh2.h new file mode 100644 index 0000000..f47858a --- /dev/null +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/libssh2.h @@ -0,0 +1,1516 @@ +/* Copyright (C) Sara Golemon + * Copyright (C) Daniel Stenberg + * Copyright (C) Simon Josefsson + * All rights reserved. + * + * Redistribution and use in source and binary forms, + * with or without modification, are permitted provided + * that the following conditions are met: + * + * Redistributions of source code must retain the above + * copyright notice, this list of conditions and the + * following disclaimer. + * + * 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. + * + * Neither the name of the copyright holder nor the names + * of any other contributors may be used to endorse or + * promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + * CONTRIBUTORS "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 COPYRIGHT OWNER OR + * CONTRIBUTORS 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. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef LIBSSH2_H +#define LIBSSH2_H 1 + +#define LIBSSH2_COPYRIGHT "The libssh2 project and its contributors." + +/* We use underscore instead of dash when appending DEV in dev versions just + to make the BANNER define (used by src/session.c) be a valid SSH + banner. Release versions have no appended strings and may of course not + have dashes either. */ +#define LIBSSH2_VERSION "1.11.1" + +/* The numeric version number is also available "in parts" by using these + defines: */ +#define LIBSSH2_VERSION_MAJOR 1 +#define LIBSSH2_VERSION_MINOR 11 +#define LIBSSH2_VERSION_PATCH 1 + +/* This is the numeric version of the libssh2 version number, meant for easier + parsing and comparisons by programs. The LIBSSH2_VERSION_NUM define will + always follow this syntax: + + 0xXXYYZZ + + Where XX, YY and ZZ are the main version, release and patch numbers in + hexadecimal (using 8 bits each). All three numbers are always represented + using two digits. 1.2 would appear as "0x010200" while version 9.11.7 + appears as "0x090b07". + + This 6-digit (24 bits) hexadecimal number does not show pre-release number, + and it is always a greater number in a more recent release. It makes + comparisons with greater than and less than work. +*/ +#define LIBSSH2_VERSION_NUM 0x010b01 + +/* + * This is the date and time when the full source package was created. The + * timestamp is not stored in the source code repo, as the timestamp is + * properly set in the tarballs by the maketgz script. + * + * The format of the date should follow this template: + * + * "Mon Feb 12 11:35:33 UTC 2007" + */ +#define LIBSSH2_TIMESTAMP "Wed Oct 16 08:03:21 UTC 2024" + +#ifndef RC_INVOKED + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef _WIN32 +# include +# include +#endif + +#include +#include +#include +#include + +/* Allow alternate API prefix from CFLAGS or calling app */ +#ifndef LIBSSH2_API +# ifdef _WIN32 +# if defined(LIBSSH2_EXPORTS) || defined(_WINDLL) +# ifdef LIBSSH2_LIBRARY +# define LIBSSH2_API __declspec(dllexport) +# else +# define LIBSSH2_API __declspec(dllimport) +# endif /* LIBSSH2_LIBRARY */ +# else +# define LIBSSH2_API +# endif +# else /* !_WIN32 */ +# define LIBSSH2_API +# endif /* _WIN32 */ +#endif /* LIBSSH2_API */ + +#ifdef HAVE_SYS_UIO_H +# include +#endif + +#ifdef _MSC_VER +typedef unsigned char uint8_t; +typedef unsigned short int uint16_t; +typedef unsigned int uint32_t; +typedef __int32 int32_t; +typedef __int64 int64_t; +typedef unsigned __int64 uint64_t; +typedef unsigned __int64 libssh2_uint64_t; +typedef __int64 libssh2_int64_t; +#if (!defined(HAVE_SSIZE_T) && !defined(ssize_t)) +typedef SSIZE_T ssize_t; +#define HAVE_SSIZE_T +#endif +#else +#include +typedef unsigned long long libssh2_uint64_t; +typedef long long libssh2_int64_t; +#endif + +#ifdef _WIN32 +typedef SOCKET libssh2_socket_t; +#define LIBSSH2_INVALID_SOCKET INVALID_SOCKET +#define LIBSSH2_SOCKET_CLOSE(s) closesocket(s) +#else /* !_WIN32 */ +typedef int libssh2_socket_t; +#define LIBSSH2_INVALID_SOCKET -1 +#define LIBSSH2_SOCKET_CLOSE(s) close(s) +#endif /* _WIN32 */ + +/* Compile-time deprecation macros */ +#if !defined(LIBSSH2_DISABLE_DEPRECATION) && !defined(LIBSSH2_LIBRARY) +# if defined(_MSC_VER) +# if _MSC_VER >= 1400 +# define LIBSSH2_DEPRECATED(version, message) \ + __declspec(deprecated("since libssh2 " # version ". " message)) +# elif _MSC_VER >= 1310 +# define LIBSSH2_DEPRECATED(version, message) \ + __declspec(deprecated) +# endif +# elif defined(__GNUC__) && !defined(__INTEL_COMPILER) +# if (defined(__clang__) && __clang_major__ >= 3) || \ + (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)) +# define LIBSSH2_DEPRECATED(version, message) \ + __attribute__((deprecated("since libssh2 " # version ". " message))) +# elif __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 0) +# define LIBSSH2_DEPRECATED(version, message) \ + __attribute__((deprecated)) +# endif +# elif defined(__SUNPRO_C) && __SUNPRO_C >= 0x5130 +# define LIBSSH2_DEPRECATED(version, message) \ + __attribute__((deprecated)) +# endif +#endif + +#ifndef LIBSSH2_DEPRECATED +#define LIBSSH2_DEPRECATED(version, message) +#endif + +/* + * Determine whether there is small or large file support on windows. + */ + +#if defined(_MSC_VER) && !defined(_WIN32_WCE) +# if (_MSC_VER >= 900) && (_INTEGRAL_MAX_BITS >= 64) +# define LIBSSH2_USE_WIN32_LARGE_FILES +# else +# define LIBSSH2_USE_WIN32_SMALL_FILES +# endif +#endif + +#if defined(__MINGW32__) && !defined(LIBSSH2_USE_WIN32_LARGE_FILES) +# define LIBSSH2_USE_WIN32_LARGE_FILES +#endif + +#if defined(__WATCOMC__) && !defined(LIBSSH2_USE_WIN32_LARGE_FILES) +# define LIBSSH2_USE_WIN32_LARGE_FILES +#endif + +#if defined(__POCC__) +# undef LIBSSH2_USE_WIN32_LARGE_FILES +#endif + +#if defined(_WIN32) && !defined(LIBSSH2_USE_WIN32_LARGE_FILES) && \ + !defined(LIBSSH2_USE_WIN32_SMALL_FILES) +# define LIBSSH2_USE_WIN32_SMALL_FILES +#endif + +/* + * Large file (>2Gb) support using WIN32 functions. + */ + +#ifdef LIBSSH2_USE_WIN32_LARGE_FILES +# include +# define LIBSSH2_STRUCT_STAT_SIZE_FORMAT "%I64d" +typedef struct _stati64 libssh2_struct_stat; +typedef __int64 libssh2_struct_stat_size; +#endif + +/* + * Small file (<2Gb) support using WIN32 functions. + */ + +#ifdef LIBSSH2_USE_WIN32_SMALL_FILES +# ifndef _WIN32_WCE +# define LIBSSH2_STRUCT_STAT_SIZE_FORMAT "%d" +typedef struct _stat libssh2_struct_stat; +typedef off_t libssh2_struct_stat_size; +# endif +#endif + +#ifndef LIBSSH2_STRUCT_STAT_SIZE_FORMAT +# ifdef __VMS +/* We have to roll our own format here because %z is a C99-ism we don't + have. */ +# if __USE_OFF64_T || __USING_STD_STAT +# define LIBSSH2_STRUCT_STAT_SIZE_FORMAT "%Ld" +# else +# define LIBSSH2_STRUCT_STAT_SIZE_FORMAT "%d" +# endif +# else +# define LIBSSH2_STRUCT_STAT_SIZE_FORMAT "%zd" +# endif +typedef struct stat libssh2_struct_stat; +typedef off_t libssh2_struct_stat_size; +#endif + +/* Part of every banner, user specified or not */ +#define LIBSSH2_SSH_BANNER "SSH-2.0-libssh2_" LIBSSH2_VERSION + +#define LIBSSH2_SSH_DEFAULT_BANNER LIBSSH2_SSH_BANNER +#define LIBSSH2_SSH_DEFAULT_BANNER_WITH_CRLF LIBSSH2_SSH_DEFAULT_BANNER "\r\n" + +/* Defaults for pty requests */ +#define LIBSSH2_TERM_WIDTH 80 +#define LIBSSH2_TERM_HEIGHT 24 +#define LIBSSH2_TERM_WIDTH_PX 0 +#define LIBSSH2_TERM_HEIGHT_PX 0 + +/* 1/4 second */ +#define LIBSSH2_SOCKET_POLL_UDELAY 250000 +/* 0.25 * 120 == 30 seconds */ +#define LIBSSH2_SOCKET_POLL_MAXLOOPS 120 + +/* Maximum size to allow a payload to compress to, plays it safe by falling + short of spec limits */ +#define LIBSSH2_PACKET_MAXCOMP 32000 + +/* Maximum size to allow a payload to deccompress to, plays it safe by + allowing more than spec requires */ +#define LIBSSH2_PACKET_MAXDECOMP 40000 + +/* Maximum size for an inbound compressed payload, plays it safe by + overshooting spec limits */ +#define LIBSSH2_PACKET_MAXPAYLOAD 40000 + +/* Malloc callbacks */ +#define LIBSSH2_ALLOC_FUNC(name) void *name(size_t count, void **abstract) +#define LIBSSH2_REALLOC_FUNC(name) void *name(void *ptr, size_t count, \ + void **abstract) +#define LIBSSH2_FREE_FUNC(name) void name(void *ptr, void **abstract) + +typedef struct _LIBSSH2_USERAUTH_KBDINT_PROMPT +{ + unsigned char *text; + size_t length; + unsigned char echo; +} LIBSSH2_USERAUTH_KBDINT_PROMPT; + +typedef struct _LIBSSH2_USERAUTH_KBDINT_RESPONSE +{ + char *text; + unsigned int length; /* FIXME: change type to size_t */ +} LIBSSH2_USERAUTH_KBDINT_RESPONSE; + +typedef struct _LIBSSH2_SK_SIG_INFO { + uint8_t flags; + uint32_t counter; + unsigned char *sig_r; + size_t sig_r_len; + unsigned char *sig_s; + size_t sig_s_len; +} LIBSSH2_SK_SIG_INFO; + +/* 'publickey' authentication callback */ +#define LIBSSH2_USERAUTH_PUBLICKEY_SIGN_FUNC(name) \ + int name(LIBSSH2_SESSION *session, unsigned char **sig, size_t *sig_len, \ + const unsigned char *data, size_t data_len, void **abstract) + +/* 'keyboard-interactive' authentication callback */ +/* FIXME: name_len, instruction_len -> size_t, num_prompts -> unsigned int? */ +#define LIBSSH2_USERAUTH_KBDINT_RESPONSE_FUNC(name_) \ + void name_(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) + +/* SK authentication callback */ +#define LIBSSH2_USERAUTH_SK_SIGN_FUNC(name) \ + int name(LIBSSH2_SESSION *session, LIBSSH2_SK_SIG_INFO *sig_info, \ + const unsigned char *data, size_t data_len, \ + int algorithm, uint8_t flags, \ + const char *application, const unsigned char *key_handle, \ + size_t handle_len, \ + void **abstract) + +/* Flags for SK authentication */ +#define LIBSSH2_SK_PRESENCE_REQUIRED 0x01 +#define LIBSSH2_SK_VERIFICATION_REQUIRED 0x04 + +/* FIXME: update lengths to size_t (or ssize_t): */ + +/* Callbacks for special SSH packets */ +#define LIBSSH2_IGNORE_FUNC(name) \ + void name(LIBSSH2_SESSION *session, const char *message, int message_len, \ + void **abstract) + +#define LIBSSH2_DEBUG_FUNC(name) \ + void name(LIBSSH2_SESSION *session, int always_display, \ + const char *message, int message_len, \ + const char *language, int language_len, \ + void **abstract) + +#define LIBSSH2_DISCONNECT_FUNC(name) \ + void name(LIBSSH2_SESSION *session, int reason, \ + const char *message, int message_len, \ + const char *language, int language_len, \ + void **abstract) + +#define LIBSSH2_PASSWD_CHANGEREQ_FUNC(name) \ + void name(LIBSSH2_SESSION *session, char **newpw, int *newpw_len, \ + void **abstract) + +#define LIBSSH2_MACERROR_FUNC(name) \ + int name(LIBSSH2_SESSION *session, const char *packet, int packet_len, \ + void **abstract) + +#define LIBSSH2_X11_OPEN_FUNC(name) \ + void name(LIBSSH2_SESSION *session, LIBSSH2_CHANNEL *channel, \ + const char *shost, int sport, void **abstract) + +#define LIBSSH2_AUTHAGENT_FUNC(name) \ + void name(LIBSSH2_SESSION *session, LIBSSH2_CHANNEL *channel, \ + void **abstract) + +#define LIBSSH2_ADD_IDENTITIES_FUNC(name) \ + void name(LIBSSH2_SESSION *session, void *buffer, \ + const char *agent_path, void **abstract) + +#define LIBSSH2_AUTHAGENT_SIGN_FUNC(name) \ + int name(LIBSSH2_SESSION* session, \ + unsigned char *blob, unsigned int blen, \ + const unsigned char *data, unsigned int dlen, \ + unsigned char **signature, unsigned int *sigLen, \ + const char *agentPath, \ + void **abstract) + +#define LIBSSH2_CHANNEL_CLOSE_FUNC(name) \ + void name(LIBSSH2_SESSION *session, void **session_abstract, \ + LIBSSH2_CHANNEL *channel, void **channel_abstract) + +/* I/O callbacks */ +#define LIBSSH2_RECV_FUNC(name) \ + ssize_t name(libssh2_socket_t socket, \ + void *buffer, size_t length, \ + int flags, void **abstract) +#define LIBSSH2_SEND_FUNC(name) \ + ssize_t name(libssh2_socket_t socket, \ + const void *buffer, size_t length, \ + int flags, void **abstract) + +/* libssh2_session_callback_set() constants */ +#define LIBSSH2_CALLBACK_IGNORE 0 +#define LIBSSH2_CALLBACK_DEBUG 1 +#define LIBSSH2_CALLBACK_DISCONNECT 2 +#define LIBSSH2_CALLBACK_MACERROR 3 +#define LIBSSH2_CALLBACK_X11 4 +#define LIBSSH2_CALLBACK_SEND 5 +#define LIBSSH2_CALLBACK_RECV 6 +#define LIBSSH2_CALLBACK_AUTHAGENT 7 +#define LIBSSH2_CALLBACK_AUTHAGENT_IDENTITIES 8 +#define LIBSSH2_CALLBACK_AUTHAGENT_SIGN 9 + +/* libssh2_session_method_pref() constants */ +#define LIBSSH2_METHOD_KEX 0 +#define LIBSSH2_METHOD_HOSTKEY 1 +#define LIBSSH2_METHOD_CRYPT_CS 2 +#define LIBSSH2_METHOD_CRYPT_SC 3 +#define LIBSSH2_METHOD_MAC_CS 4 +#define LIBSSH2_METHOD_MAC_SC 5 +#define LIBSSH2_METHOD_COMP_CS 6 +#define LIBSSH2_METHOD_COMP_SC 7 +#define LIBSSH2_METHOD_LANG_CS 8 +#define LIBSSH2_METHOD_LANG_SC 9 +#define LIBSSH2_METHOD_SIGN_ALGO 10 + +/* flags */ +#define LIBSSH2_FLAG_SIGPIPE 1 +#define LIBSSH2_FLAG_COMPRESS 2 +#define LIBSSH2_FLAG_QUOTE_PATHS 3 + +typedef struct _LIBSSH2_SESSION LIBSSH2_SESSION; +typedef struct _LIBSSH2_CHANNEL LIBSSH2_CHANNEL; +typedef struct _LIBSSH2_LISTENER LIBSSH2_LISTENER; +typedef struct _LIBSSH2_KNOWNHOSTS LIBSSH2_KNOWNHOSTS; +typedef struct _LIBSSH2_AGENT LIBSSH2_AGENT; + +/* SK signature callback */ +typedef struct _LIBSSH2_PRIVKEY_SK { + int algorithm; + uint8_t flags; + const char *application; + const unsigned char *key_handle; + size_t handle_len; + LIBSSH2_USERAUTH_SK_SIGN_FUNC((*sign_callback)); + void **orig_abstract; +} LIBSSH2_PRIVKEY_SK; + +int +libssh2_sign_sk(LIBSSH2_SESSION *session, + unsigned char **sig, + size_t *sig_len, + const unsigned char *data, + size_t data_len, + void **abstract); + +typedef struct _LIBSSH2_POLLFD { + unsigned char type; /* LIBSSH2_POLLFD_* below */ + + union { + libssh2_socket_t socket; /* File descriptors -- examined with + system select() call */ + LIBSSH2_CHANNEL *channel; /* Examined by checking internal state */ + LIBSSH2_LISTENER *listener; /* Read polls only -- are inbound + connections waiting to be accepted? */ + } fd; + + unsigned long events; /* Requested Events */ + unsigned long revents; /* Returned Events */ +} LIBSSH2_POLLFD; + +/* Poll FD Descriptor Types */ +#define LIBSSH2_POLLFD_SOCKET 1 +#define LIBSSH2_POLLFD_CHANNEL 2 +#define LIBSSH2_POLLFD_LISTENER 3 + +/* Note: Win32 Doesn't actually have a poll() implementation, so some of these + values are faked with select() data */ +/* Poll FD events/revents -- Match sys/poll.h where possible */ +#define LIBSSH2_POLLFD_POLLIN 0x0001 /* Data available to be read or + connection available -- + All */ +#define LIBSSH2_POLLFD_POLLPRI 0x0002 /* Priority data available to + be read -- Socket only */ +#define LIBSSH2_POLLFD_POLLEXT 0x0002 /* Extended data available to + be read -- Channel only */ +#define LIBSSH2_POLLFD_POLLOUT 0x0004 /* Can may be written -- + Socket/Channel */ +/* revents only */ +#define LIBSSH2_POLLFD_POLLERR 0x0008 /* Error Condition -- Socket */ +#define LIBSSH2_POLLFD_POLLHUP 0x0010 /* HangUp/EOF -- Socket */ +#define LIBSSH2_POLLFD_SESSION_CLOSED 0x0010 /* Session Disconnect */ +#define LIBSSH2_POLLFD_POLLNVAL 0x0020 /* Invalid request -- Socket + Only */ +#define LIBSSH2_POLLFD_POLLEX 0x0040 /* Exception Condition -- + Socket/Win32 */ +#define LIBSSH2_POLLFD_CHANNEL_CLOSED 0x0080 /* Channel Disconnect */ +#define LIBSSH2_POLLFD_LISTENER_CLOSED 0x0080 /* Listener Disconnect */ + +#define HAVE_LIBSSH2_SESSION_BLOCK_DIRECTION +/* Block Direction Types */ +#define LIBSSH2_SESSION_BLOCK_INBOUND 0x0001 +#define LIBSSH2_SESSION_BLOCK_OUTBOUND 0x0002 + +/* Hash Types */ +#define LIBSSH2_HOSTKEY_HASH_MD5 1 +#define LIBSSH2_HOSTKEY_HASH_SHA1 2 +#define LIBSSH2_HOSTKEY_HASH_SHA256 3 + +/* Hostkey Types */ +#define LIBSSH2_HOSTKEY_TYPE_UNKNOWN 0 +#define LIBSSH2_HOSTKEY_TYPE_RSA 1 +#define LIBSSH2_HOSTKEY_TYPE_DSS 2 /* deprecated */ +#define LIBSSH2_HOSTKEY_TYPE_ECDSA_256 3 +#define LIBSSH2_HOSTKEY_TYPE_ECDSA_384 4 +#define LIBSSH2_HOSTKEY_TYPE_ECDSA_521 5 +#define LIBSSH2_HOSTKEY_TYPE_ED25519 6 + +/* Disconnect Codes (defined by SSH protocol) */ +#define SSH_DISCONNECT_HOST_NOT_ALLOWED_TO_CONNECT 1 +#define SSH_DISCONNECT_PROTOCOL_ERROR 2 +#define SSH_DISCONNECT_KEY_EXCHANGE_FAILED 3 +#define SSH_DISCONNECT_RESERVED 4 +#define SSH_DISCONNECT_MAC_ERROR 5 +#define SSH_DISCONNECT_COMPRESSION_ERROR 6 +#define SSH_DISCONNECT_SERVICE_NOT_AVAILABLE 7 +#define SSH_DISCONNECT_PROTOCOL_VERSION_NOT_SUPPORTED 8 +#define SSH_DISCONNECT_HOST_KEY_NOT_VERIFIABLE 9 +#define SSH_DISCONNECT_CONNECTION_LOST 10 +#define SSH_DISCONNECT_BY_APPLICATION 11 +#define SSH_DISCONNECT_TOO_MANY_CONNECTIONS 12 +#define SSH_DISCONNECT_AUTH_CANCELLED_BY_USER 13 +#define SSH_DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE 14 +#define SSH_DISCONNECT_ILLEGAL_USER_NAME 15 + +/* Error Codes (defined by libssh2) */ +#define LIBSSH2_ERROR_NONE 0 + +/* The library once used -1 as a generic error return value on numerous places + through the code, which subsequently was converted to + LIBSSH2_ERROR_SOCKET_NONE uses over time. As this is a generic error code, + the goal is to never ever return this code but instead make sure that a + more accurate and descriptive error code is used. */ +#define LIBSSH2_ERROR_SOCKET_NONE -1 + +#define LIBSSH2_ERROR_BANNER_RECV -2 +#define LIBSSH2_ERROR_BANNER_SEND -3 +#define LIBSSH2_ERROR_INVALID_MAC -4 +#define LIBSSH2_ERROR_KEX_FAILURE -5 +#define LIBSSH2_ERROR_ALLOC -6 +#define LIBSSH2_ERROR_SOCKET_SEND -7 +#define LIBSSH2_ERROR_KEY_EXCHANGE_FAILURE -8 +#define LIBSSH2_ERROR_TIMEOUT -9 +#define LIBSSH2_ERROR_HOSTKEY_INIT -10 +#define LIBSSH2_ERROR_HOSTKEY_SIGN -11 +#define LIBSSH2_ERROR_DECRYPT -12 +#define LIBSSH2_ERROR_SOCKET_DISCONNECT -13 +#define LIBSSH2_ERROR_PROTO -14 +#define LIBSSH2_ERROR_PASSWORD_EXPIRED -15 +#define LIBSSH2_ERROR_FILE -16 +#define LIBSSH2_ERROR_METHOD_NONE -17 +#define LIBSSH2_ERROR_AUTHENTICATION_FAILED -18 +#define LIBSSH2_ERROR_PUBLICKEY_UNRECOGNIZED \ + LIBSSH2_ERROR_AUTHENTICATION_FAILED +#define LIBSSH2_ERROR_PUBLICKEY_UNVERIFIED -19 +#define LIBSSH2_ERROR_CHANNEL_OUTOFORDER -20 +#define LIBSSH2_ERROR_CHANNEL_FAILURE -21 +#define LIBSSH2_ERROR_CHANNEL_REQUEST_DENIED -22 +#define LIBSSH2_ERROR_CHANNEL_UNKNOWN -23 +#define LIBSSH2_ERROR_CHANNEL_WINDOW_EXCEEDED -24 +#define LIBSSH2_ERROR_CHANNEL_PACKET_EXCEEDED -25 +#define LIBSSH2_ERROR_CHANNEL_CLOSED -26 +#define LIBSSH2_ERROR_CHANNEL_EOF_SENT -27 +#define LIBSSH2_ERROR_SCP_PROTOCOL -28 +#define LIBSSH2_ERROR_ZLIB -29 +#define LIBSSH2_ERROR_SOCKET_TIMEOUT -30 +#define LIBSSH2_ERROR_SFTP_PROTOCOL -31 +#define LIBSSH2_ERROR_REQUEST_DENIED -32 +#define LIBSSH2_ERROR_METHOD_NOT_SUPPORTED -33 +#define LIBSSH2_ERROR_INVAL -34 +#define LIBSSH2_ERROR_INVALID_POLL_TYPE -35 +#define LIBSSH2_ERROR_PUBLICKEY_PROTOCOL -36 +#define LIBSSH2_ERROR_EAGAIN -37 +#define LIBSSH2_ERROR_BUFFER_TOO_SMALL -38 +#define LIBSSH2_ERROR_BAD_USE -39 +#define LIBSSH2_ERROR_COMPRESS -40 +#define LIBSSH2_ERROR_OUT_OF_BOUNDARY -41 +#define LIBSSH2_ERROR_AGENT_PROTOCOL -42 +#define LIBSSH2_ERROR_SOCKET_RECV -43 +#define LIBSSH2_ERROR_ENCRYPT -44 +#define LIBSSH2_ERROR_BAD_SOCKET -45 +#define LIBSSH2_ERROR_KNOWN_HOSTS -46 +#define LIBSSH2_ERROR_CHANNEL_WINDOW_FULL -47 +#define LIBSSH2_ERROR_KEYFILE_AUTH_FAILED -48 +#define LIBSSH2_ERROR_RANDGEN -49 +#define LIBSSH2_ERROR_MISSING_USERAUTH_BANNER -50 +#define LIBSSH2_ERROR_ALGO_UNSUPPORTED -51 +#define LIBSSH2_ERROR_MAC_FAILURE -52 +#define LIBSSH2_ERROR_HASH_INIT -53 +#define LIBSSH2_ERROR_HASH_CALC -54 + +/* this is a define to provide the old (<= 1.2.7) name */ +#define LIBSSH2_ERROR_BANNER_NONE LIBSSH2_ERROR_BANNER_RECV + +/* Global API */ +#define LIBSSH2_INIT_NO_CRYPTO 0x0001 + +/* + * libssh2_init() + * + * Initialize the libssh2 functions. This typically initialize the + * crypto library. It uses a global state, and is not thread safe -- + * you must make sure this function is not called concurrently. + * + * Flags can be: + * 0: Normal initialize + * LIBSSH2_INIT_NO_CRYPTO: Do not initialize the crypto library (ie. + * OPENSSL_add_cipher_algoritms() for OpenSSL + * + * Returns 0 if succeeded, or a negative value for error. + */ +LIBSSH2_API int libssh2_init(int flags); + +/* + * libssh2_exit() + * + * Exit the libssh2 functions and free's all memory used internal. + */ +LIBSSH2_API void libssh2_exit(void); + +/* + * libssh2_free() + * + * Deallocate memory allocated by earlier call to libssh2 functions. + */ +LIBSSH2_API void libssh2_free(LIBSSH2_SESSION *session, void *ptr); + +/* + * libssh2_session_supported_algs() + * + * Fills algs with a list of supported acryptographic algorithms. Returns a + * non-negative number (number of supported algorithms) on success or a + * negative number (an error code) on failure. + * + * NOTE: on success, algs must be deallocated (by calling libssh2_free) when + * not needed anymore + */ +LIBSSH2_API int libssh2_session_supported_algs(LIBSSH2_SESSION* session, + int method_type, + const char ***algs); + +/* Session API */ +LIBSSH2_API LIBSSH2_SESSION * +libssh2_session_init_ex(LIBSSH2_ALLOC_FUNC((*my_alloc)), + LIBSSH2_FREE_FUNC((*my_free)), + LIBSSH2_REALLOC_FUNC((*my_realloc)), void *abstract); +#define libssh2_session_init() libssh2_session_init_ex(NULL, NULL, NULL, NULL) + +LIBSSH2_API void **libssh2_session_abstract(LIBSSH2_SESSION *session); + +typedef void (libssh2_cb_generic)(void); + +LIBSSH2_API libssh2_cb_generic * +libssh2_session_callback_set2(LIBSSH2_SESSION *session, int cbtype, + libssh2_cb_generic *callback); + +LIBSSH2_DEPRECATED(1.11.1, "Use libssh2_session_callback_set2()") +LIBSSH2_API void *libssh2_session_callback_set(LIBSSH2_SESSION *session, + int cbtype, void *callback); +LIBSSH2_API int libssh2_session_banner_set(LIBSSH2_SESSION *session, + const char *banner); +#ifndef LIBSSH2_NO_DEPRECATED +LIBSSH2_DEPRECATED(1.4.0, "Use libssh2_session_banner_set()") +LIBSSH2_API int libssh2_banner_set(LIBSSH2_SESSION *session, + const char *banner); + +LIBSSH2_DEPRECATED(1.2.8, "Use libssh2_session_handshake()") +LIBSSH2_API int libssh2_session_startup(LIBSSH2_SESSION *session, int sock); +#endif +LIBSSH2_API int libssh2_session_handshake(LIBSSH2_SESSION *session, + libssh2_socket_t sock); +LIBSSH2_API int libssh2_session_disconnect_ex(LIBSSH2_SESSION *session, + int reason, + const char *description, + const char *lang); +#define libssh2_session_disconnect(session, description) \ + libssh2_session_disconnect_ex((session), SSH_DISCONNECT_BY_APPLICATION, \ + (description), "") + +LIBSSH2_API int libssh2_session_free(LIBSSH2_SESSION *session); + +LIBSSH2_API const char *libssh2_hostkey_hash(LIBSSH2_SESSION *session, + int hash_type); + +LIBSSH2_API const char *libssh2_session_hostkey(LIBSSH2_SESSION *session, + size_t *len, int *type); + +LIBSSH2_API int libssh2_session_method_pref(LIBSSH2_SESSION *session, + int method_type, + const char *prefs); +LIBSSH2_API const char *libssh2_session_methods(LIBSSH2_SESSION *session, + int method_type); +LIBSSH2_API int libssh2_session_last_error(LIBSSH2_SESSION *session, + char **errmsg, + int *errmsg_len, int want_buf); +LIBSSH2_API int libssh2_session_last_errno(LIBSSH2_SESSION *session); +LIBSSH2_API int libssh2_session_set_last_error(LIBSSH2_SESSION* session, + int errcode, + const char *errmsg); +LIBSSH2_API int libssh2_session_block_directions(LIBSSH2_SESSION *session); + +LIBSSH2_API int libssh2_session_flag(LIBSSH2_SESSION *session, int flag, + int value); +LIBSSH2_API const char *libssh2_session_banner_get(LIBSSH2_SESSION *session); + +/* Userauth API */ +LIBSSH2_API char *libssh2_userauth_list(LIBSSH2_SESSION *session, + const char *username, + unsigned int username_len); +LIBSSH2_API int libssh2_userauth_banner(LIBSSH2_SESSION *session, + char **banner); +LIBSSH2_API int libssh2_userauth_authenticated(LIBSSH2_SESSION *session); + +LIBSSH2_API int +libssh2_userauth_password_ex(LIBSSH2_SESSION *session, + const char *username, + unsigned int username_len, + const char *password, + unsigned int password_len, + LIBSSH2_PASSWD_CHANGEREQ_FUNC + ((*passwd_change_cb))); + +#define libssh2_userauth_password(session, username, password) \ + libssh2_userauth_password_ex((session), (username), \ + (unsigned int)strlen(username), \ + (password), (unsigned int)strlen(password), \ + NULL) + +LIBSSH2_API int +libssh2_userauth_publickey_fromfile_ex(LIBSSH2_SESSION *session, + const char *username, + unsigned int username_len, + const char *publickey, + const char *privatekey, + const char *passphrase); + +#define libssh2_userauth_publickey_fromfile(session, username, publickey, \ + privatekey, passphrase) \ + libssh2_userauth_publickey_fromfile_ex((session), (username), \ + (unsigned int)strlen(username), \ + (publickey), \ + (privatekey), (passphrase)) + +LIBSSH2_API int +libssh2_userauth_publickey(LIBSSH2_SESSION *session, + const char *username, + const unsigned char *pubkeydata, + size_t pubkeydata_len, + LIBSSH2_USERAUTH_PUBLICKEY_SIGN_FUNC + ((*sign_callback)), + void **abstract); + +LIBSSH2_API int +libssh2_userauth_hostbased_fromfile_ex(LIBSSH2_SESSION *session, + const char *username, + unsigned int username_len, + const char *publickey, + const char *privatekey, + const char *passphrase, + const char *hostname, + unsigned int hostname_len, + const char *local_username, + unsigned int local_username_len); + +#define libssh2_userauth_hostbased_fromfile(session, username, publickey, \ + privatekey, passphrase, hostname) \ + libssh2_userauth_hostbased_fromfile_ex((session), (username), \ + (unsigned int)strlen(username), \ + (publickey), \ + (privatekey), (passphrase), \ + (hostname), \ + (unsigned int)strlen(hostname), \ + (username), \ + (unsigned int)strlen(username)) + +LIBSSH2_API int +libssh2_userauth_publickey_frommemory(LIBSSH2_SESSION *session, + const char *username, + size_t username_len, + const char *publickeyfiledata, + size_t publickeyfiledata_len, + const char *privatekeyfiledata, + size_t privatekeyfiledata_len, + const char *passphrase); + +/* + * response_callback is provided with filled by library prompts array, + * but client must allocate and fill individual responses. Responses + * array is already allocated. Responses data will be freed by libssh2 + * after callback return, but before subsequent callback invocation. + */ +LIBSSH2_API int +libssh2_userauth_keyboard_interactive_ex(LIBSSH2_SESSION* session, + const char *username, + unsigned int username_len, + LIBSSH2_USERAUTH_KBDINT_RESPONSE_FUNC + ((*response_callback))); + +#define libssh2_userauth_keyboard_interactive(session, username, \ + response_callback) \ + libssh2_userauth_keyboard_interactive_ex((session), (username), \ + (unsigned int)strlen(username), \ + (response_callback)) + +LIBSSH2_API int +libssh2_userauth_publickey_sk(LIBSSH2_SESSION *session, + const char *username, + size_t username_len, + const unsigned char *pubkeydata, + size_t pubkeydata_len, + const char *privatekeydata, + size_t privatekeydata_len, + const char *passphrase, + LIBSSH2_USERAUTH_SK_SIGN_FUNC + ((*sign_callback)), + void **abstract); + +LIBSSH2_API int libssh2_poll(LIBSSH2_POLLFD *fds, unsigned int nfds, + long timeout); + +/* Channel API */ +#define LIBSSH2_CHANNEL_WINDOW_DEFAULT (2*1024*1024) +#define LIBSSH2_CHANNEL_PACKET_DEFAULT 32768 +#define LIBSSH2_CHANNEL_MINADJUST 1024 + +/* Extended Data Handling */ +#define LIBSSH2_CHANNEL_EXTENDED_DATA_NORMAL 0 +#define LIBSSH2_CHANNEL_EXTENDED_DATA_IGNORE 1 +#define LIBSSH2_CHANNEL_EXTENDED_DATA_MERGE 2 + +#define SSH_EXTENDED_DATA_STDERR 1 + +/* Returned by any function that would block during a read/write operation */ +#define LIBSSH2CHANNEL_EAGAIN LIBSSH2_ERROR_EAGAIN + +LIBSSH2_API LIBSSH2_CHANNEL * +libssh2_channel_open_ex(LIBSSH2_SESSION *session, const char *channel_type, + unsigned int channel_type_len, + unsigned int window_size, unsigned int packet_size, + const char *message, unsigned int message_len); + +#define libssh2_channel_open_session(session) \ + libssh2_channel_open_ex((session), "session", sizeof("session") - 1, \ + LIBSSH2_CHANNEL_WINDOW_DEFAULT, \ + LIBSSH2_CHANNEL_PACKET_DEFAULT, NULL, 0) + +LIBSSH2_API LIBSSH2_CHANNEL * +libssh2_channel_direct_tcpip_ex(LIBSSH2_SESSION *session, const char *host, + int port, const char *shost, int sport); +#define libssh2_channel_direct_tcpip(session, host, port) \ + libssh2_channel_direct_tcpip_ex((session), (host), (port), "127.0.0.1", 22) + +LIBSSH2_API LIBSSH2_CHANNEL * +libssh2_channel_direct_streamlocal_ex(LIBSSH2_SESSION * session, + const char *socket_path, + const char *shost, int sport); + +LIBSSH2_API LIBSSH2_LISTENER * +libssh2_channel_forward_listen_ex(LIBSSH2_SESSION *session, const char *host, + int port, int *bound_port, + int queue_maxsize); +#define libssh2_channel_forward_listen(session, port) \ + libssh2_channel_forward_listen_ex((session), NULL, (port), NULL, 16) + +LIBSSH2_API int libssh2_channel_forward_cancel(LIBSSH2_LISTENER *listener); + +LIBSSH2_API LIBSSH2_CHANNEL * +libssh2_channel_forward_accept(LIBSSH2_LISTENER *listener); + +LIBSSH2_API int libssh2_channel_setenv_ex(LIBSSH2_CHANNEL *channel, + const char *varname, + unsigned int varname_len, + const char *value, + unsigned int value_len); + +#define libssh2_channel_setenv(channel, varname, value) \ + libssh2_channel_setenv_ex((channel), (varname), \ + (unsigned int)strlen(varname), (value), \ + (unsigned int)strlen(value)) + +LIBSSH2_API int libssh2_channel_request_auth_agent(LIBSSH2_CHANNEL *channel); + +LIBSSH2_API int libssh2_channel_request_pty_ex(LIBSSH2_CHANNEL *channel, + const char *term, + unsigned int term_len, + const char *modes, + unsigned int modes_len, + int width, int height, + int width_px, int height_px); +#define libssh2_channel_request_pty(channel, term) \ + libssh2_channel_request_pty_ex((channel), (term), \ + (unsigned int)strlen(term), \ + NULL, 0, \ + LIBSSH2_TERM_WIDTH, \ + LIBSSH2_TERM_HEIGHT, \ + LIBSSH2_TERM_WIDTH_PX, \ + LIBSSH2_TERM_HEIGHT_PX) + +LIBSSH2_API int libssh2_channel_request_pty_size_ex(LIBSSH2_CHANNEL *channel, + int width, int height, + int width_px, + int height_px); +#define libssh2_channel_request_pty_size(channel, width, height) \ + libssh2_channel_request_pty_size_ex((channel), (width), (height), 0, 0) + +LIBSSH2_API int libssh2_channel_x11_req_ex(LIBSSH2_CHANNEL *channel, + int single_connection, + const char *auth_proto, + const char *auth_cookie, + int screen_number); +#define libssh2_channel_x11_req(channel, screen_number) \ + libssh2_channel_x11_req_ex((channel), 0, NULL, NULL, (screen_number)) + +LIBSSH2_API int libssh2_channel_signal_ex(LIBSSH2_CHANNEL *channel, + const char *signame, + size_t signame_len); +#define libssh2_channel_signal(channel, signame) \ + libssh2_channel_signal_ex((channel), signame, strlen(signame)) + +LIBSSH2_API int libssh2_channel_process_startup(LIBSSH2_CHANNEL *channel, + const char *request, + unsigned int request_len, + const char *message, + unsigned int message_len); +#define libssh2_channel_shell(channel) \ + libssh2_channel_process_startup((channel), "shell", sizeof("shell") - 1, \ + NULL, 0) +#define libssh2_channel_exec(channel, command) \ + libssh2_channel_process_startup((channel), "exec", sizeof("exec") - 1, \ + (command), (unsigned int)strlen(command)) +#define libssh2_channel_subsystem(channel, subsystem) \ + libssh2_channel_process_startup((channel), "subsystem", \ + sizeof("subsystem") - 1, (subsystem), \ + (unsigned int)strlen(subsystem)) + +LIBSSH2_API ssize_t libssh2_channel_read_ex(LIBSSH2_CHANNEL *channel, + int stream_id, char *buf, + size_t buflen); +#define libssh2_channel_read(channel, buf, buflen) \ + libssh2_channel_read_ex((channel), 0, \ + (buf), (buflen)) +#define libssh2_channel_read_stderr(channel, buf, buflen) \ + libssh2_channel_read_ex((channel), SSH_EXTENDED_DATA_STDERR, \ + (buf), (buflen)) + +LIBSSH2_API int libssh2_poll_channel_read(LIBSSH2_CHANNEL *channel, + int extended); + +LIBSSH2_API unsigned long +libssh2_channel_window_read_ex(LIBSSH2_CHANNEL *channel, + unsigned long *read_avail, + unsigned long *window_size_initial); +#define libssh2_channel_window_read(channel) \ + libssh2_channel_window_read_ex((channel), NULL, NULL) + +#ifndef LIBSSH2_NO_DEPRECATED +LIBSSH2_DEPRECATED(1.1.0, "Use libssh2_channel_receive_window_adjust2()") +LIBSSH2_API unsigned long +libssh2_channel_receive_window_adjust(LIBSSH2_CHANNEL *channel, + unsigned long adjustment, + unsigned char force); +#endif +LIBSSH2_API int +libssh2_channel_receive_window_adjust2(LIBSSH2_CHANNEL *channel, + unsigned long adjustment, + unsigned char force, + unsigned int *storewindow); + +LIBSSH2_API ssize_t libssh2_channel_write_ex(LIBSSH2_CHANNEL *channel, + int stream_id, const char *buf, + size_t buflen); + +#define libssh2_channel_write(channel, buf, buflen) \ + libssh2_channel_write_ex((channel), 0, \ + (buf), (buflen)) +#define libssh2_channel_write_stderr(channel, buf, buflen) \ + libssh2_channel_write_ex((channel), SSH_EXTENDED_DATA_STDERR, \ + (buf), (buflen)) + +LIBSSH2_API unsigned long +libssh2_channel_window_write_ex(LIBSSH2_CHANNEL *channel, + unsigned long *window_size_initial); +#define libssh2_channel_window_write(channel) \ + libssh2_channel_window_write_ex((channel), NULL) + +LIBSSH2_API void libssh2_session_set_blocking(LIBSSH2_SESSION* session, + int blocking); +LIBSSH2_API int libssh2_session_get_blocking(LIBSSH2_SESSION* session); + +LIBSSH2_API void libssh2_channel_set_blocking(LIBSSH2_CHANNEL *channel, + int blocking); + +LIBSSH2_API void libssh2_session_set_timeout(LIBSSH2_SESSION* session, + long timeout); +LIBSSH2_API long libssh2_session_get_timeout(LIBSSH2_SESSION* session); + +LIBSSH2_API void libssh2_session_set_read_timeout(LIBSSH2_SESSION* session, + long timeout); +LIBSSH2_API long libssh2_session_get_read_timeout(LIBSSH2_SESSION* session); + +#ifndef LIBSSH2_NO_DEPRECATED +LIBSSH2_DEPRECATED(1.1.0, "libssh2_channel_handle_extended_data2()") +LIBSSH2_API void libssh2_channel_handle_extended_data(LIBSSH2_CHANNEL *channel, + int ignore_mode); +#endif +LIBSSH2_API int libssh2_channel_handle_extended_data2(LIBSSH2_CHANNEL *channel, + int ignore_mode); + +#ifndef LIBSSH2_NO_DEPRECATED +/* libssh2_channel_ignore_extended_data() is defined below for BC with version + * 0.1 + * + * Future uses should use libssh2_channel_handle_extended_data() directly if + * LIBSSH2_CHANNEL_EXTENDED_DATA_MERGE is passed, extended data will be read + * (FIFO) from the standard data channel + */ +/* DEPRECATED since 0.3.0. Use libssh2_channel_handle_extended_data2(). */ +#define libssh2_channel_ignore_extended_data(channel, ignore) \ + libssh2_channel_handle_extended_data((channel), (ignore) ? \ + LIBSSH2_CHANNEL_EXTENDED_DATA_IGNORE : \ + LIBSSH2_CHANNEL_EXTENDED_DATA_NORMAL) +#endif + +#define LIBSSH2_CHANNEL_FLUSH_EXTENDED_DATA -1 +#define LIBSSH2_CHANNEL_FLUSH_ALL -2 +LIBSSH2_API int libssh2_channel_flush_ex(LIBSSH2_CHANNEL *channel, + int streamid); +#define libssh2_channel_flush(channel) libssh2_channel_flush_ex((channel), 0) +#define libssh2_channel_flush_stderr(channel) \ + libssh2_channel_flush_ex((channel), SSH_EXTENDED_DATA_STDERR) + +LIBSSH2_API int libssh2_channel_get_exit_status(LIBSSH2_CHANNEL* channel); +LIBSSH2_API int libssh2_channel_get_exit_signal(LIBSSH2_CHANNEL* channel, + char **exitsignal, + size_t *exitsignal_len, + char **errmsg, + size_t *errmsg_len, + char **langtag, + size_t *langtag_len); +LIBSSH2_API int libssh2_channel_send_eof(LIBSSH2_CHANNEL *channel); +LIBSSH2_API int libssh2_channel_eof(LIBSSH2_CHANNEL *channel); +LIBSSH2_API int libssh2_channel_wait_eof(LIBSSH2_CHANNEL *channel); +LIBSSH2_API int libssh2_channel_close(LIBSSH2_CHANNEL *channel); +LIBSSH2_API int libssh2_channel_wait_closed(LIBSSH2_CHANNEL *channel); +LIBSSH2_API int libssh2_channel_free(LIBSSH2_CHANNEL *channel); + +#ifndef LIBSSH2_NO_DEPRECATED +LIBSSH2_DEPRECATED(1.7.0, "Use libssh2_scp_recv2()") +LIBSSH2_API LIBSSH2_CHANNEL *libssh2_scp_recv(LIBSSH2_SESSION *session, + const char *path, + struct stat *sb); +#endif +/* Use libssh2_scp_recv2() for large (> 2GB) file support on windows */ +LIBSSH2_API LIBSSH2_CHANNEL *libssh2_scp_recv2(LIBSSH2_SESSION *session, + const char *path, + libssh2_struct_stat *sb); +LIBSSH2_API LIBSSH2_CHANNEL *libssh2_scp_send_ex(LIBSSH2_SESSION *session, + const char *path, int mode, + size_t size, long mtime, + long atime); +LIBSSH2_API LIBSSH2_CHANNEL * +libssh2_scp_send64(LIBSSH2_SESSION *session, const char *path, int mode, + libssh2_int64_t size, time_t mtime, time_t atime); + +#define libssh2_scp_send(session, path, mode, size) \ + libssh2_scp_send_ex((session), (path), (mode), (size), 0, 0) + +/* DEPRECATED */ +LIBSSH2_API int libssh2_base64_decode(LIBSSH2_SESSION *session, char **dest, + unsigned int *dest_len, + const char *src, unsigned int src_len); + +LIBSSH2_API +const char *libssh2_version(int req_version_num); + +typedef enum { + libssh2_no_crypto = 0, + libssh2_openssl, + libssh2_gcrypt, + libssh2_mbedtls, + libssh2_wincng, + libssh2_os400qc3 +} libssh2_crypto_engine_t; + +LIBSSH2_API +libssh2_crypto_engine_t libssh2_crypto_engine(void); + +#define HAVE_LIBSSH2_KNOWNHOST_API 0x010101 /* since 1.1.1 */ +#define HAVE_LIBSSH2_VERSION_API 0x010100 /* libssh2_version since 1.1 */ +#define HAVE_LIBSSH2_CRYPTOENGINE_API 0x011100 /* libssh2_crypto_engine + since 1.11 */ + +struct libssh2_knownhost { + unsigned int magic; /* magic stored by the library */ + void *node; /* handle to the internal representation of this host */ + char *name; /* this is NULL if no plain text host name exists */ + char *key; /* key in base64/printable format */ + int typemask; +}; + +/* + * libssh2_knownhost_init() + * + * Init a collection of known hosts. Returns the pointer to a collection. + * + */ +LIBSSH2_API LIBSSH2_KNOWNHOSTS * +libssh2_knownhost_init(LIBSSH2_SESSION *session); + +/* + * libssh2_knownhost_add() + * + * Add a host and its associated key to the collection of known hosts. + * + * The 'type' argument specifies on what format the given host and keys are: + * + * plain - ascii "hostname.domain.tld" + * sha1 - SHA1( ) base64-encoded! + * custom - another hash + * + * If 'sha1' is selected as type, the salt must be provided to the salt + * argument. This too base64 encoded. + * + * The SHA-1 hash is what OpenSSH can be told to use in known_hosts files. If + * a custom type is used, salt is ignored and you must provide the host + * pre-hashed when checking for it in the libssh2_knownhost_check() function. + * + * The keylen parameter may be omitted (zero) if the key is provided as a + * NULL-terminated base64-encoded string. + */ + +/* host format (2 bits) */ +#define LIBSSH2_KNOWNHOST_TYPE_MASK 0xffff +#define LIBSSH2_KNOWNHOST_TYPE_PLAIN 1 +#define LIBSSH2_KNOWNHOST_TYPE_SHA1 2 /* always base64 encoded */ +#define LIBSSH2_KNOWNHOST_TYPE_CUSTOM 3 + +/* key format (2 bits) */ +#define LIBSSH2_KNOWNHOST_KEYENC_MASK (3<<16) +#define LIBSSH2_KNOWNHOST_KEYENC_RAW (1<<16) +#define LIBSSH2_KNOWNHOST_KEYENC_BASE64 (2<<16) + +/* type of key (4 bits) */ +#define LIBSSH2_KNOWNHOST_KEY_MASK (15<<18) +#define LIBSSH2_KNOWNHOST_KEY_SHIFT 18 +#define LIBSSH2_KNOWNHOST_KEY_RSA1 (1<<18) +#define LIBSSH2_KNOWNHOST_KEY_SSHRSA (2<<18) +#define LIBSSH2_KNOWNHOST_KEY_SSHDSS (3<<18) /* deprecated */ +#define LIBSSH2_KNOWNHOST_KEY_ECDSA_256 (4<<18) +#define LIBSSH2_KNOWNHOST_KEY_ECDSA_384 (5<<18) +#define LIBSSH2_KNOWNHOST_KEY_ECDSA_521 (6<<18) +#define LIBSSH2_KNOWNHOST_KEY_ED25519 (7<<18) +#define LIBSSH2_KNOWNHOST_KEY_UNKNOWN (15<<18) + +LIBSSH2_API int +libssh2_knownhost_add(LIBSSH2_KNOWNHOSTS *hosts, + const char *host, + const char *salt, + const char *key, size_t keylen, int typemask, + struct libssh2_knownhost **store); + +/* + * libssh2_knownhost_addc() + * + * Add a host and its associated key to the collection of known hosts. + * + * Takes a comment argument that may be NULL. A NULL comment indicates + * there is no comment and the entry will end directly after the key + * when written out to a file. An empty string "" comment will indicate an + * empty comment which will cause a single space to be written after the key. + * + * The 'type' argument specifies on what format the given host and keys are: + * + * plain - ascii "hostname.domain.tld" + * sha1 - SHA1( ) base64-encoded! + * custom - another hash + * + * If 'sha1' is selected as type, the salt must be provided to the salt + * argument. This too base64 encoded. + * + * The SHA-1 hash is what OpenSSH can be told to use in known_hosts files. + * If a custom type is used, salt is ignored and you must provide the host + * pre-hashed when checking for it in the libssh2_knownhost_check() function. + * + * The keylen parameter may be omitted (zero) if the key is provided as a + * NULL-terminated base64-encoded string. + */ + +LIBSSH2_API int +libssh2_knownhost_addc(LIBSSH2_KNOWNHOSTS *hosts, + const char *host, + const char *salt, + const char *key, size_t keylen, + const char *comment, size_t commentlen, int typemask, + struct libssh2_knownhost **store); + +/* + * libssh2_knownhost_check() + * + * Check a host and its associated key against the collection of known hosts. + * + * The type is the type/format of the given host name. + * + * plain - ascii "hostname.domain.tld" + * custom - prehashed base64 encoded. Note that this cannot use any salts. + * + * + * 'knownhost' may be set to NULL if you don't care about that info. + * + * Returns: + * + * LIBSSH2_KNOWNHOST_CHECK_* values, see below + * + */ + +#define LIBSSH2_KNOWNHOST_CHECK_MATCH 0 +#define LIBSSH2_KNOWNHOST_CHECK_MISMATCH 1 +#define LIBSSH2_KNOWNHOST_CHECK_NOTFOUND 2 +#define LIBSSH2_KNOWNHOST_CHECK_FAILURE 3 + +LIBSSH2_API int +libssh2_knownhost_check(LIBSSH2_KNOWNHOSTS *hosts, + const char *host, const char *key, size_t keylen, + int typemask, + struct libssh2_knownhost **knownhost); + +/* this function is identital to the above one, but also takes a port + argument that allows libssh2 to do a better check */ +LIBSSH2_API int +libssh2_knownhost_checkp(LIBSSH2_KNOWNHOSTS *hosts, + const char *host, int port, + const char *key, size_t keylen, + int typemask, + struct libssh2_knownhost **knownhost); + +/* + * libssh2_knownhost_del() + * + * Remove a host from the collection of known hosts. The 'entry' struct is + * retrieved by a call to libssh2_knownhost_check(). + * + */ +LIBSSH2_API int +libssh2_knownhost_del(LIBSSH2_KNOWNHOSTS *hosts, + struct libssh2_knownhost *entry); + +/* + * libssh2_knownhost_free() + * + * Free an entire collection of known hosts. + * + */ +LIBSSH2_API void +libssh2_knownhost_free(LIBSSH2_KNOWNHOSTS *hosts); + +/* + * libssh2_knownhost_readline() + * + * Pass in a line of a file of 'type'. It makes libssh2 read this line. + * + * LIBSSH2_KNOWNHOST_FILE_OPENSSH is the only supported type. + * + */ +LIBSSH2_API int +libssh2_knownhost_readline(LIBSSH2_KNOWNHOSTS *hosts, + const char *line, size_t len, int type); + +/* + * libssh2_knownhost_readfile() + * + * Add hosts+key pairs from a given file. + * + * Returns a negative value for error or number of successfully added hosts. + * + * This implementation currently only knows one 'type' (openssh), all others + * are reserved for future use. + */ + +#define LIBSSH2_KNOWNHOST_FILE_OPENSSH 1 + +LIBSSH2_API int +libssh2_knownhost_readfile(LIBSSH2_KNOWNHOSTS *hosts, + const char *filename, int type); + +/* + * libssh2_knownhost_writeline() + * + * Ask libssh2 to convert a known host to an output line for storage. + * + * Note that this function returns LIBSSH2_ERROR_BUFFER_TOO_SMALL if the given + * output buffer is too small to hold the desired output. + * + * This implementation currently only knows one 'type' (openssh), all others + * are reserved for future use. + * + */ +LIBSSH2_API int +libssh2_knownhost_writeline(LIBSSH2_KNOWNHOSTS *hosts, + struct libssh2_knownhost *known, + char *buffer, size_t buflen, + size_t *outlen, /* the amount of written data */ + int type); + +/* + * libssh2_knownhost_writefile() + * + * Write hosts+key pairs to a given file. + * + * This implementation currently only knows one 'type' (openssh), all others + * are reserved for future use. + */ + +LIBSSH2_API int +libssh2_knownhost_writefile(LIBSSH2_KNOWNHOSTS *hosts, + const char *filename, int type); + +/* + * libssh2_knownhost_get() + * + * Traverse the internal list of known hosts. Pass NULL to 'prev' to get + * the first one. Or pass a pointer to the previously returned one to get the + * next. + * + * Returns: + * 0 if a fine host was stored in 'store' + * 1 if end of hosts + * [negative] on errors + */ +LIBSSH2_API int +libssh2_knownhost_get(LIBSSH2_KNOWNHOSTS *hosts, + struct libssh2_knownhost **store, + struct libssh2_knownhost *prev); + +#define HAVE_LIBSSH2_AGENT_API 0x010202 /* since 1.2.2 */ + +struct libssh2_agent_publickey { + unsigned int magic; /* magic stored by the library */ + void *node; /* handle to the internal representation of key */ + unsigned char *blob; /* public key blob */ + size_t blob_len; /* length of the public key blob */ + char *comment; /* comment in printable format */ +}; + +/* + * libssh2_agent_init() + * + * Init an ssh-agent handle. Returns the pointer to the handle. + * + */ +LIBSSH2_API LIBSSH2_AGENT * +libssh2_agent_init(LIBSSH2_SESSION *session); + +/* + * libssh2_agent_connect() + * + * Connect to an ssh-agent. + * + * Returns 0 if succeeded, or a negative value for error. + */ +LIBSSH2_API int +libssh2_agent_connect(LIBSSH2_AGENT *agent); + +/* + * libssh2_agent_list_identities() + * + * Request an ssh-agent to list identities. + * + * Returns 0 if succeeded, or a negative value for error. + */ +LIBSSH2_API int +libssh2_agent_list_identities(LIBSSH2_AGENT *agent); + +/* + * libssh2_agent_get_identity() + * + * Traverse the internal list of public keys. Pass NULL to 'prev' to get + * the first one. Or pass a pointer to the previously returned one to get the + * next. + * + * Returns: + * 0 if a fine public key was stored in 'store' + * 1 if end of public keys + * [negative] on errors + */ +LIBSSH2_API int +libssh2_agent_get_identity(LIBSSH2_AGENT *agent, + struct libssh2_agent_publickey **store, + struct libssh2_agent_publickey *prev); + +/* + * libssh2_agent_userauth() + * + * Do publickey user authentication with the help of ssh-agent. + * + * Returns 0 if succeeded, or a negative value for error. + */ +LIBSSH2_API int +libssh2_agent_userauth(LIBSSH2_AGENT *agent, + const char *username, + struct libssh2_agent_publickey *identity); + +/* + * libssh2_agent_sign() + * + * Sign a payload using a system-installed ssh-agent. + * + * Returns 0 if succeeded, or a negative value for error. + */ +LIBSSH2_API int +libssh2_agent_sign(LIBSSH2_AGENT *agent, + struct libssh2_agent_publickey *identity, + unsigned char **sig, + size_t *s_len, + const unsigned char *data, + size_t d_len, + const char *method, + unsigned int method_len); + +/* + * libssh2_agent_disconnect() + * + * Close a connection to an ssh-agent. + * + * Returns 0 if succeeded, or a negative value for error. + */ +LIBSSH2_API int +libssh2_agent_disconnect(LIBSSH2_AGENT *agent); + +/* + * libssh2_agent_free() + * + * Free an ssh-agent handle. This function also frees the internal + * collection of public keys. + */ +LIBSSH2_API void +libssh2_agent_free(LIBSSH2_AGENT *agent); + +/* + * libssh2_agent_set_identity_path() + * + * Allows a custom agent identity socket path beyond SSH_AUTH_SOCK env + * + */ +LIBSSH2_API void +libssh2_agent_set_identity_path(LIBSSH2_AGENT *agent, + const char *path); + +/* + * libssh2_agent_get_identity_path() + * + * Returns the custom agent identity socket path if set + * + */ +LIBSSH2_API const char * +libssh2_agent_get_identity_path(LIBSSH2_AGENT *agent); + +/* + * libssh2_keepalive_config() + * + * Set how often keepalive messages should be sent. WANT_REPLY + * indicates whether the keepalive messages should request a response + * from the server. INTERVAL is number of seconds that can pass + * without any I/O, use 0 (the default) to disable keepalives. To + * avoid some busy-loop corner-cases, if you specify an interval of 1 + * it will be treated as 2. + * + * Note that non-blocking applications are responsible for sending the + * keepalive messages using libssh2_keepalive_send(). + */ +LIBSSH2_API void libssh2_keepalive_config(LIBSSH2_SESSION *session, + int want_reply, + unsigned int interval); + +/* + * libssh2_keepalive_send() + * + * Send a keepalive message if needed. SECONDS_TO_NEXT indicates how + * many seconds you can sleep after this call before you need to call + * it again. Returns 0 on success, or LIBSSH2_ERROR_SOCKET_SEND on + * I/O errors. + */ +LIBSSH2_API int libssh2_keepalive_send(LIBSSH2_SESSION *session, + int *seconds_to_next); + +/* NOTE NOTE NOTE + libssh2_trace() has no function in builds that aren't built with debug + enabled + */ +LIBSSH2_API int libssh2_trace(LIBSSH2_SESSION *session, int bitmask); +#define LIBSSH2_TRACE_TRANS (1<<1) +#define LIBSSH2_TRACE_KEX (1<<2) +#define LIBSSH2_TRACE_AUTH (1<<3) +#define LIBSSH2_TRACE_CONN (1<<4) +#define LIBSSH2_TRACE_SCP (1<<5) +#define LIBSSH2_TRACE_SFTP (1<<6) +#define LIBSSH2_TRACE_ERROR (1<<7) +#define LIBSSH2_TRACE_PUBLICKEY (1<<8) +#define LIBSSH2_TRACE_SOCKET (1<<9) + +typedef void (*libssh2_trace_handler_func)(LIBSSH2_SESSION*, + void *, + const char *, + size_t); +LIBSSH2_API int libssh2_trace_sethandler(LIBSSH2_SESSION *session, + void *context, + libssh2_trace_handler_func callback); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* !RC_INVOKED */ + +#endif /* LIBSSH2_H */ diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/libssh2_publickey.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/libssh2_publickey.h new file mode 100644 index 0000000..566acd6 --- /dev/null +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/libssh2_publickey.h @@ -0,0 +1,128 @@ +/* Copyright (C) Sara Golemon + * All rights reserved. + * + * Redistribution and use in source and binary forms, + * with or without modification, are permitted provided + * that the following conditions are met: + * + * Redistributions of source code must retain the above + * copyright notice, this list of conditions and the + * following disclaimer. + * + * 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. + * + * Neither the name of the copyright holder nor the names + * of any other contributors may be used to endorse or + * promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + * CONTRIBUTORS "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 COPYRIGHT OWNER OR + * CONTRIBUTORS 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. + */ + +/* Note: This include file is only needed for using the + * publickey SUBSYSTEM which is not the same as publickey + * authentication. For authentication you only need libssh2.h + * + * For more information on the publickey subsystem, + * refer to IETF draft: secsh-publickey + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef LIBSSH2_PUBLICKEY_H +#define LIBSSH2_PUBLICKEY_H 1 + +#include "libssh2.h" + +typedef struct _LIBSSH2_PUBLICKEY LIBSSH2_PUBLICKEY; + +typedef struct _libssh2_publickey_attribute { + const char *name; + unsigned long name_len; + const char *value; + unsigned long value_len; + char mandatory; +} libssh2_publickey_attribute; + +typedef struct _libssh2_publickey_list { + unsigned char *packet; /* For freeing */ + + const unsigned char *name; + unsigned long name_len; + const unsigned char *blob; + unsigned long blob_len; + unsigned long num_attrs; + libssh2_publickey_attribute *attrs; /* free me */ +} libssh2_publickey_list; + +/* Generally use the first macro here, but if both name and value are string + literals, you can use _fast() to take advantage of preprocessing */ +#define libssh2_publickey_attribute(name, value, mandatory) \ + { (name), strlen(name), (value), strlen(value), (mandatory) }, +#define libssh2_publickey_attribute_fast(name, value, mandatory) \ + { (name), sizeof(name) - 1, (value), sizeof(value) - 1, (mandatory) }, + +#ifdef __cplusplus +extern "C" { +#endif + +/* Publickey Subsystem */ +LIBSSH2_API LIBSSH2_PUBLICKEY * +libssh2_publickey_init(LIBSSH2_SESSION *session); + +LIBSSH2_API int +libssh2_publickey_add_ex(LIBSSH2_PUBLICKEY *pkey, + const unsigned char *name, + unsigned long name_len, + const unsigned char *blob, + unsigned long blob_len, char overwrite, + unsigned long num_attrs, + const libssh2_publickey_attribute attrs[]); +#define libssh2_publickey_add(pkey, name, blob, blob_len, overwrite, \ + num_attrs, attrs) \ + libssh2_publickey_add_ex((pkey), \ + (name), strlen(name), \ + (blob), (blob_len), \ + (overwrite), (num_attrs), (attrs)) + +LIBSSH2_API int libssh2_publickey_remove_ex(LIBSSH2_PUBLICKEY *pkey, + const unsigned char *name, + unsigned long name_len, + const unsigned char *blob, + unsigned long blob_len); +#define libssh2_publickey_remove(pkey, name, blob, blob_len) \ + libssh2_publickey_remove_ex((pkey), \ + (name), strlen(name), \ + (blob), (blob_len)) + +LIBSSH2_API int +libssh2_publickey_list_fetch(LIBSSH2_PUBLICKEY *pkey, + unsigned long *num_keys, + libssh2_publickey_list **pkey_list); +LIBSSH2_API void +libssh2_publickey_list_free(LIBSSH2_PUBLICKEY *pkey, + libssh2_publickey_list *pkey_list); + +LIBSSH2_API int libssh2_publickey_shutdown(LIBSSH2_PUBLICKEY *pkey); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* LIBSSH2_PUBLICKEY_H */ diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/libssh2_sftp.h b/Clibgit2.xcframework/ios-arm64-simulator/Headers/libssh2_sftp.h new file mode 100644 index 0000000..ab7b0af --- /dev/null +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/libssh2_sftp.h @@ -0,0 +1,382 @@ +/* Copyright (C) Sara Golemon + * All rights reserved. + * + * Redistribution and use in source and binary forms, + * with or without modification, are permitted provided + * that the following conditions are met: + * + * Redistributions of source code must retain the above + * copyright notice, this list of conditions and the + * following disclaimer. + * + * 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. + * + * Neither the name of the copyright holder nor the names + * of any other contributors may be used to endorse or + * promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + * CONTRIBUTORS "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 COPYRIGHT OWNER OR + * CONTRIBUTORS 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. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef LIBSSH2_SFTP_H +#define LIBSSH2_SFTP_H 1 + +#include "libssh2.h" + +#ifndef _WIN32 +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Note: Version 6 was documented at the time of writing + * However it was marked as "DO NOT IMPLEMENT" due to pending changes + * + * Let's start with Version 3 (The version found in OpenSSH) and go from there + */ +#define LIBSSH2_SFTP_VERSION 3 + +typedef struct _LIBSSH2_SFTP LIBSSH2_SFTP; +typedef struct _LIBSSH2_SFTP_HANDLE LIBSSH2_SFTP_HANDLE; +typedef struct _LIBSSH2_SFTP_ATTRIBUTES LIBSSH2_SFTP_ATTRIBUTES; +typedef struct _LIBSSH2_SFTP_STATVFS LIBSSH2_SFTP_STATVFS; + +/* Flags for open_ex() */ +#define LIBSSH2_SFTP_OPENFILE 0 +#define LIBSSH2_SFTP_OPENDIR 1 + +/* Flags for rename_ex() */ +#define LIBSSH2_SFTP_RENAME_OVERWRITE 0x00000001 +#define LIBSSH2_SFTP_RENAME_ATOMIC 0x00000002 +#define LIBSSH2_SFTP_RENAME_NATIVE 0x00000004 + +/* Flags for stat_ex() */ +#define LIBSSH2_SFTP_STAT 0 +#define LIBSSH2_SFTP_LSTAT 1 +#define LIBSSH2_SFTP_SETSTAT 2 + +/* Flags for symlink_ex() */ +#define LIBSSH2_SFTP_SYMLINK 0 +#define LIBSSH2_SFTP_READLINK 1 +#define LIBSSH2_SFTP_REALPATH 2 + +/* Flags for sftp_mkdir() */ +#define LIBSSH2_SFTP_DEFAULT_MODE -1 + +/* SFTP attribute flag bits */ +#define LIBSSH2_SFTP_ATTR_SIZE 0x00000001 +#define LIBSSH2_SFTP_ATTR_UIDGID 0x00000002 +#define LIBSSH2_SFTP_ATTR_PERMISSIONS 0x00000004 +#define LIBSSH2_SFTP_ATTR_ACMODTIME 0x00000008 +#define LIBSSH2_SFTP_ATTR_EXTENDED 0x80000000 + +/* SFTP statvfs flag bits */ +#define LIBSSH2_SFTP_ST_RDONLY 0x00000001 +#define LIBSSH2_SFTP_ST_NOSUID 0x00000002 + +struct _LIBSSH2_SFTP_ATTRIBUTES { + /* If flags & ATTR_* bit is set, then the value in this struct will be + * meaningful Otherwise it should be ignored + */ + unsigned long flags; + + libssh2_uint64_t filesize; + unsigned long uid, gid; + unsigned long permissions; + unsigned long atime, mtime; +}; + +struct _LIBSSH2_SFTP_STATVFS { + libssh2_uint64_t f_bsize; /* file system block size */ + libssh2_uint64_t f_frsize; /* fragment size */ + libssh2_uint64_t f_blocks; /* size of fs in f_frsize units */ + libssh2_uint64_t f_bfree; /* # free blocks */ + libssh2_uint64_t f_bavail; /* # free blocks for non-root */ + libssh2_uint64_t f_files; /* # inodes */ + libssh2_uint64_t f_ffree; /* # free inodes */ + libssh2_uint64_t f_favail; /* # free inodes for non-root */ + libssh2_uint64_t f_fsid; /* file system ID */ + libssh2_uint64_t f_flag; /* mount flags */ + libssh2_uint64_t f_namemax; /* maximum filename length */ +}; + +/* SFTP filetypes */ +#define LIBSSH2_SFTP_TYPE_REGULAR 1 +#define LIBSSH2_SFTP_TYPE_DIRECTORY 2 +#define LIBSSH2_SFTP_TYPE_SYMLINK 3 +#define LIBSSH2_SFTP_TYPE_SPECIAL 4 +#define LIBSSH2_SFTP_TYPE_UNKNOWN 5 +#define LIBSSH2_SFTP_TYPE_SOCKET 6 +#define LIBSSH2_SFTP_TYPE_CHAR_DEVICE 7 +#define LIBSSH2_SFTP_TYPE_BLOCK_DEVICE 8 +#define LIBSSH2_SFTP_TYPE_FIFO 9 + +/* + * Reproduce the POSIX file modes here for systems that are not POSIX + * compliant. + * + * These is used in "permissions" of "struct _LIBSSH2_SFTP_ATTRIBUTES" + */ +/* File type */ +#define LIBSSH2_SFTP_S_IFMT 0170000 /* type of file mask */ +#define LIBSSH2_SFTP_S_IFIFO 0010000 /* named pipe (fifo) */ +#define LIBSSH2_SFTP_S_IFCHR 0020000 /* character special */ +#define LIBSSH2_SFTP_S_IFDIR 0040000 /* directory */ +#define LIBSSH2_SFTP_S_IFBLK 0060000 /* block special */ +#define LIBSSH2_SFTP_S_IFREG 0100000 /* regular */ +#define LIBSSH2_SFTP_S_IFLNK 0120000 /* symbolic link */ +#define LIBSSH2_SFTP_S_IFSOCK 0140000 /* socket */ + +/* File mode */ +/* Read, write, execute/search by owner */ +#define LIBSSH2_SFTP_S_IRWXU 0000700 /* RWX mask for owner */ +#define LIBSSH2_SFTP_S_IRUSR 0000400 /* R for owner */ +#define LIBSSH2_SFTP_S_IWUSR 0000200 /* W for owner */ +#define LIBSSH2_SFTP_S_IXUSR 0000100 /* X for owner */ +/* Read, write, execute/search by group */ +#define LIBSSH2_SFTP_S_IRWXG 0000070 /* RWX mask for group */ +#define LIBSSH2_SFTP_S_IRGRP 0000040 /* R for group */ +#define LIBSSH2_SFTP_S_IWGRP 0000020 /* W for group */ +#define LIBSSH2_SFTP_S_IXGRP 0000010 /* X for group */ +/* Read, write, execute/search by others */ +#define LIBSSH2_SFTP_S_IRWXO 0000007 /* RWX mask for other */ +#define LIBSSH2_SFTP_S_IROTH 0000004 /* R for other */ +#define LIBSSH2_SFTP_S_IWOTH 0000002 /* W for other */ +#define LIBSSH2_SFTP_S_IXOTH 0000001 /* X for other */ + +/* macros to check for specific file types, added in 1.2.5 */ +#define LIBSSH2_SFTP_S_ISLNK(m) \ + (((m) & LIBSSH2_SFTP_S_IFMT) == LIBSSH2_SFTP_S_IFLNK) +#define LIBSSH2_SFTP_S_ISREG(m) \ + (((m) & LIBSSH2_SFTP_S_IFMT) == LIBSSH2_SFTP_S_IFREG) +#define LIBSSH2_SFTP_S_ISDIR(m) \ + (((m) & LIBSSH2_SFTP_S_IFMT) == LIBSSH2_SFTP_S_IFDIR) +#define LIBSSH2_SFTP_S_ISCHR(m) \ + (((m) & LIBSSH2_SFTP_S_IFMT) == LIBSSH2_SFTP_S_IFCHR) +#define LIBSSH2_SFTP_S_ISBLK(m) \ + (((m) & LIBSSH2_SFTP_S_IFMT) == LIBSSH2_SFTP_S_IFBLK) +#define LIBSSH2_SFTP_S_ISFIFO(m) \ + (((m) & LIBSSH2_SFTP_S_IFMT) == LIBSSH2_SFTP_S_IFIFO) +#define LIBSSH2_SFTP_S_ISSOCK(m) \ + (((m) & LIBSSH2_SFTP_S_IFMT) == LIBSSH2_SFTP_S_IFSOCK) + +/* SFTP File Transfer Flags -- (e.g. flags parameter to sftp_open()) + * Danger will robinson... APPEND doesn't have any effect on OpenSSH servers */ +#define LIBSSH2_FXF_READ 0x00000001 +#define LIBSSH2_FXF_WRITE 0x00000002 +#define LIBSSH2_FXF_APPEND 0x00000004 +#define LIBSSH2_FXF_CREAT 0x00000008 +#define LIBSSH2_FXF_TRUNC 0x00000010 +#define LIBSSH2_FXF_EXCL 0x00000020 + +/* SFTP Status Codes (returned by libssh2_sftp_last_error() ) */ +#define LIBSSH2_FX_OK 0UL +#define LIBSSH2_FX_EOF 1UL +#define LIBSSH2_FX_NO_SUCH_FILE 2UL +#define LIBSSH2_FX_PERMISSION_DENIED 3UL +#define LIBSSH2_FX_FAILURE 4UL +#define LIBSSH2_FX_BAD_MESSAGE 5UL +#define LIBSSH2_FX_NO_CONNECTION 6UL +#define LIBSSH2_FX_CONNECTION_LOST 7UL +#define LIBSSH2_FX_OP_UNSUPPORTED 8UL +#define LIBSSH2_FX_INVALID_HANDLE 9UL +#define LIBSSH2_FX_NO_SUCH_PATH 10UL +#define LIBSSH2_FX_FILE_ALREADY_EXISTS 11UL +#define LIBSSH2_FX_WRITE_PROTECT 12UL +#define LIBSSH2_FX_NO_MEDIA 13UL +#define LIBSSH2_FX_NO_SPACE_ON_FILESYSTEM 14UL +#define LIBSSH2_FX_QUOTA_EXCEEDED 15UL +#define LIBSSH2_FX_UNKNOWN_PRINCIPLE 16UL /* Initial mis-spelling */ +#define LIBSSH2_FX_UNKNOWN_PRINCIPAL 16UL +#define LIBSSH2_FX_LOCK_CONFlICT 17UL /* Initial mis-spelling */ +#define LIBSSH2_FX_LOCK_CONFLICT 17UL +#define LIBSSH2_FX_DIR_NOT_EMPTY 18UL +#define LIBSSH2_FX_NOT_A_DIRECTORY 19UL +#define LIBSSH2_FX_INVALID_FILENAME 20UL +#define LIBSSH2_FX_LINK_LOOP 21UL + +/* Returned by any function that would block during a read/write operation */ +#define LIBSSH2SFTP_EAGAIN LIBSSH2_ERROR_EAGAIN + +/* SFTP API */ +LIBSSH2_API LIBSSH2_SFTP *libssh2_sftp_init(LIBSSH2_SESSION *session); +LIBSSH2_API int libssh2_sftp_shutdown(LIBSSH2_SFTP *sftp); +LIBSSH2_API unsigned long libssh2_sftp_last_error(LIBSSH2_SFTP *sftp); +LIBSSH2_API LIBSSH2_CHANNEL *libssh2_sftp_get_channel(LIBSSH2_SFTP *sftp); + +/* File / Directory Ops */ +LIBSSH2_API LIBSSH2_SFTP_HANDLE * +libssh2_sftp_open_ex(LIBSSH2_SFTP *sftp, + const char *filename, + unsigned int filename_len, + unsigned long flags, + long mode, int open_type); +#define libssh2_sftp_open(sftp, filename, flags, mode) \ + libssh2_sftp_open_ex((sftp), \ + (filename), (unsigned int)strlen(filename), \ + (flags), (mode), LIBSSH2_SFTP_OPENFILE) +#define libssh2_sftp_opendir(sftp, path) \ + libssh2_sftp_open_ex((sftp), \ + (path), (unsigned int)strlen(path), \ + 0, 0, LIBSSH2_SFTP_OPENDIR) +LIBSSH2_API LIBSSH2_SFTP_HANDLE * +libssh2_sftp_open_ex_r(LIBSSH2_SFTP *sftp, + const char *filename, + size_t filename_len, + unsigned long flags, + long mode, int open_type, + LIBSSH2_SFTP_ATTRIBUTES *attrs); +#define libssh2_sftp_open_r(sftp, filename, flags, mode, attrs) \ + libssh2_sftp_open_ex_r((sftp), (filename), strlen(filename), \ + (flags), (mode), LIBSSH2_SFTP_OPENFILE, \ + (attrs)) + +LIBSSH2_API ssize_t libssh2_sftp_read(LIBSSH2_SFTP_HANDLE *handle, + char *buffer, size_t buffer_maxlen); + +LIBSSH2_API int libssh2_sftp_readdir_ex(LIBSSH2_SFTP_HANDLE *handle, \ + char *buffer, size_t buffer_maxlen, + char *longentry, + size_t longentry_maxlen, + LIBSSH2_SFTP_ATTRIBUTES *attrs); +#define libssh2_sftp_readdir(handle, buffer, buffer_maxlen, attrs) \ + libssh2_sftp_readdir_ex((handle), (buffer), (buffer_maxlen), NULL, 0, \ + (attrs)) + +LIBSSH2_API ssize_t libssh2_sftp_write(LIBSSH2_SFTP_HANDLE *handle, + const char *buffer, size_t count); +LIBSSH2_API int libssh2_sftp_fsync(LIBSSH2_SFTP_HANDLE *handle); + +LIBSSH2_API int libssh2_sftp_close_handle(LIBSSH2_SFTP_HANDLE *handle); +#define libssh2_sftp_close(handle) libssh2_sftp_close_handle(handle) +#define libssh2_sftp_closedir(handle) libssh2_sftp_close_handle(handle) + +LIBSSH2_API void libssh2_sftp_seek(LIBSSH2_SFTP_HANDLE *handle, size_t offset); +LIBSSH2_API void libssh2_sftp_seek64(LIBSSH2_SFTP_HANDLE *handle, + libssh2_uint64_t offset); +#define libssh2_sftp_rewind(handle) libssh2_sftp_seek64((handle), 0) + +LIBSSH2_API size_t libssh2_sftp_tell(LIBSSH2_SFTP_HANDLE *handle); +LIBSSH2_API libssh2_uint64_t libssh2_sftp_tell64(LIBSSH2_SFTP_HANDLE *handle); + +LIBSSH2_API int libssh2_sftp_fstat_ex(LIBSSH2_SFTP_HANDLE *handle, + LIBSSH2_SFTP_ATTRIBUTES *attrs, + int setstat); +#define libssh2_sftp_fstat(handle, attrs) \ + libssh2_sftp_fstat_ex((handle), (attrs), 0) +#define libssh2_sftp_fsetstat(handle, attrs) \ + libssh2_sftp_fstat_ex((handle), (attrs), 1) + +/* Miscellaneous Ops */ +LIBSSH2_API int libssh2_sftp_rename_ex(LIBSSH2_SFTP *sftp, + const char *source_filename, + unsigned int srouce_filename_len, + const char *dest_filename, + unsigned int dest_filename_len, + long flags); +#define libssh2_sftp_rename(sftp, sourcefile, destfile) \ + libssh2_sftp_rename_ex((sftp), \ + (sourcefile), (unsigned int)strlen(sourcefile), \ + (destfile), (unsigned int)strlen(destfile), \ + LIBSSH2_SFTP_RENAME_OVERWRITE | \ + LIBSSH2_SFTP_RENAME_ATOMIC | \ + LIBSSH2_SFTP_RENAME_NATIVE) + +LIBSSH2_API int libssh2_sftp_posix_rename_ex(LIBSSH2_SFTP *sftp, + const char *source_filename, + size_t srouce_filename_len, + const char *dest_filename, + size_t dest_filename_len); +#define libssh2_sftp_posix_rename(sftp, sourcefile, destfile) \ + libssh2_sftp_posix_rename_ex((sftp), (sourcefile), strlen(sourcefile), \ + (destfile), strlen(destfile)) + +LIBSSH2_API int libssh2_sftp_unlink_ex(LIBSSH2_SFTP *sftp, + const char *filename, + unsigned int filename_len); +#define libssh2_sftp_unlink(sftp, filename) \ + libssh2_sftp_unlink_ex((sftp), (filename), (unsigned int)strlen(filename)) + +LIBSSH2_API int libssh2_sftp_fstatvfs(LIBSSH2_SFTP_HANDLE *handle, + LIBSSH2_SFTP_STATVFS *st); + +LIBSSH2_API int libssh2_sftp_statvfs(LIBSSH2_SFTP *sftp, + const char *path, + size_t path_len, + LIBSSH2_SFTP_STATVFS *st); + +LIBSSH2_API int libssh2_sftp_mkdir_ex(LIBSSH2_SFTP *sftp, + const char *path, + unsigned int path_len, long mode); +#define libssh2_sftp_mkdir(sftp, path, mode) \ + libssh2_sftp_mkdir_ex((sftp), (path), (unsigned int)strlen(path), (mode)) + +LIBSSH2_API int libssh2_sftp_rmdir_ex(LIBSSH2_SFTP *sftp, + const char *path, + unsigned int path_len); +#define libssh2_sftp_rmdir(sftp, path) \ + libssh2_sftp_rmdir_ex((sftp), (path), (unsigned int)strlen(path)) + +LIBSSH2_API int libssh2_sftp_stat_ex(LIBSSH2_SFTP *sftp, + const char *path, + unsigned int path_len, + int stat_type, + LIBSSH2_SFTP_ATTRIBUTES *attrs); +#define libssh2_sftp_stat(sftp, path, attrs) \ + libssh2_sftp_stat_ex((sftp), (path), (unsigned int)strlen(path), \ + LIBSSH2_SFTP_STAT, (attrs)) +#define libssh2_sftp_lstat(sftp, path, attrs) \ + libssh2_sftp_stat_ex((sftp), (path), (unsigned int)strlen(path), \ + LIBSSH2_SFTP_LSTAT, (attrs)) +#define libssh2_sftp_setstat(sftp, path, attrs) \ + libssh2_sftp_stat_ex((sftp), (path), (unsigned int)strlen(path), \ + LIBSSH2_SFTP_SETSTAT, (attrs)) + +LIBSSH2_API int libssh2_sftp_symlink_ex(LIBSSH2_SFTP *sftp, + const char *path, + unsigned int path_len, + char *target, + unsigned int target_len, + int link_type); +#define libssh2_sftp_symlink(sftp, orig, linkpath) \ + libssh2_sftp_symlink_ex((sftp), \ + (orig), (unsigned int)strlen(orig), \ + (linkpath), (unsigned int)strlen(linkpath), \ + LIBSSH2_SFTP_SYMLINK) +#define libssh2_sftp_readlink(sftp, path, target, maxlen) \ + libssh2_sftp_symlink_ex((sftp), \ + (path), (unsigned int)strlen(path), \ + (target), (maxlen), \ + LIBSSH2_SFTP_READLINK) +#define libssh2_sftp_realpath(sftp, path, target, maxlen) \ + libssh2_sftp_symlink_ex((sftp), \ + (path), (unsigned int)strlen(path), \ + (target), (maxlen), \ + LIBSSH2_SFTP_REALPATH) + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* LIBSSH2_SFTP_H */ diff --git a/Clibgit2.xcframework/ios-arm64-simulator/Headers/module.modulemap b/Clibgit2.xcframework/ios-arm64-simulator/Headers/module.modulemap index fe5729d..3a9a9ba 100644 --- a/Clibgit2.xcframework/ios-arm64-simulator/Headers/module.modulemap +++ b/Clibgit2.xcframework/ios-arm64-simulator/Headers/module.modulemap @@ -28,4 +28,13 @@ module Clibgit2 { export * module * { export * } } + + // Expose libssh2 headers + explicit module libssh2 { + header "libssh2.h" + header "libssh2_sftp.h" + header "libssh2_publickey.h" + + export * + } } diff --git a/Clibgit2.xcframework/ios-arm64-simulator/libgit2_all.a b/Clibgit2.xcframework/ios-arm64-simulator/libgit2_all.a index 2fb36a9..712e691 100644 Binary files a/Clibgit2.xcframework/ios-arm64-simulator/libgit2_all.a and b/Clibgit2.xcframework/ios-arm64-simulator/libgit2_all.a differ diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2.h b/Clibgit2.xcframework/ios-arm64/Headers/git2.h index 2961cc3..3457e5f 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2.h @@ -28,6 +28,7 @@ #include "git2/diff.h" #include "git2/email.h" #include "git2/errors.h" +#include "git2/experimental.h" #include "git2/filter.h" #include "git2/global.h" #include "git2/graph.h" diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/annotated_commit.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/annotated_commit.h index 3b7103f..04f3b1c 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/annotated_commit.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/annotated_commit.h @@ -13,9 +13,16 @@ /** * @file git2/annotated_commit.h - * @brief Git annotated commit routines + * @brief A commit and information about how it was looked up by the user. * @defgroup git_annotated_commit Git annotated commit routines * @ingroup Git + * + * An "annotated commit" is a commit that contains information about + * how the commit was resolved, which can be used for maintaining the + * user's "intent" through commands like merge and rebase. For example, + * if a user wants to "merge HEAD" then an annotated commit is used to + * both contain the HEAD commit _and_ the fact that it was resolved as + * the HEAD ref. * @{ */ GIT_BEGIN_DECL @@ -25,7 +32,7 @@ GIT_BEGIN_DECL * 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[out] 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 @@ -40,7 +47,7 @@ GIT_EXTERN(int) git_annotated_commit_from_ref( * 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[out] 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 @@ -67,7 +74,7 @@ GIT_EXTERN(int) git_annotated_commit_from_fetchhead( * 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[out] 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 @@ -84,7 +91,7 @@ GIT_EXTERN(int) git_annotated_commit_lookup( * 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[out] 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 diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/apply.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/apply.h index bc637df..7ab939d 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/apply.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/apply.h @@ -14,9 +14,12 @@ /** * @file git2/apply.h - * @brief Git patch application routines + * @brief Apply patches to the working directory or index * @defgroup git_apply Git patch application routines * @ingroup Git + * + * Mechanisms to apply a patch to the index, the working directory, + * or both. * @{ */ GIT_BEGIN_DECL @@ -32,6 +35,8 @@ GIT_BEGIN_DECL * * @param delta The delta to be applied * @param payload User-specified payload + * @return 0 if the delta is applied, < 0 if the apply process will be aborted + * or > 0 if the delta will not be applied. */ typedef int GIT_CALLBACK(git_apply_delta_cb)( const git_diff_delta *delta, @@ -48,27 +53,44 @@ typedef int GIT_CALLBACK(git_apply_delta_cb)( * * @param hunk The hunk to be applied * @param payload User-specified payload + * @return 0 if the hunk is applied, < 0 if the apply process will be aborted + * or > 0 if the hunk will not be applied. */ typedef int GIT_CALLBACK(git_apply_hunk_cb)( const git_diff_hunk *hunk, void *payload); -/** Flags controlling the behavior of git_apply */ +/** + * Flags controlling the behavior of `git_apply`. + * + * 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. + */ 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_CHECK = (1 << 0) } git_apply_flags_t; /** - * Apply options structure + * Apply options structure. + * + * 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. * * Initialize with `GIT_APPLY_OPTIONS_INIT`. Alternatively, you can * use `git_apply_options_init`. * - * @see git_apply_to_tree, git_apply + * @see git_apply_to_tree + * @see git_apply */ typedef struct { unsigned int version; /**< The version */ @@ -79,16 +101,29 @@ typedef struct { /** 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. */ + /** Payload passed to both `delta_cb` & `hunk_cb`. */ void *payload; - /** Bitmask of git_apply_flags_t */ + /** Bitmask of `git_apply_flags_t` */ unsigned int flags; } git_apply_options; +/** Current version for the `git_apply_options` structure */ #define GIT_APPLY_OPTIONS_VERSION 1 + +/** Static constructor for `git_apply_options` */ #define GIT_APPLY_OPTIONS_INIT {GIT_APPLY_OPTIONS_VERSION} +/** + * Initialize git_apply_options structure + * + * Initialize a `git_apply_options` with default values. Equivalent to creating + * an instance with GIT_APPLY_OPTIONS_INIT. + * + * @param opts The `git_apply_options` struct to initialize. + * @param version The struct version; pass `GIT_APPLY_OPTIONS_VERSION` + * @return 0 on success or -1 on failure. + */ GIT_EXTERN(int) git_apply_options_init(git_apply_options *opts, unsigned int version); /** @@ -127,7 +162,7 @@ typedef enum { * 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_BOTH = 2 } git_apply_location_t; /** diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/attr.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/attr.h index 3891a0c..e5216fe 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/attr.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/attr.h @@ -12,9 +12,13 @@ /** * @file git2/attr.h - * @brief Git attribute management routines + * @brief Attribute management routines * @defgroup git_attr Git attribute management routines * @ingroup Git + * + * Attributes specify additional information about how git should + * handle particular paths - for example, they may indicate whether + * a particular filter is applied, like LFS or line ending conversions. * @{ */ GIT_BEGIN_DECL @@ -83,7 +87,7 @@ 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_STRING /**< This attribute has a value */ } git_attr_value_t; /** @@ -114,16 +118,18 @@ GIT_EXTERN(git_attr_value_t) git_attr_value(const char *attr); * use index only for creating archives or for a bare repo (if an * index has been specified for the bare repo). */ + +/** Examine attribute in working directory, then index */ #define GIT_ATTR_CHECK_FILE_THEN_INDEX 0 +/** Examine attribute in index, then working directory */ #define GIT_ATTR_CHECK_INDEX_THEN_FILE 1 -#define GIT_ATTR_CHECK_INDEX_ONLY 2 +/** Examine attributes only in the index */ +#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. @@ -134,8 +140,12 @@ GIT_EXTERN(git_attr_value_t) git_attr_value(const char *attr); * Passing the `GIT_ATTR_CHECK_INCLUDE_COMMIT` flag will use attributes * from a `.gitattributes` file in a specific commit. */ + +/** Ignore system attributes */ #define GIT_ATTR_CHECK_NO_SYSTEM (1 << 2) +/** Honor `.gitattributes` in the HEAD revision */ #define GIT_ATTR_CHECK_INCLUDE_HEAD (1 << 3) +/** Honor `.gitattributes` in a specific commit */ #define GIT_ATTR_CHECK_INCLUDE_COMMIT (1 << 4) /** @@ -160,7 +170,10 @@ typedef struct { git_oid attr_commit_id; } git_attr_options; +/** Current version for the `git_attr_options` structure */ #define GIT_ATTR_OPTIONS_VERSION 1 + +/** Static constructor for `git_attr_options` */ #define GIT_ATTR_OPTIONS_INIT {GIT_ATTR_OPTIONS_VERSION} /** @@ -177,6 +190,7 @@ typedef struct { * 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. + * @return 0 or an error code. */ GIT_EXTERN(int) git_attr_get( const char **value_out, @@ -199,6 +213,7 @@ GIT_EXTERN(int) git_attr_get( * 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. + * @return 0 or an error code. */ GIT_EXTERN(int) git_attr_get_ext( const char **value_out, @@ -235,6 +250,7 @@ GIT_EXTERN(int) git_attr_get_ext( * 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. + * @return 0 or an error code. */ GIT_EXTERN(int) git_attr_get_many( const char **values_out, @@ -259,6 +275,7 @@ GIT_EXTERN(int) git_attr_get_many( * 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. + * @return 0 or an error code. */ GIT_EXTERN(int) git_attr_get_many_ext( const char **values_out, @@ -344,11 +361,16 @@ GIT_EXTERN(int) git_attr_cache_flush( * 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 + * file of the repository (plus the built-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"); + * + * @param repo The repository to add the macro in. + * @param name The name of the macro. + * @param values The value for the macro. + * @return 0 or an error code. */ GIT_EXTERN(int) git_attr_add_macro( git_repository *repo, diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/blame.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/blame.h index d193ce1..f3e6692 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/blame.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/blame.h @@ -13,9 +13,14 @@ /** * @file git2/blame.h - * @brief Git blame routines + * @brief Specify a file's most recent changes per-line * @defgroup git_blame Git blame routines * @ingroup Git + * + * Producing a "blame" (or "annotated history") decorates individual + * lines in a file with the commit that introduced that particular line + * of changes. This can be useful to indicate when and why a particular + * change was made. * @{ */ GIT_BEGIN_DECL @@ -73,7 +78,7 @@ typedef enum { GIT_BLAME_USE_MAILMAP = (1<<5), /** Ignore whitespace differences */ - GIT_BLAME_IGNORE_WHITESPACE = (1<<6), + GIT_BLAME_IGNORE_WHITESPACE = (1<<6) } git_blame_flag_t; /** @@ -87,7 +92,7 @@ typedef struct git_blame_options { unsigned int version; /** A combination of `git_blame_flag_t` */ - uint32_t flags; + unsigned int flags; /** * The lower bound on the number of alphanumeric characters that @@ -122,7 +127,10 @@ typedef struct git_blame_options { size_t max_line; } git_blame_options; +/** Current version for the `git_blame_options` structure */ #define GIT_BLAME_OPTIONS_VERSION 1 + +/** Static constructor for `git_blame_options` */ #define GIT_BLAME_OPTIONS_INIT {GIT_BLAME_OPTIONS_VERSION} /** @@ -165,6 +173,13 @@ typedef struct git_blame_hunk { */ git_signature *final_signature; + /** + * The committer 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_committer; + /** * The OID of the commit where this hunk was found. * This will usually be the same as `final_commit_id`, except when @@ -190,6 +205,18 @@ typedef struct git_blame_hunk { */ git_signature *orig_signature; + /** + * The committer 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_committer; + + /* + * The summary of the commit. + */ + const char *summary; + /** * The 1 iff the hunk has been tracked to a boundary commit (the root, * or the commit specified in git_blame_options.oldest_commit) @@ -197,13 +224,75 @@ typedef struct git_blame_hunk { char boundary; } git_blame_hunk; +/** + * Structure that represents a line in a blamed file. + */ +typedef struct git_blame_line { + const char *ptr; + size_t len; +} git_blame_line; /** Opaque structure to hold blame results */ typedef struct git_blame git_blame; +/** + * Gets the number of lines that exist in the blame structure. + * + * @param blame The blame structure to query. + * @return The number of line. + */ +GIT_EXTERN(size_t) git_blame_linecount(git_blame *blame); + /** * Gets the number of hunks that exist in the blame structure. + * + * @param blame The blame structure to query. + * @return The number of hunks. */ +GIT_EXTERN(size_t) git_blame_hunkcount(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_hunk_byindex( + git_blame *blame, + size_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_hunk_byline( + git_blame *blame, + size_t lineno); + +/** + * Gets the information about the line in the blame. + * + * @param blame the blame structure to query + * @param idx the (1-based) line number + * @return the blamed line, or NULL on error + */ +GIT_EXTERN(const git_blame_line *) git_blame_line_byindex( + git_blame *blame, + size_t idx); + +#ifndef GIT_DEPRECATE_HARD +/** + * Gets the number of hunks that exist in the blame structure. + * + * @param blame The blame structure to query. + * @return The number of hunks. + */ + GIT_EXTERN(uint32_t) git_blame_get_hunk_count(git_blame *blame); /** @@ -213,9 +302,9 @@ GIT_EXTERN(uint32_t) git_blame_get_hunk_count(git_blame *blame); * @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); +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. @@ -224,39 +313,58 @@ GIT_EXTERN(const git_blame_hunk*) git_blame_get_hunk_byindex( * @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); +GIT_EXTERN(const git_blame_hunk *) git_blame_get_hunk_byline( + git_blame *blame, + size_t lineno); +#endif /** - * Get the blame for a single file. + * Get the blame for a single file in the repository. * * @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.) + * @param options options for the blame operation or NULL + * @return 0 on success, or an error code */ GIT_EXTERN(int) git_blame_file( - git_blame **out, - git_repository *repo, - const char *path, - git_blame_options *options); + git_blame **out, + git_repository *repo, + const char *path, + git_blame_options *options); +/** + * Get the blame for a single file in the repository, using the specified + * buffer contents as the uncommitted changes of the file (the working + * directory contents). + * + * @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 contents the uncommitted changes + * @param contents_len the length of the changes buffer + * @param options options for the blame operation or NULL + * @return 0 on success, or an error code + */ +GIT_EXTERN(int) git_blame_file_from_buffer( + git_blame **out, + git_repository *repo, + const char *path, + const char *contents, + size_t contents_len, + 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. + * Get blame data for a file that has been modified in memory. The `blame` + * 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. + * 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 + * @param base 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 @@ -264,10 +372,10 @@ GIT_EXTERN(int) git_blame_file( * about the error) */ GIT_EXTERN(int) git_blame_buffer( - git_blame **out, - git_blame *reference, - const char *buffer, - size_t buffer_len); + git_blame **out, + git_blame *base, + const char *buffer, + size_t buffer_len); /** * Free memory allocated by git_blame_file or git_blame_buffer. diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/blob.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/blob.h index 8fc7391..0ed1685 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/blob.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/blob.h @@ -15,9 +15,13 @@ /** * @file git2/blob.h - * @brief Git blob load and write routines + * @brief A blob represents a file in a git repository. * @defgroup git_blob Git blob load and write routines * @ingroup Git + * + * A blob represents a file in a git repository. This is the raw data + * as it is stored in the repository itself. Blobs may be "filtered" + * to produce the on-disk content. * @{ */ GIT_BEGIN_DECL @@ -25,12 +29,15 @@ GIT_BEGIN_DECL /** * Lookup a blob object from a repository. * - * @param blob pointer to the looked up blob + * @param[out] 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); +GIT_EXTERN(int) git_blob_lookup( + git_blob **blob, + git_repository *repo, + const git_oid *id); /** * Lookup a blob object from a repository, @@ -38,7 +45,7 @@ GIT_EXTERN(int) git_blob_lookup(git_blob **blob, git_repository *repo, const git * * @see git_object_lookup_prefix * - * @param blob pointer to the looked up blob + * @param[out] 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 @@ -84,7 +91,7 @@ GIT_EXTERN(git_repository *) git_blob_owner(const git_blob *blob); * time. * * @param blob pointer to the blob - * @return the pointer, or NULL on error + * @return @type `unsigned char *` the pointer, or NULL on error */ GIT_EXTERN(const void *) git_blob_rawcontent(const git_blob *blob); @@ -92,12 +99,14 @@ 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 + * @return size in bytes */ GIT_EXTERN(git_object_size_t) git_blob_rawsize(const git_blob *blob); /** * Flags to control the functionality of `git_blob_filter`. + * + * @flags */ typedef enum { /** When set, filters will not be applied to binary files. */ @@ -119,7 +128,7 @@ typedef enum { * 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_ATTRIBUTES_FROM_COMMIT = (1 << 3) } git_blob_filter_flag_t; /** @@ -128,16 +137,34 @@ typedef enum { * Initialize with `GIT_BLOB_FILTER_OPTIONS_INIT`. Alternatively, you can * use `git_blob_filter_options_init`. * + * @options[version] GIT_BLOB_FILTER_OPTIONS_VERSION + * @options[init_macro] GIT_BLOB_FILTER_OPTIONS_INIT + * @options[init_function] git_blob_filter_options_init */ typedef struct { + /** Version number of the options structure. */ int version; - /** Flags to control the filtering process, see `git_blob_filter_flag_t` above */ + /** + * Flags to control the filtering process, see `git_blob_filter_flag_t` above. + * + * @type[flags] git_blob_filter_flag_t + */ uint32_t flags; #ifdef GIT_DEPRECATE_HARD + /** + * Unused and reserved for ABI compatibility. + * + * @deprecated this value should not be set + */ void *reserved; #else + /** + * This value is unused and reserved for API compatibility. + * + * @deprecated this value should not be set + */ git_oid *commit_id; #endif @@ -148,8 +175,18 @@ typedef struct { git_oid attr_commit_id; } git_blob_filter_options; +/** + * The current version number for the `git_blob_filter_options` structure ABI. + */ #define GIT_BLOB_FILTER_OPTIONS_VERSION 1 -#define GIT_BLOB_FILTER_OPTIONS_INIT {GIT_BLOB_FILTER_OPTIONS_VERSION, GIT_BLOB_FILTER_CHECK_FOR_BINARY} + +/** + * The default values for `git_blob_filter_options`. + */ +#define GIT_BLOB_FILTER_OPTIONS_INIT { \ + GIT_BLOB_FILTER_OPTIONS_VERSION, \ + GIT_BLOB_FILTER_CHECK_FOR_BINARY \ + } /** * Initialize git_blob_filter_options structure @@ -158,10 +195,12 @@ typedef struct { * 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`. + * @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); +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. @@ -171,7 +210,7 @@ GIT_EXTERN(int) git_blob_filter_options_init(git_blob_filter_options *opts, unsi * 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 + * The output is written into a `git_buf` which the caller must dispose * when done (via `git_buf_dispose`). * * If no filters need to be applied, then the `out` buffer will just @@ -183,7 +222,7 @@ GIT_EXTERN(int) git_blob_filter_options_init(git_blob_filter_options *opts, unsi * @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 + * @return @type[enum] git_error_code 0 on success or an error code */ GIT_EXTERN(int) git_blob_filter( git_buf *out, @@ -192,10 +231,10 @@ GIT_EXTERN(int) git_blob_filter( 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 + * Read a file from the working folder of a repository and write it + * to the object database. * - * @param id return the id of the written blob + * @param[out] 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, @@ -205,19 +244,23 @@ GIT_EXTERN(int) git_blob_filter( 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 + * Read a file from the filesystem (not necessarily inside the + * working folder of the repository) and write it to the object + * database. * - * @param id return the id of the written blob + * @param[out] 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); +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 + * Create a stream to write a new blob into the object database. * * 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 @@ -234,7 +277,7 @@ GIT_EXTERN(int) git_blob_create_from_disk(git_oid *id, git_repository *repo, con * 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[out] 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 @@ -247,11 +290,11 @@ GIT_EXTERN(int) git_blob_create_from_stream( const char *hintpath); /** - * Close the stream and write the blob to the object db + * Close the stream and finalize writing the blob to the object database. * * The stream will be closed and freed. * - * @param out the id of the new blob + * @param[out] out the id of the new blob * @param stream the stream to close * @return 0 or an error code */ @@ -260,9 +303,9 @@ GIT_EXTERN(int) git_blob_create_from_stream_commit( git_writestream *stream); /** - * Write an in-memory buffer to the ODB as a blob + * Write an in-memory buffer to the object database as a blob. * - * @param id return the id of the written blob + * @param[out] 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 @@ -272,24 +315,37 @@ 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. + * Determine if the blob content is most likely 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 + * @return @type bool 1 if the content of the blob is detected * as binary; 0 otherwise. */ GIT_EXTERN(int) git_blob_is_binary(const git_blob *blob); +/** + * Determine if the given content is most certainly binary or not; + * this is the same mechanism used by `git_blob_is_binary` but only + * looking at raw data. + * + * @param data The blob data which content should be analyzed + * @param len The length of the data + * @return 1 if the content of the blob is detected + * as binary; 0 otherwise. + */ +GIT_EXTERN(int) git_blob_data_is_binary(const char *data, size_t len); + /** * 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[out] out Pointer to store the copy of the object * @param source Original object to copy + * @return 0. */ GIT_EXTERN(int) git_blob_dup(git_blob **out, git_blob *source); diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/branch.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/branch.h index 24ea7f7..56d737d 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/branch.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/branch.h @@ -13,9 +13,15 @@ /** * @file git2/branch.h - * @brief Git branch parsing routines + * @brief Branch creation and handling * @defgroup git_branch Git branch management * @ingroup Git + * + * A branch is a specific type of reference, at any particular time, + * a git working directory typically is said to have a branch "checked out", + * meaning that commits that are created will be made "on" a branch. + * This occurs by updating the branch reference to point to the new + * commit. The checked out branch is indicated by the `HEAD` meta-ref. * @{ */ GIT_BEGIN_DECL @@ -33,16 +39,13 @@ GIT_BEGIN_DECL * See `git_tag_create()` for rules about valid names. * * @param out Pointer where to store the underlying reference. - * + * @param repo the repository to create the branch in. * @param branch_name Name for the branch; this name is - * validated for consistency. It should also not conflict with - * an already existing branch name. - * + * 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`. - * + * 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. @@ -61,15 +64,21 @@ GIT_EXTERN(int) git_branch_create( * 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 + * @param ref_out Pointer where to store the underlying reference. + * @param repo the repository to create the branch in. + * @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 Annotated 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. */ GIT_EXTERN(int) git_branch_create_from_annotated( git_reference **ref_out, - git_repository *repository, + git_repository *repo, const char *branch_name, - const git_annotated_commit *commit, + const git_annotated_commit *target, int force); /** @@ -127,8 +136,8 @@ GIT_EXTERN(void) git_branch_iterator_free(git_branch_iterator *iter); * 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()`. + * be valid anymore, and should be freed immediately by the user using + * `git_reference_free()`. * * @param out New reference object for the updated name. * @@ -220,7 +229,7 @@ GIT_EXTERN(int) git_branch_upstream( * @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` + * @return @type git_error_t 0 on success; GIT_ENOTFOUND if there's no branch named `branch_name` * or an error code */ GIT_EXTERN(int) git_branch_set_upstream( diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/buffer.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/buffer.h index 926f133..3fe4f85 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/buffer.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/buffer.h @@ -11,9 +11,12 @@ /** * @file git2/buffer.h - * @brief Buffer export structure - * + * @brief A data structure to return data to callers * @ingroup Git + * + * The `git_buf` buffer is used to return arbitrary data - typically + * strings - to callers. Callers are responsible for freeing the memory + * in a buffer with the `git_buf_dispose` function. * @{ */ GIT_BEGIN_DECL @@ -23,112 +26,51 @@ GIT_BEGIN_DECL * * 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. + * To make ownership clear in these cases, libgit2 uses `git_buf` to + * return this data. Callers should use `git_buf_dispose()` to release + * the memory when they are done. * - * 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. + * A `git_buf` contains a pointer to a NUL-terminated C string, and + * the length of the string (not including the NUL terminator). */ 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. + * The buffer contents. `ptr` points to the start of the buffer + * being returned. The buffer's length (in bytes) is specified + * by the `size` member of the structure, and contains a NUL + * terminator at position `(size + 1)`. */ - char *ptr; + 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. + * This field is reserved and unused. */ - size_t asize; + size_t reserved; /** - * `size` holds the size (in bytes) of the data that is actually used. + * The length (in bytes) of the buffer pointed to by `ptr`, + * not including a NUL terminator. */ size_t size; } git_buf; /** - * Static initializer for git_buf from static buffer + * Use to initialize a `git_buf` before passing it to a function that + * will populate it. */ -#define GIT_BUF_INIT_CONST(STR,LEN) { (char *)(STR), 0, (size_t)(LEN) } +#define GIT_BUF_INIT { NULL, 0, 0 } /** * 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. + * pointed to by `buffer->ptr`. * * @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 - /** @} */ +GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/cert.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/cert.h index 0ed38ff..7b91b63 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/cert.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/cert.h @@ -12,7 +12,7 @@ /** * @file git2/cert.h - * @brief Git certificate objects + * @brief TLS and SSH certificate handling * @defgroup git_cert Certificate objects * @ingroup Git * @{ @@ -44,7 +44,7 @@ typedef enum git_cert_t { * information about the certificate. This is used when using * curl. */ - GIT_CERT_STRARRAY, + GIT_CERT_STRARRAY } git_cert_t; /** @@ -82,7 +82,7 @@ typedef enum { /** SHA-256 is available */ GIT_CERT_SSH_SHA256 = (1 << 2), /** Raw hostkey is available */ - GIT_CERT_SSH_RAW = (1 << 3), + GIT_CERT_SSH_RAW = (1 << 3) } git_cert_ssh_t; typedef enum { @@ -169,4 +169,5 @@ typedef struct { /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/checkout.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/checkout.h index c7aeee4..bdea928 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/checkout.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/checkout.h @@ -13,9 +13,13 @@ /** * @file git2/checkout.h - * @brief Git checkout routines + * @brief Update the contents of the working directory * @defgroup git_checkout Git checkout routines * @ingroup Git + * + * Update the contents of the working directory, or a subset of the + * files in the working directory, to point to the data in the index + * or a specific commit. * @{ */ GIT_BEGIN_DECL @@ -31,17 +35,11 @@ GIT_BEGIN_DECL * 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. + * You give checkout one of two strategies for update: * - * - `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. + * - `GIT_CHECKOUT_SAFE` is the default, and similar to git's default, + * which will make modifications that will not lose changes in the + * working directory. * * | target == baseline | target != baseline | * ---------------------|-----------------------|----------------------| @@ -55,6 +53,10 @@ GIT_BEGIN_DECL * baseline present | | | * ---------------------|-----------------------|----------------------| * + * - `GIT_CHECKOUT_FORCE` will take any action to make the working + * directory match the target (including potentially discarding + * modified files). + * * 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. @@ -69,6 +71,9 @@ GIT_BEGIN_DECL * * There are some additional flags to modify the behavior of checkout: * + * - `GIT_CHECKOUT_DRY_RUN` is a dry-run strategy that checks for conflicts, + * etc., but doesn't make any actual changes. + * * - GIT_CHECKOUT_ALLOW_CONFLICTS makes SAFE mode apply safe file updates * even if there are conflicts (instead of cancelling the checkout). * @@ -102,29 +107,24 @@ GIT_BEGIN_DECL * 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. + * + * @flags */ 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. + * If the uncommitted changes don't conflict with the checked + * out files, the checkout will still proceed, leaving the + * changes intact. */ - GIT_CHECKOUT_SAFE = (1u << 0), + GIT_CHECKOUT_SAFE = 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. + * Allow all updates to force working directory to look like + * the index, potentially losing data in the process. */ GIT_CHECKOUT_FORCE = (1u << 1), - /** Allow checkout to recreate missing files */ GIT_CHECKOUT_RECREATE_MISSING = (1u << 2), @@ -178,20 +178,31 @@ typedef enum { 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. + * Perform a "dry run", reporting what _would_ be done but + * without actually making changes in the working directory + * or the index. */ GIT_CHECKOUT_DRY_RUN = (1u << 24), - + + /** Include common ancestor data in zdiff3 format for conflicts */ + GIT_CHECKOUT_CONFLICT_STYLE_ZDIFF3 = (1u << 25), + /** + * Do not do a checkout and do not fire callbacks; this is primarily + * useful only for internal functions that will perform the + * checkout themselves but need to pass checkout options into + * another function, for example, `git_clone`. + */ + GIT_CHECKOUT_NONE = (1u << 30), + + /* * 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_UPDATE_SUBMODULES_IF_CHANGED = (1u << 17) } git_checkout_strategy_t; /** @@ -207,6 +218,8 @@ typedef enum { * 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. + * + * @flags */ typedef enum { GIT_CHECKOUT_NOTIFY_NONE = 0, @@ -248,7 +261,17 @@ typedef struct { size_t chmod_calls; } git_checkout_perfdata; -/** Checkout notification callback function */ +/** + * Checkout notification callback function. + * + * @param why the notification reason + * @param path the path to the file being checked out + * @param baseline the baseline's diff file information + * @param target the checkout target diff file information + * @param workdir the working directory diff file information + * @param payload the user-supplied callback payload + * @return 0 on success, or an error code + */ typedef int GIT_CALLBACK(git_checkout_notify_cb)( git_checkout_notify_t why, const char *path, @@ -257,14 +280,26 @@ typedef int GIT_CALLBACK(git_checkout_notify_cb)( const git_diff_file *workdir, void *payload); -/** Checkout progress notification function */ +/** + * Checkout progress notification function. + * + * @param path the path to the file being checked out + * @param completed_steps number of checkout steps completed + * @param total_steps number of total steps in the checkout process + * @param payload the user-supplied callback payload + */ 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 */ +/** + * Checkout performance data reporting function. + * + * @param perfdata the performance data for the checkout + * @param payload the user-supplied callback payload + */ typedef void GIT_CALLBACK(git_checkout_perfdata_cb)( const git_checkout_perfdata *perfdata, void *payload); @@ -275,10 +310,18 @@ typedef void GIT_CALLBACK(git_checkout_perfdata_cb)( * Initialize with `GIT_CHECKOUT_OPTIONS_INIT`. Alternatively, you can * use `git_checkout_options_init`. * + * @options[version] GIT_CHECKOUT_OPTIONS_VERSION + * @options[init_macro] GIT_CHECKOUT_OPTIONS_INIT + * @options[init_function] git_checkout_options_init */ typedef struct git_checkout_options { unsigned int version; /**< The version */ + /** + * Checkout strategy. Default is a safe checkout. + * + * @type[flags] git_checkout_strategy_t + */ unsigned int checkout_strategy; /**< default will be a safe checkout */ int disable_filters; /**< don't apply filters like CRLF conversion */ @@ -286,7 +329,13 @@ typedef struct git_checkout_options { 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 */ + /** + * Checkout notification flags specify what operations the notify + * callback is invoked for. + * + * @type[flags] git_checkout_notify_t + */ + unsigned int notify_flags; /** * Optional callback to get notifications on specific file states. @@ -341,8 +390,12 @@ typedef struct git_checkout_options { void *perfdata_payload; } git_checkout_options; + +/** Current version for the `git_checkout_options` structure */ #define GIT_CHECKOUT_OPTIONS_VERSION 1 -#define GIT_CHECKOUT_OPTIONS_INIT {GIT_CHECKOUT_OPTIONS_VERSION, GIT_CHECKOUT_SAFE} + +/** Static constructor for `git_checkout_options` */ +#define GIT_CHECKOUT_OPTIONS_INIT { GIT_CHECKOUT_OPTIONS_VERSION } /** * Initialize git_checkout_options structure @@ -411,4 +464,5 @@ GIT_EXTERN(int) git_checkout_tree( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/cherrypick.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/cherrypick.h index 0e6a252..e6cf99e 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/cherrypick.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/cherrypick.h @@ -13,9 +13,12 @@ /** * @file git2/cherrypick.h - * @brief Git cherry-pick routines + * @brief Cherry-pick the contents of an individual commit * @defgroup git_cherrypick Git cherry-pick routines * @ingroup Git + * + * "Cherry-pick" will attempts to re-apply the changes in an + * individual commit to the current index and working directory. * @{ */ GIT_BEGIN_DECL @@ -33,8 +36,13 @@ typedef struct { git_checkout_options checkout_opts; /**< Options for the checkout */ } git_cherrypick_options; +/** Current version for the `git_cherrypick_options` structure */ #define GIT_CHERRYPICK_OPTIONS_VERSION 1 -#define GIT_CHERRYPICK_OPTIONS_INIT {GIT_CHERRYPICK_OPTIONS_VERSION, 0, GIT_MERGE_OPTIONS_INIT, GIT_CHECKOUT_OPTIONS_INIT} + +/** Static constructor for `git_cherrypick_options` */ +#define GIT_CHERRYPICK_OPTIONS_INIT { \ + GIT_CHERRYPICK_OPTIONS_VERSION, 0, \ + GIT_MERGE_OPTIONS_INIT, GIT_CHECKOUT_OPTIONS_INIT } /** * Initialize git_cherrypick_options structure @@ -89,4 +97,3 @@ GIT_EXTERN(int) git_cherrypick( GIT_END_DECL #endif - diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/clone.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/clone.h index 3c3ea26..b7a47ab 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/clone.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/clone.h @@ -17,9 +17,13 @@ /** * @file git2/clone.h - * @brief Git cloning routines + * @brief Clone a remote repository to the local disk * @defgroup git_clone Git cloning routines * @ingroup Git + * + * Clone will take a remote repository - located on a remote server + * accessible by HTTPS or SSH, or a repository located elsewhere on + * the local disk - and place a copy in the given local path. * @{ */ GIT_BEGIN_DECL @@ -49,7 +53,7 @@ typedef enum { * Bypass the git-aware transport, but do not try to use * hardlinks. */ - GIT_CLONE_LOCAL_NO_LINKS, + GIT_CLONE_LOCAL_NO_LINKS } git_clone_local_t; /** @@ -59,7 +63,7 @@ typedef enum { * 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[out] 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 @@ -74,14 +78,14 @@ typedef int GIT_CALLBACK(git_remote_create_cb)( void *payload); /** - * The signature of a function matchin git_repository_init, with an - * aditional void * as callback payload. + * The signature of a function matching git_repository_init, with an + * additional 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[out] 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 @@ -99,14 +103,17 @@ typedef int GIT_CALLBACK(git_repository_create_cb)( * Initialize with `GIT_CLONE_OPTIONS_INIT`. Alternatively, you can * use `git_clone_options_init`. * + * @options[version] GIT_CLONE_OPTIONS_VERSION + * @options[init_macro] GIT_CLONE_OPTIONS_INIT + * @options[init_function] 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`. + * checkout, set the `checkout_strategy` to `GIT_CHECKOUT_NONE` + * or `GIT_CHECKOUT_DRY_RUN`. */ git_checkout_options checkout_opts; @@ -163,10 +170,14 @@ typedef struct git_clone_options { void *remote_cb_payload; } git_clone_options; +/** Current version for the `git_clone_options` structure */ #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 } + +/** Static constructor for `git_clone_options` */ +#define GIT_CLONE_OPTIONS_INIT \ + { GIT_CLONE_OPTIONS_VERSION, \ + GIT_CHECKOUT_OPTIONS_INIT, \ + GIT_FETCH_OPTIONS_INIT } /** * Initialize git_clone_options structure @@ -189,7 +200,11 @@ GIT_EXTERN(int) git_clone_options_init( * 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 + * Note that the libgit2 library _must_ be initialized using + * `git_libgit2_init` before any APIs can be called, including + * this one. + * + * @param[out] 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 @@ -206,4 +221,5 @@ GIT_EXTERN(int) git_clone( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/commit.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/commit.h index 4d74b89..b998e18 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/commit.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/commit.h @@ -14,9 +14,13 @@ /** * @file git2/commit.h - * @brief Git commit parsing, formatting routines + * @brief A representation of a set of changes in the repository * @defgroup git_commit Git commit parsing, formatting routines * @ingroup Git + * + * A commit represents a set of changes made to the files within a + * repository, and metadata about who made the changes, and when the + * changes were made. * @{ */ GIT_BEGIN_DECL @@ -380,7 +384,38 @@ GIT_EXTERN(int) git_commit_create( * * All other parameters remain the same as `git_commit_create()`. * - * @see git_commit_create + * @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 + * + * @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_v( git_oid *id, @@ -394,6 +429,52 @@ GIT_EXTERN(int) git_commit_create_v( size_t parent_count, ...); +typedef struct { + unsigned int version; + + /** + * Flags for creating the commit. + * + * If `allow_empty_commit` is specified, a commit with no changes + * from the prior commit (and "empty" commit) is allowed. Otherwise, + * commit creation will be stopped. + */ + unsigned int allow_empty_commit : 1; + + /** The commit author, or NULL for the default. */ + const git_signature *author; + + /** The committer, or NULL for the default. */ + const git_signature *committer; + + /** Encoding for the commit message; leave NULL for default. */ + const char *message_encoding; +} git_commit_create_options; + +/** Current version for the `git_commit_create_options` structure */ +#define GIT_COMMIT_CREATE_OPTIONS_VERSION 1 + +/** Static constructor for `git_commit_create_options` */ +#define GIT_COMMIT_CREATE_OPTIONS_INIT { GIT_COMMIT_CREATE_OPTIONS_VERSION } + +/** + * Commits the staged changes in the repository; this is a near analog to + * `git commit -m message`. + * + * By default, empty commits are not allowed. + * + * @param id pointer to store the new commit's object id + * @param repo repository to commit changes in + * @param message the commit message + * @param opts options for creating the commit + * @return 0 on success, GIT_EUNCHANGED if there were no changes to commit, or an error code + */ +GIT_EXTERN(int) git_commit_create_from_stage( + git_oid *id, + git_repository *repo, + const char *message, + const git_commit_create_options *opts); + /** * Amend an existing commit by replacing only non-NULL values. * @@ -413,7 +494,36 @@ GIT_EXTERN(int) git_commit_create_v( * * All parameters have the same meanings as in `git_commit_create()`. * - * @see git_commit_create + * @param id Pointer in which to store the OID of the newly created commit + * + * @param commit_to_amend The commit to amend + * + * @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`. + * + * @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_amend( git_oid *id, @@ -479,6 +589,7 @@ GIT_EXTERN(int) git_commit_create_buffer( * to the commit and write it into the given repository. * * @param out the resulting commit id + * @param repo the repository to create the commit in. * @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. @@ -499,6 +610,7 @@ GIT_EXTERN(int) git_commit_create_with_signature( * * @param out Pointer to store the copy of the commit * @param source Original commit to copy + * @return 0 */ GIT_EXTERN(int) git_commit_dup(git_commit **out, git_commit *source); @@ -539,6 +651,25 @@ typedef int (*git_commit_create_cb)( const git_commit *parents[], void *payload); +/** An array of commits returned from the library */ +typedef struct git_commitarray { + git_commit *const *commits; + size_t count; +} git_commitarray; + +/** + * Free the commits contained in a commit array. This method should + * be called on `git_commitarray` objects that were provided by the + * library. Not doing so will result in a memory leak. + * + * This does not free the `git_commitarray` itself, since the library + * will never allocate that object directly itself. + * + * @param array The git_commitarray that contains commits to free + */ +GIT_EXTERN(void) git_commitarray_dispose(git_commitarray *array); + /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/common.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/common.h index 2ee8290..40a3903 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/common.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/common.h @@ -11,7 +11,9 @@ #include #ifdef __cplusplus + /** Start declarations in C mode for C++ compatibility */ # define GIT_BEGIN_DECL extern "C" { + /** End declarations in C mode */ # define GIT_END_DECL } #else /** Start declarations in C mode */ @@ -71,19 +73,19 @@ typedef size_t size_t; # 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 + * @brief Base platform functionality * @defgroup git_common Git common platform definitions * @ingroup Git + * + * Common platform functionality including introspecting libgit2 + * itself - information like how it was built, and the current + * running version. * @{ */ @@ -94,10 +96,10 @@ GIT_BEGIN_DECL * 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 ';' +#if (defined(_WIN32) && !defined(__CYGWIN__)) || defined(AMIGA) +# define GIT_PATH_LIST_SEPARATOR ';' #else -#define GIT_PATH_LIST_SEPARATOR ':' +# define GIT_PATH_LIST_SEPARATOR ':' #endif /** @@ -105,11 +107,6 @@ GIT_BEGIN_DECL */ #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. @@ -122,53 +119,91 @@ GIT_BEGIN_DECL GIT_EXTERN(int) git_libgit2_version(int *major, int *minor, int *rev); /** - * Combinations of these values describe the features with which libgit2 - * was compiled + * Return the prerelease state of the libgit2 library currently being + * used. For nightly builds during active development, this will be + * "alpha". Releases may have a "beta" or release candidate ("rc1", + * "rc2", etc) prerelease. For a final release, this function returns + * NULL. + * + * @return the name of the prerelease state or NULL + */ +GIT_EXTERN(const char *) git_libgit2_prerelease(void); + +/** + * Configurable features of libgit2; either optional settings (like + * threading), or features that can be enabled by one of a number of + * different backend "providers" (like HTTPS, which can be provided by + * OpenSSL, mbedTLS, or system libraries). */ 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), + /** + * libgit2 is thread-aware and can be used from multiple threads + * (as described in the documentation). + */ + GIT_FEATURE_THREADS = (1 << 0), + + /** HTTPS remotes */ + GIT_FEATURE_HTTPS = (1 << 1), + + /** SSH remotes */ + GIT_FEATURE_SSH = (1 << 2), + + /** Sub-second resolution in index timestamps */ + GIT_FEATURE_NSEC = (1 << 3), + + /** HTTP parsing; always available */ + GIT_FEATURE_HTTP_PARSER = (1 << 4), + + /** Regular expression support; always available */ + GIT_FEATURE_REGEX = (1 << 5), + + /** Internationalization support for filename translation */ + GIT_FEATURE_I18N = (1 << 6), + + /** NTLM support over HTTPS */ + GIT_FEATURE_AUTH_NTLM = (1 << 7), + + /** Kerberos (SPNEGO) authentication support over HTTPS */ + GIT_FEATURE_AUTH_NEGOTIATE = (1 << 8), + + /** zlib support; always available */ + GIT_FEATURE_COMPRESSION = (1 << 9), + + /** SHA1 object support; always available */ + GIT_FEATURE_SHA1 = (1 << 10), + + /** SHA256 object support */ + GIT_FEATURE_SHA256 = (1 << 11) } git_feature_t; /** * Query compile time options for libgit2. * * @return A combination of GIT_FEATURE_* values. + */ +GIT_EXTERN(int) git_libgit2_features(void); + +/** + * Query the backend details for the compile-time feature in libgit2. + * + * This will return the "backend" for the feature, which is useful for + * things like HTTPS or SSH support, that can have multiple backends + * that could be compiled in. * - * - 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. + * For example, when libgit2 is compiled with dynamic OpenSSL support, + * the feature backend will be `openssl-dynamic`. The feature backend + * names reflect the compilation options specified to the build system + * (though in all lower case). The backend _may_ be "builtin" for + * features that are provided by libgit2 itself. * - * - GIT_FEATURE_HTTPS - * Libgit2 supports the https:// protocol. This requires the openssl - * library to be found when compiling libgit2. + * If the feature is not supported by the library, this API returns + * `NULL`. * - * - GIT_FEATURE_SSH - * Libgit2 supports the SSH protocol for network operations. This requires - * the libssh2 library to be found when compiling libgit2 + * @param feature the feature to query details for + * @return the provider details, or NULL if the feature is not supported */ -GIT_EXTERN(int) git_libgit2_features(void); +GIT_EXTERN(const char *) git_libgit2_feature_backend( + git_feature_t feature); /** * Global library options @@ -211,7 +246,18 @@ typedef enum { GIT_OPT_SET_ODB_PACKED_PRIORITY, GIT_OPT_SET_ODB_LOOSE_PRIORITY, GIT_OPT_GET_EXTENSIONS, - GIT_OPT_SET_EXTENSIONS + GIT_OPT_SET_EXTENSIONS, + GIT_OPT_GET_OWNER_VALIDATION, + GIT_OPT_SET_OWNER_VALIDATION, + GIT_OPT_GET_HOMEDIR, + GIT_OPT_SET_HOMEDIR, + GIT_OPT_SET_SERVER_CONNECT_TIMEOUT, + GIT_OPT_GET_SERVER_CONNECT_TIMEOUT, + GIT_OPT_SET_SERVER_TIMEOUT, + GIT_OPT_GET_SERVER_TIMEOUT, + GIT_OPT_SET_USER_AGENT_PRODUCT, + GIT_OPT_GET_USER_AGENT_PRODUCT, + GIT_OPT_ADD_SSL_X509_CERT } git_libgit2_opt_t; /** @@ -316,15 +362,52 @@ typedef enum { * > - `path` is the location of a directory holding several * > certificates, one per file. * > + * > Calling `GIT_OPT_ADD_SSL_X509_CERT` may override the + * > data in `path`. + * > * > Either parameter may be `NULL`, but not both. * + * * opts(GIT_OPT_ADD_SSL_X509_CERT, const X509 *cert) + * + * > Add a raw X509 certificate into the SSL certs store. + * > This certificate is only used by libgit2 invocations + * > during the application lifetime and is not persisted + * > to disk. This certificate cannot be removed from the + * > application once is has been added. + * > + * > - `cert` is the raw X509 cert will be added to cert store. + * * * 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. + * > Set the value of the comment section of the User-Agent header. + * > This can be information about your product and its version. + * > By default this is "libgit2" followed by the libgit2 version. + * > + * > This value will be appended to User-Agent _product_, which + * > is typically set to "git/2.0". + * > + * > Set to the empty string ("") to not send any information in the + * > comment section, or set to NULL to restore the default. + * + * * 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_SET_USER_AGENT_PRODUCT, const char *user_agent_product) + * + * > Set the value of the product portion of the User-Agent header. + * > This defaults to "git/2.0", for compatibility with other git + * > clients. It is recommended to keep this as git/ for + * > compatibility with servers that do user-agent detection. * > - * > - `user_agent` is the value that will be delivered as the - * > User-Agent header on HTTP requests. + * > Set to the empty string ("") to not send any user-agent string, + * > or set to NULL to restore the default. + * + * * opts(GIT_OPT_GET_USER_AGENT_PRODUCT, git_buf *out) + * + * > Get the value of the User-Agent product header. + * > The User-Agent product is written to the `out` buffer. * * * opts(GIT_OPT_SET_WINDOWS_SHAREMODE, unsigned long value) * @@ -360,11 +443,6 @@ typedef enum { * > * > - `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, @@ -449,8 +527,43 @@ typedef enum { * > to support repositories with the `noop` extension but does want * > to support repositories with the `newext` extension. * + * opts(GIT_OPT_GET_OWNER_VALIDATION, int *enabled) + * > Gets the owner validation setting for repository + * > directories. + * + * opts(GIT_OPT_SET_OWNER_VALIDATION, int enabled) + * > Set that repository directories should be owned by the current + * > user. The default is to validate ownership. + * + * opts(GIT_OPT_GET_HOMEDIR, git_buf *out) + * > Gets the current user's home directory, as it will be used + * > for file lookups. The path is written to the `out` buffer. + * + * opts(GIT_OPT_SET_HOMEDIR, const char *path) + * > Sets the directory used as the current user's home directory, + * > for file lookups. + * > + * > - `path` directory of home directory. + * + * opts(GIT_OPT_GET_SERVER_CONNECT_TIMEOUT, int *timeout) + * > Gets the timeout (in milliseconds) to attempt connections to + * > a remote server. + * + * opts(GIT_OPT_SET_SERVER_CONNECT_TIMEOUT, int timeout) + * > Sets the timeout (in milliseconds) to attempt connections to + * > a remote server. Set to 0 to use the system default. Note that + * > this may not be able to be configured longer than the system + * > default, typically 75 seconds. + * + * opts(GIT_OPT_GET_SERVER_TIMEOUT, int *timeout) + * > Gets the timeout (in milliseconds) for reading from and writing + * > to a remote server. + * + * opts(GIT_OPT_SET_SERVER_TIMEOUT, int timeout) + * > Sets the timeout (in milliseconds) for reading from and writing + * > to a remote server. Set to 0 to use the system default. + * * @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, ...); diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/config.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/config.h index 7c8e388..f9c2667 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/config.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/config.h @@ -13,78 +13,134 @@ /** * @file git2/config.h - * @brief Git config management routines + * @brief Per-repository, per-user or per-system configuration * @defgroup git_config Git config management routines * @ingroup Git + * + * Git configuration affects the operation of the version control + * system, and can be specified on a per-repository basis, in user + * settings, or at the system level. * @{ */ 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. + * (from higher to lower) when reading or searching for config entries + * in git.git. Meaning that for the same key, the configuration in + * the local configuration is preferred over the configuration in + * the system configuration file. + * + * Callers can add their own custom configuration, beginning at the + * `GIT_CONFIG_LEVEL_APP` level. + * + * Writes, by default, occur in the highest priority level backend + * that is writable. This ordering can be overridden with + * `git_config_set_writeorder`. * * git_config_open_default() and git_repository_config() honor those * priority levels as well. + * + * @see git_config_open_default + * @see git_repository_config */ typedef enum { - /** System-wide on Windows, for compatibility with portable git */ + /** + * System-wide on Windows, for compatibility with "Portable Git". + */ GIT_CONFIG_LEVEL_PROGRAMDATA = 1, - /** System-wide configuration file; /etc/gitconfig on Linux systems */ + /** + * System-wide configuration file; `/etc/gitconfig` on Linux. + */ GIT_CONFIG_LEVEL_SYSTEM = 2, - /** XDG compatible configuration file; typically ~/.config/git/config */ + /** + * XDG compatible configuration file; typically + * `~/.config/git/config`. + */ GIT_CONFIG_LEVEL_XDG = 3, - /** User-specific configuration file (also called Global configuration - * file); typically ~/.gitconfig + /** + * Global configuration file is the user-specific configuration; + * typically `~/.gitconfig`. */ GIT_CONFIG_LEVEL_GLOBAL = 4, - /** Repository specific configuration file; $WORK_DIR/.git/config on - * non-bare repos + /** + * Local configuration, the repository-specific configuration file; + * typically `$GIT_DIR/config`. */ GIT_CONFIG_LEVEL_LOCAL = 5, - /** Application specific configuration file; freely defined by applications + /** + * Worktree-specific configuration; typically + * `$GIT_DIR/config.worktree`. */ - GIT_CONFIG_LEVEL_APP = 6, + GIT_CONFIG_LEVEL_WORKTREE = 6, - /** Represents the highest level available config file (i.e. the most - * specific config file available that actually is loaded) + /** + * Application-specific configuration file. Callers into libgit2 + * can add their own configuration beginning at this level. + */ + GIT_CONFIG_LEVEL_APP = 7, + + /** + * Not a configuration level; callers can use this value when + * querying configuration levels to specify that they want to + * have data from the highest-level currently configuration. + * This can be used to indicate that callers want the most + * specific config file available that actually is loaded. */ - GIT_CONFIG_HIGHEST_LEVEL = -1, + 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 */ + /** Name of the configuration entry (normalized). */ + const char *name; + + /** Literal (string) value of the entry. */ + const char *value; + + /** The type of backend that this entry exists in (eg, "file"). */ + const char *backend_type; + + /** + * The path to the origin of this entry. For config files, this is + * the path to the file. + */ + const char *origin_path; + + /** Depth of includes where this variable was found. */ + unsigned int include_depth; + + /** Configuration level for the file this was found in. */ + git_config_level_t level; } git_config_entry; /** - * Free a config entry + * Free a config entry. + * + * @param entry The entry to free. */ -GIT_EXTERN(void) git_config_entry_free(git_config_entry *); +GIT_EXTERN(void) git_config_entry_free(git_config_entry *entry); /** - * A config enumeration callback + * A config enumeration callback. * * @param entry the entry currently being enumerated * @param payload a user-specified pointer + * @return non-zero to terminate the iteration. */ typedef int GIT_CALLBACK(git_config_foreach_cb)(const git_config_entry *entry, void *payload); /** - * An opaque structure for a configuration iterator + * An opaque structure for a configuration iterator. */ typedef struct git_config_iterator git_config_iterator; @@ -119,7 +175,7 @@ typedef struct { * global configuration file. * * This method will not guess the path to the xdg compatible - * config file (.config/git/config). + * 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`. @@ -146,8 +202,8 @@ 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. + * 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 @@ -158,7 +214,7 @@ 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. + * 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 @@ -209,9 +265,9 @@ GIT_EXTERN(int) git_config_new(git_config **out); * @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 + * @param force replace config file at the given priority level * @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 @@ -269,9 +325,26 @@ GIT_EXTERN(int) git_config_open_level( * * @param out pointer in which to store the config object * @param config the config object in which to look + * @return 0 or an error code. */ GIT_EXTERN(int) git_config_open_global(git_config **out, git_config *config); +/** + * Set the write order for configuration backends. By default, the + * write ordering does not match the read ordering; for example, the + * worktree configuration is a high-priority for reading, but is not + * written to unless explicitly chosen. + * + * @param cfg the configuration to change write order of + * @param levels the ordering of levels for writing + * @param len the length of the levels array + * @return 0 or an error code + */ +GIT_EXTERN(int) git_config_set_writeorder( + git_config *cfg, + git_config_level_t *levels, + size_t len); + /** * Create a snapshot of the configuration * @@ -422,6 +495,7 @@ GIT_EXTERN(int) git_config_get_string_buf(git_buf *out, const git_config *cfg, c * 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 + * @return 0 or an error code. */ 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); @@ -437,14 +511,15 @@ GIT_EXTERN(int) git_config_get_multivar_foreach(const git_config *cfg, const cha * @param name the variable's name * @param regexp regular expression to filter which variables we're * interested in. Use NULL to indicate all + * @return 0 or an error code. */ 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. + * The pointers returned by this function are valid until the next call + * to `git_config_next` or until the iterator is freed. * * @param entry pointer to store the entry * @param iter the iterator @@ -515,6 +590,7 @@ GIT_EXTERN(int) git_config_set_string(git_config *cfg, const char *name, const c * @param name the variable's name * @param regexp a regular expression to indicate which values to replace * @param value the new value. + * @return 0 or an error code. */ GIT_EXTERN(int) git_config_set_multivar(git_config *cfg, const char *name, const char *regexp, const char *value); @@ -524,6 +600,7 @@ GIT_EXTERN(int) git_config_set_multivar(git_config *cfg, const char *name, const * * @param cfg the configuration * @param name the variable to delete + * @return 0 or an error code. */ GIT_EXTERN(int) git_config_delete_entry(git_config *cfg, const char *name); @@ -568,7 +645,8 @@ GIT_EXTERN(int) git_config_foreach( * `git_config_iterator_free` when done. * * @param out pointer to store the iterator - * @param cfg where to ge the variables from + * @param cfg where to get the variables from + * @return 0 or an error code. */ GIT_EXTERN(int) git_config_iterator_new(git_config_iterator **out, const git_config *cfg); @@ -585,6 +663,7 @@ GIT_EXTERN(int) git_config_iterator_new(git_config_iterator **out, const git_con * @param out pointer to store the iterator * @param cfg where to ge the variables from * @param regexp regular expression to match the names + * @return 0 or an error code. */ GIT_EXTERN(int) git_config_iterator_glob_new(git_config_iterator **out, const git_config *cfg, const char *regexp); @@ -662,6 +741,7 @@ GIT_EXTERN(int) git_config_get_mapped( * @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 + * @return 0 or an error code. */ GIT_EXTERN(int) git_config_lookup_map_value( int *out, @@ -678,6 +758,7 @@ GIT_EXTERN(int) git_config_lookup_map_value( * * @param out place to store the result of the parsing * @param value value to parse + * @return 0 or an error code. */ GIT_EXTERN(int) git_config_parse_bool(int *out, const char *value); @@ -690,6 +771,7 @@ GIT_EXTERN(int) git_config_parse_bool(int *out, const char *value); * * @param out place to store the result of the parsing * @param value value to parse + * @return 0 or an error code. */ GIT_EXTERN(int) git_config_parse_int32(int32_t *out, const char *value); @@ -702,6 +784,7 @@ GIT_EXTERN(int) git_config_parse_int32(int32_t *out, const char *value); * * @param out place to store the result of the parsing * @param value value to parse + * @return 0 or an error code. */ GIT_EXTERN(int) git_config_parse_int64(int64_t *out, const char *value); @@ -717,6 +800,7 @@ GIT_EXTERN(int) git_config_parse_int64(int64_t *out, const char *value); * * @param out placae to store the result of parsing * @param value the path to evaluate + * @return 0 or an error code. */ GIT_EXTERN(int) git_config_parse_path(git_buf *out, const char *value); @@ -735,6 +819,7 @@ GIT_EXTERN(int) git_config_parse_path(git_buf *out, const char *value); * @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 + * @return 0 or an error code. */ GIT_EXTERN(int) git_config_backend_foreach_match( git_config_backend *backend, @@ -763,4 +848,5 @@ GIT_EXTERN(int) git_config_lock(git_transaction **tx, git_config *cfg); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/credential.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/credential.h index 9426a6e..33755ca 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/credential.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/credential.h @@ -11,9 +11,12 @@ /** * @file git2/credential.h - * @brief Git authentication & credential management + * @brief Authentication and credential management * @defgroup git_credential Authentication & credential management * @ingroup Git + * + * Credentials specify how to authenticate to a remote system + * over HTTPS or SSH. * @{ */ GIT_BEGIN_DECL @@ -75,7 +78,7 @@ typedef enum { * * @see git_credential_ssh_key_memory_new */ - GIT_CREDENTIAL_SSH_MEMORY = (1u << 6), + GIT_CREDENTIAL_SSH_MEMORY = (1u << 6) } git_credential_t; /** @@ -119,7 +122,7 @@ typedef struct git_credential_ssh_custom git_credential_ssh_custom; * 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[out] 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. @@ -241,6 +244,18 @@ typedef struct _LIBSSH2_USERAUTH_KBDINT_PROMPT LIBSSH2_USERAUTH_KBDINT_PROMPT; typedef struct _LIBSSH2_USERAUTH_KBDINT_RESPONSE LIBSSH2_USERAUTH_KBDINT_RESPONSE; #endif +/** + * Callback for interactive SSH credentials. + * + * @param name the name + * @param name_len the length of the name + * @param instruction the authentication instruction + * @param instruction_len the length of the instruction + * @param num_prompts the number of prompts + * @param prompts the prompts + * @param responses the responses + * @param abstract the abstract + */ typedef void GIT_CALLBACK(git_credential_ssh_interactive_cb)( const char *name, int name_len, @@ -254,6 +269,7 @@ typedef void GIT_CALLBACK(git_credential_ssh_interactive_cb)( * Create a new ssh keyboard-interactive based 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 prompt_callback The callback method used for prompts. * @param payload Additional data to pass to the callback. @@ -277,6 +293,18 @@ GIT_EXTERN(int) git_credential_ssh_key_from_agent( git_credential **out, const char *username); +/** + * Callback for credential signing. + * + * @param session the libssh2 session + * @param sig the signature + * @param sig_len the length of the signature + * @param data the data + * @param data_len the length of the data + * @param abstract the abstract + * @return 0 for success, < 0 to indicate an error, > 0 to indicate + * no credential was acquired + */ typedef int GIT_CALLBACK(git_credential_sign_cb)( LIBSSH2_SESSION *session, unsigned char **sig, size_t *sig_len, @@ -311,4 +339,5 @@ GIT_EXTERN(int) git_credential_ssh_custom_new( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/credential_helpers.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/credential_helpers.h index 9a70ecb..706558d 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/credential_helpers.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/credential_helpers.h @@ -39,6 +39,7 @@ typedef struct git_credential_userpass_payload { * @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*`.) + * @return 0 or an error code. */ GIT_EXTERN(int) git_credential_userpass( git_credential **out, @@ -49,4 +50,5 @@ GIT_EXTERN(int) git_credential_userpass( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/deprecated.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/deprecated.h index 37b9fa0..b8b0238 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/deprecated.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/deprecated.h @@ -52,7 +52,7 @@ /** * @file git2/deprecated.h - * @brief libgit2 deprecated functions and values + * @brief Deprecated functions and values * @ingroup Git * @{ */ @@ -69,15 +69,23 @@ GIT_BEGIN_DECL */ /**@{*/ +/** @deprecated use GIT_ATTR_VALUE_UNSPECIFIED */ #define GIT_ATTR_UNSPECIFIED_T GIT_ATTR_VALUE_UNSPECIFIED +/** @deprecated use GIT_ATTR_VALUE_TRUE */ #define GIT_ATTR_TRUE_T GIT_ATTR_VALUE_TRUE +/** @deprecated use GIT_ATTR_VALUE_FALSE */ #define GIT_ATTR_FALSE_T GIT_ATTR_VALUE_FALSE +/** @deprecated use GIT_ATTR_VALUE_STRING */ #define GIT_ATTR_VALUE_T GIT_ATTR_VALUE_STRING +/** @deprecated use GIT_ATTR_IS_TRUE */ #define GIT_ATTR_TRUE(attr) GIT_ATTR_IS_TRUE(attr) +/** @deprecated use GIT_ATTR_IS_FALSE */ #define GIT_ATTR_FALSE(attr) GIT_ATTR_IS_FALSE(attr) +/** @deprecated use GIT_ATTR_IS_UNSPECIFIED */ #define GIT_ATTR_UNSPECIFIED(attr) GIT_ATTR_IS_UNSPECIFIED(attr) +/** @deprecated use git_attr_value_t */ typedef git_attr_value_t git_attr_t; /**@}*/ @@ -93,6 +101,7 @@ typedef git_attr_value_t git_attr_t; */ /**@{*/ +/** @deprecated use GIT_BLOB_FILTER_ATTRIBUTES_FROM_HEAD */ #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); @@ -285,11 +294,16 @@ typedef int (*git_commit_signing_cb)( */ /**@{*/ +/** @deprecated use GIT_CONFIGMAP_FALSE */ #define GIT_CVAR_FALSE GIT_CONFIGMAP_FALSE +/** @deprecated use GIT_CONFIGMAP_TRUE */ #define GIT_CVAR_TRUE GIT_CONFIGMAP_TRUE +/** @deprecated use GIT_CONFIGMAP_INT32 */ #define GIT_CVAR_INT32 GIT_CONFIGMAP_INT32 +/** @deprecated use GIT_CONFIGMAP_STRING */ #define GIT_CVAR_STRING GIT_CONFIGMAP_STRING +/** @deprecated use git_cvar_map */ typedef git_configmap git_cvar_map; /**@}*/ @@ -313,12 +327,13 @@ typedef enum { 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_EXCLUDE_SUBJECT_PATCH_MARKER = (1 << 0) } git_diff_format_email_flags_t; /** * Options for controlling the formatting of the generated e-mail. + * + * @deprecated use `git_email_create_options` */ typedef struct { unsigned int version; @@ -345,7 +360,9 @@ typedef struct { const git_signature *author; } git_diff_format_email_options; +/** @deprecated use `git_email_create_options` */ #define GIT_DIFF_FORMAT_EMAIL_OPTIONS_VERSION 1 +/** @deprecated use `git_email_create_options` */ #define GIT_DIFF_FORMAT_EMAIL_OPTIONS_INIT {GIT_DIFF_FORMAT_EMAIL_OPTIONS_VERSION, 0, 1, 1, NULL, NULL, NULL, NULL} /** @@ -401,40 +418,76 @@ GIT_EXTERN(int) git_diff_format_email_options_init( */ /**@{*/ +/** @deprecated use `GIT_ERROR_NONE` */ #define GITERR_NONE GIT_ERROR_NONE +/** @deprecated use `GIT_ERROR_NOMEMORY` */ #define GITERR_NOMEMORY GIT_ERROR_NOMEMORY +/** @deprecated use `GIT_ERROR_OS` */ #define GITERR_OS GIT_ERROR_OS +/** @deprecated use `GIT_ERROR_INVALID` */ #define GITERR_INVALID GIT_ERROR_INVALID +/** @deprecated use `GIT_ERROR_REFERENCE` */ #define GITERR_REFERENCE GIT_ERROR_REFERENCE +/** @deprecated use `GIT_ERROR_ZLIB` */ #define GITERR_ZLIB GIT_ERROR_ZLIB +/** @deprecated use `GIT_ERROR_REPOSITORY` */ #define GITERR_REPOSITORY GIT_ERROR_REPOSITORY +/** @deprecated use `GIT_ERROR_CONFIG` */ #define GITERR_CONFIG GIT_ERROR_CONFIG +/** @deprecated use `GIT_ERROR_REGEX` */ #define GITERR_REGEX GIT_ERROR_REGEX +/** @deprecated use `GIT_ERROR_ODB` */ #define GITERR_ODB GIT_ERROR_ODB +/** @deprecated use `GIT_ERROR_INDEX` */ #define GITERR_INDEX GIT_ERROR_INDEX +/** @deprecated use `GIT_ERROR_OBJECT` */ #define GITERR_OBJECT GIT_ERROR_OBJECT +/** @deprecated use `GIT_ERROR_NET` */ #define GITERR_NET GIT_ERROR_NET +/** @deprecated use `GIT_ERROR_TAG` */ #define GITERR_TAG GIT_ERROR_TAG +/** @deprecated use `GIT_ERROR_TREE` */ #define GITERR_TREE GIT_ERROR_TREE +/** @deprecated use `GIT_ERROR_INDEXER` */ #define GITERR_INDEXER GIT_ERROR_INDEXER +/** @deprecated use `GIT_ERROR_SSL` */ #define GITERR_SSL GIT_ERROR_SSL +/** @deprecated use `GIT_ERROR_SUBMODULE` */ #define GITERR_SUBMODULE GIT_ERROR_SUBMODULE +/** @deprecated use `GIT_ERROR_THREAD` */ #define GITERR_THREAD GIT_ERROR_THREAD +/** @deprecated use `GIT_ERROR_STASH` */ #define GITERR_STASH GIT_ERROR_STASH +/** @deprecated use `GIT_ERROR_CHECKOUT` */ #define GITERR_CHECKOUT GIT_ERROR_CHECKOUT +/** @deprecated use `GIT_ERROR_FETCHHEAD` */ #define GITERR_FETCHHEAD GIT_ERROR_FETCHHEAD +/** @deprecated use `GIT_ERROR_MERGE` */ #define GITERR_MERGE GIT_ERROR_MERGE +/** @deprecated use `GIT_ERROR_SSH` */ #define GITERR_SSH GIT_ERROR_SSH +/** @deprecated use `GIT_ERROR_FILTER` */ #define GITERR_FILTER GIT_ERROR_FILTER +/** @deprecated use `GIT_ERROR_REVERT` */ #define GITERR_REVERT GIT_ERROR_REVERT +/** @deprecated use `GIT_ERROR_CALLBACK` */ #define GITERR_CALLBACK GIT_ERROR_CALLBACK +/** @deprecated use `GIT_ERROR_CHERRYPICK` */ #define GITERR_CHERRYPICK GIT_ERROR_CHERRYPICK +/** @deprecated use `GIT_ERROR_DESCRIBE` */ #define GITERR_DESCRIBE GIT_ERROR_DESCRIBE +/** @deprecated use `GIT_ERROR_REBASE` */ #define GITERR_REBASE GIT_ERROR_REBASE +/** @deprecated use `GIT_ERROR_FILESYSTEM` */ #define GITERR_FILESYSTEM GIT_ERROR_FILESYSTEM +/** @deprecated use `GIT_ERROR_PATCH` */ #define GITERR_PATCH GIT_ERROR_PATCH +/** @deprecated use `GIT_ERROR_WORKTREE` */ #define GITERR_WORKTREE GIT_ERROR_WORKTREE +/** @deprecated use `GIT_ERROR_SHA1` */ #define GITERR_SHA1 GIT_ERROR_SHA1 +/** @deprecated use `GIT_ERROR_SHA` */ +#define GIT_ERROR_SHA1 GIT_ERROR_SHA /** * Return the last `git_error` object that was generated for the @@ -498,37 +551,63 @@ GIT_EXTERN(void) giterr_set_oom(void); */ /**@{*/ +/* The git_idxentry_extended_flag_t enum */ +/** @deprecated use `GIT_INDEX_ENTRY_NAMEMASK` */ #define GIT_IDXENTRY_NAMEMASK GIT_INDEX_ENTRY_NAMEMASK +/** @deprecated use `GIT_INDEX_ENTRY_STAGEMASK` */ #define GIT_IDXENTRY_STAGEMASK GIT_INDEX_ENTRY_STAGEMASK +/** @deprecated use `GIT_INDEX_ENTRY_STAGESHIFT` */ #define GIT_IDXENTRY_STAGESHIFT GIT_INDEX_ENTRY_STAGESHIFT /* The git_indxentry_flag_t enum */ +/** @deprecated use `GIT_INDEX_ENTRY_EXTENDED` */ #define GIT_IDXENTRY_EXTENDED GIT_INDEX_ENTRY_EXTENDED +/** @deprecated use `GIT_INDEX_ENTRY_VALID` */ #define GIT_IDXENTRY_VALID GIT_INDEX_ENTRY_VALID +/** @deprecated use `GIT_INDEX_ENTRY_STAGE` */ #define GIT_IDXENTRY_STAGE(E) GIT_INDEX_ENTRY_STAGE(E) +/** @deprecated use `GIT_INDEX_ENTRY_STAGE_SET` */ #define GIT_IDXENTRY_STAGE_SET(E,S) GIT_INDEX_ENTRY_STAGE_SET(E,S) /* The git_idxentry_extended_flag_t enum */ +/** @deprecated use `GIT_INDEX_ENTRY_INTENT_TO_ADD` */ #define GIT_IDXENTRY_INTENT_TO_ADD GIT_INDEX_ENTRY_INTENT_TO_ADD +/** @deprecated use `GIT_INDEX_ENTRY_SKIP_WORKTREE` */ #define GIT_IDXENTRY_SKIP_WORKTREE GIT_INDEX_ENTRY_SKIP_WORKTREE +/** @deprecated use `GIT_INDEX_ENTRY_INTENT_TO_ADD | GIT_INDEX_ENTRY_SKIP_WORKTREE` */ #define GIT_IDXENTRY_EXTENDED_FLAGS (GIT_INDEX_ENTRY_INTENT_TO_ADD | GIT_INDEX_ENTRY_SKIP_WORKTREE) +/** @deprecated this value is not public */ #define GIT_IDXENTRY_EXTENDED2 (1 << 15) +/** @deprecated this value is not public */ #define GIT_IDXENTRY_UPDATE (1 << 0) +/** @deprecated this value is not public */ #define GIT_IDXENTRY_REMOVE (1 << 1) +/** @deprecated this value is not public */ #define GIT_IDXENTRY_UPTODATE (1 << 2) +/** @deprecated this value is not public */ #define GIT_IDXENTRY_ADDED (1 << 3) +/** @deprecated this value is not public */ #define GIT_IDXENTRY_HASHED (1 << 4) +/** @deprecated this value is not public */ #define GIT_IDXENTRY_UNHASHED (1 << 5) +/** @deprecated this value is not public */ #define GIT_IDXENTRY_WT_REMOVE (1 << 6) +/** @deprecated this value is not public */ #define GIT_IDXENTRY_CONFLICTED (1 << 7) +/** @deprecated this value is not public */ #define GIT_IDXENTRY_UNPACKED (1 << 8) +/** @deprecated this value is not public */ #define GIT_IDXENTRY_NEW_SKIP_WORKTREE (1 << 9) /* The git_index_capability_t enum */ +/** @deprecated use `GIT_INDEX_CAPABILITY_IGNORE_CASE` */ #define GIT_INDEXCAP_IGNORE_CASE GIT_INDEX_CAPABILITY_IGNORE_CASE +/** @deprecated use `GIT_INDEX_CAPABILITY_NO_FILEMODE` */ #define GIT_INDEXCAP_NO_FILEMODE GIT_INDEX_CAPABILITY_NO_FILEMODE +/** @deprecated use `GIT_INDEX_CAPABILITY_NO_SYMLINKS` */ #define GIT_INDEXCAP_NO_SYMLINKS GIT_INDEX_CAPABILITY_NO_SYMLINKS +/** @deprecated use `GIT_INDEX_CAPABILITY_FROM_OWNER` */ #define GIT_INDEXCAP_FROM_OWNER GIT_INDEX_CAPABILITY_FROM_OWNER GIT_EXTERN(int) git_index_add_frombuffer( @@ -548,17 +627,28 @@ GIT_EXTERN(int) git_index_add_frombuffer( */ /**@{*/ +/** @deprecate use `git_object_t` */ #define git_otype git_object_t +/** @deprecate use `GIT_OBJECT_ANY` */ #define GIT_OBJ_ANY GIT_OBJECT_ANY +/** @deprecate use `GIT_OBJECT_INVALID` */ #define GIT_OBJ_BAD GIT_OBJECT_INVALID +/** @deprecated this value is not public */ #define GIT_OBJ__EXT1 0 +/** @deprecate use `GIT_OBJECT_COMMIT` */ #define GIT_OBJ_COMMIT GIT_OBJECT_COMMIT +/** @deprecate use `GIT_OBJECT_TREE` */ #define GIT_OBJ_TREE GIT_OBJECT_TREE +/** @deprecate use `GIT_OBJECT_BLOB` */ #define GIT_OBJ_BLOB GIT_OBJECT_BLOB +/** @deprecate use `GIT_OBJECT_TAG` */ #define GIT_OBJ_TAG GIT_OBJECT_TAG +/** @deprecated this value is not public */ #define GIT_OBJ__EXT2 5 +/** @deprecate use `GIT_OBJECT_OFS_DELTA` */ #define GIT_OBJ_OFS_DELTA GIT_OBJECT_OFS_DELTA +/** @deprecate use `GIT_OBJECT_REF_DELTA` */ #define GIT_OBJ_REF_DELTA GIT_OBJECT_REF_DELTA /** @@ -610,17 +700,27 @@ GIT_EXTERN(int) git_remote_is_valid_name(const char *remote_name); /**@{*/ /** Basic type of any Git reference. */ +/** @deprecate use `git_reference_t` */ #define git_ref_t git_reference_t +/** @deprecate use `git_reference_format_t` */ #define git_reference_normalize_t git_reference_format_t +/** @deprecate use `GIT_REFERENCE_INVALID` */ #define GIT_REF_INVALID GIT_REFERENCE_INVALID +/** @deprecate use `GIT_REFERENCE_DIRECT` */ #define GIT_REF_OID GIT_REFERENCE_DIRECT +/** @deprecate use `GIT_REFERENCE_SYMBOLIC` */ #define GIT_REF_SYMBOLIC GIT_REFERENCE_SYMBOLIC +/** @deprecate use `GIT_REFERENCE_ALL` */ #define GIT_REF_LISTALL GIT_REFERENCE_ALL +/** @deprecate use `GIT_REFERENCE_FORMAT_NORMAL` */ #define GIT_REF_FORMAT_NORMAL GIT_REFERENCE_FORMAT_NORMAL +/** @deprecate use `GIT_REFERENCE_FORMAT_ALLOW_ONELEVEL` */ #define GIT_REF_FORMAT_ALLOW_ONELEVEL GIT_REFERENCE_FORMAT_ALLOW_ONELEVEL +/** @deprecate use `GIT_REFERENCE_FORMAT_REFSPEC_PATTERN` */ #define GIT_REF_FORMAT_REFSPEC_PATTERN GIT_REFERENCE_FORMAT_REFSPEC_PATTERN +/** @deprecate use `GIT_REFERENCE_FORMAT_REFSPEC_SHORTHAND` */ #define GIT_REF_FORMAT_REFSPEC_SHORTHAND GIT_REFERENCE_FORMAT_REFSPEC_SHORTHAND /** @@ -661,8 +761,11 @@ GIT_EXTERN(int) git_tag_create_frombuffer( typedef git_revspec_t git_revparse_mode_t; +/** @deprecated use `GIT_REVSPEC_SINGLE` */ #define GIT_REVPARSE_SINGLE GIT_REVSPEC_SINGLE +/** @deprecated use `GIT_REVSPEC_RANGE` */ #define GIT_REVPARSE_RANGE GIT_REVSPEC_RANGE +/** @deprecated use `GIT_REVSPEC_MERGE_BASE` */ #define GIT_REVPARSE_MERGE_BASE GIT_REVSPEC_MERGE_BASE /**@}*/ @@ -691,14 +794,22 @@ 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; +/** @deprecated use `git_credential_t` */ #define git_credtype_t git_credential_t +/** @deprecated use `GIT_CREDENTIAL_USERPASS_PLAINTEXT` */ #define GIT_CREDTYPE_USERPASS_PLAINTEXT GIT_CREDENTIAL_USERPASS_PLAINTEXT +/** @deprecated use `GIT_CREDENTIAL_SSH_KEY` */ #define GIT_CREDTYPE_SSH_KEY GIT_CREDENTIAL_SSH_KEY +/** @deprecated use `GIT_CREDENTIAL_SSH_CUSTOM` */ #define GIT_CREDTYPE_SSH_CUSTOM GIT_CREDENTIAL_SSH_CUSTOM +/** @deprecated use `GIT_CREDENTIAL_DEFAULT` */ #define GIT_CREDTYPE_DEFAULT GIT_CREDENTIAL_DEFAULT +/** @deprecated use `GIT_CREDENTIAL_SSH_INTERACTIVE` */ #define GIT_CREDTYPE_SSH_INTERACTIVE GIT_CREDENTIAL_SSH_INTERACTIVE +/** @deprecated use `GIT_CREDENTIAL_USERNAME` */ #define GIT_CREDTYPE_USERNAME GIT_CREDENTIAL_USERNAME +/** @deprecated use `GIT_CREDENTIAL_SSH_MEMORY` */ #define GIT_CREDTYPE_SSH_MEMORY GIT_CREDENTIAL_SSH_MEMORY GIT_EXTERN(void) git_cred_free(git_credential *cred); @@ -775,6 +886,15 @@ typedef git_trace_cb git_trace_callback; */ /**@{*/ +#ifndef GIT_EXPERIMENTAL_SHA256 +/** Deprecated OID "raw size" definition */ +# define GIT_OID_RAWSZ GIT_OID_SHA1_SIZE +/** Deprecated OID "hex size" definition */ +# define GIT_OID_HEXSZ GIT_OID_SHA1_HEXSIZE +/** Deprecated OID "hex zero" definition */ +# define GIT_OID_HEX_ZERO GIT_OID_SHA1_HEXZERO +#endif + GIT_EXTERN(int) git_oid_iszero(const git_oid *id); /**@}*/ @@ -884,6 +1004,24 @@ GIT_EXTERN(void) git_strarray_free(git_strarray *array); /**@}*/ +/** @name Deprecated Version Constants + * + * These constants are retained for backward compatibility. The newer + * versions of these constants should be preferred in all new code. + * + * There is no plan to remove these backward compatibility constants at + * this time. + */ +/**@{*/ + +#define LIBGIT2_VER_MAJOR LIBGIT2_VERSION_MAJOR +#define LIBGIT2_VER_MINOR LIBGIT2_VERSION_MINOR +#define LIBGIT2_VER_REVISION LIBGIT2_VERSION_REVISION +#define LIBGIT2_VER_PATCH LIBGIT2_VERSION_PATCH +#define LIBGIT2_VER_PRERELEASE LIBGIT2_VERSION_PRERELEASE + +/**@}*/ + /** @name Deprecated Options Initialization Functions * * These functions are retained for backward compatibility. The newer diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/describe.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/describe.h index 1d2ca14..938c470 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/describe.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/describe.h @@ -13,10 +13,14 @@ /** * @file git2/describe.h - * @brief Git describing routines + * @brief Describe a commit in reference to tags * @defgroup git_describe Git describing routines * @ingroup Git * @{ + * + * Describe a commit, showing information about how the current commit + * relates to the tags. This can be useful for showing how the current + * commit has changed from a particular tagged version of the repository. */ GIT_BEGIN_DECL @@ -30,7 +34,7 @@ GIT_BEGIN_DECL typedef enum { GIT_DESCRIBE_DEFAULT, GIT_DESCRIBE_TAGS, - GIT_DESCRIBE_ALL, + GIT_DESCRIBE_ALL } git_describe_strategy_t; /** @@ -60,10 +64,15 @@ typedef struct git_describe_options { int show_commit_oid_as_fallback; } git_describe_options; +/** Default maximum candidate tags */ #define GIT_DESCRIBE_DEFAULT_MAX_CANDIDATES_TAGS 10 +/** Default abbreviated size */ #define GIT_DESCRIBE_DEFAULT_ABBREVIATED_SIZE 7 +/** Current version for the `git_describe_options` structure */ #define GIT_DESCRIBE_OPTIONS_VERSION 1 + +/** Static constructor for `git_describe_options` */ #define GIT_DESCRIBE_OPTIONS_INIT { \ GIT_DESCRIBE_OPTIONS_VERSION, \ GIT_DESCRIBE_DEFAULT_MAX_CANDIDATES_TAGS, \ @@ -110,7 +119,10 @@ typedef struct { const char *dirty_suffix; } git_describe_format_options; +/** Current version for the `git_describe_format_options` structure */ #define GIT_DESCRIBE_FORMAT_OPTIONS_VERSION 1 + +/** Static constructor for `git_describe_format_options` */ #define GIT_DESCRIBE_FORMAT_OPTIONS_INIT { \ GIT_DESCRIBE_FORMAT_OPTIONS_VERSION, \ GIT_DESCRIBE_DEFAULT_ABBREVIATED_SIZE, \ @@ -142,6 +154,7 @@ typedef struct git_describe_result git_describe_result; * you're done with it. * @param committish a committish to describe * @param opts the lookup options (or NULL for defaults) + * @return 0 or an error code. */ GIT_EXTERN(int) git_describe_commit( git_describe_result **result, @@ -152,13 +165,14 @@ GIT_EXTERN(int) git_describe_commit( * 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 + * worktree. After performing 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) + * @return 0 or an error code. */ GIT_EXTERN(int) git_describe_workdir( git_describe_result **out, @@ -172,6 +186,7 @@ GIT_EXTERN(int) git_describe_workdir( * @param result the result from `git_describe_commit()` or * `git_describe_workdir()`. * @param opts the formatting options (or NULL for defaults) + * @return 0 or an error code. */ GIT_EXTERN(int) git_describe_format( git_buf *out, @@ -180,6 +195,8 @@ GIT_EXTERN(int) git_describe_format( /** * Free the describe result. + * + * @param result The result to free. */ GIT_EXTERN(void) git_describe_result_free(git_describe_result *result); diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/diff.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/diff.h index a14c019..b12e8ab 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/diff.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/diff.h @@ -15,7 +15,7 @@ /** * @file git2/diff.h - * @brief Git tree and file differencing routines. + * @brief Indicate the differences between two versions of the repository * @ingroup Git * @{ */ @@ -170,7 +170,7 @@ typedef enum { /** 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_SHOW_BINARY = (1u << 30) } git_diff_option_t; /** @@ -208,6 +208,7 @@ typedef enum { 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_VALID_SIZE = (1u << 4) /**< file size value is known correct */ } git_diff_flag_t; /** @@ -231,7 +232,7 @@ typedef enum { 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_CONFLICTED = 10 /**< entry in the index is conflicted */ } git_delta_t; /** @@ -273,7 +274,7 @@ typedef struct { /** * Represents the known length of the `id` field, when - * converted to a hex string. It is generally `GIT_OID_HEXSZ`, unless this + * converted to a hex string. It is generally `GIT_OID_SHA1_HEXSIZE`, unless this * delta was created from reading a patch file, in which case it may be * abbreviated to something reasonable, like 7 characters. */ @@ -341,6 +342,12 @@ typedef struct { * diff process continues. * - returns 0, the delta is inserted into the diff, and the diff process * continues. + * + * @param diff_so_far the diff structure as it currently exists + * @param delta_to_add the delta that is to be added + * @param matched_pathspec the pathspec + * @param payload the user-specified callback payload + * @return 0 on success, 1 to skip this delta, or an error code */ typedef int GIT_CALLBACK(git_diff_notify_cb)( const git_diff *diff_so_far, @@ -356,7 +363,8 @@ typedef int GIT_CALLBACK(git_diff_notify_cb)( * @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. + * @param payload the user-specified callback payload + * @return 0 or an error code */ typedef int GIT_CALLBACK(git_diff_progress_cb)( const git_diff *diff_so_far, @@ -420,6 +428,22 @@ typedef struct { */ uint32_t interhunk_lines; + /** + * The object ID type to emit in diffs; this is used by functions + * that operate without a repository - namely `git_diff_buffers`, + * or `git_diff_blobs` and `git_diff_blob_to_buffer` when one blob + * is `NULL`. + * + * This may be omitted (set to `0`). If a repository is available, + * the object ID format of the repository will be used. If no + * repository is available then the default is `GIT_OID_SHA`. + * + * If this is specified and a repository is available, then the + * specified `oid_type` must match the repository's object ID + * format. + */ + git_oid_t oid_type; + /** * The abbreviation length to use when formatting object ids. * Defaults to the value of 'core.abbrev' from the config, or 7 if unset. @@ -446,10 +470,10 @@ typedef struct { const char *new_prefix; } git_diff_options; -/* The current version of the diff options structure */ +/** The current version of the diff options structure */ #define GIT_DIFF_OPTIONS_VERSION 1 -/* Stack initializer for diff options. Alternatively use +/** Stack initializer for diff options. Alternatively use * `git_diff_options_init` programmatic initialization. */ #define GIT_DIFF_OPTIONS_INIT \ @@ -475,12 +499,14 @@ GIT_EXTERN(int) git_diff_options_init( * @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 + * @return 0 or an error code */ typedef int GIT_CALLBACK(git_diff_file_cb)( const git_diff_delta *delta, float progress, void *payload); +/** Maximum size of the hunk header */ #define GIT_DIFF_HUNK_HEADER_SIZE 128 /** @@ -497,7 +523,7 @@ typedef enum { GIT_DIFF_BINARY_LITERAL, /** The binary data is the delta from one side to the other. */ - GIT_DIFF_BINARY_DELTA, + GIT_DIFF_BINARY_DELTA } git_diff_binary_t; /** The contents of one of the files in a binary diff. */ @@ -541,6 +567,11 @@ typedef struct { /** * When iterating over a diff, callback that will be made for * binary content within the diff. + * + * @param delta the delta + * @param binary the binary content + * @param payload the user-specified callback payload + * @return 0 or an error code */ typedef int GIT_CALLBACK(git_diff_binary_cb)( const git_diff_delta *delta, @@ -567,6 +598,11 @@ typedef struct { /** * When iterating over a diff, callback that will be made per hunk. + * + * @param delta the delta + * @param hunk the hunk + * @param payload the user-specified callback payload + * @return 0 or an error code */ typedef int GIT_CALLBACK(git_diff_hunk_cb)( const git_diff_delta *delta, @@ -628,6 +664,12 @@ typedef struct { * 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. + * + * @param delta the delta that contains the line + * @param hunk the hunk that contains the line + * @param line the line in the diff + * @param payload the user-specified callback payload + * @return 0 or an error code */ typedef int GIT_CALLBACK(git_diff_line_cb)( const git_diff_delta *delta, /**< delta that contains this data */ @@ -706,7 +748,7 @@ typedef enum { * 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_REMOVE_UNMODIFIED = (1u << 16) } git_diff_find_t; /** @@ -758,7 +800,7 @@ typedef struct { uint16_t copy_threshold; /** - * Treshold below which similar files will be split into a delete/add pair. + * Threshold 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; @@ -768,7 +810,7 @@ typedef struct { * * 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. + * Defaults to 1000. */ size_t rename_limit; @@ -785,7 +827,10 @@ typedef struct { git_diff_similarity_metric *metric; } git_diff_find_options; +/** Current version for the `git_diff_find_options` structure */ #define GIT_DIFF_FIND_OPTIONS_VERSION 1 + +/** Static constructor for `git_diff_find_options` */ #define GIT_DIFF_FIND_OPTIONS_INIT {GIT_DIFF_FIND_OPTIONS_VERSION} /** @@ -831,6 +876,7 @@ GIT_EXTERN(void) git_diff_free(git_diff *diff); * @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. + * @return 0 or an error code. */ GIT_EXTERN(int) git_diff_tree_to_tree( git_diff **diff, @@ -857,6 +903,7 @@ GIT_EXTERN(int) git_diff_tree_to_tree( * @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. + * @return 0 or an error code. */ GIT_EXTERN(int) git_diff_tree_to_index( git_diff **diff, @@ -884,6 +931,7 @@ GIT_EXTERN(int) git_diff_tree_to_index( * @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. + * @return 0 or an error code. */ GIT_EXTERN(int) git_diff_index_to_workdir( git_diff **diff, @@ -913,6 +961,7 @@ GIT_EXTERN(int) git_diff_index_to_workdir( * @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. + * @return 0 or an error code. */ GIT_EXTERN(int) git_diff_tree_to_workdir( git_diff **diff, @@ -932,6 +981,7 @@ GIT_EXTERN(int) git_diff_tree_to_workdir( * @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. + * @return 0 or an error code. */ GIT_EXTERN(int) git_diff_tree_to_workdir_with_index( git_diff **diff, @@ -950,6 +1000,7 @@ GIT_EXTERN(int) git_diff_tree_to_workdir_with_index( * @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. + * @return 0 or an error code. */ GIT_EXTERN(int) git_diff_index_to_index( git_diff **diff, @@ -970,6 +1021,7 @@ GIT_EXTERN(int) git_diff_index_to_index( * * @param onto Diff to merge into. * @param from Diff to merge. + * @return 0 or an error code. */ GIT_EXTERN(int) git_diff_merge( git_diff *onto, @@ -1107,7 +1159,7 @@ typedef enum { 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_PATCH_ID = 6u /**< git diff as used by git patch-id */ } git_diff_format_t; /** @@ -1145,9 +1197,8 @@ GIT_EXTERN(int) git_diff_to_buf( /**@}*/ - /* - * Misc + * Low-level file comparison, invoking callbacks per difference. */ /** @@ -1263,6 +1314,25 @@ GIT_EXTERN(int) git_diff_buffers( git_diff_line_cb line_cb, void *payload); +/* Patch file parsing. */ + +/** + * Options for parsing a diff / patch file. + */ +typedef struct { + unsigned int version; + git_oid_t oid_type; +} git_diff_parse_options; + +/** The current version of the diff parse options structure */ +#define GIT_DIFF_PARSE_OPTIONS_VERSION 1 + +/** Stack initializer for diff parse options. Alternatively use + * `git_diff_parse_options_init` programmatic initialization. + */ +#define GIT_DIFF_PARSE_OPTIONS_INIT \ + { GIT_DIFF_PARSE_OPTIONS_VERSION, GIT_OID_DEFAULT } + /** * Read the contents of a git patch file into a `git_diff` object. * @@ -1285,7 +1355,11 @@ GIT_EXTERN(int) git_diff_buffers( GIT_EXTERN(int) git_diff_from_buffer( git_diff **out, const char *content, - size_t content_len); + size_t content_len +#ifdef GIT_EXPERIMENTAL_SHA256 + , git_diff_parse_options *opts +#endif + ); /** * This is an opaque structure which is allocated by `git_diff_get_stats`. @@ -1311,13 +1385,13 @@ typedef enum { 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_INCLUDE_SUMMARY = (1u << 3) } git_diff_stats_format_t; /** * Accumulate diff statistics for all patches. * - * @param out Structure containg the diff statistics. + * @param out Structure containing the diff statistics. * @param diff A git_diff generated by one of the above functions. * @return 0 on success; non-zero on error */ @@ -1386,7 +1460,10 @@ typedef struct git_diff_patchid_options { unsigned int version; } git_diff_patchid_options; +/** Current version for the `git_diff_patchid_options` structure */ #define GIT_DIFF_PATCHID_OPTIONS_VERSION 1 + +/** Static constructor for `git_diff_patchid_options` */ #define GIT_DIFF_PATCHID_OPTIONS_INIT { GIT_DIFF_PATCHID_OPTIONS_VERSION } /** @@ -1424,8 +1501,7 @@ GIT_EXTERN(int) git_diff_patchid_options_init( */ GIT_EXTERN(int) git_diff_patchid(git_oid *out, git_diff *diff, git_diff_patchid_options *opts); -GIT_END_DECL - /** @} */ +GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/email.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/email.h index b56be5d..ad37e42 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/email.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/email.h @@ -8,10 +8,11 @@ #define INCLUDE_git_email_h__ #include "common.h" +#include "diff.h" /** * @file git2/email.h - * @brief Git email formatting and application routines. + * @brief Produce email-ready patches * @ingroup Git * @{ */ @@ -34,7 +35,7 @@ typedef enum { GIT_EMAIL_CREATE_ALWAYS_NUMBER = (1u << 1), /** Do not perform rename or similarity detection. */ - GIT_EMAIL_CREATE_NO_RENAMES = (1u << 2), + GIT_EMAIL_CREATE_NO_RENAMES = (1u << 2) } git_email_create_flags_t; /** @@ -70,11 +71,14 @@ typedef struct { size_t reroll_number; } git_email_create_options; -/* +/** Current version for the `git_email_create_options` structure */ +#define GIT_EMAIL_CREATE_OPTIONS_VERSION 1 + +/** Static constructor for `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, \ @@ -83,30 +87,6 @@ typedef struct { 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. @@ -114,14 +94,14 @@ GIT_EXTERN(int) git_email_create_from_diff( * @param out buffer to store the e-mail patch in * @param commit commit to create a patch for * @param opts email creation options + * @return 0 or an error code */ GIT_EXTERN(int) git_email_create_from_commit( git_buf *out, git_commit *commit, const git_email_create_options *opts); -GIT_END_DECL - /** @} */ +GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/errors.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/errors.h index de51582..1141390 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/errors.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/errors.h @@ -11,7 +11,7 @@ /** * @file git2/errors.h - * @brief Git error handling routines and variables + * @brief Error handling routines and variables * @ingroup Git * @{ */ @@ -19,25 +19,32 @@ GIT_BEGIN_DECL /** Generic return codes */ typedef enum { - GIT_OK = 0, /**< No error */ + /** + * No error occurred; the call was successful. + */ + GIT_OK = 0, + + /** + * An error occurred; call `git_error_last` for more information. + */ + GIT_ERROR = -1, - 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_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_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_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 */ @@ -58,20 +65,17 @@ typedef enum { 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_EOWNER = -36, /**< The object is not owned by the current user */ + GIT_TIMEOUT = -37, /**< The operation timed out */ + GIT_EUNCHANGED = -38, /**< There were no changes */ + GIT_ENOTSUPPORTED = -39, /**< An option is not supported */ + GIT_EREADONLY = -40 /**< The subject is read-only */ } 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 + * Error classes are the category of error. They reflect the area of the + * code where an error occurred. */ -typedef struct { - char *message; - int klass; -} git_error; - -/** Error classes */ typedef enum { GIT_ERROR_NONE = 0, GIT_ERROR_NOMEMORY, @@ -106,59 +110,45 @@ typedef enum { GIT_ERROR_FILESYSTEM, GIT_ERROR_PATCH, GIT_ERROR_WORKTREE, - GIT_ERROR_SHA1, + GIT_ERROR_SHA, GIT_ERROR_HTTP, - GIT_ERROR_INTERNAL + GIT_ERROR_INTERNAL, + GIT_ERROR_GRAFTS } 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. + * Structure to store extra details of the last error that occurred. * - * @return A git_error object. - */ -GIT_EXTERN(const git_error *) git_error_last(void); - -/** - * Clear the last library error that occurred for this thread. + * 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 */ -GIT_EXTERN(void) git_error_clear(void); +typedef struct { + char *message; /**< The error message for the last error. */ + int klass; /**< The category of the last error. @type git_error_t */ +} git_error; /** - * Set the error message string for this thread. + * Return the last `git_error` object that was generated for the + * current 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 function will never return NULL. * - * This error message is stored in thread-local storage and only applies - * to the particular thread that this libgit2 call is made from. + * Callers should not rely on this to determine whether an error has + * occurred. For error checking, callers should examine the return + * codes of libgit2 functions. * - * @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. + * This call can only reliably report error messages when an error + * has occurred. (It may contain stale information if it is called + * after a different function that succeeds.) + * + * The memory for this object is managed by libgit2. It should not + * be freed. * - * 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. + * @return A pointer to a `git_error` object that describes the error. */ -GIT_EXTERN(void) git_error_set_oom(void); +GIT_EXTERN(const git_error *) git_error_last(void); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/experimental.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/experimental.h new file mode 100644 index 0000000..543f62f --- /dev/null +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/experimental.h @@ -0,0 +1,13 @@ +/* + * 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_experimental_h__ +#define INCLUDE_experimental_h__ + +/* #undef GIT_EXPERIMENTAL_SHA256 */ + +#endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/filter.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/filter.h index 0465e5b..cf6c5f5 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/filter.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/filter.h @@ -14,9 +14,15 @@ /** * @file git2/filter.h - * @brief Git filter APIs - * + * @brief Filters modify files during checkout or commit * @ingroup Git + * + * During checkout, filters update a file from a "canonical" state to + * a format appropriate for the local filesystem; during commit, filters + * produce the canonical state. For example, on Windows, the line ending + * filters _may_ take a canonical state (with Unix-style newlines) in + * the repository, and place the contents on-disk with Windows-style + * `\r\n` line endings. * @{ */ GIT_BEGIN_DECL @@ -32,7 +38,7 @@ 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_CLEAN = GIT_FILTER_TO_ODB } git_filter_mode_t; /** @@ -54,7 +60,7 @@ typedef enum { * 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_ATTRIBUTES_FROM_COMMIT = (1u << 3) } git_filter_flag_t; /** @@ -79,8 +85,11 @@ typedef struct { git_oid attr_commit_id; } git_filter_options; - #define GIT_FILTER_OPTIONS_VERSION 1 - #define GIT_FILTER_OPTIONS_INIT {GIT_FILTER_OPTIONS_VERSION} +/** Current version for the `git_filter_options` structure */ +#define GIT_FILTER_OPTIONS_VERSION 1 + +/** Static constructor for `git_filter_options` */ +#define GIT_FILTER_OPTIONS_INIT {GIT_FILTER_OPTIONS_VERSION} /** * A filter that can transform file data @@ -196,6 +205,7 @@ GIT_EXTERN(int) git_filter_list_apply_to_buffer( * @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 + * @return 0 or an error code. */ GIT_EXTERN(int) git_filter_list_apply_to_file( git_buf *out, @@ -209,6 +219,7 @@ GIT_EXTERN(int) git_filter_list_apply_to_file( * @param out buffer into which to store the filtered file * @param filters the list of filters to apply * @param blob the blob to filter + * @return 0 or an error code. */ GIT_EXTERN(int) git_filter_list_apply_to_blob( git_buf *out, @@ -222,6 +233,7 @@ GIT_EXTERN(int) git_filter_list_apply_to_blob( * @param buffer the buffer to filter * @param len the size of the buffer * @param target the stream into which the data will be written + * @return 0 or an error code. */ GIT_EXTERN(int) git_filter_list_stream_buffer( git_filter_list *filters, @@ -237,6 +249,7 @@ GIT_EXTERN(int) git_filter_list_stream_buffer( * @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 + * @return 0 or an error code. */ GIT_EXTERN(int) git_filter_list_stream_file( git_filter_list *filters, @@ -250,6 +263,7 @@ GIT_EXTERN(int) git_filter_list_stream_file( * @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 + * @return 0 or an error code. */ GIT_EXTERN(int) git_filter_list_stream_blob( git_filter_list *filters, @@ -263,9 +277,7 @@ GIT_EXTERN(int) git_filter_list_stream_blob( */ GIT_EXTERN(void) git_filter_list_free(git_filter_list *filters); - -GIT_END_DECL - /** @} */ +GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/global.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/global.h index 2a87e10..f15eb2d 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/global.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/global.h @@ -9,6 +9,12 @@ #include "common.h" +/** + * @file git2/global.h + * @brief libgit2 library initializer and shutdown functionality + * @ingroup Git + * @{ + */ GIT_BEGIN_DECL /** @@ -32,7 +38,7 @@ GIT_EXTERN(int) git_libgit2_init(void); * 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. */ @@ -40,5 +46,6 @@ GIT_EXTERN(int) git_libgit2_shutdown(void); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/graph.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/graph.h index 712ae47..1792020 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/graph.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/graph.h @@ -13,7 +13,7 @@ /** * @file git2/graph.h - * @brief Git graph traversal routines + * @brief Graph traversal routines * @defgroup git_revwalk Git graph traversal routines * @ingroup Git * @{ @@ -33,6 +33,7 @@ GIT_BEGIN_DECL * @param repo the repository where the commits exist * @param local the commit for local * @param upstream the commit for upstream + * @return 0 or an error code. */ GIT_EXTERN(int) git_graph_ahead_behind(size_t *ahead, size_t *behind, git_repository *repo, const git_oid *local, const git_oid *upstream); @@ -60,8 +61,8 @@ GIT_EXTERN(int) git_graph_descendant_of( * * @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 + * @param length the number of commits in the provided `descendant_array` * @return 1 if the given commit is an ancestor of any of the given potential * descendants, 0 if not, error code otherwise. */ @@ -73,4 +74,5 @@ GIT_EXTERN(int) git_graph_reachable_from_any( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/ignore.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/ignore.h index f5143f3..730f221 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/ignore.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/ignore.h @@ -10,6 +10,15 @@ #include "common.h" #include "types.h" +/** + * @file git2/ignore.h + * @brief Ignore particular untracked files + * @ingroup Git + * @{ + * + * When examining the repository status, git can optionally ignore + * specified untracked files. + */ GIT_BEGIN_DECL /** @@ -29,7 +38,7 @@ GIT_BEGIN_DECL * 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. + * @param rules Text of rules, the contents to add on 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 @@ -73,6 +82,7 @@ GIT_EXTERN(int) git_ignore_path_is_ignored( git_repository *repo, const char *path); +/** @} */ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/index.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/index.h index 532a520..0adff1a 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/index.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/index.h @@ -15,9 +15,14 @@ /** * @file git2/index.h - * @brief Git index parsing and manipulation routines + * @brief Index (aka "cache" aka "staging area") * @defgroup git_index Git index parsing and manipulation routines * @ingroup Git + * + * The index (or "cache", or "staging area") is the contents of the + * next commit. In addition, the index stores other data, such as + * conflicts that occurred during the last merge operation, and + * the "treecache" to speed up various on-disk operations. * @{ */ GIT_BEGIN_DECL @@ -77,8 +82,11 @@ typedef struct git_index_entry { * data in the `flags`. */ +/** Mask for name length */ #define GIT_INDEX_ENTRY_NAMEMASK (0x0fff) +/** Mask for index entry stage */ #define GIT_INDEX_ENTRY_STAGEMASK (0x3000) +/** Shift bits for index entry */ #define GIT_INDEX_ENTRY_STAGESHIFT 12 /** @@ -86,12 +94,20 @@ typedef struct git_index_entry { */ typedef enum { GIT_INDEX_ENTRY_EXTENDED = (0x4000), - GIT_INDEX_ENTRY_VALID = (0x8000), + GIT_INDEX_ENTRY_VALID = (0x8000) } git_index_entry_flag_t; +/** + * Macro to get the stage value (0 for the "main index", or a conflict + * value) from an index entry. + */ #define GIT_INDEX_ENTRY_STAGE(E) \ (((E)->flags & GIT_INDEX_ENTRY_STAGEMASK) >> GIT_INDEX_ENTRY_STAGESHIFT) +/** + * Macro to set the stage value (0 for the "main index", or a conflict + * value) for an index entry. + */ #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) @@ -119,7 +135,7 @@ typedef enum { 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_UPTODATE = (1 << 2) } git_index_entry_extended_flag_t; /** Capabilities of system that affect index actions. */ @@ -127,11 +143,18 @@ 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_FROM_OWNER = -1 } git_index_capability_t; -/** Callback for APIs that add/remove/update files matching pathspec */ +/** + * Callback for APIs that add/remove/update files matching pathspec + * + * @param path the path + * @param matched_pathspec the given pathspec + * @param payload the user-specified payload + * @return 0 to continue with the index operation, positive number to skip this file for the index operation, negative number on failure + */ typedef int GIT_CALLBACK(git_index_matched_path_cb)( const char *path, const char *matched_pathspec, void *payload); @@ -140,7 +163,7 @@ 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_CHECK_PATHSPEC = (1u << 2) } git_index_add_option_t; /** Git index stage states */ @@ -163,9 +186,77 @@ typedef enum { GIT_INDEX_STAGE_OURS = 2, /** The "theirs" side of a conflict. */ - GIT_INDEX_STAGE_THEIRS = 3, + GIT_INDEX_STAGE_THEIRS = 3 } git_index_stage_t; +#ifdef GIT_EXPERIMENTAL_SHA256 + +/** + * The options for opening or creating an index. + * + * Initialize with `GIT_INDEX_OPTIONS_INIT`. Alternatively, you can + * use `git_index_options_init`. + * + * @options[version] GIT_INDEX_OPTIONS_VERSION + * @options[init_macro] GIT_INDEX_OPTIONS_INIT + * @options[init_function] git_index_options_init + */ +typedef struct git_index_options { + unsigned int version; /**< The version */ + + /** + * The object ID type for the object IDs that exist in the index. + * + * If this is not specified, this defaults to `GIT_OID_SHA1`. + */ + git_oid_t oid_type; +} git_index_options; + +/** Current version for the `git_index_options` structure */ +#define GIT_INDEX_OPTIONS_VERSION 1 + +/** Static constructor for `git_index_options` */ +#define GIT_INDEX_OPTIONS_INIT { GIT_INDEX_OPTIONS_VERSION } + +/** + * Initialize git_index_options structure + * + * Initializes a `git_index_options` with default values. Equivalent to creating + * an instance with GIT_INDEX_OPTIONS_INIT. + * + * @param opts The `git_index_options` struct to initialize. + * @param version The struct version; pass `GIT_INDEX_OPTIONS_VERSION`. + * @return Zero on success; -1 on failure. + */ +GIT_EXTERN(int) git_index_options_init( + git_index_options *opts, + unsigned int version); + +/** + * Creates a new bare Git index object, without a repository to back + * it. This index object is capable of storing SHA256 objects. + * + * @param index_out the pointer for the new index + * @param index_path the path to the index file in disk + * @param opts the options for opening the index, or NULL + * @return 0 or an error code + */ +GIT_EXTERN(int) git_index_open( + git_index **index_out, + const char *index_path, + const git_index_options *opts); + +/** + * Create an in-memory index object. + * + * @param index_out the pointer for the new index + * @param opts the options for opening the index, or NULL + * @return 0 or an error code + */ +GIT_EXTERN(int) git_index_new(git_index **index_out, const git_index_options *opts); + +#else + /** * Create a new bare Git index object as a memory representation * of the Git index file in 'index_path', without a repository @@ -180,11 +271,11 @@ typedef enum { * * The index must be freed once it's no longer in use. * - * @param out the pointer for the new index + * @param index_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); +GIT_EXTERN(int) git_index_open(git_index **index_out, const char *index_path); /** * Create an in-memory index object. @@ -194,10 +285,12 @@ GIT_EXTERN(int) git_index_open(git_index **out, const char *index_path); * * The index must be freed once it's no longer in use. * - * @param out the pointer for the new index + * @param index_out the pointer for the new index * @return 0 or an error code */ -GIT_EXTERN(int) git_index_new(git_index **out); +GIT_EXTERN(int) git_index_new(git_index **index_out); + +#endif /** * Free an existing index object. @@ -296,6 +389,7 @@ GIT_EXTERN(int) git_index_write(git_index *index); */ GIT_EXTERN(const char *) git_index_path(const git_index *index); +#ifndef GIT_DEPRECATE_HARD /** * Get the checksum of the index * @@ -303,10 +397,12 @@ GIT_EXTERN(const char *) git_index_path(const git_index *index); * last 20 bytes which are the checksum itself). In cases where the * index does not exist on-disk, it will be zeroed out. * + * @deprecated this function is deprecated with no replacement * @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); +#endif /** * Read a tree into the index file with stats @@ -491,6 +587,7 @@ GIT_EXTERN(int) git_index_entry_is_conflict(const git_index_entry *entry); * * @param iterator_out The newly created iterator * @param index The index to iterate + * @return 0 or an error code. */ GIT_EXTERN(int) git_index_iterator_new( git_index_iterator **iterator_out, @@ -787,6 +884,7 @@ GIT_EXTERN(int) git_index_conflict_cleanup(git_index *index); /** * Determine if the index contains entries representing file conflicts. * + * @param index An existing index object. * @return 1 if at least one conflict is found, 0 otherwise. */ GIT_EXTERN(int) git_index_has_conflicts(const git_index *index); @@ -811,6 +909,7 @@ GIT_EXTERN(int) git_index_conflict_iterator_new( * @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 + * @param iterator The conflict iterator. * @return 0 (no error), GIT_ITEROVER (iteration is done) or an error code * (negative value) */ @@ -830,4 +929,5 @@ GIT_EXTERN(void) git_index_conflict_iterator_free( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/indexer.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/indexer.h index a434d24..9aaedc3 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/indexer.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/indexer.h @@ -4,13 +4,23 @@ * 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__ +#ifndef INCLUDE_git_indexer_h__ +#define INCLUDE_git_indexer_h__ #include "common.h" #include "types.h" #include "oid.h" +/** + * @file git2/indexer.h + * @brief Packfile indexing + * @ingroup Git + * @{ + * + * Indexing is the operation of taking a packfile - which is simply a + * collection of unordered commits - and producing an "index" so that + * one can lookup a commit in the packfile by object ID. + */ GIT_BEGIN_DECL /** A git indexer object */ @@ -53,6 +63,7 @@ typedef struct git_indexer_progress { * * @param stats Structure containing information about the state of the transfer * @param payload Payload provided by caller + * @return 0 on success or an error code */ typedef int GIT_CALLBACK(git_indexer_progress_cb)(const git_indexer_progress *stats, void *payload); @@ -62,6 +73,22 @@ typedef int GIT_CALLBACK(git_indexer_progress_cb)(const git_indexer_progress *st typedef struct git_indexer_options { unsigned int version; +#ifdef GIT_EXPERIMENTAL_SHA256 + /** permissions to use creating packfile or 0 for defaults */ + unsigned int mode; + + /** the type of object ids in the packfile or 0 for SHA1 */ + git_oid_t oid_type; + + /** + * object database from which to read base objects when + * fixing thin packs. This can be NULL if there are no thin + * packs; if a thin pack is encountered, an error will be + * returned if there are bases missing. + */ + git_odb *odb; +#endif + /** progress_cb function to call with progress information */ git_indexer_progress_cb progress_cb; @@ -72,7 +99,10 @@ typedef struct git_indexer_options { unsigned char verify; } git_indexer_options; +/** Current version for the `git_indexer_options` structure */ #define GIT_INDEXER_OPTIONS_VERSION 1 + +/** Static constructor for `git_indexer_options` */ #define GIT_INDEXER_OPTIONS_INIT { GIT_INDEXER_OPTIONS_VERSION } /** @@ -87,6 +117,20 @@ GIT_EXTERN(int) git_indexer_options_init( git_indexer_options *opts, unsigned int version); +#ifdef GIT_EXPERIMENTAL_SHA256 +/** + * 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 opts the options to create the indexer with + * @return 0 or an error code. + */ +GIT_EXTERN(int) git_indexer_new( + git_indexer **out, + const char *path, + git_indexer_options *opts); +#else /** * Create a new indexer instance * @@ -98,6 +142,7 @@ GIT_EXTERN(int) git_indexer_options_init( * will be returned if there are bases missing) * @param opts Optional structure containing additional options. See * `git_indexer_options` above. + * @return 0 or an error code. */ GIT_EXTERN(int) git_indexer_new( git_indexer **out, @@ -105,6 +150,7 @@ GIT_EXTERN(int) git_indexer_new( unsigned int mode, git_odb *odb, git_indexer_options *opts); +#endif /** * Add data to the indexer @@ -113,6 +159,7 @@ GIT_EXTERN(int) git_indexer_new( * @param data the data to add * @param size the size of the data in bytes * @param stats stat storage + * @return 0 or an error code. */ GIT_EXTERN(int) git_indexer_append(git_indexer *idx, const void *data, size_t size, git_indexer_progress *stats); @@ -122,18 +169,35 @@ GIT_EXTERN(int) git_indexer_append(git_indexer *idx, const void *data, size_t si * Resolve any pending deltas and write out the index file * * @param idx the indexer + * @param stats Stat storage. + * @return 0 or an error code. */ GIT_EXTERN(int) git_indexer_commit(git_indexer *idx, git_indexer_progress *stats); +#ifndef GIT_DEPRECATE_HARD /** * 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. * + * @deprecated use git_indexer_name * @param idx the indexer instance + * @return the packfile's hash */ GIT_EXTERN(const git_oid *) git_indexer_hash(const git_indexer *idx); +#endif + +/** + * Get the unique name for the resulting packfile. + * + * The packfile's name is derived from the packfile's content. + * This is only correct after the index has been finalized. + * + * @param idx the indexer instance + * @return a NUL terminated string for the packfile name + */ +GIT_EXTERN(const char *) git_indexer_name(const git_indexer *idx); /** * Free the indexer and its resources @@ -142,6 +206,7 @@ GIT_EXTERN(const git_oid *) git_indexer_hash(const git_indexer *idx); */ GIT_EXTERN(void) git_indexer_free(git_indexer *idx); +/** @} */ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/mailmap.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/mailmap.h index 7c3f60f..fd6ae71 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/mailmap.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/mailmap.h @@ -13,10 +13,15 @@ /** * @file git2/mailmap.h - * @brief Mailmap parsing routines + * @brief Mailmaps provide alternate email addresses for users * @defgroup git_mailmap Git mailmap routines * @ingroup Git * @{ + * + * A mailmap can be used to specify alternate email addresses for + * repository committers or authors. This allows systems to map + * commits made using different email addresses to the same logical + * person. */ GIT_BEGIN_DECL @@ -112,4 +117,5 @@ GIT_EXTERN(int) git_mailmap_resolve_signature( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/merge.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/merge.h index fc27c9d..be3b065 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/merge.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/merge.h @@ -17,9 +17,12 @@ /** * @file git2/merge.h - * @brief Git merge routines + * @brief Merge re-joins diverging branches of history * @defgroup git_merge Git merge routines * @ingroup Git + * + * Merge will take two commits and attempt to produce a commit that + * includes the changes that were made in both branches. * @{ */ GIT_BEGIN_DECL @@ -45,7 +48,10 @@ typedef struct { unsigned int mode; } git_merge_file_input; +/** Current version for the `git_merge_file_input_options` structure */ #define GIT_MERGE_FILE_INPUT_VERSION 1 + +/** Static constructor for `git_merge_file_input_options` */ #define GIT_MERGE_FILE_INPUT_INIT {GIT_MERGE_FILE_INPUT_VERSION} /** @@ -92,6 +98,14 @@ typedef enum { * merge base to `git-merge-resolve`. */ GIT_MERGE_NO_RECURSIVE = (1 << 3), + + /** + * Treat this merge as if it is to produce the virtual base + * of a recursive merge. This will ensure that there are + * no conflicts, any conflicting regions will keep conflict + * markers in the merge result. + */ + GIT_MERGE_VIRTUAL_BASE = (1 << 4) } git_merge_flag_t; /** @@ -127,7 +141,7 @@ typedef enum { * 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_UNION = 3 } git_merge_file_favor_t; /** @@ -160,8 +174,19 @@ typedef enum { /** Take extra time to find minimal diff */ GIT_MERGE_FILE_DIFF_MINIMAL = (1 << 7), + + /** Create zdiff3 ("zealous diff3")-style files */ + GIT_MERGE_FILE_STYLE_ZDIFF3 = (1 << 8), + + /** + * Do not produce file conflicts when common regions have + * changed; keep the conflict markers in the file and accept + * that as the merge result. + */ + GIT_MERGE_FILE_ACCEPT_CONFLICTS = (1 << 9) } git_merge_file_flag_t; +/** Default size for conflict markers */ #define GIT_MERGE_CONFLICT_MARKER_SIZE 7 /** @@ -199,7 +224,10 @@ typedef struct { unsigned short marker_size; } git_merge_file_options; +/** Current version for the `git_merge_file_options` structure */ #define GIT_MERGE_FILE_OPTIONS_VERSION 1 + +/** Static constructor for `git_merge_file_options` */ #define GIT_MERGE_FILE_OPTIONS_INIT {GIT_MERGE_FILE_OPTIONS_VERSION} /** @@ -294,7 +322,10 @@ typedef struct { uint32_t file_flags; } git_merge_options; +/** Current version for the `git_merge_options` structure */ #define GIT_MERGE_OPTIONS_VERSION 1 + +/** Static constructor for `git_merge_options` */ #define GIT_MERGE_OPTIONS_INIT { \ GIT_MERGE_OPTIONS_VERSION, GIT_MERGE_FIND_RENAMES } @@ -341,7 +372,7 @@ typedef enum { * 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_UNBORN = (1 << 3) } git_merge_analysis_t; /** @@ -364,7 +395,7 @@ typedef enum { * 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_FASTFORWARD_ONLY = (1 << 1) } git_merge_preference_t; /** @@ -372,6 +403,7 @@ typedef enum { * merging them into the HEAD of the repository. * * @param analysis_out analysis enumeration that the result is written into + * @param preference_out One of the `git_merge_preference_t` flag. * @param repo the repository to merge * @param their_heads the heads to merge into * @param their_heads_len the number of heads to merge @@ -389,6 +421,7 @@ GIT_EXTERN(int) git_merge_analysis( * merging them into a reference. * * @param analysis_out analysis enumeration that the result is written into + * @param preference_out One of the `git_merge_preference_t` flag. * @param repo the repository to merge * @param our_ref the reference to perform the analysis from * @param their_heads the heads to merge into @@ -451,6 +484,37 @@ GIT_EXTERN(int) git_merge_base_many( /** * Find all merge bases given a list of commits * + * This behaves similar to [`git merge-base`](https://git-scm.com/docs/git-merge-base#_discussion). + * + * Given three commits `a`, `b`, and `c`, `merge_base_many` + * will compute a hypothetical commit `m`, which is a merge between `b` + * and `c`. + + * For example, with the following topology: + * ```text + * o---o---o---o---C + * / + * / o---o---o---B + * / / + * ---2---1---o---o---o---A + * ``` + * + * the result of `merge_base_many` given `a`, `b`, and `c` is 1. This is + * because the equivalent topology with the imaginary merge commit `m` + * between `b` and `c` is: + * ```text + * o---o---o---o---o + * / \ + * / o---o---o---o---M + * / / + * ---2---1---o---o---o---A + * ``` + * + * and the result of `merge_base_many` given `a` and `m` is 1. + * + * If you're looking to recieve the common ancestor between all the + * given commits, use `merge_base_octopus`. + * * @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` @@ -583,7 +647,7 @@ GIT_EXTERN(int) git_merge_commits( * 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), + * state. Once the commit is done (or if the user wishes to abort), * you should clear this state by calling * `git_repository_state_cleanup()`. * @@ -603,4 +667,5 @@ GIT_EXTERN(int) git_merge( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/message.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/message.h index 42ca3e5..874d027 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/message.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/message.h @@ -12,7 +12,7 @@ /** * @file git2/message.h - * @brief Git message management routines + * @brief Commit messages * @ingroup Git * @{ */ @@ -75,10 +75,12 @@ GIT_EXTERN(int) git_message_trailers(git_message_trailer_array *arr, const char /** * Clean's up any allocated memory in the git_message_trailer_array filled by * a call to git_message_trailers. + * + * @param arr The trailer to free. */ GIT_EXTERN(void) git_message_trailer_array_free(git_message_trailer_array *arr); /** @} */ GIT_END_DECL -#endif /* INCLUDE_git_message_h__ */ +#endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/net.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/net.h index 8103eaf..93bdac4 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/net.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/net.h @@ -13,12 +13,13 @@ /** * @file git2/net.h - * @brief Git networking declarations + * @brief Low-level networking functionality * @ingroup Git * @{ */ GIT_BEGIN_DECL +/** Default git protocol port number */ #define GIT_DEFAULT_PORT "9418" /** @@ -51,4 +52,5 @@ struct git_remote_head { /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/notes.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/notes.h index c135881..3784d5f 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/notes.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/notes.h @@ -11,7 +11,7 @@ /** * @file git2/notes.h - * @brief Git notes management routines + * @brief Notes are metadata attached to an object * @defgroup git_note Git notes management routines * @ingroup Git * @{ @@ -21,13 +21,15 @@ 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` + * @param blob_id object id of the blob containing the message + * @param annotated_object_id the id of the object being annotated + * @param payload user-specified data to the foreach function + * @return 0 on success, or a negative number on failure */ typedef int GIT_CALLBACK(git_note_foreach_cb)( - const git_oid *blob_id, const git_oid *annotated_object_id, void *payload); + const git_oid *blob_id, + const git_oid *annotated_object_id, + void *payload); /** * note iterator @@ -303,4 +305,5 @@ GIT_EXTERN(int) git_note_foreach( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/object.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/object.h index 984dbb7..8a50239 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/object.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/object.h @@ -14,13 +14,14 @@ /** * @file git2/object.h - * @brief Git revision object management routines + * @brief Objects are blobs (files), trees (directories), commits, and annotated tags * @defgroup git_object Git revision object management routines * @ingroup Git * @{ */ GIT_BEGIN_DECL +/** Maximum size of a git object */ #define GIT_OBJECT_SIZE_MAX UINT64_MAX /** @@ -53,18 +54,18 @@ GIT_EXTERN(int) git_object_lookup( * * 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. + * (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 + * 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 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 @@ -221,9 +222,58 @@ GIT_EXTERN(int) git_object_peel( * * @param dest Pointer to store the copy of the object * @param source Original object to copy + * @return 0 or an error code */ GIT_EXTERN(int) git_object_dup(git_object **dest, git_object *source); +#ifdef GIT_EXPERIMENTAL_SHA256 +/** + * Analyzes a buffer of raw object content and determines its validity. + * Tree, commit, and tag objects will be parsed and ensured that they + * are valid, parseable content. (Blobs are always valid by definition.) + * An error message will be set with an informative message if the object + * is not valid. + * + * @warning This function is experimental and its signature may change in + * the future. + * + * @param valid Output pointer to set with validity of the object content + * @param buf The contents to validate + * @param len The length of the buffer + * @param object_type The type of the object in the buffer + * @param oid_type The object ID type for the OIDs in the given buffer + * @return 0 on success or an error code + */ +GIT_EXTERN(int) git_object_rawcontent_is_valid( + int *valid, + const char *buf, + size_t len, + git_object_t object_type, + git_oid_t oid_type); +#else +/** + * Analyzes a buffer of raw object content and determines its validity. + * Tree, commit, and tag objects will be parsed and ensured that they + * are valid, parseable content. (Blobs are always valid by definition.) + * An error message will be set with an informative message if the object + * is not valid. + * + * @warning This function is experimental and its signature may change in + * the future. + * + * @param[out] valid Output pointer to set with validity of the object content + * @param buf The contents to validate + * @param len The length of the buffer + * @param object_type The type of the object in the buffer + * @return 0 on success or an error code + */ +GIT_EXTERN(int) git_object_rawcontent_is_valid( + int *valid, + const char *buf, + size_t len, + git_object_t object_type); +#endif + /** @} */ GIT_END_DECL diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/odb.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/odb.h index dd48455..e809c36 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/odb.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/odb.h @@ -15,29 +15,91 @@ /** * @file git2/odb.h - * @brief Git object database routines + * @brief An object database manages the storage of git objects * @defgroup git_odb Git object database routines * @ingroup Git * @{ */ GIT_BEGIN_DECL +/** Flags controlling the behavior of ODB lookup operations */ +typedef enum { + /** + * Don't call `git_odb_refresh` if the lookup fails. Useful when doing + * a batch of lookup operations for objects that may legitimately not + * exist. When using this flag, you may wish to manually call + * `git_odb_refresh` before processing a batch of objects. + */ + GIT_ODB_LOOKUP_NO_REFRESH = (1 << 0) +} git_odb_lookup_flags_t; + /** * Function type for callbacks from git_odb_foreach. + * + * @param id an id of an object in the object database + * @param payload the payload from the initial call to git_odb_foreach + * @return 0 on success, or an error code */ typedef int GIT_CALLBACK(git_odb_foreach_cb)(const git_oid *id, void *payload); +/** Options for configuring a loose object backend. */ +typedef struct { + unsigned int version; /**< version for the struct */ + + /** + * Type of object IDs to use for this object database, or + * 0 for default (currently SHA1). + */ + git_oid_t oid_type; +} git_odb_options; + +/** The current version of the diff options structure */ +#define GIT_ODB_OPTIONS_VERSION 1 + +/** + * Stack initializer for odb options. Alternatively use + * `git_odb_options_init` programmatic initialization. + */ +#define GIT_ODB_OPTIONS_INIT { GIT_ODB_OPTIONS_VERSION } + +#ifdef GIT_EXPERIMENTAL_SHA256 + +/** + * Create a new object database with no backends. + * + * @param[out] odb location to store the database pointer, if opened. + * @param opts the options for this object database or NULL for defaults + * @return 0 or an error code + */ +GIT_EXTERN(int) git_odb_new(git_odb **odb, const git_odb_options *opts); + +/** + * Create a new object database and automatically add loose and packed + * backends. + * + * @param[out] odb_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. + * @param opts the options for this object database or NULL for defaults + * @return 0 or an error code + */ +GIT_EXTERN(int) git_odb_open( + git_odb **odb_out, + const char *objects_dir, + const git_odb_options *opts); + +#else + /** * 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. + * @param[out] odb location to store the database pointer, if opened. * @return 0 or an error code */ -GIT_EXTERN(int) git_odb_new(git_odb **out); +GIT_EXTERN(int) git_odb_new(git_odb **odb); /** * Create a new object database and automatically add @@ -50,12 +112,13 @@ GIT_EXTERN(int) git_odb_new(git_odb **out); * 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. + * @param[out] odb_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); +GIT_EXTERN(int) git_odb_open(git_odb **odb_out, const char *objects_dir); +#endif /** * Add an on-disk alternate to an existing Object DB. @@ -91,13 +154,13 @@ GIT_EXTERN(void) git_odb_free(git_odb *db); * 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[out] obj 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); +GIT_EXTERN(int) git_odb_read(git_odb_object **obj, git_odb *db, const git_oid *id); /** * Read an object from the database, given a prefix @@ -106,7 +169,7 @@ GIT_EXTERN(int) git_odb_read(git_odb_object **out, git_odb *db, const git_oid *i * 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 + * The remaining (GIT_OID_SHA1_HEXSIZE-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 @@ -117,7 +180,7 @@ GIT_EXTERN(int) git_odb_read(git_odb_object **out, git_odb *db, const git_oid *i * 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[out] obj 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 @@ -125,7 +188,7 @@ GIT_EXTERN(int) git_odb_read(git_odb_object **out, git_odb *db, const git_oid *i * 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); +GIT_EXTERN(int) git_odb_read_prefix(git_odb_object **obj, git_odb *db, const git_oid *short_id, size_t len); /** * Read the header of an object from the database, without @@ -137,8 +200,8 @@ GIT_EXTERN(int) git_odb_read_prefix(git_odb_object **out, git_odb *db, const git * 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[out] len_out pointer where to store the length + * @param[out] 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 @@ -155,6 +218,17 @@ GIT_EXTERN(int) git_odb_read_header(size_t *len_out, git_object_t *type_out, git */ GIT_EXTERN(int) git_odb_exists(git_odb *db, const git_oid *id); +/** + * Determine if the given object can be found in the object database, with + * extended options. + * + * @param db database to be searched for the given object. + * @param id the object to search for. + * @param flags flags affecting the lookup (see `git_odb_lookup_flags_t`) + * @return 1 if the object was found, 0 otherwise + */ +GIT_EXTERN(int) git_odb_exists_ext(git_odb *db, const git_oid *id, unsigned int flags); + /** * Determine if an object can be found in the object database by an * abbreviated object ID. @@ -192,12 +266,13 @@ typedef struct 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. + * 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_SHA1_HEXSIZE`) 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 @@ -231,7 +306,7 @@ GIT_EXTERN(int) git_odb_expand_ids( * @param db database to refresh * @return 0 on success, error code otherwise */ -GIT_EXTERN(int) git_odb_refresh(struct git_odb *db); +GIT_EXTERN(int) git_odb_refresh(git_odb *db); /** * List all objects available in the database @@ -246,7 +321,10 @@ GIT_EXTERN(int) git_odb_refresh(struct git_odb *db); * @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); +GIT_EXTERN(int) git_odb_foreach( + git_odb *db, + git_odb_foreach_cb cb, + void *payload); /** * Write an object directly into the ODB @@ -261,7 +339,7 @@ GIT_EXTERN(int) git_odb_foreach(git_odb *db, git_odb_foreach_cb cb, void *payloa * * @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 data @type `const unsigned char *` 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 @@ -323,6 +401,11 @@ GIT_EXTERN(int) git_odb_stream_finalize_write(git_oid *out, git_odb_stream *stre * Read from an odb stream * * Most backends don't implement streaming reads + * + * @param stream the stream + * @param buffer a user-allocated buffer to store the data in. + * @param len the buffer's length + * @return the number of bytes read if succeeded, error code otherwise */ GIT_EXTERN(int) git_odb_stream_read(git_odb_stream *stream, char *buffer, size_t len); @@ -383,6 +466,7 @@ GIT_EXTERN(int) git_odb_open_rstream( * 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 + * @return 0 or an error code. */ GIT_EXTERN(int) git_odb_write_pack( git_odb_writepack **out, @@ -400,23 +484,59 @@ GIT_EXTERN(int) git_odb_write_pack( * exist). * * @param db object database where the `multi-pack-index` file will be written. + * @return 0 or an error code. */ GIT_EXTERN(int) git_odb_write_multi_pack_index( git_odb *db); +#ifdef GIT_EXPERIMENTAL_SHA256 + /** - * Determine the object-ID (sha1 hash) of a data buffer + * Generate the object ID (in SHA1 or SHA256 format) for a given 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] oid the resulting object ID. + * @param data data to hash + * @param len size of the data + * @param object_type of the data to hash + * @param oid_type the oid type to hash to + * @return 0 or an error code + */ +GIT_EXTERN(int) git_odb_hash( + git_oid *oid, + const void *data, + size_t len, + git_object_t object_type, + git_oid_t oid_type); + +/** + * Determine the object ID of a file on disk. + * + * @param[out] oid oid structure the result is written into. + * @param path file to read and determine object id for + * @param object_type of the data to hash + * @param oid_type the oid type to hash to + * @return 0 or an error code + */ +GIT_EXTERN(int) git_odb_hashfile( + git_oid *oid, + const char *path, + git_object_t object_type, + git_oid_t oid_type); +#else + +/** + * Determine the object-ID (sha1 or sha256 hash) of a data buffer + * + * The resulting 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[out] oid the resulting object-ID. * @param data data to hash * @param len size of the data - * @param type of the data to hash + * @param object_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); +GIT_EXTERN(int) git_odb_hash(git_oid *oid, const void *data, size_t len, git_object_t object_type); /** * Read a file from disk and fill a git_oid with the object id @@ -426,12 +546,14 @@ GIT_EXTERN(int) git_odb_hash(git_oid *out, const void *data, size_t len, git_obj * 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[out] oid 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 + * @param object_type of the data to hash * @return 0 or an error code */ -GIT_EXTERN(int) git_odb_hashfile(git_oid *out, const char *path, git_object_t type); +GIT_EXTERN(int) git_odb_hashfile(git_oid *oid, const char *path, git_object_t object_type); + +#endif /** * Create a copy of an odb_object @@ -476,7 +598,7 @@ GIT_EXTERN(const git_oid *) git_odb_object_id(git_odb_object *object); * This pointer is owned by the object and shall not be free'd. * * @param object the object - * @return a pointer to the data + * @return @type `const unsigned char *` a pointer to the data */ GIT_EXTERN(const void *) git_odb_object_data(git_odb_object *object); @@ -556,7 +678,7 @@ GIT_EXTERN(int) git_odb_get_backend(git_odb_backend **out, git_odb *odb, size_t /** * Set the git commit-graph for the ODB. * - * After a successfull call, the ownership of the cgraph parameter will be + * After a successful 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 @@ -570,4 +692,5 @@ GIT_EXTERN(int) git_odb_set_commit_graph(git_odb *odb, git_commit_graph *cgraph) /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/odb_backend.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/odb_backend.h index c593bac..88ca29f 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/odb_backend.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/odb_backend.h @@ -13,46 +13,135 @@ /** * @file git2/backend.h - * @brief Git custom backend functions + * @brief Object database backends manage the storage of git objects * @defgroup git_odb Git object database routines * @ingroup Git * @{ */ GIT_BEGIN_DECL +/** Options for configuring a packfile object backend. */ +typedef struct { + unsigned int version; /**< version for the struct */ + + /** + * Type of object IDs to use for this object database, or + * 0 for default (currently SHA1). + */ + git_oid_t oid_type; +} git_odb_backend_pack_options; + +/** The current version of the diff options structure */ +#define GIT_ODB_BACKEND_PACK_OPTIONS_VERSION 1 + +/** + * Stack initializer for odb pack backend options. Alternatively use + * `git_odb_backend_pack_options_init` programmatic initialization. + */ +#define GIT_ODB_BACKEND_PACK_OPTIONS_INIT \ + { GIT_ODB_BACKEND_PACK_OPTIONS_VERSION } + +typedef enum { + GIT_ODB_BACKEND_LOOSE_FSYNC = (1 << 0) +} git_odb_backend_loose_flag_t; + +/** Options for configuring a loose object backend. */ +typedef struct { + unsigned int version; /**< version for the struct */ + + /** A combination of the `git_odb_backend_loose_flag_t` types. */ + uint32_t flags; + + /** + * zlib compression level to use (0-9), where 1 is the fastest + * at the expense of larger files, and 9 produces the best + * compression at the expense of speed. 0 indicates that no + * compression should be performed. -1 is the default (currently + * optimizing for speed). + */ + int compression_level; + + /** Permissions to use creating a directory or 0 for defaults */ + unsigned int dir_mode; + + /** Permissions to use creating a file or 0 for defaults */ + unsigned int file_mode; + + /** + * Type of object IDs to use for this object database, or + * 0 for default (currently SHA1). + */ + git_oid_t oid_type; +} git_odb_backend_loose_options; + +/** The current version of the diff options structure */ +#define GIT_ODB_BACKEND_LOOSE_OPTIONS_VERSION 1 + +/** + * Stack initializer for odb loose backend options. Alternatively use + * `git_odb_backend_loose_options_init` programmatic initialization. + */ +#define GIT_ODB_BACKEND_LOOSE_OPTIONS_INIT \ + { GIT_ODB_BACKEND_LOOSE_OPTIONS_VERSION, 0, -1 } + /* * Constructors for in-box ODB backends. */ +#ifdef GIT_EXPERIMENTAL_SHA256 + /** - * Create a backend for the packfiles. + * Create a backend for a directory containing packfiles. * - * @param out location to store the odb backend pointer + * @param[out] out location to store the odb backend pointer * @param objects_dir the Git repository's objects directory + * @param opts the options to use when creating the pack backend + * @return 0 or an error code + */ +GIT_EXTERN(int) git_odb_backend_pack( + git_odb_backend **out, + const char *objects_dir, + const git_odb_backend_pack_options *opts); + +/** + * Create a backend for a single packfile. * + * @param[out] out location to store the odb backend pointer + * @param index_file path to the packfile's .idx file + * @param opts the options to use when creating the pack backend * @return 0 or an error code */ -GIT_EXTERN(int) git_odb_backend_pack(git_odb_backend **out, const char *objects_dir); +GIT_EXTERN(int) git_odb_backend_one_pack( + git_odb_backend **out, + const char *index_file, + const git_odb_backend_pack_options *opts); /** * Create a backend for loose objects * - * @param out location to store the odb backend pointer + * @param[out] 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 + * @param opts options for the loose object backend or NULL * * @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); + git_odb_backend_loose_options *opts); + +#else + +/** + * Create a backend for a directory containing packfiles. + * + * @param[out] 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 out of a single packfile @@ -60,18 +149,40 @@ GIT_EXTERN(int) git_odb_backend_loose( * This can be useful for inspecting the contents of a single * packfile. * - * @param out location to store the odb backend pointer + * @param[out] 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); + +/** + * Create a backend for loose objects * + * @param[out] out location to store the odb backend pointer + * @param objects_dir the Git repository's objects directory + * @param compression_level zlib compression level (0-9), or -1 for the default + * @param do_fsync if non-zero, perform an fsync on write + * @param dir_mode permission to use when creating directories, or 0 for default + * @param file_mode permission to use when creating directories, or 0 for default * @return 0 or an error code */ -GIT_EXTERN(int) git_odb_backend_one_pack(git_odb_backend **out, const char *index_file); +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); + +#endif /** Streaming mode */ typedef enum { GIT_STREAM_RDONLY = (1 << 1), GIT_STREAM_WRONLY = (1 << 2), - GIT_STREAM_RW = (GIT_STREAM_RDONLY | GIT_STREAM_WRONLY), + GIT_STREAM_RW = (GIT_STREAM_RDONLY | GIT_STREAM_WRONLY) } git_odb_stream_t; /** @@ -87,6 +198,10 @@ struct git_odb_stream { unsigned int mode; void *hash_ctx; +#ifdef GIT_EXPERIMENTAL_SHA256 + git_oid_t oid_type; +#endif + git_object_size_t declared_size; git_object_size_t received_bytes; @@ -130,6 +245,7 @@ struct git_odb_writepack { void GIT_CALLBACK(free)(git_odb_writepack *writepack); }; +/** @} */ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/oid.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/oid.h index 549df4e..8539b4e 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/oid.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/oid.h @@ -8,22 +8,92 @@ #define INCLUDE_git_oid_h__ #include "common.h" -#include "types.h" +#include "experimental.h" /** * @file git2/oid.h - * @brief Git object id routines + * @brief Object IDs * @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 +/** The type of object id. */ +typedef enum { -/** Size (in bytes) of a hex formatted oid */ -#define GIT_OID_HEXSZ (GIT_OID_RAWSZ * 2) +#ifdef GIT_EXPERIMENTAL_SHA256 + GIT_OID_SHA1 = 1, /**< SHA1 */ + GIT_OID_SHA256 = 2 /**< SHA256 */ +#else + GIT_OID_SHA1 = 1 /**< SHA1 */ +#endif + +} git_oid_t; + +/* + * SHA1 is currently the only supported object ID type. + */ + +/** SHA1 is currently libgit2's default oid type. */ +#define GIT_OID_DEFAULT GIT_OID_SHA1 + +/** Size (in bytes) of a raw/binary sha1 oid */ +#define GIT_OID_SHA1_SIZE 20 +/** Size (in bytes) of a hex formatted sha1 oid */ +#define GIT_OID_SHA1_HEXSIZE (GIT_OID_SHA1_SIZE * 2) + +/** + * The binary representation of the null sha1 object ID. + */ +#ifndef GIT_EXPERIMENTAL_SHA256 +# define GIT_OID_SHA1_ZERO { { 0 } } +#else +# define GIT_OID_SHA1_ZERO { GIT_OID_SHA1, { 0 } } +#endif + +/** + * The string representation of the null sha1 object ID. + */ +#define GIT_OID_SHA1_HEXZERO "0000000000000000000000000000000000000000" + +/* + * Experimental SHA256 support is a breaking change to the API. + * This exists for application compatibility testing. + */ + +#ifdef GIT_EXPERIMENTAL_SHA256 + +/** Size (in bytes) of a raw/binary sha256 oid */ +# define GIT_OID_SHA256_SIZE 32 +/** Size (in bytes) of a hex formatted sha256 oid */ +# define GIT_OID_SHA256_HEXSIZE (GIT_OID_SHA256_SIZE * 2) + +/** + * The binary representation of the null sha256 object ID. + */ +# define GIT_OID_SHA256_ZERO { GIT_OID_SHA256, { 0 } } + +/** + * The string representation of the null sha256 object ID. + */ +# define GIT_OID_SHA256_HEXZERO "0000000000000000000000000000000000000000000000000000000000000000" + +#endif + +/** Maximum possible object ID size in raw format */ +#ifdef GIT_EXPERIMENTAL_SHA256 +# define GIT_OID_MAX_SIZE GIT_OID_SHA256_SIZE +#else +# define GIT_OID_MAX_SIZE GIT_OID_SHA1_SIZE +#endif + +/** Maximum possible object ID size in hex format */ +#ifdef GIT_EXPERIMENTAL_SHA256 +# define GIT_OID_MAX_HEXSIZE GIT_OID_SHA256_HEXSIZE +#else +# define GIT_OID_MAX_HEXSIZE GIT_OID_SHA1_HEXSIZE +#endif /** Minimum length (in number of hex characters, * i.e. packets of 4 bits) of an oid prefix */ @@ -31,23 +101,43 @@ GIT_BEGIN_DECL /** Unique identity of any object (commit, tree, blob, tag). */ typedef struct git_oid { + +#ifdef GIT_EXPERIMENTAL_SHA256 + /** type of object id */ + unsigned char type; +#endif + /** raw binary formatted id */ - unsigned char id[GIT_OID_RAWSZ]; + unsigned char id[GIT_OID_MAX_SIZE]; } git_oid; +#ifdef GIT_EXPERIMENTAL_SHA256 + +GIT_EXTERN(int) git_oid_fromstr(git_oid *out, const char *str, git_oid_t type); +GIT_EXTERN(int) git_oid_fromstrp(git_oid *out, const char *str, git_oid_t type); +GIT_EXTERN(int) git_oid_fromstrn(git_oid *out, const char *str, size_t length, git_oid_t type); +GIT_EXTERN(int) git_oid_fromraw(git_oid *out, const unsigned char *raw, git_oid_t type); + +#else + /** * Parse a hex formatted object id into a git_oid. * + * The appropriate number of bytes for the given object ID type will + * be read from the string - 40 bytes for SHA1, 64 bytes for SHA256. + * The given string need not be NUL terminated. + * * @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). + * needed for an oid encoded in hex (40 bytes for sha1, + * 256 bytes for sha256). * @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. + * Parse a hex formatted NUL-terminated string into a git_oid. * * @param out oid structure the result is written into. * @param str input hex string; must be null-terminated. @@ -77,14 +167,17 @@ GIT_EXTERN(int) git_oid_fromstrn(git_oid *out, const char *str, size_t length); */ GIT_EXTERN(int) git_oid_fromraw(git_oid *out, const unsigned char *raw); +#endif + /** * 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. + * needed for an oid encoded in hex (40 bytes for SHA1, + * 64 bytes for SHA256). 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 */ @@ -94,7 +187,7 @@ 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 + * If the number of bytes is > GIT_OID_SHA1_HEXSIZE, 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. @@ -110,9 +203,10 @@ GIT_EXTERN(int) git_oid_nfmt(char *out, size_t n, const git_oid *id); * * @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. + * needed for an oid encoded in hex (41 bytes for SHA1, + * 65 bytes for SHA256). 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 */ @@ -127,14 +221,16 @@ GIT_EXTERN(int) git_oid_pathfmt(char *out, const git_oid *id); * concurrent calls of the function. * * @param oid The oid structure to format - * @return the c-string + * @return the c-string or NULL on failure */ 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 + * If the buffer is smaller than the size of a hex-formatted oid string + * plus an additional byte (GIT_OID_SHA_HEXSIZE + 1 for SHA1 or + * GIT_OID_SHA256_HEXSIZE + 1 for SHA256), then the resulting * oid c-string will be truncated to n-1 characters (but will still be * NUL-byte terminated). * @@ -210,6 +306,7 @@ GIT_EXTERN(int) git_oid_strcmp(const git_oid *id, const char *str); /** * Check is an oid is all zeros. * + * @param id the object ID to check * @return 1 if all zeros, 0 otherwise. */ GIT_EXTERN(int) git_oid_is_zero(const git_oid *id); @@ -270,4 +367,5 @@ GIT_EXTERN(void) git_oid_shorten_free(git_oid_shorten *os); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/oidarray.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/oidarray.h index 94fc58d..e79a559 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/oidarray.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/oidarray.h @@ -10,6 +10,13 @@ #include "common.h" #include "oid.h" +/** + * @file git2/oidarray.h + * @brief An array of object IDs + * @defgroup git_oidarray Arrays of object IDs + * @ingroup Git + * @{ + */ GIT_BEGIN_DECL /** Array of object ids */ @@ -34,4 +41,3 @@ GIT_EXTERN(void) git_oidarray_dispose(git_oidarray *array); GIT_END_DECL #endif - diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/pack.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/pack.h index 3b9beb6..3837e04 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/pack.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/pack.h @@ -51,7 +51,7 @@ GIT_BEGIN_DECL */ typedef enum { GIT_PACKBUILDER_ADDING_OBJECTS = 0, - GIT_PACKBUILDER_DELTAFICATION = 1, + GIT_PACKBUILDER_DELTAFICATION = 1 } git_packbuilder_stage_t; /** @@ -148,6 +148,7 @@ GIT_EXTERN(int) git_packbuilder_insert_recur(git_packbuilder *pb, const git_oid * * @param buf Buffer where to write the packfile * @param pb The packbuilder + * @return 0 or an error code */ GIT_EXTERN(int) git_packbuilder_write_buf(git_buf *buf, git_packbuilder *pb); @@ -169,15 +170,30 @@ GIT_EXTERN(int) git_packbuilder_write( git_indexer_progress_cb progress_cb, void *progress_cb_payload); +#ifndef GIT_DEPRECATE_HARD /** -* 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 -*/ + * 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. + * + * @deprecated use git_packbuilder_name + * @param pb The packbuilder object + * @return 0 or an error code + */ GIT_EXTERN(const git_oid *) git_packbuilder_hash(git_packbuilder *pb); +#endif + +/** + * Get the unique name for the resulting packfile. + * + * The packfile's name is derived from the packfile's content. + * This is only correct after the packfile has been written. + * + * @param pb the packbuilder instance + * @return a NUL terminated string for the packfile name + */ +GIT_EXTERN(const char *) git_packbuilder_name(git_packbuilder *pb); /** * Callback used to iterate over packed objects @@ -217,7 +233,15 @@ GIT_EXTERN(size_t) git_packbuilder_object_count(git_packbuilder *pb); */ GIT_EXTERN(size_t) git_packbuilder_written(git_packbuilder *pb); -/** Packbuilder progress notification function */ +/** + * Packbuilder progress notification function. + * + * @param stage the stage of the packbuilder + * @param current the current object + * @param total the total number of objects + * @param payload the callback payload + * @return 0 on success or an error code + */ typedef int GIT_CALLBACK(git_packbuilder_progress)( int stage, uint32_t current, @@ -231,6 +255,9 @@ typedef int GIT_CALLBACK(git_packbuilder_progress)( * @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. + * When progress_cb returns an error, the pack building process will be + * aborted and the error will be returned from the invoked function. + * `pb` must then be freed. * @param progress_cb_payload Payload for progress callback. * @return 0 or an error code */ @@ -248,4 +275,5 @@ GIT_EXTERN(void) git_packbuilder_free(git_packbuilder *pb); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/patch.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/patch.h index fde9659..7824821 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/patch.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/patch.h @@ -14,7 +14,7 @@ /** * @file git2/patch.h - * @brief Patch handling routines. + * @brief Patches store the textual diffs in a delta * @ingroup Git * @{ */ @@ -139,17 +139,25 @@ GIT_EXTERN(int) git_patch_from_buffers( /** * Free a git_patch object. + * + * @param patch The patch to free. */ 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. + * + * @param patch The patch in which to get the delta. + * @return The delta associated with the patch. */ GIT_EXTERN(const git_diff_delta *) git_patch_get_delta(const git_patch *patch); /** * Get the number of hunks in a patch + * + * @param patch The patch in which to get the number of hunks. + * @return The number of hunks of the patch. */ GIT_EXTERN(size_t) git_patch_num_hunks(const git_patch *patch); @@ -275,8 +283,7 @@ GIT_EXTERN(int) git_patch_to_buf( git_buf *out, git_patch *patch); -GIT_END_DECL - /**@}*/ +GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/pathspec.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/pathspec.h index 3299657..6f6918c 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/pathspec.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/pathspec.h @@ -12,6 +12,13 @@ #include "strarray.h" #include "diff.h" +/** + * @file git2/pathspec.h + * @brief Specifiers for path matching + * @defgroup git_pathspec Specifiers for path matching + * @ingroup Git + * @{ + */ GIT_BEGIN_DECL /** @@ -69,7 +76,7 @@ typedef enum { * 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_FAILURES_ONLY = (1u << 5) } git_pathspec_flag_t; /** @@ -276,5 +283,7 @@ GIT_EXTERN(size_t) git_pathspec_match_list_failed_entrycount( 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/Clibgit2.xcframework/ios-arm64/Headers/git2/proxy.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/proxy.h index 653425d..195ab75 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/proxy.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/proxy.h @@ -12,6 +12,12 @@ #include "cert.h" #include "credential.h" +/** + * @file git2/proxy.h + * @brief TLS proxies + * @ingroup Git + * @{ + */ GIT_BEGIN_DECL /** @@ -32,7 +38,7 @@ typedef enum { /** * Connect via the URL given in the options */ - GIT_PROXY_SPECIFIED, + GIT_PROXY_SPECIFIED } git_proxy_t; /** @@ -78,7 +84,10 @@ typedef struct { void *payload; } git_proxy_options; +/** Current version for the `git_proxy_options` structure */ #define GIT_PROXY_OPTIONS_VERSION 1 + +/** Static constructor for `git_proxy_options` */ #define GIT_PROXY_OPTIONS_INIT {GIT_PROXY_OPTIONS_VERSION} /** @@ -93,6 +102,7 @@ typedef struct { */ GIT_EXTERN(int) git_proxy_options_init(git_proxy_options *opts, unsigned int version); +/** @} */ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/rebase.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/rebase.h index 11e452c..3fb3e57 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/rebase.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/rebase.h @@ -17,8 +17,8 @@ /** * @file git2/rebase.h - * @brief Git rebase routines - * @defgroup git_rebase Git merge routines + * @brief Rebase manipulates commits, placing them on a new parent + * @defgroup git_rebase Rebase manipulates commits, placing them on a new parent * @ingroup Git * @{ */ @@ -67,10 +67,9 @@ typedef struct { /** * 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_rebase_next` and `git_rebase_abort`. Note that during + * `abort`, these options will add an implied `GIT_CHECKOUT_FORCE` + * to match git semantics. */ git_checkout_options checkout_options; @@ -152,10 +151,13 @@ typedef enum { * No commit will be cherry-picked. The client should run the given * command and (if successful) continue. */ - GIT_REBASE_OPERATION_EXEC, + GIT_REBASE_OPERATION_EXEC } git_rebase_operation_t; +/** Current version for the `git_rebase_options` structure */ #define GIT_REBASE_OPTIONS_VERSION 1 + +/** Static constructor for `git_rebase_options` */ #define GIT_REBASE_OPTIONS_INIT \ { GIT_REBASE_OPTIONS_VERSION, 0, 0, NULL, GIT_MERGE_OPTIONS_INIT, \ GIT_CHECKOUT_OPTIONS_INIT, NULL, NULL } @@ -242,6 +244,7 @@ GIT_EXTERN(int) git_rebase_open( /** * Gets the original `HEAD` ref name for merge rebases. * + * @param rebase The in-progress rebase. * @return The original `HEAD` ref name */ GIT_EXTERN(const char *) git_rebase_orig_head_name(git_rebase *rebase); @@ -249,6 +252,7 @@ GIT_EXTERN(const char *) git_rebase_orig_head_name(git_rebase *rebase); /** * Gets the original `HEAD` id for merge rebases. * + * @param rebase The in-progress rebase. * @return The original `HEAD` id */ GIT_EXTERN(const git_oid *) git_rebase_orig_head_id(git_rebase *rebase); @@ -256,6 +260,7 @@ GIT_EXTERN(const git_oid *) git_rebase_orig_head_id(git_rebase *rebase); /** * Gets the `onto` ref name for merge rebases. * + * @param rebase The in-progress rebase. * @return The `onto` ref name */ GIT_EXTERN(const char *) git_rebase_onto_name(git_rebase *rebase); @@ -263,6 +268,7 @@ GIT_EXTERN(const char *) git_rebase_onto_name(git_rebase *rebase); /** * Gets the `onto` id for merge rebases. * + * @param rebase The in-progress rebase. * @return The `onto` id */ GIT_EXTERN(const git_oid *) git_rebase_onto_id(git_rebase *rebase); @@ -322,6 +328,10 @@ GIT_EXTERN(int) git_rebase_next( * This is only applicable for in-memory rebases; for rebases within * a working directory, the changes were applied to the repository's * index. + * + * @param index The result index of the last operation. + * @param rebase The in-progress rebase. + * @return 0 or an error code */ GIT_EXTERN(int) git_rebase_inmemory_index( git_index **index, @@ -388,4 +398,5 @@ GIT_EXTERN(void) git_rebase_free(git_rebase *rebase); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/refdb.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/refdb.h index a315876..536ef10 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/refdb.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/refdb.h @@ -14,8 +14,8 @@ /** * @file git2/refdb.h - * @brief Git custom refs backend functions - * @defgroup git_refdb Git custom refs backend API + * @brief A database for references (branches and tags) + * @defgroup git_refdb A database for references (branches and tags) * @ingroup Git * @{ */ @@ -52,6 +52,9 @@ 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. + * + * @param refdb The reference database to optimize. + * @return 0 or an error code. */ GIT_EXTERN(int) git_refdb_compress(git_refdb *refdb); diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/reflog.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/reflog.h index c949a28..a0956c6 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/reflog.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/reflog.h @@ -13,8 +13,8 @@ /** * @file git2/reflog.h - * @brief Git reflog management routines - * @defgroup git_reflog Git reflog management routines + * @brief Reference logs store how references change + * @defgroup git_reflog Reference logs store how references change * @ingroup Git * @{ */ @@ -31,7 +31,7 @@ GIT_BEGIN_DECL * git_reflog_free(). * * @param out pointer to reflog - * @param repo the repostiory + * @param repo the repository * @param name reference to look up * @return 0 or an error code */ @@ -167,4 +167,5 @@ GIT_EXTERN(void) git_reflog_free(git_reflog *reflog); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/refs.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/refs.h index 7ebb209..d820f2a 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/refs.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/refs.h @@ -14,8 +14,8 @@ /** * @file git2/refs.h - * @brief Git reference management routines - * @defgroup git_reference Git reference management routines + * @brief References point to a commit; generally these are branches and tags + * @defgroup git_reference References point to a commit; generally these are branches and tags * @ingroup Git * @{ */ @@ -29,7 +29,7 @@ GIT_BEGIN_DECL * 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[out] 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. @@ -57,7 +57,7 @@ GIT_EXTERN(int) git_reference_name_to_id( /** * Lookup a reference by DWIMing its short name * - * Apply the git precendence rules to the given shorthand to determine + * Apply the git precedence rules to the given shorthand to determine * which reference the user is referring to. * * @param out pointer in which to store the reference @@ -371,6 +371,7 @@ GIT_EXTERN(int) git_reference_set_target( * reflog is enabled for the repository. We only rename * the reflog if it exists. * + * @param[out] new_ref The new reference * @param ref The reference to rename * @param new_name The new name for the reference * @param force Overwrite an existing reference @@ -406,6 +407,7 @@ GIT_EXTERN(int) git_reference_delete(git_reference *ref); * This method removes the named reference from the repository without * looking at its old value. * + * @param repo The repository to remove the reference from * @param name The reference to remove * @return 0 or an error code */ @@ -518,7 +520,7 @@ GIT_EXTERN(int) git_reference_cmp( /** * Create an iterator for the repo's references * - * @param out pointer in which to store the iterator + * @param[out] out pointer in which to store the iterator * @param repo the repository * @return 0 or an error code */ @@ -543,7 +545,7 @@ GIT_EXTERN(int) git_reference_iterator_glob_new( /** * Get the next reference * - * @param out pointer in which to store the reference + * @param[out] 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 */ @@ -686,7 +688,7 @@ typedef enum { * so the `ONELEVEL` naming rules aren't enforced and 'master' * becomes a valid name. */ - GIT_REFERENCE_FORMAT_REFSPEC_SHORTHAND = (1u << 2), + GIT_REFERENCE_FORMAT_REFSPEC_SHORTHAND = (1u << 2) } git_reference_format_t; /** @@ -724,7 +726,7 @@ GIT_EXTERN(int) git_reference_normalize_name( * 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[out] 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). @@ -768,4 +770,5 @@ GIT_EXTERN(const char *) git_reference_shorthand(const git_reference *ref); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/refspec.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/refspec.h index eaf7747..49d5f89 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/refspec.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/refspec.h @@ -14,8 +14,8 @@ /** * @file git2/refspec.h - * @brief Git refspec attributes - * @defgroup git_refspec Git refspec attributes + * @brief Refspecs map local references to remote references + * @defgroup git_refspec Refspecs map local references to remote references * @ingroup Git * @{ */ @@ -58,7 +58,7 @@ 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 + * @return the refspec's original string */ GIT_EXTERN(const char *) git_refspec_string(const git_refspec *refspec); @@ -79,7 +79,16 @@ GIT_EXTERN(int) git_refspec_force(const git_refspec *refspec); GIT_EXTERN(git_direction) git_refspec_direction(const git_refspec *spec); /** - * Check if a refspec's source descriptor matches a reference + * Check if a refspec's source descriptor matches a negative 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_negative(const git_refspec *refspec, const char *refname); + +/** + * Check if a refspec's source descriptor matches a reference * * @param refspec the refspec * @param refname the name of the reference to check @@ -116,6 +125,7 @@ GIT_EXTERN(int) git_refspec_transform(git_buf *out, const git_refspec *spec, con */ GIT_EXTERN(int) git_refspec_rtransform(git_buf *out, const git_refspec *spec, const char *name); +/** @} */ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/remote.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/remote.h index 4d57eaa..2472ded 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/remote.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/remote.h @@ -19,8 +19,8 @@ /** * @file git2/remote.h - * @brief Git remote management functions - * @defgroup git_remote remote management functions + * @brief Remotes are where local repositories fetch from and push to + * @defgroup git_remote Remotes are where local repositories fetch from and push to * @ingroup Git * @{ */ @@ -41,6 +41,30 @@ GIT_EXTERN(int) git_remote_create( const char *name, const char *url); +/** + * Remote redirection settings; whether redirects to another host + * are permitted. By default, git will follow a redirect on the + * initial request (`/info/refs`), but not subsequent requests. + */ +typedef enum { + /** + * Do not follow any off-site redirects at any stage of + * the fetch or push. + */ + GIT_REMOTE_REDIRECT_NONE = (1 << 0), + + /** + * Allow off-site redirects only upon the initial request. + * This is the default. + */ + GIT_REMOTE_REDIRECT_INITIAL = (1 << 1), + + /** + * Allow redirects at any stage in the fetch or push. + */ + GIT_REMOTE_REDIRECT_ALL = (1 << 2) +} git_remote_redirect_t; + /** * Remote creation options flags */ @@ -49,9 +73,20 @@ typedef enum { 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_SKIP_DEFAULT_FETCHSPEC = (1 << 1) } git_remote_create_flags; +/** + * How to handle reference updates. + */ +typedef enum { + /* Write the fetch results to FETCH_HEAD. */ + GIT_REMOTE_UPDATE_FETCHHEAD = (1 << 0), + + /* Report unchanged tips in the update_refs callback. */ + GIT_REMOTE_UPDATE_REPORT_UNCHANGED = (1 << 1) +} git_remote_update_flags; + /** * Remote creation options structure * @@ -81,7 +116,10 @@ typedef struct git_remote_create_options { unsigned int flags; } git_remote_create_options; +/** Current version for the `git_remote_create_options` structure */ #define GIT_REMOTE_CREATE_OPTIONS_VERSION 1 + +/** Static constructor for `git_remote_create_options` */ #define GIT_REMOTE_CREATE_OPTIONS_INIT {GIT_REMOTE_CREATE_OPTIONS_VERSION} /** @@ -211,9 +249,9 @@ 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. + * If url.*.insteadOf has been configured for this URL, it will return + * the modified URL. This function does not consider if a push url has + * been configured for this remote (use `git_remote_pushurl` if needed). * * @param remote the remote * @return a pointer to the url @@ -300,6 +338,7 @@ GIT_EXTERN(int) git_remote_add_fetch(git_repository *repo, const char *remote, c * * @param array pointer to the array in which to store the strings * @param remote the remote to query + * @return 0 or an error code. */ GIT_EXTERN(int) git_remote_get_fetch_refspecs(git_strarray *array, const git_remote *remote); @@ -324,6 +363,7 @@ GIT_EXTERN(int) git_remote_add_push(git_repository *repo, const char *remote, co * * @param array pointer to the array in which to store the strings * @param remote the remote to query + * @return 0 or an error code. */ GIT_EXTERN(int) git_remote_get_push_refspecs(git_strarray *array, const git_remote *remote); @@ -344,23 +384,6 @@ GIT_EXTERN(size_t) git_remote_refspec_count(const git_remote *remote); */ 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 * @@ -443,10 +466,18 @@ GIT_EXTERN(int) git_remote_list(git_strarray *out, git_repository *repo); typedef enum git_remote_completion_t { GIT_REMOTE_COMPLETION_DOWNLOAD, GIT_REMOTE_COMPLETION_INDEXING, - GIT_REMOTE_COMPLETION_ERROR, + GIT_REMOTE_COMPLETION_ERROR } git_remote_completion_t; -/** Push network progress notification function */ +/** + * Push network progress notification callback. + * + * @param current The number of objects pushed so far + * @param total The total number of objects to push + * @param bytes The number of bytes pushed + * @param payload The user-specified payload callback + * @return 0 or an error code to stop the transfer + */ typedef int GIT_CALLBACK(git_push_transfer_progress_cb)( unsigned int current, unsigned int total, @@ -482,8 +513,12 @@ typedef struct { * as commands to the destination. * @param len number of elements in `updates` * @param payload Payload provided by the caller + * @return 0 or an error code to stop the push */ -typedef int GIT_CALLBACK(git_push_negotiation)(const git_push_update **updates, size_t len, void *payload); +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. @@ -548,7 +583,8 @@ struct git_remote_callbacks { * 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); + int GIT_CALLBACK(completion)(git_remote_completion_t type, + void *data); /** * This will be called if the remote host requires @@ -574,11 +610,22 @@ struct git_remote_callbacks { */ git_indexer_progress_cb transfer_progress; +#ifdef GIT_DEPRECATE_HARD + void *reserved_update_tips; +#else /** - * Each time a reference is updated locally, this function - * will be called with information about it. + * Deprecated callback for reference updates, callers should + * set `update_refs` instead. This is retained for backward + * compatibility; if you specify both `update_refs` and + * `update_tips`, then only the `update_refs` function will + * be called. + * + * @deprecated the `update_refs` callback in this structure + * should be preferred */ - int GIT_CALLBACK(update_tips)(const char *refname, const git_oid *a, const git_oid *b, void *data); + int GIT_CALLBACK(update_tips)(const char *refname, + const git_oid *a, const git_oid *b, void *data); +#endif /** * Function to call with progress information during pack @@ -635,9 +682,25 @@ struct git_remote_callbacks { */ git_url_resolve_cb resolve_url; #endif + + /** + * Each time a reference is updated locally, this function + * will be called with information about it. This should be + * preferred over the `update_tips` callback in this + * structure. + */ + int GIT_CALLBACK(update_refs)( + const char *refname, + const git_oid *a, + const git_oid *b, + git_refspec *spec, + void *data); }; +/** Current version for the `git_remote_callbacks_options` structure */ #define GIT_REMOTE_CALLBACKS_VERSION 1 + +/** Static constructor for `git_remote_callbacks_options` */ #define GIT_REMOTE_CALLBACKS_INIT {GIT_REMOTE_CALLBACKS_VERSION} /** @@ -665,7 +728,7 @@ typedef enum { /** * Force pruning off */ - GIT_FETCH_NO_PRUNE, + GIT_FETCH_NO_PRUNE } git_fetch_prune_t; /** @@ -690,9 +753,18 @@ typedef enum { /** * Ask for the all the tags. */ - GIT_REMOTE_DOWNLOAD_TAGS_ALL, + GIT_REMOTE_DOWNLOAD_TAGS_ALL } git_remote_autotag_option_t; +/** Constants for fetch depth (shallowness of fetch). */ +typedef enum { + /** The fetch is "full" (not shallow). This is the default. */ + GIT_FETCH_DEPTH_FULL = 0, + + /** The fetch should "unshallow" and fetch missing data. */ + GIT_FETCH_DEPTH_UNSHALLOW = 2147483647 +} git_fetch_depth_t; + /** * Fetch options structure. * @@ -715,10 +787,9 @@ typedef struct { 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. + * How to handle reference updates; see `git_remote_update_flags`. */ - int update_fetchhead; + unsigned int update_fetchhead; /** * Determines how to behave regarding tags on the remote, such @@ -734,15 +805,39 @@ typedef struct { */ git_proxy_options proxy_opts; + /** + * Depth of the fetch to perform, or `GIT_FETCH_DEPTH_FULL` + * (or `0`) for full history, or `GIT_FETCH_DEPTH_UNSHALLOW` + * to "unshallow" a shallow repository. + * + * The default is full (`GIT_FETCH_DEPTH_FULL` or `0`). + */ + int depth; + + /** + * Whether to allow off-site redirects. If this is not + * specified, the `http.followRedirects` configuration setting + * will be consulted. + */ + git_remote_redirect_t follow_redirects; + /** * Extra headers for this fetch operation */ git_strarray custom_headers; } git_fetch_options; +/** Current version for the `git_fetch_options` structure */ #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 } + +/** Static constructor for `git_fetch_options` */ +#define GIT_FETCH_OPTIONS_INIT { \ + GIT_FETCH_OPTIONS_VERSION, \ + GIT_REMOTE_CALLBACKS_INIT, \ + GIT_FETCH_PRUNE_UNSPECIFIED, \ + GIT_REMOTE_UPDATE_FETCHHEAD, \ + GIT_REMOTE_DOWNLOAD_TAGS_UNSPECIFIED, \ + GIT_PROXY_OPTIONS_INIT } /** * Initialize git_fetch_options structure @@ -785,13 +880,28 @@ typedef struct { */ git_proxy_options proxy_opts; + /** + * Whether to allow off-site redirects. If this is not + * specified, the `http.followRedirects` configuration setting + * will be consulted. + */ + git_remote_redirect_t follow_redirects; + /** * Extra headers for this push operation */ git_strarray custom_headers; + + /** + * "Push options" to deliver to the remote. + */ + git_strarray remote_push_options; } git_push_options; +/** Current version for the `git_push_options` structure */ #define GIT_PUSH_OPTIONS_VERSION 1 + +/** Static constructor for `git_push_options` */ #define GIT_PUSH_OPTIONS_INIT { GIT_PUSH_OPTIONS_VERSION, 1, GIT_REMOTE_CALLBACKS_INIT, GIT_PROXY_OPTIONS_INIT } /** @@ -809,7 +919,103 @@ GIT_EXTERN(int) git_push_options_init( unsigned int version); /** - * Download and index the packfile + * Remote creation options structure + * + * Initialize with `GIT_REMOTE_CREATE_OPTIONS_INIT`. Alternatively, you can + * use `git_remote_create_options_init`. + * + */ +typedef struct { + unsigned int version; + + /** Callbacks to use for this connection */ + git_remote_callbacks callbacks; + + /** HTTP Proxy settings */ + git_proxy_options proxy_opts; + + /** + * Whether to allow off-site redirects. If this is not + * specified, the `http.followRedirects` configuration setting + * will be consulted. + */ + git_remote_redirect_t follow_redirects; + + /** Extra HTTP headers to use in this connection */ + git_strarray custom_headers; +} git_remote_connect_options; + +/** Current version for the `git_remote_connect_options` structure */ +#define GIT_REMOTE_CONNECT_OPTIONS_VERSION 1 + +/** Static constructor for `git_remote_connect_options` */ +#define GIT_REMOTE_CONNECT_OPTIONS_INIT { \ + GIT_REMOTE_CONNECT_OPTIONS_VERSION, \ + GIT_REMOTE_CALLBACKS_INIT, \ + GIT_PROXY_OPTIONS_INIT } + +/** + * Initialize git_remote_connect_options structure. + * + * Initializes a `git_remote_connect_options` with default values. + * Equivalent to creating an instance with + * `GIT_REMOTE_CONNECT_OPTIONS_INIT`. + * + * @param opts The `git_remote_connect_options` struct to initialize. + * @param version The struct version; pass `GIT_REMOTE_CONNECT_OPTIONS_VERSION`. + * @return Zero on success; -1 on failure. + */ +GIT_EXTERN(int) git_remote_connect_options_init( + git_remote_connect_options *opts, + unsigned int version); + +/** + * 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 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); + +/** + * Open a connection to a remote with extended options. + * + * The transport is selected based on the URL; the direction argument + * is due to a limitation of the git protocol which starts up a + * specific binary which can only do the one or the other. + * + * The given options structure will form the defaults for connection + * options and callback setup. Callers may override these defaults + * by specifying `git_fetch_options` or `git_push_options` in + * subsequent calls. + * + * @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 opts the remote connection options + * @return 0 or an error code + */ +GIT_EXTERN(int) git_remote_connect_ext( + git_remote *remote, + git_direction direction, + const git_remote_connect_options *opts); + +/** + * 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 @@ -818,19 +1024,31 @@ GIT_EXTERN(int) git_push_options_init( * The .idx file will be created and both it and the packfile with be * renamed to their final name. * + * If options are specified and this remote is already connected then + * the existing remote connection options will be discarded and the + * remote will now use the new options. + * * @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 + * @param opts the options to use for this fetch or NULL * @return 0 or an error code */ - GIT_EXTERN(int) git_remote_download(git_remote *remote, const git_strarray *refspecs, const git_fetch_options *opts); + 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. + * the remote git which objects are missing, create a packfile with + * the missing objects and send it. + * + * If options are specified and this remote is already connected then + * the existing remote connection options will be discarded and the + * remote will now use the new options. * * @param remote the remote * @param refspecs the refspecs to use for this negotiation and @@ -838,39 +1056,49 @@ GIT_EXTERN(int) git_push_options_init( * @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); +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 + * Update the tips to the new state. + * + * If callbacks are not specified then the callbacks specified to + * `git_remote_connect` will be used (if it was called). * * @param remote the remote to update + * @param callbacks pointer to the callback structure to use or NULL + * @param update_flags the git_remote_update_flags for these tips. + * @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()`. * @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, + unsigned int update_flags, git_remote_autotag_option_t download_tags, const char *reflog_message); /** - * Download new data and update tips + * Download new data and update tips. * * Convenience function to connect to a remote, download the data, * disconnect and update the remote-tracking branches. * + * If options are specified and this remote is already connected then + * the existing remote connection options will be discarded and the + * remote will now use the new options. + * * @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 opts options to use for this fetch or NULL * @param reflog_message The message to insert into the reflogs. If NULL, the * default is "fetch" * @return 0 or an error code @@ -882,30 +1110,42 @@ GIT_EXTERN(int) git_remote_fetch( const char *reflog_message); /** - * Prune tracking refs that are no longer present on remote + * Prune tracking refs that are no longer present on remote. + * + * If callbacks are not specified then the callbacks specified to + * `git_remote_connect` will be used (if it was called). * * @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); +GIT_EXTERN(int) git_remote_prune( + git_remote *remote, + const git_remote_callbacks *callbacks); /** - * Perform a push + * Perform a push. * - * Peform all the steps from a push. + * If options are specified and this remote is already connected then + * the existing remote connection options will be discarded and the + * remote will now use the new options. * * @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 + * @return 0 or an error code. */ -GIT_EXTERN(int) git_remote_push(git_remote *remote, - const git_strarray *refspecs, - const git_push_options *opts); +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. + * + * @param remote the remote to get statistics for + * @return the git_indexer_progress for the remote */ GIT_EXTERN(const git_indexer_progress *) git_remote_stats(git_remote *remote); @@ -1005,4 +1245,5 @@ GIT_EXTERN(int) git_remote_default_branch(git_buf *out, git_remote *remote); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/repository.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/repository.h index 8d1cffc..b203576 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/repository.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/repository.h @@ -10,12 +10,14 @@ #include "common.h" #include "types.h" #include "oid.h" +#include "odb.h" #include "buffer.h" +#include "commit.h" /** * @file git2/repository.h - * @brief Git repository management routines - * @defgroup git_repository Git repository management routines + * @brief The repository stores revisions for a source tree + * @defgroup git_repository The repository stores revisions for a source tree * @ingroup Git * @{ */ @@ -30,7 +32,11 @@ GIT_BEGIN_DECL * 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 + * Note that the libgit2 library _must_ be initialized using + * `git_libgit2_init` before any APIs can be called, including + * this one. + * + * @param[out] out pointer to the repo which will be opened * @param path the path to the repository * @return 0 or an error code */ @@ -58,7 +64,9 @@ GIT_EXTERN(int) git_repository_open_from_worktree(git_repository **out, git_work * @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); +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. @@ -70,6 +78,10 @@ GIT_EXTERN(int) git_repository_wrap_odb(git_repository **out, git_odb *odb); * The method will automatically detect if the repository is bare * (if there is a repository). * + * Note that the libgit2 library _must_ be initialized using + * `git_libgit2_init` before any APIs can be called, including + * this one. + * * @param out A pointer to a user-allocated git_buf which will contain * the found path. * @@ -141,13 +153,17 @@ typedef enum { * `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_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 + * Note that the libgit2 library _must_ be initialized using + * `git_libgit2_init` before any APIs can be called, including + * this one. + * + * @param[out] 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 @@ -175,7 +191,11 @@ GIT_EXTERN(int) git_repository_open_ext( * if you're e.g. hosting git repositories and need to access them * efficiently * - * @param out Pointer to the repo which will be opened. + * Note that the libgit2 library _must_ be initialized using + * `git_libgit2_init` before any APIs can be called, including + * this one. + * + * @param[out] 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 */ @@ -200,7 +220,11 @@ GIT_EXTERN(void) git_repository_free(git_repository *repo); * TODO: * - Reinit the repository * - * @param out pointer to the repo which will be created or reinitialized + * Note that the libgit2 library _must_ be initialized using + * `git_libgit2_init` before any APIs can be called, including + * this one. + * + * @param[out] 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 @@ -267,7 +291,7 @@ typedef enum { * 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_RELATIVE_GITLINK = (1u << 6) } git_repository_init_flag_t; /** @@ -292,7 +316,7 @@ typedef enum { /** * Use "--shared=all" behavior, adding world readability. */ - GIT_REPOSITORY_INIT_SHARED_ALL = 0002777, + GIT_REPOSITORY_INIT_SHARED_ALL = 0002777 } git_repository_init_mode_t; /** @@ -351,9 +375,21 @@ typedef struct { * pointing to this URL. */ const char *origin_url; + +#ifdef GIT_EXPERIMENTAL_SHA256 + /** + * + * Type of object IDs to use for this repository, or 0 for + * default (currently SHA1). + */ + git_oid_t oid_type; +#endif } git_repository_init_options; +/** Current version for the `git_repository_init_options` structure */ #define GIT_REPOSITORY_INIT_OPTIONS_VERSION 1 + +/** Static constructor for `git_repository_init_options` */ #define GIT_REPOSITORY_INIT_OPTIONS_INIT {GIT_REPOSITORY_INIT_OPTIONS_VERSION} /** @@ -378,6 +414,10 @@ GIT_EXTERN(int) git_repository_init_options_init( * auto-detect the case sensitivity of the file system and if the * file system supports file mode bits correctly. * + * Note that the libgit2 library _must_ be initialized using + * `git_libgit2_init` before any APIs can be called, including + * this one. + * * @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. @@ -395,7 +435,7 @@ GIT_EXTERN(int) git_repository_init_ext( * `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[out] 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 @@ -456,7 +496,9 @@ 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. + * apart from HEAD, which must be pointing to the unborn master branch, + * or the branch specified for the repository in the `init.defaultBranch` + * configuration variable. * * @param repo Repo to test * @return 1 if the repository is empty, 0 if it isn't, error code @@ -482,6 +524,7 @@ typedef enum { GIT_REPOSITORY_ITEM_LOGS, GIT_REPOSITORY_ITEM_MODULES, GIT_REPOSITORY_ITEM_WORKTREES, + GIT_REPOSITORY_ITEM_WORKTREE_CONFIG, GIT_REPOSITORY_ITEM__LAST } git_repository_item_t; @@ -525,7 +568,7 @@ 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. @@ -613,7 +656,7 @@ GIT_EXTERN(int) git_repository_config_snapshot(git_config **out, git_repository * The ODB must be freed once it's no longer being used by * the user. * - * @param out Pointer to store the loaded ODB + * @param[out] out Pointer to store the loaded ODB * @param repo A repository object * @return 0, or an error code */ @@ -629,7 +672,7 @@ GIT_EXTERN(int) git_repository_odb(git_odb **out, git_repository *repo); * The refdb must be freed once it's no longer being used by * the user. * - * @param out Pointer to store the loaded refdb + * @param[out] out Pointer to store the loaded refdb * @param repo A repository object * @return 0, or an error code */ @@ -645,7 +688,7 @@ GIT_EXTERN(int) git_repository_refdb(git_refdb **out, git_repository *repo); * The index must be freed once it's no longer being used by * the user. * - * @param out Pointer to store the loaded index + * @param[out] out Pointer to store the loaded index * @param repo A repository object * @return 0, or an error code */ @@ -673,6 +716,9 @@ 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. + * + * @param repo Repository to remove prepared message from. + * @return 0 or an error code. */ GIT_EXTERN(int) git_repository_message_remove(git_repository *repo); @@ -808,19 +854,19 @@ GIT_EXTERN(int) git_repository_set_head( * 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 + * If the provided committish 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 + * @param committish 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); + const git_oid *committish); /** * Make the repository HEAD directly point to the Commit. @@ -832,11 +878,13 @@ GIT_EXTERN(int) git_repository_set_head_detached( * * See the documentation for `git_repository_set_head_detached()`. * - * @see git_repository_set_head_detached + * @param repo Repository pointer + * @param committish annotated commit to point HEAD to + * @return 0 on success, or an error code */ GIT_EXTERN(int) git_repository_set_head_detached_from_annotated( git_repository *repo, - const git_annotated_commit *commitish); + const git_annotated_commit *committish); /** * Detach the HEAD. @@ -846,7 +894,7 @@ GIT_EXTERN(int) git_repository_set_head_detached_from_annotated( * 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 + * If the HEAD is already detached and points to a non committish, the HEAD is * unaltered, and -1 is returned. * * Otherwise, the HEAD will be detached and point to the peeled Commit. @@ -876,7 +924,7 @@ typedef enum { 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_APPLY_MAILBOX_OR_REBASE } git_repository_state_t; /** @@ -925,9 +973,10 @@ GIT_EXTERN(int) git_repository_is_shallow(git_repository *repo); * 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[out] name where to store the pointer to the name + * @param[out] email where to store the pointer to the email * @param repo the repository + * @return 0 or an error code */ GIT_EXTERN(int) git_repository_ident(const char **name, const char **email, const git_repository *repo); @@ -941,9 +990,30 @@ GIT_EXTERN(int) git_repository_ident(const char **name, const char **email, cons * @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 + * @return 0 or an error code. */ GIT_EXTERN(int) git_repository_set_ident(git_repository *repo, const char *name, const char *email); +/** + * Gets the object type used by this repository. + * + * @param repo the repository + * @return the object id type + */ +GIT_EXTERN(git_oid_t) git_repository_oid_type(git_repository *repo); + +/** + * Gets the parents of the next commit, given the current repository state. + * Generally, this is the HEAD commit, except when performing a merge, in + * which case it is two or more commits. + * + * @param commits a `git_commitarray` that will contain the commit parents + * @param repo the repository + * @return 0 or an error code + */ +GIT_EXTERN(int) git_repository_commit_parents(git_commitarray *commits, git_repository *repo); + /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/reset.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/reset.h index be25414..0123f7c 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/reset.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/reset.h @@ -14,7 +14,7 @@ /** * @file git2/reset.h - * @brief Git reset management routines + * @brief Reset will update the local repository to a prior state * @ingroup Git * @{ */ @@ -26,7 +26,7 @@ GIT_BEGIN_DECL 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_HARD = 3 /**< MIXED plus changes in working tree discarded */ } git_reset_t; /** @@ -48,7 +48,7 @@ typedef enum { * * @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 + * git_tag. When a git_tag is being passed, it should be dereferenceable * to a git_commit which oid will be used as the target of the branch. * * @param reset_type Kind of reset operation to perform. @@ -75,11 +75,23 @@ GIT_EXTERN(int) git_reset( * * See the documentation for `git_reset()`. * - * @see git_reset + * @param repo Repository where to perform the reset operation. + * + * @param target Annotated commit to which the Head should be moved to. + * This object must belong to the given `repo`, it will be dereferenced + * 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_from_annotated( git_repository *repo, - const git_annotated_commit *commit, + const git_annotated_commit *target, git_reset_t reset_type, const git_checkout_options *checkout_opts); @@ -108,4 +120,5 @@ GIT_EXTERN(int) git_reset_default( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/revert.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/revert.h index 331e90d..ec51eca 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/revert.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/revert.h @@ -13,8 +13,8 @@ /** * @file git2/revert.h - * @brief Git revert routines - * @defgroup git_revert Git revert routines + * @brief Cherry-pick the inverse of a change to "undo" its effects + * @defgroup git_revert Cherry-pick the inverse of a change to "undo" its effects * @ingroup Git * @{ */ @@ -33,8 +33,13 @@ typedef struct { git_checkout_options checkout_opts; /**< Options for the checkout */ } git_revert_options; +/** Current version for the `git_revert_options` structure */ #define GIT_REVERT_OPTIONS_VERSION 1 -#define GIT_REVERT_OPTIONS_INIT {GIT_REVERT_OPTIONS_VERSION, 0, GIT_MERGE_OPTIONS_INIT, GIT_CHECKOUT_OPTIONS_INIT} + +/** Static constructor for `git_revert_options` */ +#define GIT_REVERT_OPTIONS_INIT { \ + GIT_REVERT_OPTIONS_VERSION, 0, \ + GIT_MERGE_OPTIONS_INIT, GIT_CHECKOUT_OPTIONS_INIT } /** * Initialize git_revert_options structure @@ -87,5 +92,5 @@ GIT_EXTERN(int) git_revert( /** @} */ GIT_END_DECL -#endif +#endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/revparse.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/revparse.h index e14ddee..c14fe3d 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/revparse.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/revparse.h @@ -12,8 +12,8 @@ /** * @file git2/revparse.h - * @brief Git revision parsing routines - * @defgroup git_revparse Git revision parsing routines + * @brief Parse the textual revision information + * @defgroup git_revparse Parse the textual revision information * @ingroup Git * @{ */ @@ -74,7 +74,7 @@ typedef enum { /** 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_MERGE_BASE = 1 << 2 } git_revspec_t; /** @@ -107,7 +107,7 @@ GIT_EXTERN(int) git_revparse( git_repository *repo, const char *spec); - /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/revwalk.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/revwalk.h index 98dcbf8..7c4ac54 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/revwalk.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/revwalk.h @@ -13,8 +13,8 @@ /** * @file git2/revwalk.h - * @brief Git revision traversal routines - * @defgroup git_revwalk Git revision traversal routines + * @brief Traverse (walk) the commit graph (revision history) + * @defgroup git_revwalk Traverse (walk) the commit graph (revision history) * @ingroup Git * @{ */ @@ -49,7 +49,7 @@ typedef enum { * order; this sorting mode can be combined with * any of the above. */ - GIT_SORT_REVERSE = 1 << 2, + GIT_SORT_REVERSE = 1 << 2 } git_sort_t; /** @@ -249,6 +249,7 @@ GIT_EXTERN(int) git_revwalk_push_range(git_revwalk *walk, const char *range); * * No parents other than the first for each commit will be enqueued. * + * @param walk The revision walker. * @return 0 or an error code */ GIT_EXTERN(int) git_revwalk_simplify_first_parent(git_revwalk *walk); @@ -277,6 +278,7 @@ GIT_EXTERN(git_repository *) git_revwalk_repository(git_revwalk *walk); * * @param commit_id oid of Commit * @param payload User-specified pointer to data to be passed as data payload + * @return non-zero to hide the commmit and it parent. */ typedef int GIT_CALLBACK(git_revwalk_hide_cb)( const git_oid *commit_id, @@ -288,6 +290,7 @@ typedef int GIT_CALLBACK(git_revwalk_hide_cb)( * @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 + * @return 0 or an error code. */ GIT_EXTERN(int) git_revwalk_add_hide_cb( git_revwalk *walk, @@ -296,4 +299,5 @@ GIT_EXTERN(int) git_revwalk_add_hide_cb( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/signature.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/signature.h index b14f3ea..20ec24b 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/signature.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/signature.h @@ -12,9 +12,13 @@ /** * @file git2/signature.h - * @brief Git signature creation + * @brief Signatures are the actor in a repository and when they acted * @defgroup git_signature Git signature creation * @ingroup Git + * + * Signatures contain the information about the actor (committer or + * author) in a repository, and the time that they performed the + * commit, or authoring. * @{ */ GIT_BEGIN_DECL @@ -48,6 +52,42 @@ GIT_EXTERN(int) git_signature_new(git_signature **out, const char *name, const c */ GIT_EXTERN(int) git_signature_now(git_signature **out, const char *name, const char *email); +/** + * Create a new author and/or committer signatures with default + * information based on the configuration and environment variables. + * + * If `author_out` is set, it will be populated with the author + * information. The `GIT_AUTHOR_NAME` and `GIT_AUTHOR_EMAIL` + * environment variables will be honored, and `user.name` and + * `user.email` configuration options will be honored if the + * environment variables are unset. For timestamps, `GIT_AUTHOR_DATE` + * will be used, otherwise the current time will be used. + * + * If `committer_out` is set, it will be populated with the + * committer information. The `GIT_COMMITTER_NAME` and + * `GIT_COMMITTER_EMAIL` environment variables will be honored, + * and `user.name` and `user.email` configuration options will + * be honored if the environment variables are unset. For timestamps, + * `GIT_COMMITTER_DATE` will be used, otherwise the current time will + * be used. + * + * If neither `GIT_AUTHOR_DATE` nor `GIT_COMMITTER_DATE` are set, + * both timestamps will be set to the same time. + * + * It will return `GIT_ENOTFOUND` if either the `user.name` or + * `user.email` are not set and there is no fallback from an environment + * variable. One of `author_out` or `committer_out` must be set. + * + * @param author_out pointer to set the author signature, or NULL + * @param committer_out pointer to set the committer signature, or NULL + * @param repo repository pointer + * @return 0 on success, GIT_ENOTFOUND if config is missing, or error code + */ +GIT_EXTERN(int) git_signature_default_from_env( + git_signature **author_out, + git_signature **committer_out, + git_repository *repo); + /** * Create a new action signature with default user and now timestamp. * @@ -56,6 +96,10 @@ GIT_EXTERN(int) git_signature_now(git_signature **out, const char *name, const c * based on that information. It will return GIT_ENOTFOUND if either the * user.name or user.email are not set. * + * Note that these do not examine environment variables, only the + * configuration files. Use `git_signature_default_from_env` to + * consider the environment variables. + * * @param out new signature * @param repo repository pointer * @return 0 on success, GIT_ENOTFOUND if config is missing, or error code @@ -71,7 +115,7 @@ GIT_EXTERN(int) git_signature_default(git_signature **out, git_repository *repo) * * @param out new signature * @param buf signature string - * @return 0 on success, or an error code + * @return 0 on success, GIT_EINVALID if the signature is not parseable, or an error code */ GIT_EXTERN(int) git_signature_from_buffer(git_signature **out, const char *buf); @@ -100,4 +144,5 @@ GIT_EXTERN(void) git_signature_free(git_signature *sig); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/stash.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/stash.h index 795920e..ad28c32 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/stash.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/stash.h @@ -13,8 +13,13 @@ /** * @file git2/stash.h - * @brief Git stash management routines + * @brief Stashes stores some uncommitted state in the repository * @ingroup Git + * + * Stashes stores some uncommitted state in the repository; generally + * this allows a user to stash some changes so that they can restore + * the working directory to an unmodified state. This can allow a + * developer to work on two different changes in parallel. * @{ */ GIT_BEGIN_DECL @@ -45,6 +50,11 @@ typedef enum { * the working directory */ GIT_STASH_INCLUDE_IGNORED = (1 << 2), + + /** + * All changes in the index and working directory are left intact + */ + GIT_STASH_KEEP_ALL = (1 << 3) } git_stash_flags; /** @@ -52,15 +62,10 @@ typedef enum { * * @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. */ @@ -71,6 +76,63 @@ GIT_EXTERN(int) git_stash_save( const char *message, uint32_t flags); +/** + * Stash save options structure + * + * Initialize with `GIT_STASH_SAVE_OPTIONS_INIT`. Alternatively, you can + * use `git_stash_save_options_init`. + * + */ +typedef struct git_stash_save_options { + unsigned int version; + + /** Flags to control the stashing process. (see GIT_STASH_* above) */ + uint32_t flags; + + /** The identity of the person performing the stashing. */ + const git_signature *stasher; + + /** Optional description along with the stashed state. */ + const char *message; + + /** Optional paths that control which files are stashed. */ + git_strarray paths; +} git_stash_save_options; + +/** Current version for the `git_stash_save_options` structure */ +#define GIT_STASH_SAVE_OPTIONS_VERSION 1 + +/** Static constructor for `git_stash_save_options` */ +#define GIT_STASH_SAVE_OPTIONS_INIT { GIT_STASH_SAVE_OPTIONS_VERSION } + +/** + * Initialize git_stash_save_options structure + * + * Initializes a `git_stash_save_options` with default values. Equivalent to + * creating an instance with `GIT_STASH_SAVE_OPTIONS_INIT`. + * + * @param opts The `git_stash_save_options` struct to initialize. + * @param version The struct version; pass `GIT_STASH_SAVE_OPTIONS_VERSION`. + * @return Zero on success; -1 on failure. + */ +GIT_EXTERN(int) git_stash_save_options_init( + git_stash_save_options *opts, unsigned int version); + +/** + * Save the local modifications to a new stash, with options. + * + * @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 opts The stash options. + * @return 0 on success, GIT_ENOTFOUND where there's nothing to stash, + * or error code. + */ +GIT_EXTERN(int) git_stash_save_with_opts( + git_oid *out, + git_repository *repo, + const git_stash_save_options *opts); + /** Stash application flags. */ typedef enum { GIT_STASH_APPLY_DEFAULT = 0, @@ -78,7 +140,7 @@ typedef enum { /* 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_REINSTATE_INDEX = (1 << 0) } git_stash_apply_flags; /** Stash apply progression states */ @@ -104,13 +166,17 @@ typedef enum { GIT_STASH_APPLY_PROGRESS_CHECKOUT_MODIFIED, /** The stash was applied successfully. */ - GIT_STASH_APPLY_PROGRESS_DONE, + 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. + * + * @param progress the progress information + * @param payload the user-specified payload to the apply function + * @return 0 on success, -1 on error */ typedef int GIT_CALLBACK(git_stash_apply_progress_cb)( git_stash_apply_progress_t progress, @@ -137,7 +203,10 @@ typedef struct git_stash_apply_options { void *progress_payload; } git_stash_apply_options; +/** Current version for the `git_stash_apply_options` structure */ #define GIT_STASH_APPLY_OPTIONS_VERSION 1 + +/** Static constructor for `git_stash_apply_options` */ #define GIT_STASH_APPLY_OPTIONS_INIT { \ GIT_STASH_APPLY_OPTIONS_VERSION, \ GIT_STASH_APPLY_DEFAULT, \ @@ -171,8 +240,6 @@ GIT_EXTERN(int) git_stash_apply_options_init( * 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. @@ -257,4 +324,5 @@ GIT_EXTERN(int) git_stash_pop( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/status.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/status.h index 543e3fa..e13783b 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/status.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/status.h @@ -14,7 +14,7 @@ /** * @file git2/status.h - * @brief Git file status routines + * @brief Status indicates how a user has changed the working directory and index * @defgroup git_status Git file status routines * @ingroup Git * @{ @@ -48,17 +48,16 @@ typedef enum { GIT_STATUS_WT_UNREADABLE = (1u << 12), GIT_STATUS_IGNORED = (1u << 14), - GIT_STATUS_CONFLICTED = (1u << 15), + 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. + * @param path is the path to the file + * @param status_flags the `git_status_t` values for file's status + * @param payload the user-specified payload to the foreach function + * @return 0 on success, or a negative number on failure */ typedef int GIT_CALLBACK(git_status_cb)( const char *path, unsigned int status_flags, void *payload); @@ -87,7 +86,7 @@ typedef enum { * 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_WORKDIR_ONLY = 2 } git_status_show_t; /** @@ -204,9 +203,10 @@ typedef enum { * 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_INCLUDE_UNREADABLE_AS_UNTRACKED = (1u << 15) } git_status_opt_t; +/** Default `git_status_opt_t` values */ #define GIT_STATUS_OPT_DEFAULTS \ (GIT_STATUS_OPT_INCLUDE_IGNORED | \ GIT_STATUS_OPT_INCLUDE_UNTRACKED | \ @@ -227,13 +227,16 @@ typedef struct { /** * The `show` value is one of the `git_status_show_t` constants that - * control which files to scan and in what order. + * control which files to scan and in what order. The default is + * `GIT_STATUS_SHOW_INDEX_AND_WORKDIR`. */ git_status_show_t show; /** * The `flags` value is an OR'ed combination of the - * `git_status_opt_t` values above. + * `git_status_opt_t` values above. The default is + * `GIT_STATUS_OPT_DEFAULTS`, which matches git's default + * behavior. */ unsigned int flags; @@ -250,9 +253,18 @@ typedef struct { * working directory and index; defaults to HEAD. */ git_tree *baseline; + + /** + * Threshold above which similar files will be considered renames. + * This is equivalent to the -M option. Defaults to 50. + */ + uint16_t rename_threshold; } git_status_options; +/** Current version for the `git_status_options` structure */ #define GIT_STATUS_OPTIONS_VERSION 1 + +/** Static constructor for `git_status_options` */ #define GIT_STATUS_OPTIONS_INIT {GIT_STATUS_OPTIONS_VERSION} /** @@ -440,4 +452,5 @@ GIT_EXTERN(int) git_status_should_ignore( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/stdint.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/stdint.h index 6950427..4f532e1 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/stdint.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/stdint.h @@ -1,37 +1,37 @@ -// 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_ // [ +/* 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 @@ -40,10 +40,11 @@ #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 +/* 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 @@ -52,7 +53,7 @@ extern "C" { } #endif -// Define _W64 macros to mark types changing their size, like intptr_t. +/* 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 @@ -62,13 +63,14 @@ extern "C" { #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. +/* 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; @@ -88,7 +90,7 @@ typedef signed __int64 int64_t; typedef unsigned __int64 uint64_t; -// 7.18.1.2 Minimum-width integer types +/* 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; @@ -98,7 +100,7 @@ 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 +/* 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; @@ -108,25 +110,25 @@ 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 // [ +/* 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 ][ +#else /* _WIN64 ][ */ typedef _W64 signed int intptr_t; typedef _W64 unsigned int uintptr_t; -#endif // _WIN64 ] +#endif /* _WIN64 ] */ -// 7.18.1.5 Greatest-width integer types +/* 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 +/* 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 +#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 +/* 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) @@ -140,7 +142,7 @@ typedef uint64_t uintmax_t; #define UINT32_MAX _UI32_MAX #define UINT64_MAX _UI64_MAX -// 7.18.2.2 Limits of minimum-width integer types +/* 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 @@ -154,7 +156,7 @@ typedef uint64_t uintmax_t; #define UINT_LEAST32_MAX UINT32_MAX #define UINT_LEAST64_MAX UINT64_MAX -// 7.18.2.3 Limits of fastest minimum-width integer types +/* 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 @@ -168,62 +170,62 @@ typedef uint64_t uintmax_t; #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 // [ +/* 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 ][ +#else /* _WIN64 ][ */ # define INTPTR_MIN INT32_MIN # define INTPTR_MAX INT32_MAX # define UINTPTR_MAX UINT32_MAX -#endif // _WIN64 ] +#endif /* _WIN64 ] */ -// 7.18.2.5 Limits of greatest-width integer types +/* 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 +/* 7.18.3 Limits of other integer types */ -#ifdef _WIN64 // [ +#ifdef _WIN64 /* [ */ # define PTRDIFF_MIN _I64_MIN # define PTRDIFF_MAX _I64_MAX -#else // _WIN64 ][ +#else /* _WIN64 ][ */ # define PTRDIFF_MIN _I32_MIN # define PTRDIFF_MAX _I32_MAX -#endif // _WIN64 ] +#endif /* _WIN64 ] */ #define SIG_ATOMIC_MIN INT_MIN #define SIG_ATOMIC_MAX INT_MAX -#ifndef SIZE_MAX // [ -# ifdef _WIN64 // [ +#ifndef SIZE_MAX /* [ */ +# ifdef _WIN64 /* [ */ # define SIZE_MAX _UI64_MAX -# else // _WIN64 ][ +# else /* _WIN64 ][ */ # define SIZE_MAX _UI32_MAX -# endif // _WIN64 ] -#endif // SIZE_MAX ] +# endif /* _WIN64 ] */ +#endif /* SIZE_MAX ] */ -// WCHAR_MIN and WCHAR_MAX are also defined in -#ifndef WCHAR_MIN // [ +/* WCHAR_MIN and WCHAR_MAX are also defined in */ +#ifndef WCHAR_MIN /* [ */ # define WCHAR_MIN 0 -#endif // WCHAR_MIN ] -#ifndef WCHAR_MAX // [ +#endif /* WCHAR_MIN ] */ +#ifndef WCHAR_MAX /* [ */ # define WCHAR_MAX _UI16_MAX -#endif // WCHAR_MAX ] +#endif /* WCHAR_MAX ] */ #define WINT_MIN 0 #define WINT_MAX _UI16_MAX -#endif // __STDC_LIMIT_MACROS ] +#endif /* __STDC_LIMIT_MACROS ] */ -// 7.18.4 Limits of other integer types +/* 7.18.4 Limits of other integer types */ -#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [ See footnote 224 at page 260 +#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) /* [ See footnote 224 at page 260 */ -// 7.18.4.1 Macros for minimum-width integer constants +/* 7.18.4.1 Macros for minimum-width integer constants */ #define INT8_C(val) val##i8 #define INT16_C(val) val##i16 @@ -235,13 +237,13 @@ typedef uint64_t uintmax_t; #define UINT32_C(val) val##ui32 #define UINT64_C(val) val##ui64 -// 7.18.4.2 Macros for greatest-width integer constants +/* 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 /* __STDC_CONSTANT_MACROS ] */ -#endif // _MSC_STDINT_H_ ] +#endif /* _MSC_STDINT_H_ ] */ -#endif // _MSC_VER ] \ No newline at end of file +#endif /* _MSC_VER ] */ diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/strarray.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/strarray.h index 0f657e6..dcb628a 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/strarray.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/strarray.h @@ -11,8 +11,8 @@ /** * @file git2/strarray.h - * @brief Git string array routines - * @defgroup git_strarray Git string array routines + * @brief An array of strings for the user to free + * @defgroup git_strarray An array of strings for the user to free * @ingroup Git * @{ */ @@ -36,21 +36,7 @@ typedef struct git_strarray { */ 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/Clibgit2.xcframework/ios-arm64/Headers/git2/submodule.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/submodule.h index 29d8bc1..911b3ce 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/submodule.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/submodule.h @@ -15,7 +15,7 @@ /** * @file git2/submodule.h - * @brief Git submodule management utilities + * @brief Submodules place another repository's contents within this one * * 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 @@ -85,23 +85,30 @@ typedef enum { 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_WD_UNTRACKED = (1u << 13) } git_submodule_status_t; +/** Submodule source bits */ #define GIT_SUBMODULE_STATUS__IN_FLAGS 0x000Fu +/** Submodule index status */ #define GIT_SUBMODULE_STATUS__INDEX_FLAGS 0x0070u +/** Submodule working directory status */ #define GIT_SUBMODULE_STATUS__WD_FLAGS 0x3F80u +/** Whether the submodule is modified */ #define GIT_SUBMODULE_STATUS_IS_UNMODIFIED(S) \ (((S) & ~GIT_SUBMODULE_STATUS__IN_FLAGS) == 0) +/** Whether the submodule is modified (in the index) */ #define GIT_SUBMODULE_STATUS_IS_INDEX_UNMODIFIED(S) \ (((S) & GIT_SUBMODULE_STATUS__INDEX_FLAGS) == 0) +/** Whether the submodule is modified (in the working directory) */ #define GIT_SUBMODULE_STATUS_IS_WD_UNMODIFIED(S) \ (((S) & (GIT_SUBMODULE_STATUS__WD_FLAGS & \ ~GIT_SUBMODULE_STATUS_WD_UNINITIALIZED)) == 0) +/** Whether the submodule working directory is dirty */ #define GIT_SUBMODULE_STATUS_IS_WD_DIRTY(S) \ (((S) & (GIT_SUBMODULE_STATUS_WD_INDEX_MODIFIED | \ GIT_SUBMODULE_STATUS_WD_WD_MODIFIED | \ @@ -130,10 +137,8 @@ typedef struct git_submodule_update_options { /** * 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. + * checkout, set the `checkout_strategy` to `GIT_CHECKOUT_NONE` + * or `GIT_CHECKOUT_DRY_RUN`. */ git_checkout_options checkout_opts; @@ -152,11 +157,15 @@ typedef struct git_submodule_update_options { int allow_fetch; } git_submodule_update_options; +/** Current version for the `git_submodule_update_options` structure */ #define GIT_SUBMODULE_UPDATE_OPTIONS_VERSION 1 + +/** Static constructor for `git_submodule_update_options` */ #define GIT_SUBMODULE_UPDATE_OPTIONS_INIT \ { GIT_SUBMODULE_UPDATE_OPTIONS_VERSION, \ - { GIT_CHECKOUT_OPTIONS_VERSION, GIT_CHECKOUT_SAFE }, \ - GIT_FETCH_OPTIONS_INIT, 1 } + GIT_CHECKOUT_OPTIONS_INIT, \ + GIT_FETCH_OPTIONS_INIT, \ + 1 } /** * Initialize git_submodule_update_options structure @@ -181,7 +190,7 @@ GIT_EXTERN(int) git_submodule_update_options_init( * @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. + * return an error if attempting to update an uninitialized 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. @@ -229,6 +238,7 @@ GIT_EXTERN(int) git_submodule_lookup( * * @param out Pointer to store the copy of the submodule. * @param source Original submodule to copy. + * @return 0 */ GIT_EXTERN(int) git_submodule_dup(git_submodule **out, git_submodule *source); @@ -320,6 +330,7 @@ GIT_EXTERN(int) git_submodule_clone( * (but doesn't actually do the commit). * * @param submodule The submodule to finish adding. + * @return 0 or an error code. */ GIT_EXTERN(int) git_submodule_add_finalize(git_submodule *submodule); @@ -529,7 +540,8 @@ GIT_EXTERN(int) git_submodule_set_update( * 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 + * @param submodule the submodule to examine + * @return the submodule recursion configuration */ GIT_EXTERN(git_submodule_recurse_t) git_submodule_fetch_recurse_submodules( git_submodule *submodule); @@ -541,7 +553,7 @@ GIT_EXTERN(git_submodule_recurse_t) git_submodule_fetch_recurse_submodules( * * @param repo the repository to affect * @param name the submodule to configure - * @param fetch_recurse_submodules Boolean value + * @param fetch_recurse_submodules the submodule recursion configuration * @return old value for fetchRecurseSubmodules */ GIT_EXTERN(int) git_submodule_set_fetch_recurse_submodules( @@ -589,6 +601,9 @@ GIT_EXTERN(int) git_submodule_repo_init( * 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. + * + * @param submodule The submodule to copy. + * @return 0 or an error code. */ GIT_EXTERN(int) git_submodule_sync(git_submodule *submodule); @@ -660,4 +675,5 @@ GIT_EXTERN(int) git_submodule_location( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/alloc.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/alloc.h index c295807..67506f2 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/alloc.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/alloc.h @@ -10,6 +10,17 @@ #include "git2/common.h" +/** + * @file git2/sys/alloc.h + * @brief Custom memory allocators + * @defgroup git_merge Git merge routines + * @ingroup Git + * + * Users can configure custom allocators; this is particularly + * interesting when running in constrained environments, when calling + * from another language, or during testing. + * @{ + */ GIT_BEGIN_DECL /** @@ -24,28 +35,6 @@ 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 @@ -53,18 +42,6 @@ typedef struct { */ 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. @@ -96,6 +73,7 @@ int git_stdalloc_init_allocator(git_allocator *allocator); */ int git_win32_crtdbg_init_allocator(git_allocator *allocator); +/** @} */ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/commit.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/commit.h index ba67106..a8253c0 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/commit.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/commit.h @@ -14,7 +14,7 @@ /** * @file git2/sys/commit.h * @brief Low-level Git commit creation - * @defgroup git_backend Git custom backend APIs + * @defgroup git_commit Low-level Git commit creation * @ingroup Git * @{ */ @@ -29,7 +29,43 @@ GIT_BEGIN_DECL * the `tree`, neither the `parents` list of `git_oid`s are checked for * validity. * - * @see git_commit_create + * @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_from_ids( git_oid *id, @@ -49,6 +85,10 @@ GIT_EXTERN(int) git_commit_create_from_ids( * 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. + * + * @param idx the index of the parent + * @param payload the user-specified payload + * @return the object id of the parent, or NULL if there are no further parents */ typedef const git_oid * GIT_CALLBACK(git_commit_parent_callback)(size_t idx, void *payload); @@ -61,7 +101,40 @@ typedef const git_oid * GIT_CALLBACK(git_commit_parent_callback)(size_t idx, voi * with `parent_payload` and should return `git_oid` values or NULL to * indicate that all parents are accounted for. * - * @see git_commit_create + * @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_cb Callback to invoke to obtain parent information + * + * @param parent_payload User-specified payload to provide to the callback + * + * @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_from_callback( git_oid *id, @@ -77,4 +150,5 @@ GIT_EXTERN(int) git_commit_create_from_callback( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/commit_graph.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/commit_graph.h index f6c0fc4..ff547ef 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/commit_graph.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/commit_graph.h @@ -12,13 +12,52 @@ /** * @file git2/sys/commit_graph.h - * @brief Git commit-graph - * @defgroup git_commit_graph Git commit-graph APIs + * @brief Commit graphs store information about commit relationships + * @defgroup git_commit_graph Commit graphs * @ingroup Git * @{ */ GIT_BEGIN_DECL +/** + * Options structure for `git_commit_graph_open_new`. + * + * Initialize with `GIT_COMMIT_GRAPH_OPEN_OPTIONS_INIT`. Alternatively, + * you can use `git_commit_graph_open_options_init`. + */ +typedef struct { + unsigned int version; + +#ifdef GIT_EXPERIMENTAL_SHA256 + /** The object ID type that this commit graph contains. */ + git_oid_t oid_type; +#endif +} git_commit_graph_open_options; + +/** Current version for the `git_commit_graph_open_options` structure */ +#define GIT_COMMIT_GRAPH_OPEN_OPTIONS_VERSION 1 + +/** Static constructor for `git_commit_graph_open_options` */ +#define GIT_COMMIT_GRAPH_OPEN_OPTIONS_INIT { \ + GIT_COMMIT_GRAPH_OPEN_OPTIONS_VERSION \ + } + +/** + * Initialize git_commit_graph_open_options structure + * + * Initializes a `git_commit_graph_open_options` with default values. + * Equivalent to creating an instance with + * `GIT_COMMIT_GRAPH_OPEN_OPTIONS_INIT`. + * + * @param opts The `git_commit_graph_open_options` struct to initialize. + * @param version The struct version; pass `GIT_COMMIT_GRAPH_OPEN_OPTIONS_VERSION`. + * @return Zero on success; -1 on failure. + */ +GIT_EXTERN(int) git_commit_graph_open_options_init( + git_commit_graph_open_options *opts, + unsigned int version); + + /** * Opens a `git_commit_graph` from a path to an objects directory. * @@ -28,7 +67,13 @@ GIT_BEGIN_DECL * @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); +GIT_EXTERN(int) git_commit_graph_open( + git_commit_graph **cgraph_out, + const char *objects_dir +#ifdef GIT_EXPERIMENTAL_SHA256 + , const git_commit_graph_open_options *options +#endif + ); /** * Frees commit-graph data. This should only be called when memory allocated @@ -40,50 +85,6 @@ GIT_EXTERN(int) git_commit_graph_open(git_commit_graph **cgraph_out, const char */ 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 @@ -94,19 +95,23 @@ 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_SINGLE_FILE = 0 } git_commit_graph_split_strategy_t; /** - * Options structure for - * `git_commit_graph_writer_commit`/`git_commit_graph_writer_dump`. + * Options structure for `git_commit_graph_writer_new`. * - * Initialize with `GIT_COMMIT_GRAPH_WRITER_OPTIONS_INIT`. Alternatively, you - * can use `git_commit_graph_writer_options_init`. + * Initialize with `GIT_COMMIT_GRAPH_WRITER_OPTIONS_INIT`. Alternatively, + * you can use `git_commit_graph_writer_options_init`. */ typedef struct { unsigned int version; +#ifdef GIT_EXPERIMENTAL_SHA256 + /** The object ID type that this commit graph contains. */ + git_oid_t oid_type; +#endif + /** * The strategy to use when adding new commits to a pre-existing commit-graph * chain. @@ -126,7 +131,10 @@ typedef struct { size_t max_commits; } git_commit_graph_writer_options; +/** Current version for the `git_commit_graph_writer_options` structure */ #define GIT_COMMIT_GRAPH_WRITER_OPTIONS_VERSION 1 + +/** Static constructor for `git_commit_graph_writer_options` */ #define GIT_COMMIT_GRAPH_WRITER_OPTIONS_INIT { \ GIT_COMMIT_GRAPH_WRITER_OPTIONS_VERSION \ } @@ -145,30 +153,73 @@ GIT_EXTERN(int) git_commit_graph_writer_options_init( git_commit_graph_writer_options *opts, unsigned int version); +/** + * 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. + * @param options The options for the commit graph writer. + * @return 0 or an error code + */ +GIT_EXTERN(int) git_commit_graph_writer_new( + git_commit_graph_writer **out, + const char *objects_info_dir, + const git_commit_graph_writer_options *options); + +/** + * 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); + /** * 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); + git_commit_graph_writer *w); /** * 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[out] 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_commit_graph_writer *w); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/config.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/config.h index 0a9005e..cc4a399 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/config.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/config.h @@ -13,13 +13,28 @@ /** * @file git2/sys/config.h - * @brief Git config backend routines - * @defgroup git_backend Git custom backend APIs + * @brief Custom configuration database backends + * @defgroup git_backend Custom configuration database backends * @ingroup Git * @{ */ GIT_BEGIN_DECL +/** + * An entry in a configuration backend. This is provided so that + * backend implementors can have a mechanism to free their data. + */ +typedef struct git_config_backend_entry { + /** The base configuration entry */ + struct git_config_entry entry; + + /** + * Free function for this entry; for internal purposes. Callers + * should call `git_config_entry_free` to free data. + */ + void GIT_CALLBACK(free)(struct git_config_backend_entry *entry); +} git_config_backend_entry; + /** * Every iterator must have this struct as its first element, so the * API can talk to it. You'd define your iterator as @@ -39,7 +54,7 @@ struct git_config_iterator { * 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); + int GIT_CALLBACK(next)(git_config_backend_entry **entry, git_config_iterator *iter); /** * Free the iterator @@ -59,7 +74,7 @@ struct git_config_backend { /* 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(get)(struct git_config_backend *, const char *key, git_config_backend_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); @@ -83,7 +98,11 @@ struct git_config_backend { int GIT_CALLBACK(unlock)(struct git_config_backend *, int success); void GIT_CALLBACK(free)(struct git_config_backend *); }; + +/** Current version for the `git_config_backend_options` structure */ #define GIT_CONFIG_BACKEND_VERSION 1 + +/** Static constructor for `git_config_backend_options` */ #define GIT_CONFIG_BACKEND_INIT {GIT_CONFIG_BACKEND_VERSION} /** @@ -125,6 +144,63 @@ GIT_EXTERN(int) git_config_add_backend( const git_repository *repo, int force); +/** Options for in-memory configuration backends. */ +typedef struct { + unsigned int version; + + /** + * The type of this backend (eg, "command line"). If this is + * NULL, then this will be "in-memory". + */ + const char *backend_type; + + /** + * The path to the origin; if this is NULL then it will be + * left unset in the resulting configuration entries. + */ + const char *origin_path; +} git_config_backend_memory_options; + +/** Current version for the `git_config_backend_memory_options` structure */ +#define GIT_CONFIG_BACKEND_MEMORY_OPTIONS_VERSION 1 + +/** Static constructor for `git_config_backend_memory_options` */ +#define GIT_CONFIG_BACKEND_MEMORY_OPTIONS_INIT { GIT_CONFIG_BACKEND_MEMORY_OPTIONS_VERSION } + + +/** + * Create an in-memory configuration backend from a string in standard + * git configuration file format. + * + * @param out the new backend + * @param cfg the configuration that is to be parsed + * @param len the length of the string pointed to by `cfg` + * @param opts the options to initialize this backend with, or NULL + * @return 0 on success or an error code + */ +extern int git_config_backend_from_string( + git_config_backend **out, + const char *cfg, + size_t len, + git_config_backend_memory_options *opts); + +/** + * Create an in-memory configuration backend from a list of name/value + * pairs. + * + * @param out the new backend + * @param values the configuration values to set (in "key=value" format) + * @param len the length of the values array + * @param opts the options to initialize this backend with, or NULL + * @return 0 on success or an error code + */ +extern int git_config_backend_from_values( + git_config_backend **out, + const char **values, + size_t len, + git_config_backend_memory_options *opts); + /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/credential.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/credential.h index bb4c9f9..0d573a3 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/credential.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/credential.h @@ -11,9 +11,9 @@ #include "git2/credential.h" /** - * @file git2/sys/cred.h - * @brief Git credentials low-level implementation - * @defgroup git_credential Git credentials low-level implementation + * @file git2/sys/credential.h + * @brief Low-level credentials implementation + * @defgroup git_credential Low-level credentials implementation * @ingroup Git * @{ */ @@ -85,6 +85,7 @@ struct git_credential_ssh_custom { void *payload; /**< Payload passed to prompt_callback */ }; +/** @} */ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/diff.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/diff.h index aefd7b9..a398f54 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/diff.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/diff.h @@ -15,7 +15,7 @@ /** * @file git2/sys/diff.h - * @brief Low-level Git diff utilities + * @brief Low-level diff utilities * @ingroup Git * @{ */ @@ -33,6 +33,12 @@ GIT_BEGIN_DECL * 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). + * + * @param delta the delta being processed + * @param hunk the hunk being processed + * @param line the line being processed + * @param payload the payload provided by the diff generator + * @return 0 on success or an error code */ GIT_EXTERN(int) git_diff_print_callback__to_buf( const git_diff_delta *delta, @@ -53,6 +59,12 @@ GIT_EXTERN(int) git_diff_print_callback__to_buf( * 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`. + * + * @param delta the delta being processed + * @param hunk the hunk being processed + * @param line the line being processed + * @param payload the payload provided by the diff generator + * @return 0 on success or an error code */ GIT_EXTERN(int) git_diff_print_callback__to_file_handle( const git_diff_delta *delta, @@ -70,7 +82,10 @@ typedef struct { size_t oid_calculations; /**< Number of ID calculations */ } git_diff_perfdata; +/** Current version for the `git_diff_perfdata_options` structure */ #define GIT_DIFF_PERFDATA_VERSION 1 + +/** Static constructor for `git_diff_perfdata_options` */ #define GIT_DIFF_PERFDATA_INIT {GIT_DIFF_PERFDATA_VERSION,0,0} /** @@ -85,10 +100,15 @@ GIT_EXTERN(int) git_diff_get_perfdata( /** * Get performance data for diffs from a git_status_list + * + * @param out Structure to be filled with diff performance data + * @param status Diff to read performance data from + * @return 0 for success, <0 for error */ GIT_EXTERN(int) git_status_list_get_perfdata( git_diff_perfdata *out, const git_status_list *status); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/email.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/email.h index 6f4a286..26e792a 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/email.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/email.h @@ -7,6 +7,11 @@ #ifndef INCLUDE_sys_git_email_h__ #define INCLUDE_sys_git_email_h__ +#include "git2/common.h" +#include "git2/diff.h" +#include "git2/email.h" +#include "git2/types.h" + /** * @file git2/sys/email.h * @brief Advanced git email creation routines @@ -28,6 +33,7 @@ GIT_BEGIN_DECL * @param body optional text to include above the diffstat * @param author the person who authored this commit * @param opts email creation options + * @return 0 on success or an error code */ GIT_EXTERN(int) git_email_create_from_diff( git_buf *out, @@ -42,4 +48,5 @@ GIT_EXTERN(int) git_email_create_from_diff( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/errors.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/errors.h new file mode 100644 index 0000000..44e8ecb --- /dev/null +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/errors.h @@ -0,0 +1,76 @@ +/* + * 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_errors_h__ +#define INCLUDE_sys_git_errors_h__ + +#include "git2/common.h" + +/** + * @file git2/sys/errors.h + * @brief Advanced error handling + * @ingroup Git + * + * Error handling for advanced consumers; those who use callbacks + * or those who create custom databases. + * @{ + */ +GIT_BEGIN_DECL + +/** + * 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, using `printf`-style + * formatting. + * + * 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 fmt The `printf`-style format string; subsequent arguments must + * be the arguments for the format string. + */ +GIT_EXTERN(void) git_error_set(int error_class, const char *fmt, ...) + GIT_FORMAT_PRINTF(2, 3); + +/** + * Set the error message string for this thread. This function is like + * `git_error_set` but takes a static string instead of a `printf`-style + * format. + * + * @param error_class One of the `git_error_t` enum above describing the + * general subsystem that is responsible for the error. + * @param string The 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/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/filter.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/filter.h index b375941..60466d1 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/filter.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/filter.h @@ -11,8 +11,8 @@ /** * @file git2/sys/filter.h - * @brief Git filter backend and plugin routines - * @defgroup git_backend Git custom backend APIs + * @brief Custom filter backends and plugins + * @defgroup git_backend Custom filter backends and plugins * @ingroup Git * @{ */ @@ -26,7 +26,10 @@ GIT_BEGIN_DECL */ GIT_EXTERN(git_filter *) git_filter_lookup(const char *name); +/** The "crlf" filter */ #define GIT_FILTER_CRLF "crlf" + +/** The "ident" filter */ #define GIT_FILTER_IDENT "ident" /** @@ -53,6 +56,12 @@ GIT_EXTERN(git_filter *) git_filter_lookup(const char *name); * 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. + * + * @param out the filter list + * @param repo the repository to use for configuration + * @param mode the filter mode (direction) + * @param options the options + * @return 0 on success or an error code */ GIT_EXTERN(int) git_filter_list_new( git_filter_list **out, @@ -72,6 +81,11 @@ GIT_EXTERN(int) git_filter_list_new( * 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! + * + * @param fl the filter list + * @param filter the filter to push + * @param payload the payload for the filter + * @return 0 on success or an error code */ GIT_EXTERN(int) git_filter_list_push( git_filter_list *fl, git_filter *filter, void *payload); @@ -96,17 +110,26 @@ typedef struct git_filter_source git_filter_source; /** * Get the repository that the source data is coming from. + * + * @param src the filter source + * @return the repository for the filter information */ GIT_EXTERN(git_repository *) git_filter_source_repo(const git_filter_source *src); /** * Get the path that the source data is coming from. + * + * @param src the filter source + * @return the path that is being filtered */ 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 + * + * @param src the filter source + * @return the file mode for the file being filtered */ GIT_EXTERN(uint16_t) git_filter_source_filemode(const git_filter_source *src); @@ -114,16 +137,25 @@ 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. + * + * @param src the filter source + * @return the object id of the file being filtered */ GIT_EXTERN(const git_oid *) git_filter_source_id(const git_filter_source *src); /** * Get the git_filter_mode_t to be used + * + * @param src the filter source + * @return the mode (direction) of the filter */ 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 + * + * @param src the filter source + * @return the flags of the filter */ GIT_EXTERN(uint32_t) git_filter_source_flags(const git_filter_source *src); @@ -137,6 +169,9 @@ GIT_EXTERN(uint32_t) git_filter_source_flags(const git_filter_source *src); * 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). + * + * @param self the filter to initialize + * @return 0 on success, negative number on failure */ typedef int GIT_CALLBACK(git_filter_init_fn)(git_filter *self); @@ -149,6 +184,8 @@ typedef int GIT_CALLBACK(git_filter_init_fn)(git_filter *self); * This may be called even if the `initialize` callback was not made. * * Typically this function will free the `git_filter` object itself. + * + * @param self the filter to shutdown */ typedef void GIT_CALLBACK(git_filter_shutdown_fn)(git_filter *self); @@ -171,6 +208,12 @@ typedef void GIT_CALLBACK(git_filter_shutdown_fn)(git_filter *self); * 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. + * + * @param self the filter check + * @param payload a data for future filter functions + * @param src the filter source + * @param attr_values the attribute values + * @return 0 on success or a negative value on error */ typedef int GIT_CALLBACK(git_filter_check_fn)( git_filter *self, @@ -191,6 +234,12 @@ typedef int GIT_CALLBACK(git_filter_check_fn)( * 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. * + * @param self the filter check + * @param payload a data for future filter functions + * @param to the input buffer + * @param from the output buffer + * @param src the filter source + * @return 0 on success or a negative value on error * @deprecated use git_filter_stream_fn */ typedef int GIT_CALLBACK(git_filter_apply_fn)( @@ -209,6 +258,13 @@ typedef int GIT_CALLBACK(git_filter_apply_fn)( * `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. + * + * @param out the write stream + * @param self the filter + * @param payload a data for future filter functions + * @param src the filter source + * @param next the output stream + * @return 0 on success or a negative value on error */ typedef int GIT_CALLBACK(git_filter_stream_fn)( git_writestream **out, @@ -225,6 +281,9 @@ typedef int GIT_CALLBACK(git_filter_stream_fn)( * `stream` callbacks allocated a `payload` to keep per-source filter * state, use this callback to free that payload and release resources * as required. + * + * @param self the filter + * @param payload a data for future filter functions */ typedef void GIT_CALLBACK(git_filter_cleanup_fn)( git_filter *self, @@ -291,7 +350,10 @@ struct git_filter { git_filter_cleanup_fn cleanup; }; +/** Current version for the `git_filter_options` structure */ #define GIT_FILTER_VERSION 1 + +/** Static constructor for `git_filter_options` */ #define GIT_FILTER_INIT {GIT_FILTER_VERSION} /** @@ -300,7 +362,7 @@ struct git_filter { * * @param filter the `git_filter` struct to initialize. * @param version Version the struct; pass `GIT_FILTER_VERSION` - * @return Zero on success; -1 on failure. + * @return 0 on success; -1 on failure. */ GIT_EXTERN(int) git_filter_init(git_filter *filter, unsigned int version); @@ -350,4 +412,5 @@ GIT_EXTERN(int) git_filter_unregister(const char *name); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/hashsig.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/hashsig.h index 09c19ae..0d7be53 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/hashsig.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/hashsig.h @@ -9,6 +9,16 @@ #include "git2/common.h" +/** + * @file git2/sys/hashsig.h + * @brief Signatures for file similarity comparison + * @defgroup git_hashsig Git merge routines + * @ingroup Git + * + * Hash signatures are used for file similary comparison; this is + * used for git's rename handling. + * @{ + */ GIT_BEGIN_DECL /** @@ -101,6 +111,7 @@ GIT_EXTERN(int) git_hashsig_compare( const git_hashsig *a, const git_hashsig *b); +/** @} */ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/index.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/index.h index 1f6d93f..b3b86a0 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/index.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/index.h @@ -12,8 +12,8 @@ /** * @file git2/sys/index.h - * @brief Low-level Git index manipulation routines - * @defgroup git_backend Git custom backend APIs + * @brief Low-level index manipulation routines + * @defgroup git_index Low-level index manipulation routines * @ingroup Git * @{ */ @@ -67,6 +67,7 @@ GIT_EXTERN(const git_index_name_entry *) git_index_name_get_byindex( * @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 + * @return 0 on success, or an error code */ GIT_EXTERN(int) git_index_name_add(git_index *index, const char *ancestor, const char *ours, const char *theirs); diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/mempack.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/mempack.h index 17da590..be902be 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/mempack.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/mempack.h @@ -15,8 +15,8 @@ /** * @file git2/sys/mempack.h - * @brief Custom ODB backend that permits packing objects in-memory - * @defgroup git_backend Git custom backend APIs + * @brief A custom object database backend for storing objects in-memory + * @defgroup git_mempack A custom object database backend for storing objects in-memory * @ingroup Git * @{ */ @@ -44,6 +44,26 @@ GIT_BEGIN_DECL */ GIT_EXTERN(int) git_mempack_new(git_odb_backend **out); +/** + * Write a thin packfile with the objects in the memory store. + * + * A thin packfile is a packfile that does not contain its transitive closure of + * references. This is useful for efficiently distributing additions to a + * repository over the network, but also finds use in the efficient bulk + * addition of objects to a repository, locally. + * + * This operation performs the (shallow) insert operations into the + * `git_packbuilder`, but does not write the packfile to disk; + * see `git_packbuilder_write_buf`. + * + * It also does not reset the in-memory object database; see `git_mempack_reset`. + * + * @param backend The mempack backend + * @param pb The packbuilder to use to write the packfile + * @return 0 on success or an error code + */ +GIT_EXTERN(int) git_mempack_write_thin_pack(git_odb_backend *backend, git_packbuilder *pb); + /** * Dump all the queued in-memory writes to a packfile. * @@ -82,6 +102,16 @@ GIT_EXTERN(int) git_mempack_dump(git_buf *pack, git_repository *repo, git_odb_ba */ GIT_EXTERN(int) git_mempack_reset(git_odb_backend *backend); +/** + * Get the total number of objects in mempack + * + * @param count The count of objects in the mempack + * @param backend The mempack backend + * @return 0 on success, or -1 on error + */ +GIT_EXTERN(int) git_mempack_object_count(size_t *count, git_odb_backend *backend); + +/** @} */ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/merge.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/merge.h index ef4bc5a..a9f5220 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/merge.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/merge.h @@ -14,13 +14,18 @@ /** * @file git2/sys/merge.h - * @brief Git merge driver backend and plugin routines - * @defgroup git_merge Git merge driver APIs + * @brief Custom merge drivers + * @defgroup git_merge Custom merge drivers * @ingroup Git * @{ */ GIT_BEGIN_DECL +/** + * A "merge driver" is a mechanism that can be configured to handle + * conflict resolution for files changed in both the "ours" and "theirs" + * side of a merge. + */ typedef struct git_merge_driver git_merge_driver; /** @@ -31,8 +36,11 @@ typedef struct git_merge_driver git_merge_driver; */ GIT_EXTERN(git_merge_driver *) git_merge_driver_lookup(const char *name); +/** The "text" merge driver */ #define GIT_MERGE_DRIVER_TEXT "text" +/** The "binary" merge driver */ #define GIT_MERGE_DRIVER_BINARY "binary" +/** The "union" merge driver */ #define GIT_MERGE_DRIVER_UNION "union" /** @@ -40,23 +48,48 @@ GIT_EXTERN(git_merge_driver *) git_merge_driver_lookup(const char *name); */ typedef struct git_merge_driver_source git_merge_driver_source; -/** Get the repository that the source data is coming from. */ +/** + * Get the repository that the source data is coming from. + * + * @param src the merge driver source + * @return the repository + */ GIT_EXTERN(git_repository *) git_merge_driver_source_repo( const git_merge_driver_source *src); -/** Gets the ancestor of the file to merge. */ +/** + * Gets the ancestor of the file to merge. + * + * @param src the merge driver source + * @return the ancestor or NULL if there was no ancestor + */ 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. */ +/** + * Gets the ours side of the file to merge. + * + * @param src the merge driver source + * @return the ours side or NULL if there was no ours side + */ 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. */ +/** + * Gets the theirs side of the file to merge. + * + * @param src the merge driver source + * @return the theirs side or NULL if there was no theirs side + */ 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 */ +/** + * Gets the merge file options that the merge was invoked with. + * + * @param src the merge driver source + * @return the options + */ GIT_EXTERN(const git_merge_file_options *) git_merge_driver_source_file_options( const git_merge_driver_source *src); @@ -72,6 +105,9 @@ GIT_EXTERN(const git_merge_file_options *) git_merge_driver_source_file_options( * 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). + * + * @param self the merge driver to initialize + * @return 0 on success, or a negative number on failure */ typedef int GIT_CALLBACK(git_merge_driver_init_fn)(git_merge_driver *self); @@ -84,6 +120,8 @@ typedef int GIT_CALLBACK(git_merge_driver_init_fn)(git_merge_driver *self); * This may be called even if the `initialize` callback was not made. * * Typically this function will free the `git_merge_driver` object itself. + * + * @param self the merge driver to shutdown */ typedef void GIT_CALLBACK(git_merge_driver_shutdown_fn)(git_merge_driver *self); @@ -104,6 +142,14 @@ typedef void GIT_CALLBACK(git_merge_driver_shutdown_fn)(git_merge_driver *self); * specified by the file's attributes. * * The `src` contains the data about the file to be merged. + * + * @param self the merge driver + * @param path_out the resolved path + * @param mode_out the resolved mode + * @param merged_out the merged output contents + * @param filter_name the filter that was invoked + * @param src the data about the unmerged file + * @return 0 on success, or an error code */ typedef int GIT_CALLBACK(git_merge_driver_apply_fn)( git_merge_driver *self, @@ -139,6 +185,7 @@ struct git_merge_driver { git_merge_driver_apply_fn apply; }; +/** The version for the `git_merge_driver` */ #define GIT_MERGE_DRIVER_VERSION 1 /** @@ -179,4 +226,5 @@ GIT_EXTERN(int) git_merge_driver_unregister(const char *name); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/midx.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/midx.h index e3d7498..b3a68af 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/midx.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/midx.h @@ -11,14 +11,52 @@ #include "git2/types.h" /** - * @file git2/midx.h - * @brief Git multi-pack-index routines - * @defgroup git_midx Git multi-pack-index routines + * @file git2/sys/midx.h + * @brief Incremental multi-pack indexes + * @defgroup git_midx Incremental multi-pack indexes * @ingroup Git * @{ */ GIT_BEGIN_DECL +/** + * Options structure for `git_midx_writer_options`. + * + * Initialize with `GIT_MIDX_WRITER_OPTIONS_INIT`. Alternatively, + * you can use `git_midx_writer_options_init`. + */ +typedef struct { + unsigned int version; + +#ifdef GIT_EXPERIMENTAL_SHA256 + /** The object ID type that this commit graph contains. */ + git_oid_t oid_type; +#endif +} git_midx_writer_options; + +/** Current version for the `git_midx_writer_options` structure */ +#define GIT_MIDX_WRITER_OPTIONS_VERSION 1 + +/** Static constructor for `git_midx_writer_options` */ +#define GIT_MIDX_WRITER_OPTIONS_INIT { \ + GIT_MIDX_WRITER_OPTIONS_VERSION \ + } + +/** + * Initialize git_midx_writer_options structure + * + * Initializes a `git_midx_writer_options` with default values. + * Equivalent to creating an instance with + * `GIT_MIDX_WRITER_OPTIONS_INIT`. + * + * @param opts The `git_midx_writer_options` struct to initialize. + * @param version The struct version; pass `GIT_MIDX_WRITER_OPTIONS_VERSION`. + * @return Zero on success; -1 on failure. + */ +GIT_EXTERN(int) git_midx_writer_options_init( + git_midx_writer_options *opts, + unsigned int version); + /** * Create a new writer for `multi-pack-index` files. * @@ -29,7 +67,11 @@ GIT_BEGIN_DECL */ GIT_EXTERN(int) git_midx_writer_new( git_midx_writer **out, - const char *pack_dir); + const char *pack_dir +#ifdef GIT_EXPERIMENTAL_SHA256 + , git_midx_writer_options *options +#endif + ); /** * Free the multi-pack-index writer and its resources. @@ -71,4 +113,5 @@ GIT_EXTERN(int) git_midx_writer_dump( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/odb_backend.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/odb_backend.h index 9ae0ed9..53d8d06 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/odb_backend.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/odb_backend.h @@ -13,9 +13,9 @@ #include "git2/odb.h" /** - * @file git2/sys/backend.h - * @brief Git custom backend implementors functions - * @defgroup git_backend Git custom backend APIs + * @file git2/sys/odb_backend.h + * @brief Object database backends for custom object storage + * @defgroup git_backend Object database backends for custom object storage * @ingroup Git * @{ */ @@ -36,7 +36,7 @@ struct git_odb_backend { 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. + * must be so that the remaining (GIT_OID_SHA1_HEXSIZE - len)*4 bits are 0s. */ int GIT_CALLBACK(read_prefix)( git_oid *, void **, size_t *, git_object_t *, @@ -69,11 +69,8 @@ struct git_odb_backend { * 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()`). + * The odb layer will automatically call this when needed on failed + * lookups (ie. `exists()`, `read()`, `read_header()`). */ int GIT_CALLBACK(refresh)(git_odb_backend *); @@ -109,7 +106,10 @@ struct git_odb_backend { void GIT_CALLBACK(free)(git_odb_backend *); }; +/** Current version for the `git_odb_backend_options` structure */ #define GIT_ODB_BACKEND_VERSION 1 + +/** Static constructor for `git_odb_backend_options` */ #define GIT_ODB_BACKEND_INIT {GIT_ODB_BACKEND_VERSION} /** @@ -170,6 +170,7 @@ GIT_EXTERN(void *) git_odb_backend_malloc(git_odb_backend *backend, size_t len); #endif +/** @} */ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/openssl.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/openssl.h index b41c55c..8b74a98 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/openssl.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/openssl.h @@ -9,6 +9,12 @@ #include "git2/common.h" +/** + * @file git2/sys/openssl.h + * @brief Custom OpenSSL functionality + * @defgroup git_openssl Custom OpenSSL functionality + * @{ + */ GIT_BEGIN_DECL /** @@ -33,6 +39,7 @@ GIT_BEGIN_DECL */ GIT_EXTERN(int) git_openssl_set_locking(void); +/** @} */ GIT_END_DECL -#endif +#endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/path.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/path.h index 2a0c7e0..2963bca 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/path.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/path.h @@ -10,6 +10,16 @@ #include "git2/common.h" +/** + * @file git2/sys/path.h + * @brief Custom path handling + * @defgroup git_path Custom path handling + * @ingroup Git + * + * Merge will take two commits and attempt to produce a commit that + * includes the changes that were made in both branches. + * @{ + */ GIT_BEGIN_DECL /** @@ -59,6 +69,7 @@ typedef enum { */ 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 */ +#endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/refdb_backend.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/refdb_backend.h index c31e26d..813822a 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/refdb_backend.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/refdb_backend.h @@ -12,9 +12,9 @@ #include "git2/oid.h" /** - * @file git2/refdb_backend.h - * @brief Git custom refs backend functions - * @defgroup git_refdb_backend Git custom refs backend API + * @file git2/sys/refdb_backend.h + * @brief Custom reference database backends for refs storage + * @defgroup git_refdb_backend Custom reference database backends for refs storage * @ingroup Git * @{ */ @@ -65,9 +65,9 @@ struct git_refdb_backend { * * A refdb implementation must provide this function. * - * @arg exists The implementation shall set this to `0` if a ref does + * @param 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 + * @param ref_name The reference's name that should be checked for * existence. * @return `0` on success, a negative error value code. */ @@ -81,9 +81,9 @@ struct git_refdb_backend { * * A refdb implementation must provide this function. * - * @arg out The implementation shall set this to the allocated + * @param 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 + * @param 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. @@ -98,12 +98,12 @@ struct git_refdb_backend { * * A refdb implementation must provide this function. * - * @arg out The implementation shall set this to the allocated + * @param 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 + * @param 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. @@ -118,20 +118,20 @@ struct git_refdb_backend { * * A refdb implementation must provide this function. * - * @arg ref The reference to persist. May either be a symbolic or + * @param 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 + * @param 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 + * @param 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 + * @param 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 + * @param 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 + * @param 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 @@ -149,15 +149,15 @@ struct git_refdb_backend { * * A refdb implementation must provide this function. * - * @arg out The implementation shall set this to the newly created + * @param 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 + * @param old_name The current name of the reference that is to be renamed. + * @param new_name The new name that the old reference shall be renamed to. + * @param 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 + * @param 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 + * @param 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. */ @@ -173,11 +173,11 @@ struct git_refdb_backend { * * 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 + * @param ref_name The name of the reference name that shall be deleted. + * @param 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 + * @param 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. @@ -243,7 +243,7 @@ struct git_refdb_backend { * * A refdb implementation must provide this function. * - * @arg reflog The complete reference log for a given reference. Note + * @param 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 @@ -255,8 +255,8 @@ struct git_refdb_backend { * * 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. + * @param old_name The name of old reference whose reflog shall be renamed from. + * @param 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); @@ -266,7 +266,7 @@ struct git_refdb_backend { * * A refdb implementation must provide this function. * - * @arg name The name of the reference whose reflog shall be deleted. + * @param 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); @@ -277,9 +277,9 @@ struct git_refdb_backend { * 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 + * @param payload_out Opaque parameter that will be passed verbosely to * `unlock`. - * @arg refname Reference that shall be locked. + * @param 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); @@ -294,16 +294,16 @@ struct git_refdb_backend { * 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 + * @param payload The payload returned by `lock`. + * @param 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` + * @param 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 + * @param ref The reference which should be unlocked. + * @param 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 + * @param 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 @@ -312,7 +312,10 @@ struct git_refdb_backend { const git_reference *ref, const git_signature *sig, const char *message); }; +/** Current version for the `git_refdb_backend_options` structure */ #define GIT_REFDB_BACKEND_VERSION 1 + +/** Static constructor for `git_refdb_backend_options` */ #define GIT_REFDB_BACKEND_INIT {GIT_REFDB_BACKEND_VERSION} /** @@ -356,6 +359,7 @@ GIT_EXTERN(int) git_refdb_set_backend( git_refdb *refdb, git_refdb_backend *backend); +/** @} */ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/reflog.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/reflog.h deleted file mode 100644 index c9d0041..0000000 --- a/Clibgit2.xcframework/ios-arm64/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/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/refs.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/refs.h index d2ce2e0..e434e67 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/refs.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/refs.h @@ -13,8 +13,8 @@ /** * @file git2/sys/refs.h - * @brief Low-level Git ref creation - * @defgroup git_backend Git custom backend APIs + * @brief Low-level git reference creation + * @defgroup git_backend Low-level git reference creation * @ingroup Git * @{ */ @@ -46,4 +46,5 @@ GIT_EXTERN(git_reference *) git_reference__alloc_symbolic( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/remote.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/remote.h new file mode 100644 index 0000000..476965d --- /dev/null +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/remote.h @@ -0,0 +1,53 @@ +/* + * 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_remote_h +#define INCLUDE_sys_git_remote_h + +#include "git2/remote.h" + +/** + * @file git2/sys/remote.h + * @brief Low-level remote functionality for custom transports + * @defgroup git_remote Low-level remote functionality for custom transports + * @ingroup Git + * @{ +*/ + +GIT_BEGIN_DECL + +/** + * A remote's capabilities. + */ +typedef enum { + /** Remote supports fetching an advertised object by ID. */ + GIT_REMOTE_CAPABILITY_TIP_OID = (1 << 0), + + /** Remote supports fetching an individual reachable object. */ + GIT_REMOTE_CAPABILITY_REACHABLE_OID = (1 << 1), + + /** Remote supports push options. */ + GIT_REMOTE_CAPABILITY_PUSH_OPTIONS = (1 << 2), +} git_remote_capability_t; + +/** + * Disposes libgit2-initialized fields from a git_remote_connect_options. + * This should only be used for git_remote_connect_options returned by + * git_transport_remote_connect_options. + * + * Note that this does not free the `git_remote_connect_options` itself, just + * the memory pointed to by it. + * + * @param opts The `git_remote_connect_options` struct to dispose. + */ +GIT_EXTERN(void) git_remote_connect_options_dispose( + git_remote_connect_options *opts); + +/** @} */ +GIT_END_DECL + +#endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/repository.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/repository.h index 892be66..026ac8a 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/repository.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/repository.h @@ -9,16 +9,71 @@ #include "git2/common.h" #include "git2/types.h" +#include "git2/oid.h" /** * @file git2/sys/repository.h - * @brief Git repository custom implementation routines - * @defgroup git_backend Git custom backend APIs + * @brief Custom repository handling + * @defgroup git_repository Custom repository handling * @ingroup Git * @{ */ GIT_BEGIN_DECL +#ifdef GIT_EXPERIMENTAL_SHA256 + +/** + * The options for creating an repository from scratch. + * + * Initialize with `GIT_REPOSITORY_NEW_OPTIONS_INIT`. Alternatively, + * you can use `git_repository_new_options_init`. + * + * @options[version] GIT_REPOSITORY_NEW_OPTIONS_VERSION + * @options[init_macro] GIT_REPOSITORY_NEW_OPTIONS_INIT + * @options[init_function] git_repository_new_options_init + */ +typedef struct git_repository_new_options { + unsigned int version; /**< The version */ + + /** + * The object ID type for the object IDs that exist in the index. + * + * If this is not specified, this defaults to `GIT_OID_SHA1`. + */ + git_oid_t oid_type; +} git_repository_new_options; + +/** Current version for the `git_repository_new_options` structure */ +#define GIT_REPOSITORY_NEW_OPTIONS_VERSION 1 + +/** Static constructor for `git_repository_new_options` */ +#define GIT_REPOSITORY_NEW_OPTIONS_INIT { GIT_REPOSITORY_NEW_OPTIONS_VERSION } + +/** + * Initialize git_repository_new_options structure + * + * Initializes a `git_repository_new_options` with default values. + * Equivalent to creating an instance with + * `GIT_REPOSITORY_NEW_OPTIONS_INIT`. + * + * @param opts The `git_repository_new_options` struct to initialize. + * @param version The struct version; pass `GIT_REPOSITORY_NEW_OPTIONS_VERSION`. + * @return Zero on success; -1 on failure. + */ +GIT_EXTERN(int) git_repository_new_options_init( + git_repository_new_options *opts, + unsigned int version); + +/** + * Create a new repository with no backends. + * + * @param[out] out The blank repository + * @param opts the options for repository creation, or NULL for defaults + * @return 0 on success, or an error code + */ +GIT_EXTERN(int) git_repository_new(git_repository **out, git_repository_new_options *opts); +#else + /** * Create a new repository with neither backends nor config object * @@ -29,11 +84,13 @@ GIT_BEGIN_DECL * can fail to function properly: locations under $GIT_DIR, $GIT_COMMON_DIR, * or $GIT_INFO_DIR are impacted. * - * @param out The blank repository + * @param[out] out The blank repository * @return 0 on success, or an error code */ GIT_EXTERN(int) git_repository_new(git_repository **out); +#endif + /** * Reset all the internal state in a repository. * @@ -156,6 +213,7 @@ GIT_EXTERN(int) git_repository_set_bare(git_repository *repo); * and caches them so that subsequent calls to `git_submodule_lookup` are O(1). * * @param repo the repository whose submodules will be cached. + * @return 0 on success, or an error code */ GIT_EXTERN(int) git_repository_submodule_cache_all( git_repository *repo); @@ -171,10 +229,12 @@ GIT_EXTERN(int) git_repository_submodule_cache_all( * of these has changed, the cache might become invalid. * * @param repo the repository whose submodule cache will be cleared + * @return 0 on success, or an error code */ GIT_EXTERN(int) git_repository_submodule_cache_clear( git_repository *repo); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/stream.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/stream.h index 6f93cc4..eabff68 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/stream.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/stream.h @@ -11,8 +11,16 @@ #include "git2/types.h" #include "git2/proxy.h" +/** + * @file git2/sys/stream.h + * @brief Streaming file I/O functionality + * @defgroup git_stream Streaming file I/O functionality + * @ingroup Git + * @{ + */ GIT_BEGIN_DECL +/** Current version for the `git_stream` structures */ #define GIT_STREAM_VERSION 1 /** @@ -29,8 +37,22 @@ GIT_BEGIN_DECL typedef struct git_stream { int version; - int encrypted; - int proxy_support; + unsigned int encrypted : 1, + proxy_support : 1; + + /** + * Timeout for read and write operations; can be set to `0` to + * block indefinitely. + */ + int timeout; + + /** + * Timeout to connect to the remote server; can be set to `0` + * to use the system defaults. This can be shorter than the + * system default - often 75 seconds - but cannot be longer. + */ + int connect_timeout; + 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); @@ -79,7 +101,7 @@ typedef enum { GIT_STREAM_STANDARD = 1, /** A TLS-encrypted socket. */ - GIT_STREAM_TLS = 2, + GIT_STREAM_TLS = 2 } git_stream_t; /** @@ -133,6 +155,7 @@ GIT_EXTERN(int) git_stream_register_tls(git_stream_cb ctor); #endif +/**@}*/ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/transport.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/transport.h index fee3454..ad6765c 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/transport.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/sys/transport.h @@ -9,46 +9,40 @@ #define INCLUDE_sys_git_transport_h #include "git2/net.h" +#include "git2/oidarray.h" +#include "git2/proxy.h" +#include "git2/remote.h" +#include "git2/strarray.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 + * @brief Custom transport registration interfaces and functions + * @defgroup git_transport Custom transport registration * @ingroup Git + * + * Callers can override the default HTTPS or SSH implementation by + * specifying a custom transport. * @{ */ GIT_BEGIN_DECL /** - * Flags to pass to transport - * - * Currently unused. + * The negotiation state during a fetch smart transport negotiation. */ -typedef enum { - GIT_TRANSPORTFLAGS_NONE = 0, -} git_transport_flags_t; +typedef struct { + const git_remote_head * const *refs; + size_t refs_len; + git_oid *shallow_roots; + size_t shallow_roots_len; + int depth; +} git_fetch_negotiation; 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. @@ -56,11 +50,39 @@ struct git_transport { 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); + const git_remote_connect_options *connect_opts); + + /** + * Resets the connect options for the given transport. This + * is useful for updating settings or callbacks for an already + * connected transport. + */ + int GIT_CALLBACK(set_connect_opts)( + git_transport *transport, + const git_remote_connect_options *connect_opts); + + /** + * Gets the capabilities for this remote repository. + * + * This function may be called after a successful call to + * `connect()`. + */ + int GIT_CALLBACK(capabilities)( + unsigned int *capabilities, + git_transport *transport); + +#ifdef GIT_EXPERIMENTAL_SHA256 + /** + * Gets the object type for the remote repository. + * + * This function may be called after a successful call to + * `connect()`. + */ + int GIT_CALLBACK(oid_type)( + git_oid_t *object_type, + git_transport *transport); +#endif /** * Get the list of available references in the remote repository. @@ -75,7 +97,9 @@ struct git_transport { 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); + int GIT_CALLBACK(push)( + git_transport *transport, + git_push *push); /** * Negotiate a fetch with the remote repository. @@ -87,8 +111,17 @@ struct git_transport { int GIT_CALLBACK(negotiate_fetch)( git_transport *transport, git_repository *repo, - const git_remote_head * const *refs, - size_t count); + const git_fetch_negotiation *fetch_data); + + /** + * Return the shallow roots of the remote. + * + * This function may be called after a successful call to + * `negotiate_fetch`. + */ + int GIT_CALLBACK(shallow_roots)( + git_oidarray *out, + git_transport *transport); /** * Start downloading the packfile from the remote repository. @@ -99,16 +132,11 @@ struct git_transport { int GIT_CALLBACK(download_pack)( git_transport *transport, git_repository *repo, - git_indexer_progress *stats, - git_indexer_progress_cb progress_cb, - void *progress_payload); + git_indexer_progress *stats); /** 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); @@ -124,7 +152,10 @@ struct git_transport { void GIT_CALLBACK(free)(git_transport *transport); }; +/** Current version for the `git_transport` structure */ #define GIT_TRANSPORT_VERSION 1 + +/** Static constructor for `git_transport` */ #define GIT_TRANSPORT_INIT {GIT_TRANSPORT_VERSION} /** @@ -270,14 +301,18 @@ GIT_EXTERN(int) git_transport_smart_certificate_check(git_transport *transport, 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 + * Get a copy of the remote connect options * - * The url is copied and must be freed by the caller. + * All data is copied and must be freed by the caller by calling + * `git_remote_connect_options_dispose`. * * @param out options struct to fill * @param transport the transport to extract the data from. + * @return 0 on success, or an error code */ -GIT_EXTERN(int) git_transport_smart_proxy_options(git_proxy_options *out, git_transport *transport); +GIT_EXTERN(int) git_transport_remote_connect_options( + git_remote_connect_options *out, + git_transport *transport); /* *** End of base transport interface *** @@ -289,7 +324,7 @@ typedef enum { GIT_SERVICE_UPLOADPACK_LS = 1, GIT_SERVICE_UPLOADPACK = 2, GIT_SERVICE_RECEIVEPACK_LS = 3, - GIT_SERVICE_RECEIVEPACK = 4, + GIT_SERVICE_RECEIVEPACK = 4 } git_smart_service_t; typedef struct git_smart_subtransport git_smart_subtransport; @@ -361,7 +396,14 @@ struct git_smart_subtransport { void GIT_CALLBACK(free)(git_smart_subtransport *transport); }; -/** A function which creates a new subtransport for the smart transport */ +/** + * A function that creates a new subtransport for the smart transport + * + * @param out the smart subtransport + * @param owner the transport owner + * @param param the input parameter + * @return 0 on success, or an error code + */ typedef int GIT_CALLBACK(git_smart_subtransport_cb)( git_smart_subtransport **out, git_transport *owner, @@ -404,6 +446,7 @@ typedef struct git_smart_subtransport_definition { * * @param out The newly created subtransport * @param owner The smart transport to own this subtransport + * @param param custom parameters for the subtransport * @return 0 or an error code */ GIT_EXTERN(int) git_smart_subtransport_http( @@ -416,6 +459,7 @@ GIT_EXTERN(int) git_smart_subtransport_http( * * @param out The newly created subtransport * @param owner The smart transport to own this subtransport + * @param param custom parameters for the subtransport * @return 0 or an error code */ GIT_EXTERN(int) git_smart_subtransport_git( @@ -428,6 +472,7 @@ GIT_EXTERN(int) git_smart_subtransport_git( * * @param out The newly created subtransport * @param owner The smart transport to own this subtransport + * @param param custom parameters for the subtransport * @return 0 or an error code */ GIT_EXTERN(int) git_smart_subtransport_ssh( @@ -437,4 +482,5 @@ GIT_EXTERN(int) git_smart_subtransport_ssh( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/tag.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/tag.h index a392136..3b0c12e 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/tag.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/tag.h @@ -15,7 +15,7 @@ /** * @file git2/tag.h - * @brief Git tag parsing routines + * @brief A (nearly) immutable pointer to a commit; useful for versioning * @defgroup git_tag Git tag management * @ingroup Git * @{ @@ -335,6 +335,7 @@ typedef int GIT_CALLBACK(git_tag_foreach_cb)(const char *name, git_oid *oid, voi * @param repo Repository * @param callback Callback function * @param payload Pointer to callback data (optional) + * @return 0 on success or an error code */ GIT_EXTERN(int) git_tag_foreach( git_repository *repo, @@ -362,6 +363,7 @@ GIT_EXTERN(int) git_tag_peel( * * @param out Pointer to store the copy of the tag * @param source Original tag to copy + * @return 0 */ GIT_EXTERN(int) git_tag_dup(git_tag **out, git_tag *source); @@ -379,4 +381,5 @@ GIT_EXTERN(int) git_tag_name_is_valid(int *valid, const char *name); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/trace.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/trace.h index 8cee3a9..62cb87c 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/trace.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/trace.h @@ -12,8 +12,8 @@ /** * @file git2/trace.h - * @brief Git tracing configuration routines - * @defgroup git_trace Git tracing configuration routines + * @brief Tracing functionality to introspect libgit2 in your application + * @defgroup git_trace Tracing functionality to introspect libgit2 in your application * @ingroup Git * @{ */ @@ -48,8 +48,13 @@ typedef enum { /** * An instance for a tracing function + * + * @param level the trace level + * @param msg the trace message */ -typedef void GIT_CALLBACK(git_trace_cb)(git_trace_level_t level, const char *msg); +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 @@ -64,4 +69,5 @@ GIT_EXTERN(int) git_trace_set(git_trace_level_t level, git_trace_cb cb); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/transaction.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/transaction.h index 4938570..212d329 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/transaction.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/transaction.h @@ -12,8 +12,8 @@ /** * @file git2/transaction.h - * @brief Git transactional reference routines - * @defgroup git_transaction Git transactional reference routines + * @brief Transactional reference handling + * @defgroup git_transaction Transactional reference handling * @ingroup Git * @{ */ @@ -118,4 +118,5 @@ GIT_EXTERN(void) git_transaction_free(git_transaction *tx); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/transport.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/transport.h index 5a27de9..04a7390 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/transport.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/transport.h @@ -15,8 +15,8 @@ /** * @file git2/transport.h - * @brief Git transport interfaces and functions - * @defgroup git_transport interfaces and functions + * @brief Transports are the low-level mechanism to connect to a remote server + * @defgroup git_transport Transports are the low-level mechanism to connect to a remote server * @ingroup Git * @{ */ @@ -30,10 +30,18 @@ GIT_BEGIN_DECL * @param str The message from the transport * @param len The length of the message * @param payload Payload provided by the caller + * @return 0 on success or an error code */ typedef int GIT_CALLBACK(git_transport_message_cb)(const char *str, int len, void *payload); -/** Signature of a function which creates a transport */ +/** + * Signature of a function which creates a transport. + * + * @param out the transport generate + * @param owner the owner for the transport + * @param param the param to the transport creation + * @return 0 on success or an error code + */ typedef int GIT_CALLBACK(git_transport_cb)(git_transport **out, git_remote *owner, void *param); /** @} */ diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/tree.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/tree.h index f2289fc..b8e2de2 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/tree.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/tree.h @@ -14,8 +14,8 @@ /** * @file git2/tree.h - * @brief Git tree parsing, loading routines - * @defgroup git_tree Git tree parsing, loading routines + * @brief Trees are collections of files and folders to make up the repository hierarchy + * @defgroup git_tree Trees are collections of files and folders to make up the repository hierarchy * @ingroup Git * @{ */ @@ -24,7 +24,7 @@ GIT_BEGIN_DECL /** * Lookup a tree object from the repository. * - * @param out Pointer to the looked up tree + * @param[out] 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 @@ -255,7 +255,7 @@ GIT_EXTERN(int) git_treebuilder_new( git_treebuilder **out, git_repository *repo, const git_tree *source); /** - * Clear all the entires in the builder + * Clear all the entries in the builder * * @param bld Builder to clear * @return 0 on success; error code otherwise @@ -345,6 +345,10 @@ GIT_EXTERN(int) git_treebuilder_remove( * 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). + * + * @param entry the tree entry for the callback to examine + * @param payload the payload from the caller + * @return 0 to do nothing, non-zero to remove the entry */ typedef int GIT_CALLBACK(git_treebuilder_filter_cb)( const git_tree_entry *entry, void *payload); @@ -379,14 +383,21 @@ GIT_EXTERN(int) git_treebuilder_filter( GIT_EXTERN(int) git_treebuilder_write( git_oid *id, git_treebuilder *bld); -/** Callback for the tree traversal method */ +/** + * Callback for the tree traversal method. + * + * @param root the current (relative) root to the entry + * @param entry the tree entry + * @param payload the caller-provided callback payload + * @return a positive value to skip the entry, a negative value to stop the walk + */ 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_POST = 1 /* Post-order */ } git_treewalk_mode; /** @@ -418,6 +429,7 @@ GIT_EXTERN(int) git_tree_walk( * * @param out Pointer to store the copy of the tree * @param source Original tree to copy + * @return 0 */ GIT_EXTERN(int) git_tree_dup(git_tree **out, git_tree *source); @@ -428,7 +440,7 @@ 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_REMOVE } git_tree_update_t; /** @@ -469,6 +481,6 @@ typedef struct { 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/Clibgit2.xcframework/ios-arm64/Headers/git2/types.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/types.h index aac8e42..a4afd18 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/types.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/types.h @@ -78,16 +78,21 @@ typedef enum { 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_REF_DELTA = 7 /**< A delta, base is given by object id. */ } git_object_t; -/** An open object database handle. */ +/** + * An object database stores the objects (commit, trees, blobs, tags, + * etc) for a repository. + */ 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 */ +/** + * A "raw" object read from the object database. + */ typedef struct git_odb_object git_odb_object; /** A stream to read/write from the ODB */ @@ -194,7 +199,18 @@ 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. */ +/** + * Annotated commits are commits with additional metadata about how the + * commit was resolved, which can be used for maintaining the user's + * "intent" through commands like merge and rebase. + * + * For example, if a user wants to conceptually "merge `HEAD`", then the + * commit portion of an annotated commit will point to the `HEAD` commit, + * but the _annotation_ will denote the ref `HEAD`. This allows git to + * perform the internal bookkeeping so that the system knows both the + * content of what is being merged but also how the content was looked up + * so that it can be recorded in the reflog appropriately. + */ typedef struct git_annotated_commit git_annotated_commit; /** Representation of a status collection */ @@ -208,14 +224,14 @@ 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_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_ALL = GIT_BRANCH_LOCAL|GIT_BRANCH_REMOTE } git_branch_t; /** Valid modes for index and tree entries. */ @@ -225,7 +241,7 @@ typedef enum { GIT_FILEMODE_BLOB = 0100644, GIT_FILEMODE_BLOB_EXECUTABLE = 0100755, GIT_FILEMODE_LINK = 0120000, - GIT_FILEMODE_COMMIT = 0160000, + GIT_FILEMODE_COMMIT = 0160000 } git_filemode_t; /** @@ -236,7 +252,7 @@ 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). + * which case it does not have backing configuration entries). */ typedef struct git_remote git_remote; @@ -334,7 +350,7 @@ typedef enum { 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_ALL = 4 /**< never dirty */ } git_submodule_ignore_t; /** @@ -350,7 +366,7 @@ typedef enum { typedef enum { GIT_SUBMODULE_RECURSE_NO = 0, GIT_SUBMODULE_RECURSE_YES = 1, - GIT_SUBMODULE_RECURSE_ONDEMAND = 2, + GIT_SUBMODULE_RECURSE_ONDEMAND = 2 } git_submodule_recurse_t; typedef struct git_writestream git_writestream; diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/version.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/version.h index 3503a62..587a101 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/version.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/version.h @@ -7,12 +7,71 @@ #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 +#include "common.h" -#define LIBGIT2_SOVERSION "1.3" +/** + * @file git2/version.h + * @brief The version of libgit2 + * @ingroup Git + * @{ + */ +GIT_BEGIN_DECL + +/** + * The version string for libgit2. This string follows semantic + * versioning (v2) guidelines. + */ +#define LIBGIT2_VERSION "1.9.1" + +/** The major version number for this version of libgit2. */ +#define LIBGIT2_VERSION_MAJOR 1 + +/** The minor version number for this version of libgit2. */ +#define LIBGIT2_VERSION_MINOR 9 + +/** The revision ("teeny") version number for this version of libgit2. */ +#define LIBGIT2_VERSION_REVISION 1 + +/** The Windows DLL patch number for this version of libgit2. */ +#define LIBGIT2_VERSION_PATCH 0 + +/** + * The prerelease string for this version of libgit2. For development + * (nightly) builds, this will be "alpha". For prereleases, this will be + * a prerelease name like "beta" or "rc1". For final releases, this will + * be `NULL`. + */ +#define LIBGIT2_VERSION_PRERELEASE NULL + +/** + * The library ABI soversion for this version of libgit2. This should + * only be changed when the library has a breaking ABI change, and so + * may not reflect the library's API version number. + */ +#define LIBGIT2_SOVERSION "1.9" + +/** + * An integer value representing the libgit2 version number. For example, + * libgit2 1.6.3 is 1060300. + */ +#define LIBGIT2_VERSION_NUMBER ( \ + (LIBGIT2_VERSION_MAJOR * 1000000) + \ + (LIBGIT2_VERSION_MINOR * 10000) + \ + (LIBGIT2_VERSION_REVISION * 100)) + +/** + * Compare the libgit2 version against a given version. Evaluates to true + * if the given major, minor, and revision values are greater than or equal + * to the currently running libgit2 version. For example: + * + * #if LIBGIT2_VERSION_CHECK(1, 6, 3) + * # error libgit2 version is >= 1.6.3 + * #endif + */ +#define LIBGIT2_VERSION_CHECK(major, minor, revision) \ + (LIBGIT2_VERSION_NUMBER >= ((major)*1000000)+((minor)*10000)+((revision)*100)) + +/** @} */ +GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/git2/worktree.h b/Clibgit2.xcframework/ios-arm64/Headers/git2/worktree.h index 23084d8..fd37517 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/git2/worktree.h +++ b/Clibgit2.xcframework/ios-arm64/Headers/git2/worktree.h @@ -11,11 +11,12 @@ #include "buffer.h" #include "types.h" #include "strarray.h" +#include "checkout.h" /** - * @file git2/worktrees.h - * @brief Git worktree related functions - * @defgroup git_commit Git worktree related functions + * @file git2/worktree.h + * @brief Additional working directories for a repository + * @defgroup git_commit Additional working directories for a repository * @ingroup Git * @{ */ @@ -52,6 +53,7 @@ GIT_EXTERN(int) git_worktree_lookup(git_worktree **out, git_repository *repo, co * * @param out Out-pointer for the newly allocated worktree * @param repo Repository to look up worktree for + * @return 0 or an error code */ GIT_EXTERN(int) git_worktree_open_from_repository(git_worktree **out, git_repository *repo); @@ -84,12 +86,22 @@ GIT_EXTERN(int) git_worktree_validate(const git_worktree *wt); 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 */ + int lock; /**< lock newly created worktree */ + int checkout_existing; /**< allow checkout of existing branch matching worktree name */ + git_reference *ref; /**< reference to use for the new worktree HEAD */ + + /** + * Options for the checkout. + */ + git_checkout_options checkout_options; } git_worktree_add_options; +/** Current version for the `git_worktree_add_options` structure */ #define GIT_WORKTREE_ADD_OPTIONS_VERSION 1 -#define GIT_WORKTREE_ADD_OPTIONS_INIT {GIT_WORKTREE_ADD_OPTIONS_VERSION,0,NULL} + +/** Static constructor for `git_worktree_add_options` */ +#define GIT_WORKTREE_ADD_OPTIONS_INIT { GIT_WORKTREE_ADD_OPTIONS_VERSION, \ + 0, 0, NULL, GIT_CHECKOUT_OPTIONS_INIT } /** * Initialize git_worktree_add_options structure @@ -185,7 +197,7 @@ typedef enum { /* 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_WORKING_TREE = 1u << 2 } git_worktree_prune_t; /** @@ -202,7 +214,10 @@ typedef struct git_worktree_prune_options { uint32_t flags; } git_worktree_prune_options; +/** Current version for the `git_worktree_prune_options` structure */ #define GIT_WORKTREE_PRUNE_OPTIONS_VERSION 1 + +/** Static constructor for `git_worktree_prune_options` */ #define GIT_WORKTREE_PRUNE_OPTIONS_INIT {GIT_WORKTREE_PRUNE_OPTIONS_VERSION,0} /** @@ -231,7 +246,13 @@ GIT_EXTERN(int) git_worktree_prune_options_init( * * 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. + * positive value. If the worktree is not prunable, an error + * message will be set (visible in `giterr_last`) with details about + * why. + * + * @param wt Worktree to check. + * @param opts The prunable options. + * @return 1 if the worktree is prunable, 0 otherwise, or an error code. */ GIT_EXTERN(int) git_worktree_is_prunable(git_worktree *wt, git_worktree_prune_options *opts); @@ -253,4 +274,5 @@ GIT_EXTERN(int) git_worktree_prune(git_worktree *wt, /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64/Headers/libssh2.h b/Clibgit2.xcframework/ios-arm64/Headers/libssh2.h new file mode 100644 index 0000000..f47858a --- /dev/null +++ b/Clibgit2.xcframework/ios-arm64/Headers/libssh2.h @@ -0,0 +1,1516 @@ +/* Copyright (C) Sara Golemon + * Copyright (C) Daniel Stenberg + * Copyright (C) Simon Josefsson + * All rights reserved. + * + * Redistribution and use in source and binary forms, + * with or without modification, are permitted provided + * that the following conditions are met: + * + * Redistributions of source code must retain the above + * copyright notice, this list of conditions and the + * following disclaimer. + * + * 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. + * + * Neither the name of the copyright holder nor the names + * of any other contributors may be used to endorse or + * promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + * CONTRIBUTORS "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 COPYRIGHT OWNER OR + * CONTRIBUTORS 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. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef LIBSSH2_H +#define LIBSSH2_H 1 + +#define LIBSSH2_COPYRIGHT "The libssh2 project and its contributors." + +/* We use underscore instead of dash when appending DEV in dev versions just + to make the BANNER define (used by src/session.c) be a valid SSH + banner. Release versions have no appended strings and may of course not + have dashes either. */ +#define LIBSSH2_VERSION "1.11.1" + +/* The numeric version number is also available "in parts" by using these + defines: */ +#define LIBSSH2_VERSION_MAJOR 1 +#define LIBSSH2_VERSION_MINOR 11 +#define LIBSSH2_VERSION_PATCH 1 + +/* This is the numeric version of the libssh2 version number, meant for easier + parsing and comparisons by programs. The LIBSSH2_VERSION_NUM define will + always follow this syntax: + + 0xXXYYZZ + + Where XX, YY and ZZ are the main version, release and patch numbers in + hexadecimal (using 8 bits each). All three numbers are always represented + using two digits. 1.2 would appear as "0x010200" while version 9.11.7 + appears as "0x090b07". + + This 6-digit (24 bits) hexadecimal number does not show pre-release number, + and it is always a greater number in a more recent release. It makes + comparisons with greater than and less than work. +*/ +#define LIBSSH2_VERSION_NUM 0x010b01 + +/* + * This is the date and time when the full source package was created. The + * timestamp is not stored in the source code repo, as the timestamp is + * properly set in the tarballs by the maketgz script. + * + * The format of the date should follow this template: + * + * "Mon Feb 12 11:35:33 UTC 2007" + */ +#define LIBSSH2_TIMESTAMP "Wed Oct 16 08:03:21 UTC 2024" + +#ifndef RC_INVOKED + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef _WIN32 +# include +# include +#endif + +#include +#include +#include +#include + +/* Allow alternate API prefix from CFLAGS or calling app */ +#ifndef LIBSSH2_API +# ifdef _WIN32 +# if defined(LIBSSH2_EXPORTS) || defined(_WINDLL) +# ifdef LIBSSH2_LIBRARY +# define LIBSSH2_API __declspec(dllexport) +# else +# define LIBSSH2_API __declspec(dllimport) +# endif /* LIBSSH2_LIBRARY */ +# else +# define LIBSSH2_API +# endif +# else /* !_WIN32 */ +# define LIBSSH2_API +# endif /* _WIN32 */ +#endif /* LIBSSH2_API */ + +#ifdef HAVE_SYS_UIO_H +# include +#endif + +#ifdef _MSC_VER +typedef unsigned char uint8_t; +typedef unsigned short int uint16_t; +typedef unsigned int uint32_t; +typedef __int32 int32_t; +typedef __int64 int64_t; +typedef unsigned __int64 uint64_t; +typedef unsigned __int64 libssh2_uint64_t; +typedef __int64 libssh2_int64_t; +#if (!defined(HAVE_SSIZE_T) && !defined(ssize_t)) +typedef SSIZE_T ssize_t; +#define HAVE_SSIZE_T +#endif +#else +#include +typedef unsigned long long libssh2_uint64_t; +typedef long long libssh2_int64_t; +#endif + +#ifdef _WIN32 +typedef SOCKET libssh2_socket_t; +#define LIBSSH2_INVALID_SOCKET INVALID_SOCKET +#define LIBSSH2_SOCKET_CLOSE(s) closesocket(s) +#else /* !_WIN32 */ +typedef int libssh2_socket_t; +#define LIBSSH2_INVALID_SOCKET -1 +#define LIBSSH2_SOCKET_CLOSE(s) close(s) +#endif /* _WIN32 */ + +/* Compile-time deprecation macros */ +#if !defined(LIBSSH2_DISABLE_DEPRECATION) && !defined(LIBSSH2_LIBRARY) +# if defined(_MSC_VER) +# if _MSC_VER >= 1400 +# define LIBSSH2_DEPRECATED(version, message) \ + __declspec(deprecated("since libssh2 " # version ". " message)) +# elif _MSC_VER >= 1310 +# define LIBSSH2_DEPRECATED(version, message) \ + __declspec(deprecated) +# endif +# elif defined(__GNUC__) && !defined(__INTEL_COMPILER) +# if (defined(__clang__) && __clang_major__ >= 3) || \ + (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)) +# define LIBSSH2_DEPRECATED(version, message) \ + __attribute__((deprecated("since libssh2 " # version ". " message))) +# elif __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 0) +# define LIBSSH2_DEPRECATED(version, message) \ + __attribute__((deprecated)) +# endif +# elif defined(__SUNPRO_C) && __SUNPRO_C >= 0x5130 +# define LIBSSH2_DEPRECATED(version, message) \ + __attribute__((deprecated)) +# endif +#endif + +#ifndef LIBSSH2_DEPRECATED +#define LIBSSH2_DEPRECATED(version, message) +#endif + +/* + * Determine whether there is small or large file support on windows. + */ + +#if defined(_MSC_VER) && !defined(_WIN32_WCE) +# if (_MSC_VER >= 900) && (_INTEGRAL_MAX_BITS >= 64) +# define LIBSSH2_USE_WIN32_LARGE_FILES +# else +# define LIBSSH2_USE_WIN32_SMALL_FILES +# endif +#endif + +#if defined(__MINGW32__) && !defined(LIBSSH2_USE_WIN32_LARGE_FILES) +# define LIBSSH2_USE_WIN32_LARGE_FILES +#endif + +#if defined(__WATCOMC__) && !defined(LIBSSH2_USE_WIN32_LARGE_FILES) +# define LIBSSH2_USE_WIN32_LARGE_FILES +#endif + +#if defined(__POCC__) +# undef LIBSSH2_USE_WIN32_LARGE_FILES +#endif + +#if defined(_WIN32) && !defined(LIBSSH2_USE_WIN32_LARGE_FILES) && \ + !defined(LIBSSH2_USE_WIN32_SMALL_FILES) +# define LIBSSH2_USE_WIN32_SMALL_FILES +#endif + +/* + * Large file (>2Gb) support using WIN32 functions. + */ + +#ifdef LIBSSH2_USE_WIN32_LARGE_FILES +# include +# define LIBSSH2_STRUCT_STAT_SIZE_FORMAT "%I64d" +typedef struct _stati64 libssh2_struct_stat; +typedef __int64 libssh2_struct_stat_size; +#endif + +/* + * Small file (<2Gb) support using WIN32 functions. + */ + +#ifdef LIBSSH2_USE_WIN32_SMALL_FILES +# ifndef _WIN32_WCE +# define LIBSSH2_STRUCT_STAT_SIZE_FORMAT "%d" +typedef struct _stat libssh2_struct_stat; +typedef off_t libssh2_struct_stat_size; +# endif +#endif + +#ifndef LIBSSH2_STRUCT_STAT_SIZE_FORMAT +# ifdef __VMS +/* We have to roll our own format here because %z is a C99-ism we don't + have. */ +# if __USE_OFF64_T || __USING_STD_STAT +# define LIBSSH2_STRUCT_STAT_SIZE_FORMAT "%Ld" +# else +# define LIBSSH2_STRUCT_STAT_SIZE_FORMAT "%d" +# endif +# else +# define LIBSSH2_STRUCT_STAT_SIZE_FORMAT "%zd" +# endif +typedef struct stat libssh2_struct_stat; +typedef off_t libssh2_struct_stat_size; +#endif + +/* Part of every banner, user specified or not */ +#define LIBSSH2_SSH_BANNER "SSH-2.0-libssh2_" LIBSSH2_VERSION + +#define LIBSSH2_SSH_DEFAULT_BANNER LIBSSH2_SSH_BANNER +#define LIBSSH2_SSH_DEFAULT_BANNER_WITH_CRLF LIBSSH2_SSH_DEFAULT_BANNER "\r\n" + +/* Defaults for pty requests */ +#define LIBSSH2_TERM_WIDTH 80 +#define LIBSSH2_TERM_HEIGHT 24 +#define LIBSSH2_TERM_WIDTH_PX 0 +#define LIBSSH2_TERM_HEIGHT_PX 0 + +/* 1/4 second */ +#define LIBSSH2_SOCKET_POLL_UDELAY 250000 +/* 0.25 * 120 == 30 seconds */ +#define LIBSSH2_SOCKET_POLL_MAXLOOPS 120 + +/* Maximum size to allow a payload to compress to, plays it safe by falling + short of spec limits */ +#define LIBSSH2_PACKET_MAXCOMP 32000 + +/* Maximum size to allow a payload to deccompress to, plays it safe by + allowing more than spec requires */ +#define LIBSSH2_PACKET_MAXDECOMP 40000 + +/* Maximum size for an inbound compressed payload, plays it safe by + overshooting spec limits */ +#define LIBSSH2_PACKET_MAXPAYLOAD 40000 + +/* Malloc callbacks */ +#define LIBSSH2_ALLOC_FUNC(name) void *name(size_t count, void **abstract) +#define LIBSSH2_REALLOC_FUNC(name) void *name(void *ptr, size_t count, \ + void **abstract) +#define LIBSSH2_FREE_FUNC(name) void name(void *ptr, void **abstract) + +typedef struct _LIBSSH2_USERAUTH_KBDINT_PROMPT +{ + unsigned char *text; + size_t length; + unsigned char echo; +} LIBSSH2_USERAUTH_KBDINT_PROMPT; + +typedef struct _LIBSSH2_USERAUTH_KBDINT_RESPONSE +{ + char *text; + unsigned int length; /* FIXME: change type to size_t */ +} LIBSSH2_USERAUTH_KBDINT_RESPONSE; + +typedef struct _LIBSSH2_SK_SIG_INFO { + uint8_t flags; + uint32_t counter; + unsigned char *sig_r; + size_t sig_r_len; + unsigned char *sig_s; + size_t sig_s_len; +} LIBSSH2_SK_SIG_INFO; + +/* 'publickey' authentication callback */ +#define LIBSSH2_USERAUTH_PUBLICKEY_SIGN_FUNC(name) \ + int name(LIBSSH2_SESSION *session, unsigned char **sig, size_t *sig_len, \ + const unsigned char *data, size_t data_len, void **abstract) + +/* 'keyboard-interactive' authentication callback */ +/* FIXME: name_len, instruction_len -> size_t, num_prompts -> unsigned int? */ +#define LIBSSH2_USERAUTH_KBDINT_RESPONSE_FUNC(name_) \ + void name_(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) + +/* SK authentication callback */ +#define LIBSSH2_USERAUTH_SK_SIGN_FUNC(name) \ + int name(LIBSSH2_SESSION *session, LIBSSH2_SK_SIG_INFO *sig_info, \ + const unsigned char *data, size_t data_len, \ + int algorithm, uint8_t flags, \ + const char *application, const unsigned char *key_handle, \ + size_t handle_len, \ + void **abstract) + +/* Flags for SK authentication */ +#define LIBSSH2_SK_PRESENCE_REQUIRED 0x01 +#define LIBSSH2_SK_VERIFICATION_REQUIRED 0x04 + +/* FIXME: update lengths to size_t (or ssize_t): */ + +/* Callbacks for special SSH packets */ +#define LIBSSH2_IGNORE_FUNC(name) \ + void name(LIBSSH2_SESSION *session, const char *message, int message_len, \ + void **abstract) + +#define LIBSSH2_DEBUG_FUNC(name) \ + void name(LIBSSH2_SESSION *session, int always_display, \ + const char *message, int message_len, \ + const char *language, int language_len, \ + void **abstract) + +#define LIBSSH2_DISCONNECT_FUNC(name) \ + void name(LIBSSH2_SESSION *session, int reason, \ + const char *message, int message_len, \ + const char *language, int language_len, \ + void **abstract) + +#define LIBSSH2_PASSWD_CHANGEREQ_FUNC(name) \ + void name(LIBSSH2_SESSION *session, char **newpw, int *newpw_len, \ + void **abstract) + +#define LIBSSH2_MACERROR_FUNC(name) \ + int name(LIBSSH2_SESSION *session, const char *packet, int packet_len, \ + void **abstract) + +#define LIBSSH2_X11_OPEN_FUNC(name) \ + void name(LIBSSH2_SESSION *session, LIBSSH2_CHANNEL *channel, \ + const char *shost, int sport, void **abstract) + +#define LIBSSH2_AUTHAGENT_FUNC(name) \ + void name(LIBSSH2_SESSION *session, LIBSSH2_CHANNEL *channel, \ + void **abstract) + +#define LIBSSH2_ADD_IDENTITIES_FUNC(name) \ + void name(LIBSSH2_SESSION *session, void *buffer, \ + const char *agent_path, void **abstract) + +#define LIBSSH2_AUTHAGENT_SIGN_FUNC(name) \ + int name(LIBSSH2_SESSION* session, \ + unsigned char *blob, unsigned int blen, \ + const unsigned char *data, unsigned int dlen, \ + unsigned char **signature, unsigned int *sigLen, \ + const char *agentPath, \ + void **abstract) + +#define LIBSSH2_CHANNEL_CLOSE_FUNC(name) \ + void name(LIBSSH2_SESSION *session, void **session_abstract, \ + LIBSSH2_CHANNEL *channel, void **channel_abstract) + +/* I/O callbacks */ +#define LIBSSH2_RECV_FUNC(name) \ + ssize_t name(libssh2_socket_t socket, \ + void *buffer, size_t length, \ + int flags, void **abstract) +#define LIBSSH2_SEND_FUNC(name) \ + ssize_t name(libssh2_socket_t socket, \ + const void *buffer, size_t length, \ + int flags, void **abstract) + +/* libssh2_session_callback_set() constants */ +#define LIBSSH2_CALLBACK_IGNORE 0 +#define LIBSSH2_CALLBACK_DEBUG 1 +#define LIBSSH2_CALLBACK_DISCONNECT 2 +#define LIBSSH2_CALLBACK_MACERROR 3 +#define LIBSSH2_CALLBACK_X11 4 +#define LIBSSH2_CALLBACK_SEND 5 +#define LIBSSH2_CALLBACK_RECV 6 +#define LIBSSH2_CALLBACK_AUTHAGENT 7 +#define LIBSSH2_CALLBACK_AUTHAGENT_IDENTITIES 8 +#define LIBSSH2_CALLBACK_AUTHAGENT_SIGN 9 + +/* libssh2_session_method_pref() constants */ +#define LIBSSH2_METHOD_KEX 0 +#define LIBSSH2_METHOD_HOSTKEY 1 +#define LIBSSH2_METHOD_CRYPT_CS 2 +#define LIBSSH2_METHOD_CRYPT_SC 3 +#define LIBSSH2_METHOD_MAC_CS 4 +#define LIBSSH2_METHOD_MAC_SC 5 +#define LIBSSH2_METHOD_COMP_CS 6 +#define LIBSSH2_METHOD_COMP_SC 7 +#define LIBSSH2_METHOD_LANG_CS 8 +#define LIBSSH2_METHOD_LANG_SC 9 +#define LIBSSH2_METHOD_SIGN_ALGO 10 + +/* flags */ +#define LIBSSH2_FLAG_SIGPIPE 1 +#define LIBSSH2_FLAG_COMPRESS 2 +#define LIBSSH2_FLAG_QUOTE_PATHS 3 + +typedef struct _LIBSSH2_SESSION LIBSSH2_SESSION; +typedef struct _LIBSSH2_CHANNEL LIBSSH2_CHANNEL; +typedef struct _LIBSSH2_LISTENER LIBSSH2_LISTENER; +typedef struct _LIBSSH2_KNOWNHOSTS LIBSSH2_KNOWNHOSTS; +typedef struct _LIBSSH2_AGENT LIBSSH2_AGENT; + +/* SK signature callback */ +typedef struct _LIBSSH2_PRIVKEY_SK { + int algorithm; + uint8_t flags; + const char *application; + const unsigned char *key_handle; + size_t handle_len; + LIBSSH2_USERAUTH_SK_SIGN_FUNC((*sign_callback)); + void **orig_abstract; +} LIBSSH2_PRIVKEY_SK; + +int +libssh2_sign_sk(LIBSSH2_SESSION *session, + unsigned char **sig, + size_t *sig_len, + const unsigned char *data, + size_t data_len, + void **abstract); + +typedef struct _LIBSSH2_POLLFD { + unsigned char type; /* LIBSSH2_POLLFD_* below */ + + union { + libssh2_socket_t socket; /* File descriptors -- examined with + system select() call */ + LIBSSH2_CHANNEL *channel; /* Examined by checking internal state */ + LIBSSH2_LISTENER *listener; /* Read polls only -- are inbound + connections waiting to be accepted? */ + } fd; + + unsigned long events; /* Requested Events */ + unsigned long revents; /* Returned Events */ +} LIBSSH2_POLLFD; + +/* Poll FD Descriptor Types */ +#define LIBSSH2_POLLFD_SOCKET 1 +#define LIBSSH2_POLLFD_CHANNEL 2 +#define LIBSSH2_POLLFD_LISTENER 3 + +/* Note: Win32 Doesn't actually have a poll() implementation, so some of these + values are faked with select() data */ +/* Poll FD events/revents -- Match sys/poll.h where possible */ +#define LIBSSH2_POLLFD_POLLIN 0x0001 /* Data available to be read or + connection available -- + All */ +#define LIBSSH2_POLLFD_POLLPRI 0x0002 /* Priority data available to + be read -- Socket only */ +#define LIBSSH2_POLLFD_POLLEXT 0x0002 /* Extended data available to + be read -- Channel only */ +#define LIBSSH2_POLLFD_POLLOUT 0x0004 /* Can may be written -- + Socket/Channel */ +/* revents only */ +#define LIBSSH2_POLLFD_POLLERR 0x0008 /* Error Condition -- Socket */ +#define LIBSSH2_POLLFD_POLLHUP 0x0010 /* HangUp/EOF -- Socket */ +#define LIBSSH2_POLLFD_SESSION_CLOSED 0x0010 /* Session Disconnect */ +#define LIBSSH2_POLLFD_POLLNVAL 0x0020 /* Invalid request -- Socket + Only */ +#define LIBSSH2_POLLFD_POLLEX 0x0040 /* Exception Condition -- + Socket/Win32 */ +#define LIBSSH2_POLLFD_CHANNEL_CLOSED 0x0080 /* Channel Disconnect */ +#define LIBSSH2_POLLFD_LISTENER_CLOSED 0x0080 /* Listener Disconnect */ + +#define HAVE_LIBSSH2_SESSION_BLOCK_DIRECTION +/* Block Direction Types */ +#define LIBSSH2_SESSION_BLOCK_INBOUND 0x0001 +#define LIBSSH2_SESSION_BLOCK_OUTBOUND 0x0002 + +/* Hash Types */ +#define LIBSSH2_HOSTKEY_HASH_MD5 1 +#define LIBSSH2_HOSTKEY_HASH_SHA1 2 +#define LIBSSH2_HOSTKEY_HASH_SHA256 3 + +/* Hostkey Types */ +#define LIBSSH2_HOSTKEY_TYPE_UNKNOWN 0 +#define LIBSSH2_HOSTKEY_TYPE_RSA 1 +#define LIBSSH2_HOSTKEY_TYPE_DSS 2 /* deprecated */ +#define LIBSSH2_HOSTKEY_TYPE_ECDSA_256 3 +#define LIBSSH2_HOSTKEY_TYPE_ECDSA_384 4 +#define LIBSSH2_HOSTKEY_TYPE_ECDSA_521 5 +#define LIBSSH2_HOSTKEY_TYPE_ED25519 6 + +/* Disconnect Codes (defined by SSH protocol) */ +#define SSH_DISCONNECT_HOST_NOT_ALLOWED_TO_CONNECT 1 +#define SSH_DISCONNECT_PROTOCOL_ERROR 2 +#define SSH_DISCONNECT_KEY_EXCHANGE_FAILED 3 +#define SSH_DISCONNECT_RESERVED 4 +#define SSH_DISCONNECT_MAC_ERROR 5 +#define SSH_DISCONNECT_COMPRESSION_ERROR 6 +#define SSH_DISCONNECT_SERVICE_NOT_AVAILABLE 7 +#define SSH_DISCONNECT_PROTOCOL_VERSION_NOT_SUPPORTED 8 +#define SSH_DISCONNECT_HOST_KEY_NOT_VERIFIABLE 9 +#define SSH_DISCONNECT_CONNECTION_LOST 10 +#define SSH_DISCONNECT_BY_APPLICATION 11 +#define SSH_DISCONNECT_TOO_MANY_CONNECTIONS 12 +#define SSH_DISCONNECT_AUTH_CANCELLED_BY_USER 13 +#define SSH_DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE 14 +#define SSH_DISCONNECT_ILLEGAL_USER_NAME 15 + +/* Error Codes (defined by libssh2) */ +#define LIBSSH2_ERROR_NONE 0 + +/* The library once used -1 as a generic error return value on numerous places + through the code, which subsequently was converted to + LIBSSH2_ERROR_SOCKET_NONE uses over time. As this is a generic error code, + the goal is to never ever return this code but instead make sure that a + more accurate and descriptive error code is used. */ +#define LIBSSH2_ERROR_SOCKET_NONE -1 + +#define LIBSSH2_ERROR_BANNER_RECV -2 +#define LIBSSH2_ERROR_BANNER_SEND -3 +#define LIBSSH2_ERROR_INVALID_MAC -4 +#define LIBSSH2_ERROR_KEX_FAILURE -5 +#define LIBSSH2_ERROR_ALLOC -6 +#define LIBSSH2_ERROR_SOCKET_SEND -7 +#define LIBSSH2_ERROR_KEY_EXCHANGE_FAILURE -8 +#define LIBSSH2_ERROR_TIMEOUT -9 +#define LIBSSH2_ERROR_HOSTKEY_INIT -10 +#define LIBSSH2_ERROR_HOSTKEY_SIGN -11 +#define LIBSSH2_ERROR_DECRYPT -12 +#define LIBSSH2_ERROR_SOCKET_DISCONNECT -13 +#define LIBSSH2_ERROR_PROTO -14 +#define LIBSSH2_ERROR_PASSWORD_EXPIRED -15 +#define LIBSSH2_ERROR_FILE -16 +#define LIBSSH2_ERROR_METHOD_NONE -17 +#define LIBSSH2_ERROR_AUTHENTICATION_FAILED -18 +#define LIBSSH2_ERROR_PUBLICKEY_UNRECOGNIZED \ + LIBSSH2_ERROR_AUTHENTICATION_FAILED +#define LIBSSH2_ERROR_PUBLICKEY_UNVERIFIED -19 +#define LIBSSH2_ERROR_CHANNEL_OUTOFORDER -20 +#define LIBSSH2_ERROR_CHANNEL_FAILURE -21 +#define LIBSSH2_ERROR_CHANNEL_REQUEST_DENIED -22 +#define LIBSSH2_ERROR_CHANNEL_UNKNOWN -23 +#define LIBSSH2_ERROR_CHANNEL_WINDOW_EXCEEDED -24 +#define LIBSSH2_ERROR_CHANNEL_PACKET_EXCEEDED -25 +#define LIBSSH2_ERROR_CHANNEL_CLOSED -26 +#define LIBSSH2_ERROR_CHANNEL_EOF_SENT -27 +#define LIBSSH2_ERROR_SCP_PROTOCOL -28 +#define LIBSSH2_ERROR_ZLIB -29 +#define LIBSSH2_ERROR_SOCKET_TIMEOUT -30 +#define LIBSSH2_ERROR_SFTP_PROTOCOL -31 +#define LIBSSH2_ERROR_REQUEST_DENIED -32 +#define LIBSSH2_ERROR_METHOD_NOT_SUPPORTED -33 +#define LIBSSH2_ERROR_INVAL -34 +#define LIBSSH2_ERROR_INVALID_POLL_TYPE -35 +#define LIBSSH2_ERROR_PUBLICKEY_PROTOCOL -36 +#define LIBSSH2_ERROR_EAGAIN -37 +#define LIBSSH2_ERROR_BUFFER_TOO_SMALL -38 +#define LIBSSH2_ERROR_BAD_USE -39 +#define LIBSSH2_ERROR_COMPRESS -40 +#define LIBSSH2_ERROR_OUT_OF_BOUNDARY -41 +#define LIBSSH2_ERROR_AGENT_PROTOCOL -42 +#define LIBSSH2_ERROR_SOCKET_RECV -43 +#define LIBSSH2_ERROR_ENCRYPT -44 +#define LIBSSH2_ERROR_BAD_SOCKET -45 +#define LIBSSH2_ERROR_KNOWN_HOSTS -46 +#define LIBSSH2_ERROR_CHANNEL_WINDOW_FULL -47 +#define LIBSSH2_ERROR_KEYFILE_AUTH_FAILED -48 +#define LIBSSH2_ERROR_RANDGEN -49 +#define LIBSSH2_ERROR_MISSING_USERAUTH_BANNER -50 +#define LIBSSH2_ERROR_ALGO_UNSUPPORTED -51 +#define LIBSSH2_ERROR_MAC_FAILURE -52 +#define LIBSSH2_ERROR_HASH_INIT -53 +#define LIBSSH2_ERROR_HASH_CALC -54 + +/* this is a define to provide the old (<= 1.2.7) name */ +#define LIBSSH2_ERROR_BANNER_NONE LIBSSH2_ERROR_BANNER_RECV + +/* Global API */ +#define LIBSSH2_INIT_NO_CRYPTO 0x0001 + +/* + * libssh2_init() + * + * Initialize the libssh2 functions. This typically initialize the + * crypto library. It uses a global state, and is not thread safe -- + * you must make sure this function is not called concurrently. + * + * Flags can be: + * 0: Normal initialize + * LIBSSH2_INIT_NO_CRYPTO: Do not initialize the crypto library (ie. + * OPENSSL_add_cipher_algoritms() for OpenSSL + * + * Returns 0 if succeeded, or a negative value for error. + */ +LIBSSH2_API int libssh2_init(int flags); + +/* + * libssh2_exit() + * + * Exit the libssh2 functions and free's all memory used internal. + */ +LIBSSH2_API void libssh2_exit(void); + +/* + * libssh2_free() + * + * Deallocate memory allocated by earlier call to libssh2 functions. + */ +LIBSSH2_API void libssh2_free(LIBSSH2_SESSION *session, void *ptr); + +/* + * libssh2_session_supported_algs() + * + * Fills algs with a list of supported acryptographic algorithms. Returns a + * non-negative number (number of supported algorithms) on success or a + * negative number (an error code) on failure. + * + * NOTE: on success, algs must be deallocated (by calling libssh2_free) when + * not needed anymore + */ +LIBSSH2_API int libssh2_session_supported_algs(LIBSSH2_SESSION* session, + int method_type, + const char ***algs); + +/* Session API */ +LIBSSH2_API LIBSSH2_SESSION * +libssh2_session_init_ex(LIBSSH2_ALLOC_FUNC((*my_alloc)), + LIBSSH2_FREE_FUNC((*my_free)), + LIBSSH2_REALLOC_FUNC((*my_realloc)), void *abstract); +#define libssh2_session_init() libssh2_session_init_ex(NULL, NULL, NULL, NULL) + +LIBSSH2_API void **libssh2_session_abstract(LIBSSH2_SESSION *session); + +typedef void (libssh2_cb_generic)(void); + +LIBSSH2_API libssh2_cb_generic * +libssh2_session_callback_set2(LIBSSH2_SESSION *session, int cbtype, + libssh2_cb_generic *callback); + +LIBSSH2_DEPRECATED(1.11.1, "Use libssh2_session_callback_set2()") +LIBSSH2_API void *libssh2_session_callback_set(LIBSSH2_SESSION *session, + int cbtype, void *callback); +LIBSSH2_API int libssh2_session_banner_set(LIBSSH2_SESSION *session, + const char *banner); +#ifndef LIBSSH2_NO_DEPRECATED +LIBSSH2_DEPRECATED(1.4.0, "Use libssh2_session_banner_set()") +LIBSSH2_API int libssh2_banner_set(LIBSSH2_SESSION *session, + const char *banner); + +LIBSSH2_DEPRECATED(1.2.8, "Use libssh2_session_handshake()") +LIBSSH2_API int libssh2_session_startup(LIBSSH2_SESSION *session, int sock); +#endif +LIBSSH2_API int libssh2_session_handshake(LIBSSH2_SESSION *session, + libssh2_socket_t sock); +LIBSSH2_API int libssh2_session_disconnect_ex(LIBSSH2_SESSION *session, + int reason, + const char *description, + const char *lang); +#define libssh2_session_disconnect(session, description) \ + libssh2_session_disconnect_ex((session), SSH_DISCONNECT_BY_APPLICATION, \ + (description), "") + +LIBSSH2_API int libssh2_session_free(LIBSSH2_SESSION *session); + +LIBSSH2_API const char *libssh2_hostkey_hash(LIBSSH2_SESSION *session, + int hash_type); + +LIBSSH2_API const char *libssh2_session_hostkey(LIBSSH2_SESSION *session, + size_t *len, int *type); + +LIBSSH2_API int libssh2_session_method_pref(LIBSSH2_SESSION *session, + int method_type, + const char *prefs); +LIBSSH2_API const char *libssh2_session_methods(LIBSSH2_SESSION *session, + int method_type); +LIBSSH2_API int libssh2_session_last_error(LIBSSH2_SESSION *session, + char **errmsg, + int *errmsg_len, int want_buf); +LIBSSH2_API int libssh2_session_last_errno(LIBSSH2_SESSION *session); +LIBSSH2_API int libssh2_session_set_last_error(LIBSSH2_SESSION* session, + int errcode, + const char *errmsg); +LIBSSH2_API int libssh2_session_block_directions(LIBSSH2_SESSION *session); + +LIBSSH2_API int libssh2_session_flag(LIBSSH2_SESSION *session, int flag, + int value); +LIBSSH2_API const char *libssh2_session_banner_get(LIBSSH2_SESSION *session); + +/* Userauth API */ +LIBSSH2_API char *libssh2_userauth_list(LIBSSH2_SESSION *session, + const char *username, + unsigned int username_len); +LIBSSH2_API int libssh2_userauth_banner(LIBSSH2_SESSION *session, + char **banner); +LIBSSH2_API int libssh2_userauth_authenticated(LIBSSH2_SESSION *session); + +LIBSSH2_API int +libssh2_userauth_password_ex(LIBSSH2_SESSION *session, + const char *username, + unsigned int username_len, + const char *password, + unsigned int password_len, + LIBSSH2_PASSWD_CHANGEREQ_FUNC + ((*passwd_change_cb))); + +#define libssh2_userauth_password(session, username, password) \ + libssh2_userauth_password_ex((session), (username), \ + (unsigned int)strlen(username), \ + (password), (unsigned int)strlen(password), \ + NULL) + +LIBSSH2_API int +libssh2_userauth_publickey_fromfile_ex(LIBSSH2_SESSION *session, + const char *username, + unsigned int username_len, + const char *publickey, + const char *privatekey, + const char *passphrase); + +#define libssh2_userauth_publickey_fromfile(session, username, publickey, \ + privatekey, passphrase) \ + libssh2_userauth_publickey_fromfile_ex((session), (username), \ + (unsigned int)strlen(username), \ + (publickey), \ + (privatekey), (passphrase)) + +LIBSSH2_API int +libssh2_userauth_publickey(LIBSSH2_SESSION *session, + const char *username, + const unsigned char *pubkeydata, + size_t pubkeydata_len, + LIBSSH2_USERAUTH_PUBLICKEY_SIGN_FUNC + ((*sign_callback)), + void **abstract); + +LIBSSH2_API int +libssh2_userauth_hostbased_fromfile_ex(LIBSSH2_SESSION *session, + const char *username, + unsigned int username_len, + const char *publickey, + const char *privatekey, + const char *passphrase, + const char *hostname, + unsigned int hostname_len, + const char *local_username, + unsigned int local_username_len); + +#define libssh2_userauth_hostbased_fromfile(session, username, publickey, \ + privatekey, passphrase, hostname) \ + libssh2_userauth_hostbased_fromfile_ex((session), (username), \ + (unsigned int)strlen(username), \ + (publickey), \ + (privatekey), (passphrase), \ + (hostname), \ + (unsigned int)strlen(hostname), \ + (username), \ + (unsigned int)strlen(username)) + +LIBSSH2_API int +libssh2_userauth_publickey_frommemory(LIBSSH2_SESSION *session, + const char *username, + size_t username_len, + const char *publickeyfiledata, + size_t publickeyfiledata_len, + const char *privatekeyfiledata, + size_t privatekeyfiledata_len, + const char *passphrase); + +/* + * response_callback is provided with filled by library prompts array, + * but client must allocate and fill individual responses. Responses + * array is already allocated. Responses data will be freed by libssh2 + * after callback return, but before subsequent callback invocation. + */ +LIBSSH2_API int +libssh2_userauth_keyboard_interactive_ex(LIBSSH2_SESSION* session, + const char *username, + unsigned int username_len, + LIBSSH2_USERAUTH_KBDINT_RESPONSE_FUNC + ((*response_callback))); + +#define libssh2_userauth_keyboard_interactive(session, username, \ + response_callback) \ + libssh2_userauth_keyboard_interactive_ex((session), (username), \ + (unsigned int)strlen(username), \ + (response_callback)) + +LIBSSH2_API int +libssh2_userauth_publickey_sk(LIBSSH2_SESSION *session, + const char *username, + size_t username_len, + const unsigned char *pubkeydata, + size_t pubkeydata_len, + const char *privatekeydata, + size_t privatekeydata_len, + const char *passphrase, + LIBSSH2_USERAUTH_SK_SIGN_FUNC + ((*sign_callback)), + void **abstract); + +LIBSSH2_API int libssh2_poll(LIBSSH2_POLLFD *fds, unsigned int nfds, + long timeout); + +/* Channel API */ +#define LIBSSH2_CHANNEL_WINDOW_DEFAULT (2*1024*1024) +#define LIBSSH2_CHANNEL_PACKET_DEFAULT 32768 +#define LIBSSH2_CHANNEL_MINADJUST 1024 + +/* Extended Data Handling */ +#define LIBSSH2_CHANNEL_EXTENDED_DATA_NORMAL 0 +#define LIBSSH2_CHANNEL_EXTENDED_DATA_IGNORE 1 +#define LIBSSH2_CHANNEL_EXTENDED_DATA_MERGE 2 + +#define SSH_EXTENDED_DATA_STDERR 1 + +/* Returned by any function that would block during a read/write operation */ +#define LIBSSH2CHANNEL_EAGAIN LIBSSH2_ERROR_EAGAIN + +LIBSSH2_API LIBSSH2_CHANNEL * +libssh2_channel_open_ex(LIBSSH2_SESSION *session, const char *channel_type, + unsigned int channel_type_len, + unsigned int window_size, unsigned int packet_size, + const char *message, unsigned int message_len); + +#define libssh2_channel_open_session(session) \ + libssh2_channel_open_ex((session), "session", sizeof("session") - 1, \ + LIBSSH2_CHANNEL_WINDOW_DEFAULT, \ + LIBSSH2_CHANNEL_PACKET_DEFAULT, NULL, 0) + +LIBSSH2_API LIBSSH2_CHANNEL * +libssh2_channel_direct_tcpip_ex(LIBSSH2_SESSION *session, const char *host, + int port, const char *shost, int sport); +#define libssh2_channel_direct_tcpip(session, host, port) \ + libssh2_channel_direct_tcpip_ex((session), (host), (port), "127.0.0.1", 22) + +LIBSSH2_API LIBSSH2_CHANNEL * +libssh2_channel_direct_streamlocal_ex(LIBSSH2_SESSION * session, + const char *socket_path, + const char *shost, int sport); + +LIBSSH2_API LIBSSH2_LISTENER * +libssh2_channel_forward_listen_ex(LIBSSH2_SESSION *session, const char *host, + int port, int *bound_port, + int queue_maxsize); +#define libssh2_channel_forward_listen(session, port) \ + libssh2_channel_forward_listen_ex((session), NULL, (port), NULL, 16) + +LIBSSH2_API int libssh2_channel_forward_cancel(LIBSSH2_LISTENER *listener); + +LIBSSH2_API LIBSSH2_CHANNEL * +libssh2_channel_forward_accept(LIBSSH2_LISTENER *listener); + +LIBSSH2_API int libssh2_channel_setenv_ex(LIBSSH2_CHANNEL *channel, + const char *varname, + unsigned int varname_len, + const char *value, + unsigned int value_len); + +#define libssh2_channel_setenv(channel, varname, value) \ + libssh2_channel_setenv_ex((channel), (varname), \ + (unsigned int)strlen(varname), (value), \ + (unsigned int)strlen(value)) + +LIBSSH2_API int libssh2_channel_request_auth_agent(LIBSSH2_CHANNEL *channel); + +LIBSSH2_API int libssh2_channel_request_pty_ex(LIBSSH2_CHANNEL *channel, + const char *term, + unsigned int term_len, + const char *modes, + unsigned int modes_len, + int width, int height, + int width_px, int height_px); +#define libssh2_channel_request_pty(channel, term) \ + libssh2_channel_request_pty_ex((channel), (term), \ + (unsigned int)strlen(term), \ + NULL, 0, \ + LIBSSH2_TERM_WIDTH, \ + LIBSSH2_TERM_HEIGHT, \ + LIBSSH2_TERM_WIDTH_PX, \ + LIBSSH2_TERM_HEIGHT_PX) + +LIBSSH2_API int libssh2_channel_request_pty_size_ex(LIBSSH2_CHANNEL *channel, + int width, int height, + int width_px, + int height_px); +#define libssh2_channel_request_pty_size(channel, width, height) \ + libssh2_channel_request_pty_size_ex((channel), (width), (height), 0, 0) + +LIBSSH2_API int libssh2_channel_x11_req_ex(LIBSSH2_CHANNEL *channel, + int single_connection, + const char *auth_proto, + const char *auth_cookie, + int screen_number); +#define libssh2_channel_x11_req(channel, screen_number) \ + libssh2_channel_x11_req_ex((channel), 0, NULL, NULL, (screen_number)) + +LIBSSH2_API int libssh2_channel_signal_ex(LIBSSH2_CHANNEL *channel, + const char *signame, + size_t signame_len); +#define libssh2_channel_signal(channel, signame) \ + libssh2_channel_signal_ex((channel), signame, strlen(signame)) + +LIBSSH2_API int libssh2_channel_process_startup(LIBSSH2_CHANNEL *channel, + const char *request, + unsigned int request_len, + const char *message, + unsigned int message_len); +#define libssh2_channel_shell(channel) \ + libssh2_channel_process_startup((channel), "shell", sizeof("shell") - 1, \ + NULL, 0) +#define libssh2_channel_exec(channel, command) \ + libssh2_channel_process_startup((channel), "exec", sizeof("exec") - 1, \ + (command), (unsigned int)strlen(command)) +#define libssh2_channel_subsystem(channel, subsystem) \ + libssh2_channel_process_startup((channel), "subsystem", \ + sizeof("subsystem") - 1, (subsystem), \ + (unsigned int)strlen(subsystem)) + +LIBSSH2_API ssize_t libssh2_channel_read_ex(LIBSSH2_CHANNEL *channel, + int stream_id, char *buf, + size_t buflen); +#define libssh2_channel_read(channel, buf, buflen) \ + libssh2_channel_read_ex((channel), 0, \ + (buf), (buflen)) +#define libssh2_channel_read_stderr(channel, buf, buflen) \ + libssh2_channel_read_ex((channel), SSH_EXTENDED_DATA_STDERR, \ + (buf), (buflen)) + +LIBSSH2_API int libssh2_poll_channel_read(LIBSSH2_CHANNEL *channel, + int extended); + +LIBSSH2_API unsigned long +libssh2_channel_window_read_ex(LIBSSH2_CHANNEL *channel, + unsigned long *read_avail, + unsigned long *window_size_initial); +#define libssh2_channel_window_read(channel) \ + libssh2_channel_window_read_ex((channel), NULL, NULL) + +#ifndef LIBSSH2_NO_DEPRECATED +LIBSSH2_DEPRECATED(1.1.0, "Use libssh2_channel_receive_window_adjust2()") +LIBSSH2_API unsigned long +libssh2_channel_receive_window_adjust(LIBSSH2_CHANNEL *channel, + unsigned long adjustment, + unsigned char force); +#endif +LIBSSH2_API int +libssh2_channel_receive_window_adjust2(LIBSSH2_CHANNEL *channel, + unsigned long adjustment, + unsigned char force, + unsigned int *storewindow); + +LIBSSH2_API ssize_t libssh2_channel_write_ex(LIBSSH2_CHANNEL *channel, + int stream_id, const char *buf, + size_t buflen); + +#define libssh2_channel_write(channel, buf, buflen) \ + libssh2_channel_write_ex((channel), 0, \ + (buf), (buflen)) +#define libssh2_channel_write_stderr(channel, buf, buflen) \ + libssh2_channel_write_ex((channel), SSH_EXTENDED_DATA_STDERR, \ + (buf), (buflen)) + +LIBSSH2_API unsigned long +libssh2_channel_window_write_ex(LIBSSH2_CHANNEL *channel, + unsigned long *window_size_initial); +#define libssh2_channel_window_write(channel) \ + libssh2_channel_window_write_ex((channel), NULL) + +LIBSSH2_API void libssh2_session_set_blocking(LIBSSH2_SESSION* session, + int blocking); +LIBSSH2_API int libssh2_session_get_blocking(LIBSSH2_SESSION* session); + +LIBSSH2_API void libssh2_channel_set_blocking(LIBSSH2_CHANNEL *channel, + int blocking); + +LIBSSH2_API void libssh2_session_set_timeout(LIBSSH2_SESSION* session, + long timeout); +LIBSSH2_API long libssh2_session_get_timeout(LIBSSH2_SESSION* session); + +LIBSSH2_API void libssh2_session_set_read_timeout(LIBSSH2_SESSION* session, + long timeout); +LIBSSH2_API long libssh2_session_get_read_timeout(LIBSSH2_SESSION* session); + +#ifndef LIBSSH2_NO_DEPRECATED +LIBSSH2_DEPRECATED(1.1.0, "libssh2_channel_handle_extended_data2()") +LIBSSH2_API void libssh2_channel_handle_extended_data(LIBSSH2_CHANNEL *channel, + int ignore_mode); +#endif +LIBSSH2_API int libssh2_channel_handle_extended_data2(LIBSSH2_CHANNEL *channel, + int ignore_mode); + +#ifndef LIBSSH2_NO_DEPRECATED +/* libssh2_channel_ignore_extended_data() is defined below for BC with version + * 0.1 + * + * Future uses should use libssh2_channel_handle_extended_data() directly if + * LIBSSH2_CHANNEL_EXTENDED_DATA_MERGE is passed, extended data will be read + * (FIFO) from the standard data channel + */ +/* DEPRECATED since 0.3.0. Use libssh2_channel_handle_extended_data2(). */ +#define libssh2_channel_ignore_extended_data(channel, ignore) \ + libssh2_channel_handle_extended_data((channel), (ignore) ? \ + LIBSSH2_CHANNEL_EXTENDED_DATA_IGNORE : \ + LIBSSH2_CHANNEL_EXTENDED_DATA_NORMAL) +#endif + +#define LIBSSH2_CHANNEL_FLUSH_EXTENDED_DATA -1 +#define LIBSSH2_CHANNEL_FLUSH_ALL -2 +LIBSSH2_API int libssh2_channel_flush_ex(LIBSSH2_CHANNEL *channel, + int streamid); +#define libssh2_channel_flush(channel) libssh2_channel_flush_ex((channel), 0) +#define libssh2_channel_flush_stderr(channel) \ + libssh2_channel_flush_ex((channel), SSH_EXTENDED_DATA_STDERR) + +LIBSSH2_API int libssh2_channel_get_exit_status(LIBSSH2_CHANNEL* channel); +LIBSSH2_API int libssh2_channel_get_exit_signal(LIBSSH2_CHANNEL* channel, + char **exitsignal, + size_t *exitsignal_len, + char **errmsg, + size_t *errmsg_len, + char **langtag, + size_t *langtag_len); +LIBSSH2_API int libssh2_channel_send_eof(LIBSSH2_CHANNEL *channel); +LIBSSH2_API int libssh2_channel_eof(LIBSSH2_CHANNEL *channel); +LIBSSH2_API int libssh2_channel_wait_eof(LIBSSH2_CHANNEL *channel); +LIBSSH2_API int libssh2_channel_close(LIBSSH2_CHANNEL *channel); +LIBSSH2_API int libssh2_channel_wait_closed(LIBSSH2_CHANNEL *channel); +LIBSSH2_API int libssh2_channel_free(LIBSSH2_CHANNEL *channel); + +#ifndef LIBSSH2_NO_DEPRECATED +LIBSSH2_DEPRECATED(1.7.0, "Use libssh2_scp_recv2()") +LIBSSH2_API LIBSSH2_CHANNEL *libssh2_scp_recv(LIBSSH2_SESSION *session, + const char *path, + struct stat *sb); +#endif +/* Use libssh2_scp_recv2() for large (> 2GB) file support on windows */ +LIBSSH2_API LIBSSH2_CHANNEL *libssh2_scp_recv2(LIBSSH2_SESSION *session, + const char *path, + libssh2_struct_stat *sb); +LIBSSH2_API LIBSSH2_CHANNEL *libssh2_scp_send_ex(LIBSSH2_SESSION *session, + const char *path, int mode, + size_t size, long mtime, + long atime); +LIBSSH2_API LIBSSH2_CHANNEL * +libssh2_scp_send64(LIBSSH2_SESSION *session, const char *path, int mode, + libssh2_int64_t size, time_t mtime, time_t atime); + +#define libssh2_scp_send(session, path, mode, size) \ + libssh2_scp_send_ex((session), (path), (mode), (size), 0, 0) + +/* DEPRECATED */ +LIBSSH2_API int libssh2_base64_decode(LIBSSH2_SESSION *session, char **dest, + unsigned int *dest_len, + const char *src, unsigned int src_len); + +LIBSSH2_API +const char *libssh2_version(int req_version_num); + +typedef enum { + libssh2_no_crypto = 0, + libssh2_openssl, + libssh2_gcrypt, + libssh2_mbedtls, + libssh2_wincng, + libssh2_os400qc3 +} libssh2_crypto_engine_t; + +LIBSSH2_API +libssh2_crypto_engine_t libssh2_crypto_engine(void); + +#define HAVE_LIBSSH2_KNOWNHOST_API 0x010101 /* since 1.1.1 */ +#define HAVE_LIBSSH2_VERSION_API 0x010100 /* libssh2_version since 1.1 */ +#define HAVE_LIBSSH2_CRYPTOENGINE_API 0x011100 /* libssh2_crypto_engine + since 1.11 */ + +struct libssh2_knownhost { + unsigned int magic; /* magic stored by the library */ + void *node; /* handle to the internal representation of this host */ + char *name; /* this is NULL if no plain text host name exists */ + char *key; /* key in base64/printable format */ + int typemask; +}; + +/* + * libssh2_knownhost_init() + * + * Init a collection of known hosts. Returns the pointer to a collection. + * + */ +LIBSSH2_API LIBSSH2_KNOWNHOSTS * +libssh2_knownhost_init(LIBSSH2_SESSION *session); + +/* + * libssh2_knownhost_add() + * + * Add a host and its associated key to the collection of known hosts. + * + * The 'type' argument specifies on what format the given host and keys are: + * + * plain - ascii "hostname.domain.tld" + * sha1 - SHA1( ) base64-encoded! + * custom - another hash + * + * If 'sha1' is selected as type, the salt must be provided to the salt + * argument. This too base64 encoded. + * + * The SHA-1 hash is what OpenSSH can be told to use in known_hosts files. If + * a custom type is used, salt is ignored and you must provide the host + * pre-hashed when checking for it in the libssh2_knownhost_check() function. + * + * The keylen parameter may be omitted (zero) if the key is provided as a + * NULL-terminated base64-encoded string. + */ + +/* host format (2 bits) */ +#define LIBSSH2_KNOWNHOST_TYPE_MASK 0xffff +#define LIBSSH2_KNOWNHOST_TYPE_PLAIN 1 +#define LIBSSH2_KNOWNHOST_TYPE_SHA1 2 /* always base64 encoded */ +#define LIBSSH2_KNOWNHOST_TYPE_CUSTOM 3 + +/* key format (2 bits) */ +#define LIBSSH2_KNOWNHOST_KEYENC_MASK (3<<16) +#define LIBSSH2_KNOWNHOST_KEYENC_RAW (1<<16) +#define LIBSSH2_KNOWNHOST_KEYENC_BASE64 (2<<16) + +/* type of key (4 bits) */ +#define LIBSSH2_KNOWNHOST_KEY_MASK (15<<18) +#define LIBSSH2_KNOWNHOST_KEY_SHIFT 18 +#define LIBSSH2_KNOWNHOST_KEY_RSA1 (1<<18) +#define LIBSSH2_KNOWNHOST_KEY_SSHRSA (2<<18) +#define LIBSSH2_KNOWNHOST_KEY_SSHDSS (3<<18) /* deprecated */ +#define LIBSSH2_KNOWNHOST_KEY_ECDSA_256 (4<<18) +#define LIBSSH2_KNOWNHOST_KEY_ECDSA_384 (5<<18) +#define LIBSSH2_KNOWNHOST_KEY_ECDSA_521 (6<<18) +#define LIBSSH2_KNOWNHOST_KEY_ED25519 (7<<18) +#define LIBSSH2_KNOWNHOST_KEY_UNKNOWN (15<<18) + +LIBSSH2_API int +libssh2_knownhost_add(LIBSSH2_KNOWNHOSTS *hosts, + const char *host, + const char *salt, + const char *key, size_t keylen, int typemask, + struct libssh2_knownhost **store); + +/* + * libssh2_knownhost_addc() + * + * Add a host and its associated key to the collection of known hosts. + * + * Takes a comment argument that may be NULL. A NULL comment indicates + * there is no comment and the entry will end directly after the key + * when written out to a file. An empty string "" comment will indicate an + * empty comment which will cause a single space to be written after the key. + * + * The 'type' argument specifies on what format the given host and keys are: + * + * plain - ascii "hostname.domain.tld" + * sha1 - SHA1( ) base64-encoded! + * custom - another hash + * + * If 'sha1' is selected as type, the salt must be provided to the salt + * argument. This too base64 encoded. + * + * The SHA-1 hash is what OpenSSH can be told to use in known_hosts files. + * If a custom type is used, salt is ignored and you must provide the host + * pre-hashed when checking for it in the libssh2_knownhost_check() function. + * + * The keylen parameter may be omitted (zero) if the key is provided as a + * NULL-terminated base64-encoded string. + */ + +LIBSSH2_API int +libssh2_knownhost_addc(LIBSSH2_KNOWNHOSTS *hosts, + const char *host, + const char *salt, + const char *key, size_t keylen, + const char *comment, size_t commentlen, int typemask, + struct libssh2_knownhost **store); + +/* + * libssh2_knownhost_check() + * + * Check a host and its associated key against the collection of known hosts. + * + * The type is the type/format of the given host name. + * + * plain - ascii "hostname.domain.tld" + * custom - prehashed base64 encoded. Note that this cannot use any salts. + * + * + * 'knownhost' may be set to NULL if you don't care about that info. + * + * Returns: + * + * LIBSSH2_KNOWNHOST_CHECK_* values, see below + * + */ + +#define LIBSSH2_KNOWNHOST_CHECK_MATCH 0 +#define LIBSSH2_KNOWNHOST_CHECK_MISMATCH 1 +#define LIBSSH2_KNOWNHOST_CHECK_NOTFOUND 2 +#define LIBSSH2_KNOWNHOST_CHECK_FAILURE 3 + +LIBSSH2_API int +libssh2_knownhost_check(LIBSSH2_KNOWNHOSTS *hosts, + const char *host, const char *key, size_t keylen, + int typemask, + struct libssh2_knownhost **knownhost); + +/* this function is identital to the above one, but also takes a port + argument that allows libssh2 to do a better check */ +LIBSSH2_API int +libssh2_knownhost_checkp(LIBSSH2_KNOWNHOSTS *hosts, + const char *host, int port, + const char *key, size_t keylen, + int typemask, + struct libssh2_knownhost **knownhost); + +/* + * libssh2_knownhost_del() + * + * Remove a host from the collection of known hosts. The 'entry' struct is + * retrieved by a call to libssh2_knownhost_check(). + * + */ +LIBSSH2_API int +libssh2_knownhost_del(LIBSSH2_KNOWNHOSTS *hosts, + struct libssh2_knownhost *entry); + +/* + * libssh2_knownhost_free() + * + * Free an entire collection of known hosts. + * + */ +LIBSSH2_API void +libssh2_knownhost_free(LIBSSH2_KNOWNHOSTS *hosts); + +/* + * libssh2_knownhost_readline() + * + * Pass in a line of a file of 'type'. It makes libssh2 read this line. + * + * LIBSSH2_KNOWNHOST_FILE_OPENSSH is the only supported type. + * + */ +LIBSSH2_API int +libssh2_knownhost_readline(LIBSSH2_KNOWNHOSTS *hosts, + const char *line, size_t len, int type); + +/* + * libssh2_knownhost_readfile() + * + * Add hosts+key pairs from a given file. + * + * Returns a negative value for error or number of successfully added hosts. + * + * This implementation currently only knows one 'type' (openssh), all others + * are reserved for future use. + */ + +#define LIBSSH2_KNOWNHOST_FILE_OPENSSH 1 + +LIBSSH2_API int +libssh2_knownhost_readfile(LIBSSH2_KNOWNHOSTS *hosts, + const char *filename, int type); + +/* + * libssh2_knownhost_writeline() + * + * Ask libssh2 to convert a known host to an output line for storage. + * + * Note that this function returns LIBSSH2_ERROR_BUFFER_TOO_SMALL if the given + * output buffer is too small to hold the desired output. + * + * This implementation currently only knows one 'type' (openssh), all others + * are reserved for future use. + * + */ +LIBSSH2_API int +libssh2_knownhost_writeline(LIBSSH2_KNOWNHOSTS *hosts, + struct libssh2_knownhost *known, + char *buffer, size_t buflen, + size_t *outlen, /* the amount of written data */ + int type); + +/* + * libssh2_knownhost_writefile() + * + * Write hosts+key pairs to a given file. + * + * This implementation currently only knows one 'type' (openssh), all others + * are reserved for future use. + */ + +LIBSSH2_API int +libssh2_knownhost_writefile(LIBSSH2_KNOWNHOSTS *hosts, + const char *filename, int type); + +/* + * libssh2_knownhost_get() + * + * Traverse the internal list of known hosts. Pass NULL to 'prev' to get + * the first one. Or pass a pointer to the previously returned one to get the + * next. + * + * Returns: + * 0 if a fine host was stored in 'store' + * 1 if end of hosts + * [negative] on errors + */ +LIBSSH2_API int +libssh2_knownhost_get(LIBSSH2_KNOWNHOSTS *hosts, + struct libssh2_knownhost **store, + struct libssh2_knownhost *prev); + +#define HAVE_LIBSSH2_AGENT_API 0x010202 /* since 1.2.2 */ + +struct libssh2_agent_publickey { + unsigned int magic; /* magic stored by the library */ + void *node; /* handle to the internal representation of key */ + unsigned char *blob; /* public key blob */ + size_t blob_len; /* length of the public key blob */ + char *comment; /* comment in printable format */ +}; + +/* + * libssh2_agent_init() + * + * Init an ssh-agent handle. Returns the pointer to the handle. + * + */ +LIBSSH2_API LIBSSH2_AGENT * +libssh2_agent_init(LIBSSH2_SESSION *session); + +/* + * libssh2_agent_connect() + * + * Connect to an ssh-agent. + * + * Returns 0 if succeeded, or a negative value for error. + */ +LIBSSH2_API int +libssh2_agent_connect(LIBSSH2_AGENT *agent); + +/* + * libssh2_agent_list_identities() + * + * Request an ssh-agent to list identities. + * + * Returns 0 if succeeded, or a negative value for error. + */ +LIBSSH2_API int +libssh2_agent_list_identities(LIBSSH2_AGENT *agent); + +/* + * libssh2_agent_get_identity() + * + * Traverse the internal list of public keys. Pass NULL to 'prev' to get + * the first one. Or pass a pointer to the previously returned one to get the + * next. + * + * Returns: + * 0 if a fine public key was stored in 'store' + * 1 if end of public keys + * [negative] on errors + */ +LIBSSH2_API int +libssh2_agent_get_identity(LIBSSH2_AGENT *agent, + struct libssh2_agent_publickey **store, + struct libssh2_agent_publickey *prev); + +/* + * libssh2_agent_userauth() + * + * Do publickey user authentication with the help of ssh-agent. + * + * Returns 0 if succeeded, or a negative value for error. + */ +LIBSSH2_API int +libssh2_agent_userauth(LIBSSH2_AGENT *agent, + const char *username, + struct libssh2_agent_publickey *identity); + +/* + * libssh2_agent_sign() + * + * Sign a payload using a system-installed ssh-agent. + * + * Returns 0 if succeeded, or a negative value for error. + */ +LIBSSH2_API int +libssh2_agent_sign(LIBSSH2_AGENT *agent, + struct libssh2_agent_publickey *identity, + unsigned char **sig, + size_t *s_len, + const unsigned char *data, + size_t d_len, + const char *method, + unsigned int method_len); + +/* + * libssh2_agent_disconnect() + * + * Close a connection to an ssh-agent. + * + * Returns 0 if succeeded, or a negative value for error. + */ +LIBSSH2_API int +libssh2_agent_disconnect(LIBSSH2_AGENT *agent); + +/* + * libssh2_agent_free() + * + * Free an ssh-agent handle. This function also frees the internal + * collection of public keys. + */ +LIBSSH2_API void +libssh2_agent_free(LIBSSH2_AGENT *agent); + +/* + * libssh2_agent_set_identity_path() + * + * Allows a custom agent identity socket path beyond SSH_AUTH_SOCK env + * + */ +LIBSSH2_API void +libssh2_agent_set_identity_path(LIBSSH2_AGENT *agent, + const char *path); + +/* + * libssh2_agent_get_identity_path() + * + * Returns the custom agent identity socket path if set + * + */ +LIBSSH2_API const char * +libssh2_agent_get_identity_path(LIBSSH2_AGENT *agent); + +/* + * libssh2_keepalive_config() + * + * Set how often keepalive messages should be sent. WANT_REPLY + * indicates whether the keepalive messages should request a response + * from the server. INTERVAL is number of seconds that can pass + * without any I/O, use 0 (the default) to disable keepalives. To + * avoid some busy-loop corner-cases, if you specify an interval of 1 + * it will be treated as 2. + * + * Note that non-blocking applications are responsible for sending the + * keepalive messages using libssh2_keepalive_send(). + */ +LIBSSH2_API void libssh2_keepalive_config(LIBSSH2_SESSION *session, + int want_reply, + unsigned int interval); + +/* + * libssh2_keepalive_send() + * + * Send a keepalive message if needed. SECONDS_TO_NEXT indicates how + * many seconds you can sleep after this call before you need to call + * it again. Returns 0 on success, or LIBSSH2_ERROR_SOCKET_SEND on + * I/O errors. + */ +LIBSSH2_API int libssh2_keepalive_send(LIBSSH2_SESSION *session, + int *seconds_to_next); + +/* NOTE NOTE NOTE + libssh2_trace() has no function in builds that aren't built with debug + enabled + */ +LIBSSH2_API int libssh2_trace(LIBSSH2_SESSION *session, int bitmask); +#define LIBSSH2_TRACE_TRANS (1<<1) +#define LIBSSH2_TRACE_KEX (1<<2) +#define LIBSSH2_TRACE_AUTH (1<<3) +#define LIBSSH2_TRACE_CONN (1<<4) +#define LIBSSH2_TRACE_SCP (1<<5) +#define LIBSSH2_TRACE_SFTP (1<<6) +#define LIBSSH2_TRACE_ERROR (1<<7) +#define LIBSSH2_TRACE_PUBLICKEY (1<<8) +#define LIBSSH2_TRACE_SOCKET (1<<9) + +typedef void (*libssh2_trace_handler_func)(LIBSSH2_SESSION*, + void *, + const char *, + size_t); +LIBSSH2_API int libssh2_trace_sethandler(LIBSSH2_SESSION *session, + void *context, + libssh2_trace_handler_func callback); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* !RC_INVOKED */ + +#endif /* LIBSSH2_H */ diff --git a/Clibgit2.xcframework/ios-arm64/Headers/libssh2_publickey.h b/Clibgit2.xcframework/ios-arm64/Headers/libssh2_publickey.h new file mode 100644 index 0000000..566acd6 --- /dev/null +++ b/Clibgit2.xcframework/ios-arm64/Headers/libssh2_publickey.h @@ -0,0 +1,128 @@ +/* Copyright (C) Sara Golemon + * All rights reserved. + * + * Redistribution and use in source and binary forms, + * with or without modification, are permitted provided + * that the following conditions are met: + * + * Redistributions of source code must retain the above + * copyright notice, this list of conditions and the + * following disclaimer. + * + * 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. + * + * Neither the name of the copyright holder nor the names + * of any other contributors may be used to endorse or + * promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + * CONTRIBUTORS "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 COPYRIGHT OWNER OR + * CONTRIBUTORS 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. + */ + +/* Note: This include file is only needed for using the + * publickey SUBSYSTEM which is not the same as publickey + * authentication. For authentication you only need libssh2.h + * + * For more information on the publickey subsystem, + * refer to IETF draft: secsh-publickey + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef LIBSSH2_PUBLICKEY_H +#define LIBSSH2_PUBLICKEY_H 1 + +#include "libssh2.h" + +typedef struct _LIBSSH2_PUBLICKEY LIBSSH2_PUBLICKEY; + +typedef struct _libssh2_publickey_attribute { + const char *name; + unsigned long name_len; + const char *value; + unsigned long value_len; + char mandatory; +} libssh2_publickey_attribute; + +typedef struct _libssh2_publickey_list { + unsigned char *packet; /* For freeing */ + + const unsigned char *name; + unsigned long name_len; + const unsigned char *blob; + unsigned long blob_len; + unsigned long num_attrs; + libssh2_publickey_attribute *attrs; /* free me */ +} libssh2_publickey_list; + +/* Generally use the first macro here, but if both name and value are string + literals, you can use _fast() to take advantage of preprocessing */ +#define libssh2_publickey_attribute(name, value, mandatory) \ + { (name), strlen(name), (value), strlen(value), (mandatory) }, +#define libssh2_publickey_attribute_fast(name, value, mandatory) \ + { (name), sizeof(name) - 1, (value), sizeof(value) - 1, (mandatory) }, + +#ifdef __cplusplus +extern "C" { +#endif + +/* Publickey Subsystem */ +LIBSSH2_API LIBSSH2_PUBLICKEY * +libssh2_publickey_init(LIBSSH2_SESSION *session); + +LIBSSH2_API int +libssh2_publickey_add_ex(LIBSSH2_PUBLICKEY *pkey, + const unsigned char *name, + unsigned long name_len, + const unsigned char *blob, + unsigned long blob_len, char overwrite, + unsigned long num_attrs, + const libssh2_publickey_attribute attrs[]); +#define libssh2_publickey_add(pkey, name, blob, blob_len, overwrite, \ + num_attrs, attrs) \ + libssh2_publickey_add_ex((pkey), \ + (name), strlen(name), \ + (blob), (blob_len), \ + (overwrite), (num_attrs), (attrs)) + +LIBSSH2_API int libssh2_publickey_remove_ex(LIBSSH2_PUBLICKEY *pkey, + const unsigned char *name, + unsigned long name_len, + const unsigned char *blob, + unsigned long blob_len); +#define libssh2_publickey_remove(pkey, name, blob, blob_len) \ + libssh2_publickey_remove_ex((pkey), \ + (name), strlen(name), \ + (blob), (blob_len)) + +LIBSSH2_API int +libssh2_publickey_list_fetch(LIBSSH2_PUBLICKEY *pkey, + unsigned long *num_keys, + libssh2_publickey_list **pkey_list); +LIBSSH2_API void +libssh2_publickey_list_free(LIBSSH2_PUBLICKEY *pkey, + libssh2_publickey_list *pkey_list); + +LIBSSH2_API int libssh2_publickey_shutdown(LIBSSH2_PUBLICKEY *pkey); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* LIBSSH2_PUBLICKEY_H */ diff --git a/Clibgit2.xcframework/ios-arm64/Headers/libssh2_sftp.h b/Clibgit2.xcframework/ios-arm64/Headers/libssh2_sftp.h new file mode 100644 index 0000000..ab7b0af --- /dev/null +++ b/Clibgit2.xcframework/ios-arm64/Headers/libssh2_sftp.h @@ -0,0 +1,382 @@ +/* Copyright (C) Sara Golemon + * All rights reserved. + * + * Redistribution and use in source and binary forms, + * with or without modification, are permitted provided + * that the following conditions are met: + * + * Redistributions of source code must retain the above + * copyright notice, this list of conditions and the + * following disclaimer. + * + * 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. + * + * Neither the name of the copyright holder nor the names + * of any other contributors may be used to endorse or + * promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + * CONTRIBUTORS "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 COPYRIGHT OWNER OR + * CONTRIBUTORS 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. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef LIBSSH2_SFTP_H +#define LIBSSH2_SFTP_H 1 + +#include "libssh2.h" + +#ifndef _WIN32 +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Note: Version 6 was documented at the time of writing + * However it was marked as "DO NOT IMPLEMENT" due to pending changes + * + * Let's start with Version 3 (The version found in OpenSSH) and go from there + */ +#define LIBSSH2_SFTP_VERSION 3 + +typedef struct _LIBSSH2_SFTP LIBSSH2_SFTP; +typedef struct _LIBSSH2_SFTP_HANDLE LIBSSH2_SFTP_HANDLE; +typedef struct _LIBSSH2_SFTP_ATTRIBUTES LIBSSH2_SFTP_ATTRIBUTES; +typedef struct _LIBSSH2_SFTP_STATVFS LIBSSH2_SFTP_STATVFS; + +/* Flags for open_ex() */ +#define LIBSSH2_SFTP_OPENFILE 0 +#define LIBSSH2_SFTP_OPENDIR 1 + +/* Flags for rename_ex() */ +#define LIBSSH2_SFTP_RENAME_OVERWRITE 0x00000001 +#define LIBSSH2_SFTP_RENAME_ATOMIC 0x00000002 +#define LIBSSH2_SFTP_RENAME_NATIVE 0x00000004 + +/* Flags for stat_ex() */ +#define LIBSSH2_SFTP_STAT 0 +#define LIBSSH2_SFTP_LSTAT 1 +#define LIBSSH2_SFTP_SETSTAT 2 + +/* Flags for symlink_ex() */ +#define LIBSSH2_SFTP_SYMLINK 0 +#define LIBSSH2_SFTP_READLINK 1 +#define LIBSSH2_SFTP_REALPATH 2 + +/* Flags for sftp_mkdir() */ +#define LIBSSH2_SFTP_DEFAULT_MODE -1 + +/* SFTP attribute flag bits */ +#define LIBSSH2_SFTP_ATTR_SIZE 0x00000001 +#define LIBSSH2_SFTP_ATTR_UIDGID 0x00000002 +#define LIBSSH2_SFTP_ATTR_PERMISSIONS 0x00000004 +#define LIBSSH2_SFTP_ATTR_ACMODTIME 0x00000008 +#define LIBSSH2_SFTP_ATTR_EXTENDED 0x80000000 + +/* SFTP statvfs flag bits */ +#define LIBSSH2_SFTP_ST_RDONLY 0x00000001 +#define LIBSSH2_SFTP_ST_NOSUID 0x00000002 + +struct _LIBSSH2_SFTP_ATTRIBUTES { + /* If flags & ATTR_* bit is set, then the value in this struct will be + * meaningful Otherwise it should be ignored + */ + unsigned long flags; + + libssh2_uint64_t filesize; + unsigned long uid, gid; + unsigned long permissions; + unsigned long atime, mtime; +}; + +struct _LIBSSH2_SFTP_STATVFS { + libssh2_uint64_t f_bsize; /* file system block size */ + libssh2_uint64_t f_frsize; /* fragment size */ + libssh2_uint64_t f_blocks; /* size of fs in f_frsize units */ + libssh2_uint64_t f_bfree; /* # free blocks */ + libssh2_uint64_t f_bavail; /* # free blocks for non-root */ + libssh2_uint64_t f_files; /* # inodes */ + libssh2_uint64_t f_ffree; /* # free inodes */ + libssh2_uint64_t f_favail; /* # free inodes for non-root */ + libssh2_uint64_t f_fsid; /* file system ID */ + libssh2_uint64_t f_flag; /* mount flags */ + libssh2_uint64_t f_namemax; /* maximum filename length */ +}; + +/* SFTP filetypes */ +#define LIBSSH2_SFTP_TYPE_REGULAR 1 +#define LIBSSH2_SFTP_TYPE_DIRECTORY 2 +#define LIBSSH2_SFTP_TYPE_SYMLINK 3 +#define LIBSSH2_SFTP_TYPE_SPECIAL 4 +#define LIBSSH2_SFTP_TYPE_UNKNOWN 5 +#define LIBSSH2_SFTP_TYPE_SOCKET 6 +#define LIBSSH2_SFTP_TYPE_CHAR_DEVICE 7 +#define LIBSSH2_SFTP_TYPE_BLOCK_DEVICE 8 +#define LIBSSH2_SFTP_TYPE_FIFO 9 + +/* + * Reproduce the POSIX file modes here for systems that are not POSIX + * compliant. + * + * These is used in "permissions" of "struct _LIBSSH2_SFTP_ATTRIBUTES" + */ +/* File type */ +#define LIBSSH2_SFTP_S_IFMT 0170000 /* type of file mask */ +#define LIBSSH2_SFTP_S_IFIFO 0010000 /* named pipe (fifo) */ +#define LIBSSH2_SFTP_S_IFCHR 0020000 /* character special */ +#define LIBSSH2_SFTP_S_IFDIR 0040000 /* directory */ +#define LIBSSH2_SFTP_S_IFBLK 0060000 /* block special */ +#define LIBSSH2_SFTP_S_IFREG 0100000 /* regular */ +#define LIBSSH2_SFTP_S_IFLNK 0120000 /* symbolic link */ +#define LIBSSH2_SFTP_S_IFSOCK 0140000 /* socket */ + +/* File mode */ +/* Read, write, execute/search by owner */ +#define LIBSSH2_SFTP_S_IRWXU 0000700 /* RWX mask for owner */ +#define LIBSSH2_SFTP_S_IRUSR 0000400 /* R for owner */ +#define LIBSSH2_SFTP_S_IWUSR 0000200 /* W for owner */ +#define LIBSSH2_SFTP_S_IXUSR 0000100 /* X for owner */ +/* Read, write, execute/search by group */ +#define LIBSSH2_SFTP_S_IRWXG 0000070 /* RWX mask for group */ +#define LIBSSH2_SFTP_S_IRGRP 0000040 /* R for group */ +#define LIBSSH2_SFTP_S_IWGRP 0000020 /* W for group */ +#define LIBSSH2_SFTP_S_IXGRP 0000010 /* X for group */ +/* Read, write, execute/search by others */ +#define LIBSSH2_SFTP_S_IRWXO 0000007 /* RWX mask for other */ +#define LIBSSH2_SFTP_S_IROTH 0000004 /* R for other */ +#define LIBSSH2_SFTP_S_IWOTH 0000002 /* W for other */ +#define LIBSSH2_SFTP_S_IXOTH 0000001 /* X for other */ + +/* macros to check for specific file types, added in 1.2.5 */ +#define LIBSSH2_SFTP_S_ISLNK(m) \ + (((m) & LIBSSH2_SFTP_S_IFMT) == LIBSSH2_SFTP_S_IFLNK) +#define LIBSSH2_SFTP_S_ISREG(m) \ + (((m) & LIBSSH2_SFTP_S_IFMT) == LIBSSH2_SFTP_S_IFREG) +#define LIBSSH2_SFTP_S_ISDIR(m) \ + (((m) & LIBSSH2_SFTP_S_IFMT) == LIBSSH2_SFTP_S_IFDIR) +#define LIBSSH2_SFTP_S_ISCHR(m) \ + (((m) & LIBSSH2_SFTP_S_IFMT) == LIBSSH2_SFTP_S_IFCHR) +#define LIBSSH2_SFTP_S_ISBLK(m) \ + (((m) & LIBSSH2_SFTP_S_IFMT) == LIBSSH2_SFTP_S_IFBLK) +#define LIBSSH2_SFTP_S_ISFIFO(m) \ + (((m) & LIBSSH2_SFTP_S_IFMT) == LIBSSH2_SFTP_S_IFIFO) +#define LIBSSH2_SFTP_S_ISSOCK(m) \ + (((m) & LIBSSH2_SFTP_S_IFMT) == LIBSSH2_SFTP_S_IFSOCK) + +/* SFTP File Transfer Flags -- (e.g. flags parameter to sftp_open()) + * Danger will robinson... APPEND doesn't have any effect on OpenSSH servers */ +#define LIBSSH2_FXF_READ 0x00000001 +#define LIBSSH2_FXF_WRITE 0x00000002 +#define LIBSSH2_FXF_APPEND 0x00000004 +#define LIBSSH2_FXF_CREAT 0x00000008 +#define LIBSSH2_FXF_TRUNC 0x00000010 +#define LIBSSH2_FXF_EXCL 0x00000020 + +/* SFTP Status Codes (returned by libssh2_sftp_last_error() ) */ +#define LIBSSH2_FX_OK 0UL +#define LIBSSH2_FX_EOF 1UL +#define LIBSSH2_FX_NO_SUCH_FILE 2UL +#define LIBSSH2_FX_PERMISSION_DENIED 3UL +#define LIBSSH2_FX_FAILURE 4UL +#define LIBSSH2_FX_BAD_MESSAGE 5UL +#define LIBSSH2_FX_NO_CONNECTION 6UL +#define LIBSSH2_FX_CONNECTION_LOST 7UL +#define LIBSSH2_FX_OP_UNSUPPORTED 8UL +#define LIBSSH2_FX_INVALID_HANDLE 9UL +#define LIBSSH2_FX_NO_SUCH_PATH 10UL +#define LIBSSH2_FX_FILE_ALREADY_EXISTS 11UL +#define LIBSSH2_FX_WRITE_PROTECT 12UL +#define LIBSSH2_FX_NO_MEDIA 13UL +#define LIBSSH2_FX_NO_SPACE_ON_FILESYSTEM 14UL +#define LIBSSH2_FX_QUOTA_EXCEEDED 15UL +#define LIBSSH2_FX_UNKNOWN_PRINCIPLE 16UL /* Initial mis-spelling */ +#define LIBSSH2_FX_UNKNOWN_PRINCIPAL 16UL +#define LIBSSH2_FX_LOCK_CONFlICT 17UL /* Initial mis-spelling */ +#define LIBSSH2_FX_LOCK_CONFLICT 17UL +#define LIBSSH2_FX_DIR_NOT_EMPTY 18UL +#define LIBSSH2_FX_NOT_A_DIRECTORY 19UL +#define LIBSSH2_FX_INVALID_FILENAME 20UL +#define LIBSSH2_FX_LINK_LOOP 21UL + +/* Returned by any function that would block during a read/write operation */ +#define LIBSSH2SFTP_EAGAIN LIBSSH2_ERROR_EAGAIN + +/* SFTP API */ +LIBSSH2_API LIBSSH2_SFTP *libssh2_sftp_init(LIBSSH2_SESSION *session); +LIBSSH2_API int libssh2_sftp_shutdown(LIBSSH2_SFTP *sftp); +LIBSSH2_API unsigned long libssh2_sftp_last_error(LIBSSH2_SFTP *sftp); +LIBSSH2_API LIBSSH2_CHANNEL *libssh2_sftp_get_channel(LIBSSH2_SFTP *sftp); + +/* File / Directory Ops */ +LIBSSH2_API LIBSSH2_SFTP_HANDLE * +libssh2_sftp_open_ex(LIBSSH2_SFTP *sftp, + const char *filename, + unsigned int filename_len, + unsigned long flags, + long mode, int open_type); +#define libssh2_sftp_open(sftp, filename, flags, mode) \ + libssh2_sftp_open_ex((sftp), \ + (filename), (unsigned int)strlen(filename), \ + (flags), (mode), LIBSSH2_SFTP_OPENFILE) +#define libssh2_sftp_opendir(sftp, path) \ + libssh2_sftp_open_ex((sftp), \ + (path), (unsigned int)strlen(path), \ + 0, 0, LIBSSH2_SFTP_OPENDIR) +LIBSSH2_API LIBSSH2_SFTP_HANDLE * +libssh2_sftp_open_ex_r(LIBSSH2_SFTP *sftp, + const char *filename, + size_t filename_len, + unsigned long flags, + long mode, int open_type, + LIBSSH2_SFTP_ATTRIBUTES *attrs); +#define libssh2_sftp_open_r(sftp, filename, flags, mode, attrs) \ + libssh2_sftp_open_ex_r((sftp), (filename), strlen(filename), \ + (flags), (mode), LIBSSH2_SFTP_OPENFILE, \ + (attrs)) + +LIBSSH2_API ssize_t libssh2_sftp_read(LIBSSH2_SFTP_HANDLE *handle, + char *buffer, size_t buffer_maxlen); + +LIBSSH2_API int libssh2_sftp_readdir_ex(LIBSSH2_SFTP_HANDLE *handle, \ + char *buffer, size_t buffer_maxlen, + char *longentry, + size_t longentry_maxlen, + LIBSSH2_SFTP_ATTRIBUTES *attrs); +#define libssh2_sftp_readdir(handle, buffer, buffer_maxlen, attrs) \ + libssh2_sftp_readdir_ex((handle), (buffer), (buffer_maxlen), NULL, 0, \ + (attrs)) + +LIBSSH2_API ssize_t libssh2_sftp_write(LIBSSH2_SFTP_HANDLE *handle, + const char *buffer, size_t count); +LIBSSH2_API int libssh2_sftp_fsync(LIBSSH2_SFTP_HANDLE *handle); + +LIBSSH2_API int libssh2_sftp_close_handle(LIBSSH2_SFTP_HANDLE *handle); +#define libssh2_sftp_close(handle) libssh2_sftp_close_handle(handle) +#define libssh2_sftp_closedir(handle) libssh2_sftp_close_handle(handle) + +LIBSSH2_API void libssh2_sftp_seek(LIBSSH2_SFTP_HANDLE *handle, size_t offset); +LIBSSH2_API void libssh2_sftp_seek64(LIBSSH2_SFTP_HANDLE *handle, + libssh2_uint64_t offset); +#define libssh2_sftp_rewind(handle) libssh2_sftp_seek64((handle), 0) + +LIBSSH2_API size_t libssh2_sftp_tell(LIBSSH2_SFTP_HANDLE *handle); +LIBSSH2_API libssh2_uint64_t libssh2_sftp_tell64(LIBSSH2_SFTP_HANDLE *handle); + +LIBSSH2_API int libssh2_sftp_fstat_ex(LIBSSH2_SFTP_HANDLE *handle, + LIBSSH2_SFTP_ATTRIBUTES *attrs, + int setstat); +#define libssh2_sftp_fstat(handle, attrs) \ + libssh2_sftp_fstat_ex((handle), (attrs), 0) +#define libssh2_sftp_fsetstat(handle, attrs) \ + libssh2_sftp_fstat_ex((handle), (attrs), 1) + +/* Miscellaneous Ops */ +LIBSSH2_API int libssh2_sftp_rename_ex(LIBSSH2_SFTP *sftp, + const char *source_filename, + unsigned int srouce_filename_len, + const char *dest_filename, + unsigned int dest_filename_len, + long flags); +#define libssh2_sftp_rename(sftp, sourcefile, destfile) \ + libssh2_sftp_rename_ex((sftp), \ + (sourcefile), (unsigned int)strlen(sourcefile), \ + (destfile), (unsigned int)strlen(destfile), \ + LIBSSH2_SFTP_RENAME_OVERWRITE | \ + LIBSSH2_SFTP_RENAME_ATOMIC | \ + LIBSSH2_SFTP_RENAME_NATIVE) + +LIBSSH2_API int libssh2_sftp_posix_rename_ex(LIBSSH2_SFTP *sftp, + const char *source_filename, + size_t srouce_filename_len, + const char *dest_filename, + size_t dest_filename_len); +#define libssh2_sftp_posix_rename(sftp, sourcefile, destfile) \ + libssh2_sftp_posix_rename_ex((sftp), (sourcefile), strlen(sourcefile), \ + (destfile), strlen(destfile)) + +LIBSSH2_API int libssh2_sftp_unlink_ex(LIBSSH2_SFTP *sftp, + const char *filename, + unsigned int filename_len); +#define libssh2_sftp_unlink(sftp, filename) \ + libssh2_sftp_unlink_ex((sftp), (filename), (unsigned int)strlen(filename)) + +LIBSSH2_API int libssh2_sftp_fstatvfs(LIBSSH2_SFTP_HANDLE *handle, + LIBSSH2_SFTP_STATVFS *st); + +LIBSSH2_API int libssh2_sftp_statvfs(LIBSSH2_SFTP *sftp, + const char *path, + size_t path_len, + LIBSSH2_SFTP_STATVFS *st); + +LIBSSH2_API int libssh2_sftp_mkdir_ex(LIBSSH2_SFTP *sftp, + const char *path, + unsigned int path_len, long mode); +#define libssh2_sftp_mkdir(sftp, path, mode) \ + libssh2_sftp_mkdir_ex((sftp), (path), (unsigned int)strlen(path), (mode)) + +LIBSSH2_API int libssh2_sftp_rmdir_ex(LIBSSH2_SFTP *sftp, + const char *path, + unsigned int path_len); +#define libssh2_sftp_rmdir(sftp, path) \ + libssh2_sftp_rmdir_ex((sftp), (path), (unsigned int)strlen(path)) + +LIBSSH2_API int libssh2_sftp_stat_ex(LIBSSH2_SFTP *sftp, + const char *path, + unsigned int path_len, + int stat_type, + LIBSSH2_SFTP_ATTRIBUTES *attrs); +#define libssh2_sftp_stat(sftp, path, attrs) \ + libssh2_sftp_stat_ex((sftp), (path), (unsigned int)strlen(path), \ + LIBSSH2_SFTP_STAT, (attrs)) +#define libssh2_sftp_lstat(sftp, path, attrs) \ + libssh2_sftp_stat_ex((sftp), (path), (unsigned int)strlen(path), \ + LIBSSH2_SFTP_LSTAT, (attrs)) +#define libssh2_sftp_setstat(sftp, path, attrs) \ + libssh2_sftp_stat_ex((sftp), (path), (unsigned int)strlen(path), \ + LIBSSH2_SFTP_SETSTAT, (attrs)) + +LIBSSH2_API int libssh2_sftp_symlink_ex(LIBSSH2_SFTP *sftp, + const char *path, + unsigned int path_len, + char *target, + unsigned int target_len, + int link_type); +#define libssh2_sftp_symlink(sftp, orig, linkpath) \ + libssh2_sftp_symlink_ex((sftp), \ + (orig), (unsigned int)strlen(orig), \ + (linkpath), (unsigned int)strlen(linkpath), \ + LIBSSH2_SFTP_SYMLINK) +#define libssh2_sftp_readlink(sftp, path, target, maxlen) \ + libssh2_sftp_symlink_ex((sftp), \ + (path), (unsigned int)strlen(path), \ + (target), (maxlen), \ + LIBSSH2_SFTP_READLINK) +#define libssh2_sftp_realpath(sftp, path, target, maxlen) \ + libssh2_sftp_symlink_ex((sftp), \ + (path), (unsigned int)strlen(path), \ + (target), (maxlen), \ + LIBSSH2_SFTP_REALPATH) + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* LIBSSH2_SFTP_H */ diff --git a/Clibgit2.xcframework/ios-arm64/Headers/module.modulemap b/Clibgit2.xcframework/ios-arm64/Headers/module.modulemap index fe5729d..3a9a9ba 100644 --- a/Clibgit2.xcframework/ios-arm64/Headers/module.modulemap +++ b/Clibgit2.xcframework/ios-arm64/Headers/module.modulemap @@ -28,4 +28,13 @@ module Clibgit2 { export * module * { export * } } + + // Expose libssh2 headers + explicit module libssh2 { + header "libssh2.h" + header "libssh2_sftp.h" + header "libssh2_publickey.h" + + export * + } } diff --git a/Clibgit2.xcframework/ios-arm64/libgit2_all.a b/Clibgit2.xcframework/ios-arm64/libgit2_all.a index c133b68..9e5cd47 100644 Binary files a/Clibgit2.xcframework/ios-arm64/libgit2_all.a and b/Clibgit2.xcframework/ios-arm64/libgit2_all.a differ diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2.h index 2961cc3..3457e5f 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2.h @@ -28,6 +28,7 @@ #include "git2/diff.h" #include "git2/email.h" #include "git2/errors.h" +#include "git2/experimental.h" #include "git2/filter.h" #include "git2/global.h" #include "git2/graph.h" diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/annotated_commit.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/annotated_commit.h index 3b7103f..04f3b1c 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/annotated_commit.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/annotated_commit.h @@ -13,9 +13,16 @@ /** * @file git2/annotated_commit.h - * @brief Git annotated commit routines + * @brief A commit and information about how it was looked up by the user. * @defgroup git_annotated_commit Git annotated commit routines * @ingroup Git + * + * An "annotated commit" is a commit that contains information about + * how the commit was resolved, which can be used for maintaining the + * user's "intent" through commands like merge and rebase. For example, + * if a user wants to "merge HEAD" then an annotated commit is used to + * both contain the HEAD commit _and_ the fact that it was resolved as + * the HEAD ref. * @{ */ GIT_BEGIN_DECL @@ -25,7 +32,7 @@ GIT_BEGIN_DECL * 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[out] 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 @@ -40,7 +47,7 @@ GIT_EXTERN(int) git_annotated_commit_from_ref( * 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[out] 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 @@ -67,7 +74,7 @@ GIT_EXTERN(int) git_annotated_commit_from_fetchhead( * 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[out] 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 @@ -84,7 +91,7 @@ GIT_EXTERN(int) git_annotated_commit_lookup( * 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[out] 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 diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/apply.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/apply.h index bc637df..7ab939d 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/apply.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/apply.h @@ -14,9 +14,12 @@ /** * @file git2/apply.h - * @brief Git patch application routines + * @brief Apply patches to the working directory or index * @defgroup git_apply Git patch application routines * @ingroup Git + * + * Mechanisms to apply a patch to the index, the working directory, + * or both. * @{ */ GIT_BEGIN_DECL @@ -32,6 +35,8 @@ GIT_BEGIN_DECL * * @param delta The delta to be applied * @param payload User-specified payload + * @return 0 if the delta is applied, < 0 if the apply process will be aborted + * or > 0 if the delta will not be applied. */ typedef int GIT_CALLBACK(git_apply_delta_cb)( const git_diff_delta *delta, @@ -48,27 +53,44 @@ typedef int GIT_CALLBACK(git_apply_delta_cb)( * * @param hunk The hunk to be applied * @param payload User-specified payload + * @return 0 if the hunk is applied, < 0 if the apply process will be aborted + * or > 0 if the hunk will not be applied. */ typedef int GIT_CALLBACK(git_apply_hunk_cb)( const git_diff_hunk *hunk, void *payload); -/** Flags controlling the behavior of git_apply */ +/** + * Flags controlling the behavior of `git_apply`. + * + * 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. + */ 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_CHECK = (1 << 0) } git_apply_flags_t; /** - * Apply options structure + * Apply options structure. + * + * 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. * * Initialize with `GIT_APPLY_OPTIONS_INIT`. Alternatively, you can * use `git_apply_options_init`. * - * @see git_apply_to_tree, git_apply + * @see git_apply_to_tree + * @see git_apply */ typedef struct { unsigned int version; /**< The version */ @@ -79,16 +101,29 @@ typedef struct { /** 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. */ + /** Payload passed to both `delta_cb` & `hunk_cb`. */ void *payload; - /** Bitmask of git_apply_flags_t */ + /** Bitmask of `git_apply_flags_t` */ unsigned int flags; } git_apply_options; +/** Current version for the `git_apply_options` structure */ #define GIT_APPLY_OPTIONS_VERSION 1 + +/** Static constructor for `git_apply_options` */ #define GIT_APPLY_OPTIONS_INIT {GIT_APPLY_OPTIONS_VERSION} +/** + * Initialize git_apply_options structure + * + * Initialize a `git_apply_options` with default values. Equivalent to creating + * an instance with GIT_APPLY_OPTIONS_INIT. + * + * @param opts The `git_apply_options` struct to initialize. + * @param version The struct version; pass `GIT_APPLY_OPTIONS_VERSION` + * @return 0 on success or -1 on failure. + */ GIT_EXTERN(int) git_apply_options_init(git_apply_options *opts, unsigned int version); /** @@ -127,7 +162,7 @@ typedef enum { * 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_BOTH = 2 } git_apply_location_t; /** diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/attr.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/attr.h index 3891a0c..e5216fe 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/attr.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/attr.h @@ -12,9 +12,13 @@ /** * @file git2/attr.h - * @brief Git attribute management routines + * @brief Attribute management routines * @defgroup git_attr Git attribute management routines * @ingroup Git + * + * Attributes specify additional information about how git should + * handle particular paths - for example, they may indicate whether + * a particular filter is applied, like LFS or line ending conversions. * @{ */ GIT_BEGIN_DECL @@ -83,7 +87,7 @@ 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_STRING /**< This attribute has a value */ } git_attr_value_t; /** @@ -114,16 +118,18 @@ GIT_EXTERN(git_attr_value_t) git_attr_value(const char *attr); * use index only for creating archives or for a bare repo (if an * index has been specified for the bare repo). */ + +/** Examine attribute in working directory, then index */ #define GIT_ATTR_CHECK_FILE_THEN_INDEX 0 +/** Examine attribute in index, then working directory */ #define GIT_ATTR_CHECK_INDEX_THEN_FILE 1 -#define GIT_ATTR_CHECK_INDEX_ONLY 2 +/** Examine attributes only in the index */ +#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. @@ -134,8 +140,12 @@ GIT_EXTERN(git_attr_value_t) git_attr_value(const char *attr); * Passing the `GIT_ATTR_CHECK_INCLUDE_COMMIT` flag will use attributes * from a `.gitattributes` file in a specific commit. */ + +/** Ignore system attributes */ #define GIT_ATTR_CHECK_NO_SYSTEM (1 << 2) +/** Honor `.gitattributes` in the HEAD revision */ #define GIT_ATTR_CHECK_INCLUDE_HEAD (1 << 3) +/** Honor `.gitattributes` in a specific commit */ #define GIT_ATTR_CHECK_INCLUDE_COMMIT (1 << 4) /** @@ -160,7 +170,10 @@ typedef struct { git_oid attr_commit_id; } git_attr_options; +/** Current version for the `git_attr_options` structure */ #define GIT_ATTR_OPTIONS_VERSION 1 + +/** Static constructor for `git_attr_options` */ #define GIT_ATTR_OPTIONS_INIT {GIT_ATTR_OPTIONS_VERSION} /** @@ -177,6 +190,7 @@ typedef struct { * 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. + * @return 0 or an error code. */ GIT_EXTERN(int) git_attr_get( const char **value_out, @@ -199,6 +213,7 @@ GIT_EXTERN(int) git_attr_get( * 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. + * @return 0 or an error code. */ GIT_EXTERN(int) git_attr_get_ext( const char **value_out, @@ -235,6 +250,7 @@ GIT_EXTERN(int) git_attr_get_ext( * 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. + * @return 0 or an error code. */ GIT_EXTERN(int) git_attr_get_many( const char **values_out, @@ -259,6 +275,7 @@ GIT_EXTERN(int) git_attr_get_many( * 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. + * @return 0 or an error code. */ GIT_EXTERN(int) git_attr_get_many_ext( const char **values_out, @@ -344,11 +361,16 @@ GIT_EXTERN(int) git_attr_cache_flush( * 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 + * file of the repository (plus the built-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"); + * + * @param repo The repository to add the macro in. + * @param name The name of the macro. + * @param values The value for the macro. + * @return 0 or an error code. */ GIT_EXTERN(int) git_attr_add_macro( git_repository *repo, diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/blame.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/blame.h index d193ce1..f3e6692 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/blame.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/blame.h @@ -13,9 +13,14 @@ /** * @file git2/blame.h - * @brief Git blame routines + * @brief Specify a file's most recent changes per-line * @defgroup git_blame Git blame routines * @ingroup Git + * + * Producing a "blame" (or "annotated history") decorates individual + * lines in a file with the commit that introduced that particular line + * of changes. This can be useful to indicate when and why a particular + * change was made. * @{ */ GIT_BEGIN_DECL @@ -73,7 +78,7 @@ typedef enum { GIT_BLAME_USE_MAILMAP = (1<<5), /** Ignore whitespace differences */ - GIT_BLAME_IGNORE_WHITESPACE = (1<<6), + GIT_BLAME_IGNORE_WHITESPACE = (1<<6) } git_blame_flag_t; /** @@ -87,7 +92,7 @@ typedef struct git_blame_options { unsigned int version; /** A combination of `git_blame_flag_t` */ - uint32_t flags; + unsigned int flags; /** * The lower bound on the number of alphanumeric characters that @@ -122,7 +127,10 @@ typedef struct git_blame_options { size_t max_line; } git_blame_options; +/** Current version for the `git_blame_options` structure */ #define GIT_BLAME_OPTIONS_VERSION 1 + +/** Static constructor for `git_blame_options` */ #define GIT_BLAME_OPTIONS_INIT {GIT_BLAME_OPTIONS_VERSION} /** @@ -165,6 +173,13 @@ typedef struct git_blame_hunk { */ git_signature *final_signature; + /** + * The committer 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_committer; + /** * The OID of the commit where this hunk was found. * This will usually be the same as `final_commit_id`, except when @@ -190,6 +205,18 @@ typedef struct git_blame_hunk { */ git_signature *orig_signature; + /** + * The committer 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_committer; + + /* + * The summary of the commit. + */ + const char *summary; + /** * The 1 iff the hunk has been tracked to a boundary commit (the root, * or the commit specified in git_blame_options.oldest_commit) @@ -197,13 +224,75 @@ typedef struct git_blame_hunk { char boundary; } git_blame_hunk; +/** + * Structure that represents a line in a blamed file. + */ +typedef struct git_blame_line { + const char *ptr; + size_t len; +} git_blame_line; /** Opaque structure to hold blame results */ typedef struct git_blame git_blame; +/** + * Gets the number of lines that exist in the blame structure. + * + * @param blame The blame structure to query. + * @return The number of line. + */ +GIT_EXTERN(size_t) git_blame_linecount(git_blame *blame); + /** * Gets the number of hunks that exist in the blame structure. + * + * @param blame The blame structure to query. + * @return The number of hunks. */ +GIT_EXTERN(size_t) git_blame_hunkcount(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_hunk_byindex( + git_blame *blame, + size_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_hunk_byline( + git_blame *blame, + size_t lineno); + +/** + * Gets the information about the line in the blame. + * + * @param blame the blame structure to query + * @param idx the (1-based) line number + * @return the blamed line, or NULL on error + */ +GIT_EXTERN(const git_blame_line *) git_blame_line_byindex( + git_blame *blame, + size_t idx); + +#ifndef GIT_DEPRECATE_HARD +/** + * Gets the number of hunks that exist in the blame structure. + * + * @param blame The blame structure to query. + * @return The number of hunks. + */ + GIT_EXTERN(uint32_t) git_blame_get_hunk_count(git_blame *blame); /** @@ -213,9 +302,9 @@ GIT_EXTERN(uint32_t) git_blame_get_hunk_count(git_blame *blame); * @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); +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. @@ -224,39 +313,58 @@ GIT_EXTERN(const git_blame_hunk*) git_blame_get_hunk_byindex( * @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); +GIT_EXTERN(const git_blame_hunk *) git_blame_get_hunk_byline( + git_blame *blame, + size_t lineno); +#endif /** - * Get the blame for a single file. + * Get the blame for a single file in the repository. * * @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.) + * @param options options for the blame operation or NULL + * @return 0 on success, or an error code */ GIT_EXTERN(int) git_blame_file( - git_blame **out, - git_repository *repo, - const char *path, - git_blame_options *options); + git_blame **out, + git_repository *repo, + const char *path, + git_blame_options *options); +/** + * Get the blame for a single file in the repository, using the specified + * buffer contents as the uncommitted changes of the file (the working + * directory contents). + * + * @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 contents the uncommitted changes + * @param contents_len the length of the changes buffer + * @param options options for the blame operation or NULL + * @return 0 on success, or an error code + */ +GIT_EXTERN(int) git_blame_file_from_buffer( + git_blame **out, + git_repository *repo, + const char *path, + const char *contents, + size_t contents_len, + 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. + * Get blame data for a file that has been modified in memory. The `blame` + * 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. + * 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 + * @param base 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 @@ -264,10 +372,10 @@ GIT_EXTERN(int) git_blame_file( * about the error) */ GIT_EXTERN(int) git_blame_buffer( - git_blame **out, - git_blame *reference, - const char *buffer, - size_t buffer_len); + git_blame **out, + git_blame *base, + const char *buffer, + size_t buffer_len); /** * Free memory allocated by git_blame_file or git_blame_buffer. diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/blob.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/blob.h index 8fc7391..0ed1685 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/blob.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/blob.h @@ -15,9 +15,13 @@ /** * @file git2/blob.h - * @brief Git blob load and write routines + * @brief A blob represents a file in a git repository. * @defgroup git_blob Git blob load and write routines * @ingroup Git + * + * A blob represents a file in a git repository. This is the raw data + * as it is stored in the repository itself. Blobs may be "filtered" + * to produce the on-disk content. * @{ */ GIT_BEGIN_DECL @@ -25,12 +29,15 @@ GIT_BEGIN_DECL /** * Lookup a blob object from a repository. * - * @param blob pointer to the looked up blob + * @param[out] 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); +GIT_EXTERN(int) git_blob_lookup( + git_blob **blob, + git_repository *repo, + const git_oid *id); /** * Lookup a blob object from a repository, @@ -38,7 +45,7 @@ GIT_EXTERN(int) git_blob_lookup(git_blob **blob, git_repository *repo, const git * * @see git_object_lookup_prefix * - * @param blob pointer to the looked up blob + * @param[out] 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 @@ -84,7 +91,7 @@ GIT_EXTERN(git_repository *) git_blob_owner(const git_blob *blob); * time. * * @param blob pointer to the blob - * @return the pointer, or NULL on error + * @return @type `unsigned char *` the pointer, or NULL on error */ GIT_EXTERN(const void *) git_blob_rawcontent(const git_blob *blob); @@ -92,12 +99,14 @@ 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 + * @return size in bytes */ GIT_EXTERN(git_object_size_t) git_blob_rawsize(const git_blob *blob); /** * Flags to control the functionality of `git_blob_filter`. + * + * @flags */ typedef enum { /** When set, filters will not be applied to binary files. */ @@ -119,7 +128,7 @@ typedef enum { * 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_ATTRIBUTES_FROM_COMMIT = (1 << 3) } git_blob_filter_flag_t; /** @@ -128,16 +137,34 @@ typedef enum { * Initialize with `GIT_BLOB_FILTER_OPTIONS_INIT`. Alternatively, you can * use `git_blob_filter_options_init`. * + * @options[version] GIT_BLOB_FILTER_OPTIONS_VERSION + * @options[init_macro] GIT_BLOB_FILTER_OPTIONS_INIT + * @options[init_function] git_blob_filter_options_init */ typedef struct { + /** Version number of the options structure. */ int version; - /** Flags to control the filtering process, see `git_blob_filter_flag_t` above */ + /** + * Flags to control the filtering process, see `git_blob_filter_flag_t` above. + * + * @type[flags] git_blob_filter_flag_t + */ uint32_t flags; #ifdef GIT_DEPRECATE_HARD + /** + * Unused and reserved for ABI compatibility. + * + * @deprecated this value should not be set + */ void *reserved; #else + /** + * This value is unused and reserved for API compatibility. + * + * @deprecated this value should not be set + */ git_oid *commit_id; #endif @@ -148,8 +175,18 @@ typedef struct { git_oid attr_commit_id; } git_blob_filter_options; +/** + * The current version number for the `git_blob_filter_options` structure ABI. + */ #define GIT_BLOB_FILTER_OPTIONS_VERSION 1 -#define GIT_BLOB_FILTER_OPTIONS_INIT {GIT_BLOB_FILTER_OPTIONS_VERSION, GIT_BLOB_FILTER_CHECK_FOR_BINARY} + +/** + * The default values for `git_blob_filter_options`. + */ +#define GIT_BLOB_FILTER_OPTIONS_INIT { \ + GIT_BLOB_FILTER_OPTIONS_VERSION, \ + GIT_BLOB_FILTER_CHECK_FOR_BINARY \ + } /** * Initialize git_blob_filter_options structure @@ -158,10 +195,12 @@ typedef struct { * 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`. + * @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); +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. @@ -171,7 +210,7 @@ GIT_EXTERN(int) git_blob_filter_options_init(git_blob_filter_options *opts, unsi * 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 + * The output is written into a `git_buf` which the caller must dispose * when done (via `git_buf_dispose`). * * If no filters need to be applied, then the `out` buffer will just @@ -183,7 +222,7 @@ GIT_EXTERN(int) git_blob_filter_options_init(git_blob_filter_options *opts, unsi * @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 + * @return @type[enum] git_error_code 0 on success or an error code */ GIT_EXTERN(int) git_blob_filter( git_buf *out, @@ -192,10 +231,10 @@ GIT_EXTERN(int) git_blob_filter( 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 + * Read a file from the working folder of a repository and write it + * to the object database. * - * @param id return the id of the written blob + * @param[out] 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, @@ -205,19 +244,23 @@ GIT_EXTERN(int) git_blob_filter( 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 + * Read a file from the filesystem (not necessarily inside the + * working folder of the repository) and write it to the object + * database. * - * @param id return the id of the written blob + * @param[out] 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); +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 + * Create a stream to write a new blob into the object database. * * 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 @@ -234,7 +277,7 @@ GIT_EXTERN(int) git_blob_create_from_disk(git_oid *id, git_repository *repo, con * 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[out] 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 @@ -247,11 +290,11 @@ GIT_EXTERN(int) git_blob_create_from_stream( const char *hintpath); /** - * Close the stream and write the blob to the object db + * Close the stream and finalize writing the blob to the object database. * * The stream will be closed and freed. * - * @param out the id of the new blob + * @param[out] out the id of the new blob * @param stream the stream to close * @return 0 or an error code */ @@ -260,9 +303,9 @@ GIT_EXTERN(int) git_blob_create_from_stream_commit( git_writestream *stream); /** - * Write an in-memory buffer to the ODB as a blob + * Write an in-memory buffer to the object database as a blob. * - * @param id return the id of the written blob + * @param[out] 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 @@ -272,24 +315,37 @@ 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. + * Determine if the blob content is most likely 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 + * @return @type bool 1 if the content of the blob is detected * as binary; 0 otherwise. */ GIT_EXTERN(int) git_blob_is_binary(const git_blob *blob); +/** + * Determine if the given content is most certainly binary or not; + * this is the same mechanism used by `git_blob_is_binary` but only + * looking at raw data. + * + * @param data The blob data which content should be analyzed + * @param len The length of the data + * @return 1 if the content of the blob is detected + * as binary; 0 otherwise. + */ +GIT_EXTERN(int) git_blob_data_is_binary(const char *data, size_t len); + /** * 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[out] out Pointer to store the copy of the object * @param source Original object to copy + * @return 0. */ GIT_EXTERN(int) git_blob_dup(git_blob **out, git_blob *source); diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/branch.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/branch.h index 24ea7f7..56d737d 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/branch.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/branch.h @@ -13,9 +13,15 @@ /** * @file git2/branch.h - * @brief Git branch parsing routines + * @brief Branch creation and handling * @defgroup git_branch Git branch management * @ingroup Git + * + * A branch is a specific type of reference, at any particular time, + * a git working directory typically is said to have a branch "checked out", + * meaning that commits that are created will be made "on" a branch. + * This occurs by updating the branch reference to point to the new + * commit. The checked out branch is indicated by the `HEAD` meta-ref. * @{ */ GIT_BEGIN_DECL @@ -33,16 +39,13 @@ GIT_BEGIN_DECL * See `git_tag_create()` for rules about valid names. * * @param out Pointer where to store the underlying reference. - * + * @param repo the repository to create the branch in. * @param branch_name Name for the branch; this name is - * validated for consistency. It should also not conflict with - * an already existing branch name. - * + * 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`. - * + * 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. @@ -61,15 +64,21 @@ GIT_EXTERN(int) git_branch_create( * 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 + * @param ref_out Pointer where to store the underlying reference. + * @param repo the repository to create the branch in. + * @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 Annotated 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. */ GIT_EXTERN(int) git_branch_create_from_annotated( git_reference **ref_out, - git_repository *repository, + git_repository *repo, const char *branch_name, - const git_annotated_commit *commit, + const git_annotated_commit *target, int force); /** @@ -127,8 +136,8 @@ GIT_EXTERN(void) git_branch_iterator_free(git_branch_iterator *iter); * 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()`. + * be valid anymore, and should be freed immediately by the user using + * `git_reference_free()`. * * @param out New reference object for the updated name. * @@ -220,7 +229,7 @@ GIT_EXTERN(int) git_branch_upstream( * @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` + * @return @type git_error_t 0 on success; GIT_ENOTFOUND if there's no branch named `branch_name` * or an error code */ GIT_EXTERN(int) git_branch_set_upstream( diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/buffer.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/buffer.h index 926f133..3fe4f85 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/buffer.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/buffer.h @@ -11,9 +11,12 @@ /** * @file git2/buffer.h - * @brief Buffer export structure - * + * @brief A data structure to return data to callers * @ingroup Git + * + * The `git_buf` buffer is used to return arbitrary data - typically + * strings - to callers. Callers are responsible for freeing the memory + * in a buffer with the `git_buf_dispose` function. * @{ */ GIT_BEGIN_DECL @@ -23,112 +26,51 @@ GIT_BEGIN_DECL * * 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. + * To make ownership clear in these cases, libgit2 uses `git_buf` to + * return this data. Callers should use `git_buf_dispose()` to release + * the memory when they are done. * - * 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. + * A `git_buf` contains a pointer to a NUL-terminated C string, and + * the length of the string (not including the NUL terminator). */ 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. + * The buffer contents. `ptr` points to the start of the buffer + * being returned. The buffer's length (in bytes) is specified + * by the `size` member of the structure, and contains a NUL + * terminator at position `(size + 1)`. */ - char *ptr; + 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. + * This field is reserved and unused. */ - size_t asize; + size_t reserved; /** - * `size` holds the size (in bytes) of the data that is actually used. + * The length (in bytes) of the buffer pointed to by `ptr`, + * not including a NUL terminator. */ size_t size; } git_buf; /** - * Static initializer for git_buf from static buffer + * Use to initialize a `git_buf` before passing it to a function that + * will populate it. */ -#define GIT_BUF_INIT_CONST(STR,LEN) { (char *)(STR), 0, (size_t)(LEN) } +#define GIT_BUF_INIT { NULL, 0, 0 } /** * 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. + * pointed to by `buffer->ptr`. * * @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 - /** @} */ +GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/cert.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/cert.h index 0ed38ff..7b91b63 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/cert.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/cert.h @@ -12,7 +12,7 @@ /** * @file git2/cert.h - * @brief Git certificate objects + * @brief TLS and SSH certificate handling * @defgroup git_cert Certificate objects * @ingroup Git * @{ @@ -44,7 +44,7 @@ typedef enum git_cert_t { * information about the certificate. This is used when using * curl. */ - GIT_CERT_STRARRAY, + GIT_CERT_STRARRAY } git_cert_t; /** @@ -82,7 +82,7 @@ typedef enum { /** SHA-256 is available */ GIT_CERT_SSH_SHA256 = (1 << 2), /** Raw hostkey is available */ - GIT_CERT_SSH_RAW = (1 << 3), + GIT_CERT_SSH_RAW = (1 << 3) } git_cert_ssh_t; typedef enum { @@ -169,4 +169,5 @@ typedef struct { /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/checkout.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/checkout.h index c7aeee4..bdea928 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/checkout.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/checkout.h @@ -13,9 +13,13 @@ /** * @file git2/checkout.h - * @brief Git checkout routines + * @brief Update the contents of the working directory * @defgroup git_checkout Git checkout routines * @ingroup Git + * + * Update the contents of the working directory, or a subset of the + * files in the working directory, to point to the data in the index + * or a specific commit. * @{ */ GIT_BEGIN_DECL @@ -31,17 +35,11 @@ GIT_BEGIN_DECL * 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. + * You give checkout one of two strategies for update: * - * - `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. + * - `GIT_CHECKOUT_SAFE` is the default, and similar to git's default, + * which will make modifications that will not lose changes in the + * working directory. * * | target == baseline | target != baseline | * ---------------------|-----------------------|----------------------| @@ -55,6 +53,10 @@ GIT_BEGIN_DECL * baseline present | | | * ---------------------|-----------------------|----------------------| * + * - `GIT_CHECKOUT_FORCE` will take any action to make the working + * directory match the target (including potentially discarding + * modified files). + * * 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. @@ -69,6 +71,9 @@ GIT_BEGIN_DECL * * There are some additional flags to modify the behavior of checkout: * + * - `GIT_CHECKOUT_DRY_RUN` is a dry-run strategy that checks for conflicts, + * etc., but doesn't make any actual changes. + * * - GIT_CHECKOUT_ALLOW_CONFLICTS makes SAFE mode apply safe file updates * even if there are conflicts (instead of cancelling the checkout). * @@ -102,29 +107,24 @@ GIT_BEGIN_DECL * 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. + * + * @flags */ 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. + * If the uncommitted changes don't conflict with the checked + * out files, the checkout will still proceed, leaving the + * changes intact. */ - GIT_CHECKOUT_SAFE = (1u << 0), + GIT_CHECKOUT_SAFE = 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. + * Allow all updates to force working directory to look like + * the index, potentially losing data in the process. */ GIT_CHECKOUT_FORCE = (1u << 1), - /** Allow checkout to recreate missing files */ GIT_CHECKOUT_RECREATE_MISSING = (1u << 2), @@ -178,20 +178,31 @@ typedef enum { 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. + * Perform a "dry run", reporting what _would_ be done but + * without actually making changes in the working directory + * or the index. */ GIT_CHECKOUT_DRY_RUN = (1u << 24), - + + /** Include common ancestor data in zdiff3 format for conflicts */ + GIT_CHECKOUT_CONFLICT_STYLE_ZDIFF3 = (1u << 25), + /** + * Do not do a checkout and do not fire callbacks; this is primarily + * useful only for internal functions that will perform the + * checkout themselves but need to pass checkout options into + * another function, for example, `git_clone`. + */ + GIT_CHECKOUT_NONE = (1u << 30), + + /* * 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_UPDATE_SUBMODULES_IF_CHANGED = (1u << 17) } git_checkout_strategy_t; /** @@ -207,6 +218,8 @@ typedef enum { * 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. + * + * @flags */ typedef enum { GIT_CHECKOUT_NOTIFY_NONE = 0, @@ -248,7 +261,17 @@ typedef struct { size_t chmod_calls; } git_checkout_perfdata; -/** Checkout notification callback function */ +/** + * Checkout notification callback function. + * + * @param why the notification reason + * @param path the path to the file being checked out + * @param baseline the baseline's diff file information + * @param target the checkout target diff file information + * @param workdir the working directory diff file information + * @param payload the user-supplied callback payload + * @return 0 on success, or an error code + */ typedef int GIT_CALLBACK(git_checkout_notify_cb)( git_checkout_notify_t why, const char *path, @@ -257,14 +280,26 @@ typedef int GIT_CALLBACK(git_checkout_notify_cb)( const git_diff_file *workdir, void *payload); -/** Checkout progress notification function */ +/** + * Checkout progress notification function. + * + * @param path the path to the file being checked out + * @param completed_steps number of checkout steps completed + * @param total_steps number of total steps in the checkout process + * @param payload the user-supplied callback payload + */ 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 */ +/** + * Checkout performance data reporting function. + * + * @param perfdata the performance data for the checkout + * @param payload the user-supplied callback payload + */ typedef void GIT_CALLBACK(git_checkout_perfdata_cb)( const git_checkout_perfdata *perfdata, void *payload); @@ -275,10 +310,18 @@ typedef void GIT_CALLBACK(git_checkout_perfdata_cb)( * Initialize with `GIT_CHECKOUT_OPTIONS_INIT`. Alternatively, you can * use `git_checkout_options_init`. * + * @options[version] GIT_CHECKOUT_OPTIONS_VERSION + * @options[init_macro] GIT_CHECKOUT_OPTIONS_INIT + * @options[init_function] git_checkout_options_init */ typedef struct git_checkout_options { unsigned int version; /**< The version */ + /** + * Checkout strategy. Default is a safe checkout. + * + * @type[flags] git_checkout_strategy_t + */ unsigned int checkout_strategy; /**< default will be a safe checkout */ int disable_filters; /**< don't apply filters like CRLF conversion */ @@ -286,7 +329,13 @@ typedef struct git_checkout_options { 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 */ + /** + * Checkout notification flags specify what operations the notify + * callback is invoked for. + * + * @type[flags] git_checkout_notify_t + */ + unsigned int notify_flags; /** * Optional callback to get notifications on specific file states. @@ -341,8 +390,12 @@ typedef struct git_checkout_options { void *perfdata_payload; } git_checkout_options; + +/** Current version for the `git_checkout_options` structure */ #define GIT_CHECKOUT_OPTIONS_VERSION 1 -#define GIT_CHECKOUT_OPTIONS_INIT {GIT_CHECKOUT_OPTIONS_VERSION, GIT_CHECKOUT_SAFE} + +/** Static constructor for `git_checkout_options` */ +#define GIT_CHECKOUT_OPTIONS_INIT { GIT_CHECKOUT_OPTIONS_VERSION } /** * Initialize git_checkout_options structure @@ -411,4 +464,5 @@ GIT_EXTERN(int) git_checkout_tree( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/cherrypick.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/cherrypick.h index 0e6a252..e6cf99e 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/cherrypick.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/cherrypick.h @@ -13,9 +13,12 @@ /** * @file git2/cherrypick.h - * @brief Git cherry-pick routines + * @brief Cherry-pick the contents of an individual commit * @defgroup git_cherrypick Git cherry-pick routines * @ingroup Git + * + * "Cherry-pick" will attempts to re-apply the changes in an + * individual commit to the current index and working directory. * @{ */ GIT_BEGIN_DECL @@ -33,8 +36,13 @@ typedef struct { git_checkout_options checkout_opts; /**< Options for the checkout */ } git_cherrypick_options; +/** Current version for the `git_cherrypick_options` structure */ #define GIT_CHERRYPICK_OPTIONS_VERSION 1 -#define GIT_CHERRYPICK_OPTIONS_INIT {GIT_CHERRYPICK_OPTIONS_VERSION, 0, GIT_MERGE_OPTIONS_INIT, GIT_CHECKOUT_OPTIONS_INIT} + +/** Static constructor for `git_cherrypick_options` */ +#define GIT_CHERRYPICK_OPTIONS_INIT { \ + GIT_CHERRYPICK_OPTIONS_VERSION, 0, \ + GIT_MERGE_OPTIONS_INIT, GIT_CHECKOUT_OPTIONS_INIT } /** * Initialize git_cherrypick_options structure @@ -89,4 +97,3 @@ GIT_EXTERN(int) git_cherrypick( GIT_END_DECL #endif - diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/clone.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/clone.h index 3c3ea26..b7a47ab 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/clone.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/clone.h @@ -17,9 +17,13 @@ /** * @file git2/clone.h - * @brief Git cloning routines + * @brief Clone a remote repository to the local disk * @defgroup git_clone Git cloning routines * @ingroup Git + * + * Clone will take a remote repository - located on a remote server + * accessible by HTTPS or SSH, or a repository located elsewhere on + * the local disk - and place a copy in the given local path. * @{ */ GIT_BEGIN_DECL @@ -49,7 +53,7 @@ typedef enum { * Bypass the git-aware transport, but do not try to use * hardlinks. */ - GIT_CLONE_LOCAL_NO_LINKS, + GIT_CLONE_LOCAL_NO_LINKS } git_clone_local_t; /** @@ -59,7 +63,7 @@ typedef enum { * 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[out] 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 @@ -74,14 +78,14 @@ typedef int GIT_CALLBACK(git_remote_create_cb)( void *payload); /** - * The signature of a function matchin git_repository_init, with an - * aditional void * as callback payload. + * The signature of a function matching git_repository_init, with an + * additional 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[out] 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 @@ -99,14 +103,17 @@ typedef int GIT_CALLBACK(git_repository_create_cb)( * Initialize with `GIT_CLONE_OPTIONS_INIT`. Alternatively, you can * use `git_clone_options_init`. * + * @options[version] GIT_CLONE_OPTIONS_VERSION + * @options[init_macro] GIT_CLONE_OPTIONS_INIT + * @options[init_function] 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`. + * checkout, set the `checkout_strategy` to `GIT_CHECKOUT_NONE` + * or `GIT_CHECKOUT_DRY_RUN`. */ git_checkout_options checkout_opts; @@ -163,10 +170,14 @@ typedef struct git_clone_options { void *remote_cb_payload; } git_clone_options; +/** Current version for the `git_clone_options` structure */ #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 } + +/** Static constructor for `git_clone_options` */ +#define GIT_CLONE_OPTIONS_INIT \ + { GIT_CLONE_OPTIONS_VERSION, \ + GIT_CHECKOUT_OPTIONS_INIT, \ + GIT_FETCH_OPTIONS_INIT } /** * Initialize git_clone_options structure @@ -189,7 +200,11 @@ GIT_EXTERN(int) git_clone_options_init( * 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 + * Note that the libgit2 library _must_ be initialized using + * `git_libgit2_init` before any APIs can be called, including + * this one. + * + * @param[out] 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 @@ -206,4 +221,5 @@ GIT_EXTERN(int) git_clone( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/commit.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/commit.h index 4d74b89..b998e18 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/commit.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/commit.h @@ -14,9 +14,13 @@ /** * @file git2/commit.h - * @brief Git commit parsing, formatting routines + * @brief A representation of a set of changes in the repository * @defgroup git_commit Git commit parsing, formatting routines * @ingroup Git + * + * A commit represents a set of changes made to the files within a + * repository, and metadata about who made the changes, and when the + * changes were made. * @{ */ GIT_BEGIN_DECL @@ -380,7 +384,38 @@ GIT_EXTERN(int) git_commit_create( * * All other parameters remain the same as `git_commit_create()`. * - * @see git_commit_create + * @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 + * + * @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_v( git_oid *id, @@ -394,6 +429,52 @@ GIT_EXTERN(int) git_commit_create_v( size_t parent_count, ...); +typedef struct { + unsigned int version; + + /** + * Flags for creating the commit. + * + * If `allow_empty_commit` is specified, a commit with no changes + * from the prior commit (and "empty" commit) is allowed. Otherwise, + * commit creation will be stopped. + */ + unsigned int allow_empty_commit : 1; + + /** The commit author, or NULL for the default. */ + const git_signature *author; + + /** The committer, or NULL for the default. */ + const git_signature *committer; + + /** Encoding for the commit message; leave NULL for default. */ + const char *message_encoding; +} git_commit_create_options; + +/** Current version for the `git_commit_create_options` structure */ +#define GIT_COMMIT_CREATE_OPTIONS_VERSION 1 + +/** Static constructor for `git_commit_create_options` */ +#define GIT_COMMIT_CREATE_OPTIONS_INIT { GIT_COMMIT_CREATE_OPTIONS_VERSION } + +/** + * Commits the staged changes in the repository; this is a near analog to + * `git commit -m message`. + * + * By default, empty commits are not allowed. + * + * @param id pointer to store the new commit's object id + * @param repo repository to commit changes in + * @param message the commit message + * @param opts options for creating the commit + * @return 0 on success, GIT_EUNCHANGED if there were no changes to commit, or an error code + */ +GIT_EXTERN(int) git_commit_create_from_stage( + git_oid *id, + git_repository *repo, + const char *message, + const git_commit_create_options *opts); + /** * Amend an existing commit by replacing only non-NULL values. * @@ -413,7 +494,36 @@ GIT_EXTERN(int) git_commit_create_v( * * All parameters have the same meanings as in `git_commit_create()`. * - * @see git_commit_create + * @param id Pointer in which to store the OID of the newly created commit + * + * @param commit_to_amend The commit to amend + * + * @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`. + * + * @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_amend( git_oid *id, @@ -479,6 +589,7 @@ GIT_EXTERN(int) git_commit_create_buffer( * to the commit and write it into the given repository. * * @param out the resulting commit id + * @param repo the repository to create the commit in. * @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. @@ -499,6 +610,7 @@ GIT_EXTERN(int) git_commit_create_with_signature( * * @param out Pointer to store the copy of the commit * @param source Original commit to copy + * @return 0 */ GIT_EXTERN(int) git_commit_dup(git_commit **out, git_commit *source); @@ -539,6 +651,25 @@ typedef int (*git_commit_create_cb)( const git_commit *parents[], void *payload); +/** An array of commits returned from the library */ +typedef struct git_commitarray { + git_commit *const *commits; + size_t count; +} git_commitarray; + +/** + * Free the commits contained in a commit array. This method should + * be called on `git_commitarray` objects that were provided by the + * library. Not doing so will result in a memory leak. + * + * This does not free the `git_commitarray` itself, since the library + * will never allocate that object directly itself. + * + * @param array The git_commitarray that contains commits to free + */ +GIT_EXTERN(void) git_commitarray_dispose(git_commitarray *array); + /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/common.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/common.h index 2ee8290..40a3903 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/common.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/common.h @@ -11,7 +11,9 @@ #include #ifdef __cplusplus + /** Start declarations in C mode for C++ compatibility */ # define GIT_BEGIN_DECL extern "C" { + /** End declarations in C mode */ # define GIT_END_DECL } #else /** Start declarations in C mode */ @@ -71,19 +73,19 @@ typedef size_t size_t; # 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 + * @brief Base platform functionality * @defgroup git_common Git common platform definitions * @ingroup Git + * + * Common platform functionality including introspecting libgit2 + * itself - information like how it was built, and the current + * running version. * @{ */ @@ -94,10 +96,10 @@ GIT_BEGIN_DECL * 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 ';' +#if (defined(_WIN32) && !defined(__CYGWIN__)) || defined(AMIGA) +# define GIT_PATH_LIST_SEPARATOR ';' #else -#define GIT_PATH_LIST_SEPARATOR ':' +# define GIT_PATH_LIST_SEPARATOR ':' #endif /** @@ -105,11 +107,6 @@ GIT_BEGIN_DECL */ #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. @@ -122,53 +119,91 @@ GIT_BEGIN_DECL GIT_EXTERN(int) git_libgit2_version(int *major, int *minor, int *rev); /** - * Combinations of these values describe the features with which libgit2 - * was compiled + * Return the prerelease state of the libgit2 library currently being + * used. For nightly builds during active development, this will be + * "alpha". Releases may have a "beta" or release candidate ("rc1", + * "rc2", etc) prerelease. For a final release, this function returns + * NULL. + * + * @return the name of the prerelease state or NULL + */ +GIT_EXTERN(const char *) git_libgit2_prerelease(void); + +/** + * Configurable features of libgit2; either optional settings (like + * threading), or features that can be enabled by one of a number of + * different backend "providers" (like HTTPS, which can be provided by + * OpenSSL, mbedTLS, or system libraries). */ 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), + /** + * libgit2 is thread-aware and can be used from multiple threads + * (as described in the documentation). + */ + GIT_FEATURE_THREADS = (1 << 0), + + /** HTTPS remotes */ + GIT_FEATURE_HTTPS = (1 << 1), + + /** SSH remotes */ + GIT_FEATURE_SSH = (1 << 2), + + /** Sub-second resolution in index timestamps */ + GIT_FEATURE_NSEC = (1 << 3), + + /** HTTP parsing; always available */ + GIT_FEATURE_HTTP_PARSER = (1 << 4), + + /** Regular expression support; always available */ + GIT_FEATURE_REGEX = (1 << 5), + + /** Internationalization support for filename translation */ + GIT_FEATURE_I18N = (1 << 6), + + /** NTLM support over HTTPS */ + GIT_FEATURE_AUTH_NTLM = (1 << 7), + + /** Kerberos (SPNEGO) authentication support over HTTPS */ + GIT_FEATURE_AUTH_NEGOTIATE = (1 << 8), + + /** zlib support; always available */ + GIT_FEATURE_COMPRESSION = (1 << 9), + + /** SHA1 object support; always available */ + GIT_FEATURE_SHA1 = (1 << 10), + + /** SHA256 object support */ + GIT_FEATURE_SHA256 = (1 << 11) } git_feature_t; /** * Query compile time options for libgit2. * * @return A combination of GIT_FEATURE_* values. + */ +GIT_EXTERN(int) git_libgit2_features(void); + +/** + * Query the backend details for the compile-time feature in libgit2. + * + * This will return the "backend" for the feature, which is useful for + * things like HTTPS or SSH support, that can have multiple backends + * that could be compiled in. * - * - 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. + * For example, when libgit2 is compiled with dynamic OpenSSL support, + * the feature backend will be `openssl-dynamic`. The feature backend + * names reflect the compilation options specified to the build system + * (though in all lower case). The backend _may_ be "builtin" for + * features that are provided by libgit2 itself. * - * - GIT_FEATURE_HTTPS - * Libgit2 supports the https:// protocol. This requires the openssl - * library to be found when compiling libgit2. + * If the feature is not supported by the library, this API returns + * `NULL`. * - * - GIT_FEATURE_SSH - * Libgit2 supports the SSH protocol for network operations. This requires - * the libssh2 library to be found when compiling libgit2 + * @param feature the feature to query details for + * @return the provider details, or NULL if the feature is not supported */ -GIT_EXTERN(int) git_libgit2_features(void); +GIT_EXTERN(const char *) git_libgit2_feature_backend( + git_feature_t feature); /** * Global library options @@ -211,7 +246,18 @@ typedef enum { GIT_OPT_SET_ODB_PACKED_PRIORITY, GIT_OPT_SET_ODB_LOOSE_PRIORITY, GIT_OPT_GET_EXTENSIONS, - GIT_OPT_SET_EXTENSIONS + GIT_OPT_SET_EXTENSIONS, + GIT_OPT_GET_OWNER_VALIDATION, + GIT_OPT_SET_OWNER_VALIDATION, + GIT_OPT_GET_HOMEDIR, + GIT_OPT_SET_HOMEDIR, + GIT_OPT_SET_SERVER_CONNECT_TIMEOUT, + GIT_OPT_GET_SERVER_CONNECT_TIMEOUT, + GIT_OPT_SET_SERVER_TIMEOUT, + GIT_OPT_GET_SERVER_TIMEOUT, + GIT_OPT_SET_USER_AGENT_PRODUCT, + GIT_OPT_GET_USER_AGENT_PRODUCT, + GIT_OPT_ADD_SSL_X509_CERT } git_libgit2_opt_t; /** @@ -316,15 +362,52 @@ typedef enum { * > - `path` is the location of a directory holding several * > certificates, one per file. * > + * > Calling `GIT_OPT_ADD_SSL_X509_CERT` may override the + * > data in `path`. + * > * > Either parameter may be `NULL`, but not both. * + * * opts(GIT_OPT_ADD_SSL_X509_CERT, const X509 *cert) + * + * > Add a raw X509 certificate into the SSL certs store. + * > This certificate is only used by libgit2 invocations + * > during the application lifetime and is not persisted + * > to disk. This certificate cannot be removed from the + * > application once is has been added. + * > + * > - `cert` is the raw X509 cert will be added to cert store. + * * * 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. + * > Set the value of the comment section of the User-Agent header. + * > This can be information about your product and its version. + * > By default this is "libgit2" followed by the libgit2 version. + * > + * > This value will be appended to User-Agent _product_, which + * > is typically set to "git/2.0". + * > + * > Set to the empty string ("") to not send any information in the + * > comment section, or set to NULL to restore the default. + * + * * 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_SET_USER_AGENT_PRODUCT, const char *user_agent_product) + * + * > Set the value of the product portion of the User-Agent header. + * > This defaults to "git/2.0", for compatibility with other git + * > clients. It is recommended to keep this as git/ for + * > compatibility with servers that do user-agent detection. * > - * > - `user_agent` is the value that will be delivered as the - * > User-Agent header on HTTP requests. + * > Set to the empty string ("") to not send any user-agent string, + * > or set to NULL to restore the default. + * + * * opts(GIT_OPT_GET_USER_AGENT_PRODUCT, git_buf *out) + * + * > Get the value of the User-Agent product header. + * > The User-Agent product is written to the `out` buffer. * * * opts(GIT_OPT_SET_WINDOWS_SHAREMODE, unsigned long value) * @@ -360,11 +443,6 @@ typedef enum { * > * > - `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, @@ -449,8 +527,43 @@ typedef enum { * > to support repositories with the `noop` extension but does want * > to support repositories with the `newext` extension. * + * opts(GIT_OPT_GET_OWNER_VALIDATION, int *enabled) + * > Gets the owner validation setting for repository + * > directories. + * + * opts(GIT_OPT_SET_OWNER_VALIDATION, int enabled) + * > Set that repository directories should be owned by the current + * > user. The default is to validate ownership. + * + * opts(GIT_OPT_GET_HOMEDIR, git_buf *out) + * > Gets the current user's home directory, as it will be used + * > for file lookups. The path is written to the `out` buffer. + * + * opts(GIT_OPT_SET_HOMEDIR, const char *path) + * > Sets the directory used as the current user's home directory, + * > for file lookups. + * > + * > - `path` directory of home directory. + * + * opts(GIT_OPT_GET_SERVER_CONNECT_TIMEOUT, int *timeout) + * > Gets the timeout (in milliseconds) to attempt connections to + * > a remote server. + * + * opts(GIT_OPT_SET_SERVER_CONNECT_TIMEOUT, int timeout) + * > Sets the timeout (in milliseconds) to attempt connections to + * > a remote server. Set to 0 to use the system default. Note that + * > this may not be able to be configured longer than the system + * > default, typically 75 seconds. + * + * opts(GIT_OPT_GET_SERVER_TIMEOUT, int *timeout) + * > Gets the timeout (in milliseconds) for reading from and writing + * > to a remote server. + * + * opts(GIT_OPT_SET_SERVER_TIMEOUT, int timeout) + * > Sets the timeout (in milliseconds) for reading from and writing + * > to a remote server. Set to 0 to use the system default. + * * @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, ...); diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/config.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/config.h index 7c8e388..f9c2667 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/config.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/config.h @@ -13,78 +13,134 @@ /** * @file git2/config.h - * @brief Git config management routines + * @brief Per-repository, per-user or per-system configuration * @defgroup git_config Git config management routines * @ingroup Git + * + * Git configuration affects the operation of the version control + * system, and can be specified on a per-repository basis, in user + * settings, or at the system level. * @{ */ 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. + * (from higher to lower) when reading or searching for config entries + * in git.git. Meaning that for the same key, the configuration in + * the local configuration is preferred over the configuration in + * the system configuration file. + * + * Callers can add their own custom configuration, beginning at the + * `GIT_CONFIG_LEVEL_APP` level. + * + * Writes, by default, occur in the highest priority level backend + * that is writable. This ordering can be overridden with + * `git_config_set_writeorder`. * * git_config_open_default() and git_repository_config() honor those * priority levels as well. + * + * @see git_config_open_default + * @see git_repository_config */ typedef enum { - /** System-wide on Windows, for compatibility with portable git */ + /** + * System-wide on Windows, for compatibility with "Portable Git". + */ GIT_CONFIG_LEVEL_PROGRAMDATA = 1, - /** System-wide configuration file; /etc/gitconfig on Linux systems */ + /** + * System-wide configuration file; `/etc/gitconfig` on Linux. + */ GIT_CONFIG_LEVEL_SYSTEM = 2, - /** XDG compatible configuration file; typically ~/.config/git/config */ + /** + * XDG compatible configuration file; typically + * `~/.config/git/config`. + */ GIT_CONFIG_LEVEL_XDG = 3, - /** User-specific configuration file (also called Global configuration - * file); typically ~/.gitconfig + /** + * Global configuration file is the user-specific configuration; + * typically `~/.gitconfig`. */ GIT_CONFIG_LEVEL_GLOBAL = 4, - /** Repository specific configuration file; $WORK_DIR/.git/config on - * non-bare repos + /** + * Local configuration, the repository-specific configuration file; + * typically `$GIT_DIR/config`. */ GIT_CONFIG_LEVEL_LOCAL = 5, - /** Application specific configuration file; freely defined by applications + /** + * Worktree-specific configuration; typically + * `$GIT_DIR/config.worktree`. */ - GIT_CONFIG_LEVEL_APP = 6, + GIT_CONFIG_LEVEL_WORKTREE = 6, - /** Represents the highest level available config file (i.e. the most - * specific config file available that actually is loaded) + /** + * Application-specific configuration file. Callers into libgit2 + * can add their own configuration beginning at this level. + */ + GIT_CONFIG_LEVEL_APP = 7, + + /** + * Not a configuration level; callers can use this value when + * querying configuration levels to specify that they want to + * have data from the highest-level currently configuration. + * This can be used to indicate that callers want the most + * specific config file available that actually is loaded. */ - GIT_CONFIG_HIGHEST_LEVEL = -1, + 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 */ + /** Name of the configuration entry (normalized). */ + const char *name; + + /** Literal (string) value of the entry. */ + const char *value; + + /** The type of backend that this entry exists in (eg, "file"). */ + const char *backend_type; + + /** + * The path to the origin of this entry. For config files, this is + * the path to the file. + */ + const char *origin_path; + + /** Depth of includes where this variable was found. */ + unsigned int include_depth; + + /** Configuration level for the file this was found in. */ + git_config_level_t level; } git_config_entry; /** - * Free a config entry + * Free a config entry. + * + * @param entry The entry to free. */ -GIT_EXTERN(void) git_config_entry_free(git_config_entry *); +GIT_EXTERN(void) git_config_entry_free(git_config_entry *entry); /** - * A config enumeration callback + * A config enumeration callback. * * @param entry the entry currently being enumerated * @param payload a user-specified pointer + * @return non-zero to terminate the iteration. */ typedef int GIT_CALLBACK(git_config_foreach_cb)(const git_config_entry *entry, void *payload); /** - * An opaque structure for a configuration iterator + * An opaque structure for a configuration iterator. */ typedef struct git_config_iterator git_config_iterator; @@ -119,7 +175,7 @@ typedef struct { * global configuration file. * * This method will not guess the path to the xdg compatible - * config file (.config/git/config). + * 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`. @@ -146,8 +202,8 @@ 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. + * 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 @@ -158,7 +214,7 @@ 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. + * 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 @@ -209,9 +265,9 @@ GIT_EXTERN(int) git_config_new(git_config **out); * @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 + * @param force replace config file at the given priority level * @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 @@ -269,9 +325,26 @@ GIT_EXTERN(int) git_config_open_level( * * @param out pointer in which to store the config object * @param config the config object in which to look + * @return 0 or an error code. */ GIT_EXTERN(int) git_config_open_global(git_config **out, git_config *config); +/** + * Set the write order for configuration backends. By default, the + * write ordering does not match the read ordering; for example, the + * worktree configuration is a high-priority for reading, but is not + * written to unless explicitly chosen. + * + * @param cfg the configuration to change write order of + * @param levels the ordering of levels for writing + * @param len the length of the levels array + * @return 0 or an error code + */ +GIT_EXTERN(int) git_config_set_writeorder( + git_config *cfg, + git_config_level_t *levels, + size_t len); + /** * Create a snapshot of the configuration * @@ -422,6 +495,7 @@ GIT_EXTERN(int) git_config_get_string_buf(git_buf *out, const git_config *cfg, c * 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 + * @return 0 or an error code. */ 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); @@ -437,14 +511,15 @@ GIT_EXTERN(int) git_config_get_multivar_foreach(const git_config *cfg, const cha * @param name the variable's name * @param regexp regular expression to filter which variables we're * interested in. Use NULL to indicate all + * @return 0 or an error code. */ 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. + * The pointers returned by this function are valid until the next call + * to `git_config_next` or until the iterator is freed. * * @param entry pointer to store the entry * @param iter the iterator @@ -515,6 +590,7 @@ GIT_EXTERN(int) git_config_set_string(git_config *cfg, const char *name, const c * @param name the variable's name * @param regexp a regular expression to indicate which values to replace * @param value the new value. + * @return 0 or an error code. */ GIT_EXTERN(int) git_config_set_multivar(git_config *cfg, const char *name, const char *regexp, const char *value); @@ -524,6 +600,7 @@ GIT_EXTERN(int) git_config_set_multivar(git_config *cfg, const char *name, const * * @param cfg the configuration * @param name the variable to delete + * @return 0 or an error code. */ GIT_EXTERN(int) git_config_delete_entry(git_config *cfg, const char *name); @@ -568,7 +645,8 @@ GIT_EXTERN(int) git_config_foreach( * `git_config_iterator_free` when done. * * @param out pointer to store the iterator - * @param cfg where to ge the variables from + * @param cfg where to get the variables from + * @return 0 or an error code. */ GIT_EXTERN(int) git_config_iterator_new(git_config_iterator **out, const git_config *cfg); @@ -585,6 +663,7 @@ GIT_EXTERN(int) git_config_iterator_new(git_config_iterator **out, const git_con * @param out pointer to store the iterator * @param cfg where to ge the variables from * @param regexp regular expression to match the names + * @return 0 or an error code. */ GIT_EXTERN(int) git_config_iterator_glob_new(git_config_iterator **out, const git_config *cfg, const char *regexp); @@ -662,6 +741,7 @@ GIT_EXTERN(int) git_config_get_mapped( * @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 + * @return 0 or an error code. */ GIT_EXTERN(int) git_config_lookup_map_value( int *out, @@ -678,6 +758,7 @@ GIT_EXTERN(int) git_config_lookup_map_value( * * @param out place to store the result of the parsing * @param value value to parse + * @return 0 or an error code. */ GIT_EXTERN(int) git_config_parse_bool(int *out, const char *value); @@ -690,6 +771,7 @@ GIT_EXTERN(int) git_config_parse_bool(int *out, const char *value); * * @param out place to store the result of the parsing * @param value value to parse + * @return 0 or an error code. */ GIT_EXTERN(int) git_config_parse_int32(int32_t *out, const char *value); @@ -702,6 +784,7 @@ GIT_EXTERN(int) git_config_parse_int32(int32_t *out, const char *value); * * @param out place to store the result of the parsing * @param value value to parse + * @return 0 or an error code. */ GIT_EXTERN(int) git_config_parse_int64(int64_t *out, const char *value); @@ -717,6 +800,7 @@ GIT_EXTERN(int) git_config_parse_int64(int64_t *out, const char *value); * * @param out placae to store the result of parsing * @param value the path to evaluate + * @return 0 or an error code. */ GIT_EXTERN(int) git_config_parse_path(git_buf *out, const char *value); @@ -735,6 +819,7 @@ GIT_EXTERN(int) git_config_parse_path(git_buf *out, const char *value); * @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 + * @return 0 or an error code. */ GIT_EXTERN(int) git_config_backend_foreach_match( git_config_backend *backend, @@ -763,4 +848,5 @@ GIT_EXTERN(int) git_config_lock(git_transaction **tx, git_config *cfg); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/credential.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/credential.h index 9426a6e..33755ca 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/credential.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/credential.h @@ -11,9 +11,12 @@ /** * @file git2/credential.h - * @brief Git authentication & credential management + * @brief Authentication and credential management * @defgroup git_credential Authentication & credential management * @ingroup Git + * + * Credentials specify how to authenticate to a remote system + * over HTTPS or SSH. * @{ */ GIT_BEGIN_DECL @@ -75,7 +78,7 @@ typedef enum { * * @see git_credential_ssh_key_memory_new */ - GIT_CREDENTIAL_SSH_MEMORY = (1u << 6), + GIT_CREDENTIAL_SSH_MEMORY = (1u << 6) } git_credential_t; /** @@ -119,7 +122,7 @@ typedef struct git_credential_ssh_custom git_credential_ssh_custom; * 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[out] 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. @@ -241,6 +244,18 @@ typedef struct _LIBSSH2_USERAUTH_KBDINT_PROMPT LIBSSH2_USERAUTH_KBDINT_PROMPT; typedef struct _LIBSSH2_USERAUTH_KBDINT_RESPONSE LIBSSH2_USERAUTH_KBDINT_RESPONSE; #endif +/** + * Callback for interactive SSH credentials. + * + * @param name the name + * @param name_len the length of the name + * @param instruction the authentication instruction + * @param instruction_len the length of the instruction + * @param num_prompts the number of prompts + * @param prompts the prompts + * @param responses the responses + * @param abstract the abstract + */ typedef void GIT_CALLBACK(git_credential_ssh_interactive_cb)( const char *name, int name_len, @@ -254,6 +269,7 @@ typedef void GIT_CALLBACK(git_credential_ssh_interactive_cb)( * Create a new ssh keyboard-interactive based 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 prompt_callback The callback method used for prompts. * @param payload Additional data to pass to the callback. @@ -277,6 +293,18 @@ GIT_EXTERN(int) git_credential_ssh_key_from_agent( git_credential **out, const char *username); +/** + * Callback for credential signing. + * + * @param session the libssh2 session + * @param sig the signature + * @param sig_len the length of the signature + * @param data the data + * @param data_len the length of the data + * @param abstract the abstract + * @return 0 for success, < 0 to indicate an error, > 0 to indicate + * no credential was acquired + */ typedef int GIT_CALLBACK(git_credential_sign_cb)( LIBSSH2_SESSION *session, unsigned char **sig, size_t *sig_len, @@ -311,4 +339,5 @@ GIT_EXTERN(int) git_credential_ssh_custom_new( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/credential_helpers.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/credential_helpers.h index 9a70ecb..706558d 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/credential_helpers.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/credential_helpers.h @@ -39,6 +39,7 @@ typedef struct git_credential_userpass_payload { * @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*`.) + * @return 0 or an error code. */ GIT_EXTERN(int) git_credential_userpass( git_credential **out, @@ -49,4 +50,5 @@ GIT_EXTERN(int) git_credential_userpass( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/deprecated.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/deprecated.h index 37b9fa0..b8b0238 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/deprecated.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/deprecated.h @@ -52,7 +52,7 @@ /** * @file git2/deprecated.h - * @brief libgit2 deprecated functions and values + * @brief Deprecated functions and values * @ingroup Git * @{ */ @@ -69,15 +69,23 @@ GIT_BEGIN_DECL */ /**@{*/ +/** @deprecated use GIT_ATTR_VALUE_UNSPECIFIED */ #define GIT_ATTR_UNSPECIFIED_T GIT_ATTR_VALUE_UNSPECIFIED +/** @deprecated use GIT_ATTR_VALUE_TRUE */ #define GIT_ATTR_TRUE_T GIT_ATTR_VALUE_TRUE +/** @deprecated use GIT_ATTR_VALUE_FALSE */ #define GIT_ATTR_FALSE_T GIT_ATTR_VALUE_FALSE +/** @deprecated use GIT_ATTR_VALUE_STRING */ #define GIT_ATTR_VALUE_T GIT_ATTR_VALUE_STRING +/** @deprecated use GIT_ATTR_IS_TRUE */ #define GIT_ATTR_TRUE(attr) GIT_ATTR_IS_TRUE(attr) +/** @deprecated use GIT_ATTR_IS_FALSE */ #define GIT_ATTR_FALSE(attr) GIT_ATTR_IS_FALSE(attr) +/** @deprecated use GIT_ATTR_IS_UNSPECIFIED */ #define GIT_ATTR_UNSPECIFIED(attr) GIT_ATTR_IS_UNSPECIFIED(attr) +/** @deprecated use git_attr_value_t */ typedef git_attr_value_t git_attr_t; /**@}*/ @@ -93,6 +101,7 @@ typedef git_attr_value_t git_attr_t; */ /**@{*/ +/** @deprecated use GIT_BLOB_FILTER_ATTRIBUTES_FROM_HEAD */ #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); @@ -285,11 +294,16 @@ typedef int (*git_commit_signing_cb)( */ /**@{*/ +/** @deprecated use GIT_CONFIGMAP_FALSE */ #define GIT_CVAR_FALSE GIT_CONFIGMAP_FALSE +/** @deprecated use GIT_CONFIGMAP_TRUE */ #define GIT_CVAR_TRUE GIT_CONFIGMAP_TRUE +/** @deprecated use GIT_CONFIGMAP_INT32 */ #define GIT_CVAR_INT32 GIT_CONFIGMAP_INT32 +/** @deprecated use GIT_CONFIGMAP_STRING */ #define GIT_CVAR_STRING GIT_CONFIGMAP_STRING +/** @deprecated use git_cvar_map */ typedef git_configmap git_cvar_map; /**@}*/ @@ -313,12 +327,13 @@ typedef enum { 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_EXCLUDE_SUBJECT_PATCH_MARKER = (1 << 0) } git_diff_format_email_flags_t; /** * Options for controlling the formatting of the generated e-mail. + * + * @deprecated use `git_email_create_options` */ typedef struct { unsigned int version; @@ -345,7 +360,9 @@ typedef struct { const git_signature *author; } git_diff_format_email_options; +/** @deprecated use `git_email_create_options` */ #define GIT_DIFF_FORMAT_EMAIL_OPTIONS_VERSION 1 +/** @deprecated use `git_email_create_options` */ #define GIT_DIFF_FORMAT_EMAIL_OPTIONS_INIT {GIT_DIFF_FORMAT_EMAIL_OPTIONS_VERSION, 0, 1, 1, NULL, NULL, NULL, NULL} /** @@ -401,40 +418,76 @@ GIT_EXTERN(int) git_diff_format_email_options_init( */ /**@{*/ +/** @deprecated use `GIT_ERROR_NONE` */ #define GITERR_NONE GIT_ERROR_NONE +/** @deprecated use `GIT_ERROR_NOMEMORY` */ #define GITERR_NOMEMORY GIT_ERROR_NOMEMORY +/** @deprecated use `GIT_ERROR_OS` */ #define GITERR_OS GIT_ERROR_OS +/** @deprecated use `GIT_ERROR_INVALID` */ #define GITERR_INVALID GIT_ERROR_INVALID +/** @deprecated use `GIT_ERROR_REFERENCE` */ #define GITERR_REFERENCE GIT_ERROR_REFERENCE +/** @deprecated use `GIT_ERROR_ZLIB` */ #define GITERR_ZLIB GIT_ERROR_ZLIB +/** @deprecated use `GIT_ERROR_REPOSITORY` */ #define GITERR_REPOSITORY GIT_ERROR_REPOSITORY +/** @deprecated use `GIT_ERROR_CONFIG` */ #define GITERR_CONFIG GIT_ERROR_CONFIG +/** @deprecated use `GIT_ERROR_REGEX` */ #define GITERR_REGEX GIT_ERROR_REGEX +/** @deprecated use `GIT_ERROR_ODB` */ #define GITERR_ODB GIT_ERROR_ODB +/** @deprecated use `GIT_ERROR_INDEX` */ #define GITERR_INDEX GIT_ERROR_INDEX +/** @deprecated use `GIT_ERROR_OBJECT` */ #define GITERR_OBJECT GIT_ERROR_OBJECT +/** @deprecated use `GIT_ERROR_NET` */ #define GITERR_NET GIT_ERROR_NET +/** @deprecated use `GIT_ERROR_TAG` */ #define GITERR_TAG GIT_ERROR_TAG +/** @deprecated use `GIT_ERROR_TREE` */ #define GITERR_TREE GIT_ERROR_TREE +/** @deprecated use `GIT_ERROR_INDEXER` */ #define GITERR_INDEXER GIT_ERROR_INDEXER +/** @deprecated use `GIT_ERROR_SSL` */ #define GITERR_SSL GIT_ERROR_SSL +/** @deprecated use `GIT_ERROR_SUBMODULE` */ #define GITERR_SUBMODULE GIT_ERROR_SUBMODULE +/** @deprecated use `GIT_ERROR_THREAD` */ #define GITERR_THREAD GIT_ERROR_THREAD +/** @deprecated use `GIT_ERROR_STASH` */ #define GITERR_STASH GIT_ERROR_STASH +/** @deprecated use `GIT_ERROR_CHECKOUT` */ #define GITERR_CHECKOUT GIT_ERROR_CHECKOUT +/** @deprecated use `GIT_ERROR_FETCHHEAD` */ #define GITERR_FETCHHEAD GIT_ERROR_FETCHHEAD +/** @deprecated use `GIT_ERROR_MERGE` */ #define GITERR_MERGE GIT_ERROR_MERGE +/** @deprecated use `GIT_ERROR_SSH` */ #define GITERR_SSH GIT_ERROR_SSH +/** @deprecated use `GIT_ERROR_FILTER` */ #define GITERR_FILTER GIT_ERROR_FILTER +/** @deprecated use `GIT_ERROR_REVERT` */ #define GITERR_REVERT GIT_ERROR_REVERT +/** @deprecated use `GIT_ERROR_CALLBACK` */ #define GITERR_CALLBACK GIT_ERROR_CALLBACK +/** @deprecated use `GIT_ERROR_CHERRYPICK` */ #define GITERR_CHERRYPICK GIT_ERROR_CHERRYPICK +/** @deprecated use `GIT_ERROR_DESCRIBE` */ #define GITERR_DESCRIBE GIT_ERROR_DESCRIBE +/** @deprecated use `GIT_ERROR_REBASE` */ #define GITERR_REBASE GIT_ERROR_REBASE +/** @deprecated use `GIT_ERROR_FILESYSTEM` */ #define GITERR_FILESYSTEM GIT_ERROR_FILESYSTEM +/** @deprecated use `GIT_ERROR_PATCH` */ #define GITERR_PATCH GIT_ERROR_PATCH +/** @deprecated use `GIT_ERROR_WORKTREE` */ #define GITERR_WORKTREE GIT_ERROR_WORKTREE +/** @deprecated use `GIT_ERROR_SHA1` */ #define GITERR_SHA1 GIT_ERROR_SHA1 +/** @deprecated use `GIT_ERROR_SHA` */ +#define GIT_ERROR_SHA1 GIT_ERROR_SHA /** * Return the last `git_error` object that was generated for the @@ -498,37 +551,63 @@ GIT_EXTERN(void) giterr_set_oom(void); */ /**@{*/ +/* The git_idxentry_extended_flag_t enum */ +/** @deprecated use `GIT_INDEX_ENTRY_NAMEMASK` */ #define GIT_IDXENTRY_NAMEMASK GIT_INDEX_ENTRY_NAMEMASK +/** @deprecated use `GIT_INDEX_ENTRY_STAGEMASK` */ #define GIT_IDXENTRY_STAGEMASK GIT_INDEX_ENTRY_STAGEMASK +/** @deprecated use `GIT_INDEX_ENTRY_STAGESHIFT` */ #define GIT_IDXENTRY_STAGESHIFT GIT_INDEX_ENTRY_STAGESHIFT /* The git_indxentry_flag_t enum */ +/** @deprecated use `GIT_INDEX_ENTRY_EXTENDED` */ #define GIT_IDXENTRY_EXTENDED GIT_INDEX_ENTRY_EXTENDED +/** @deprecated use `GIT_INDEX_ENTRY_VALID` */ #define GIT_IDXENTRY_VALID GIT_INDEX_ENTRY_VALID +/** @deprecated use `GIT_INDEX_ENTRY_STAGE` */ #define GIT_IDXENTRY_STAGE(E) GIT_INDEX_ENTRY_STAGE(E) +/** @deprecated use `GIT_INDEX_ENTRY_STAGE_SET` */ #define GIT_IDXENTRY_STAGE_SET(E,S) GIT_INDEX_ENTRY_STAGE_SET(E,S) /* The git_idxentry_extended_flag_t enum */ +/** @deprecated use `GIT_INDEX_ENTRY_INTENT_TO_ADD` */ #define GIT_IDXENTRY_INTENT_TO_ADD GIT_INDEX_ENTRY_INTENT_TO_ADD +/** @deprecated use `GIT_INDEX_ENTRY_SKIP_WORKTREE` */ #define GIT_IDXENTRY_SKIP_WORKTREE GIT_INDEX_ENTRY_SKIP_WORKTREE +/** @deprecated use `GIT_INDEX_ENTRY_INTENT_TO_ADD | GIT_INDEX_ENTRY_SKIP_WORKTREE` */ #define GIT_IDXENTRY_EXTENDED_FLAGS (GIT_INDEX_ENTRY_INTENT_TO_ADD | GIT_INDEX_ENTRY_SKIP_WORKTREE) +/** @deprecated this value is not public */ #define GIT_IDXENTRY_EXTENDED2 (1 << 15) +/** @deprecated this value is not public */ #define GIT_IDXENTRY_UPDATE (1 << 0) +/** @deprecated this value is not public */ #define GIT_IDXENTRY_REMOVE (1 << 1) +/** @deprecated this value is not public */ #define GIT_IDXENTRY_UPTODATE (1 << 2) +/** @deprecated this value is not public */ #define GIT_IDXENTRY_ADDED (1 << 3) +/** @deprecated this value is not public */ #define GIT_IDXENTRY_HASHED (1 << 4) +/** @deprecated this value is not public */ #define GIT_IDXENTRY_UNHASHED (1 << 5) +/** @deprecated this value is not public */ #define GIT_IDXENTRY_WT_REMOVE (1 << 6) +/** @deprecated this value is not public */ #define GIT_IDXENTRY_CONFLICTED (1 << 7) +/** @deprecated this value is not public */ #define GIT_IDXENTRY_UNPACKED (1 << 8) +/** @deprecated this value is not public */ #define GIT_IDXENTRY_NEW_SKIP_WORKTREE (1 << 9) /* The git_index_capability_t enum */ +/** @deprecated use `GIT_INDEX_CAPABILITY_IGNORE_CASE` */ #define GIT_INDEXCAP_IGNORE_CASE GIT_INDEX_CAPABILITY_IGNORE_CASE +/** @deprecated use `GIT_INDEX_CAPABILITY_NO_FILEMODE` */ #define GIT_INDEXCAP_NO_FILEMODE GIT_INDEX_CAPABILITY_NO_FILEMODE +/** @deprecated use `GIT_INDEX_CAPABILITY_NO_SYMLINKS` */ #define GIT_INDEXCAP_NO_SYMLINKS GIT_INDEX_CAPABILITY_NO_SYMLINKS +/** @deprecated use `GIT_INDEX_CAPABILITY_FROM_OWNER` */ #define GIT_INDEXCAP_FROM_OWNER GIT_INDEX_CAPABILITY_FROM_OWNER GIT_EXTERN(int) git_index_add_frombuffer( @@ -548,17 +627,28 @@ GIT_EXTERN(int) git_index_add_frombuffer( */ /**@{*/ +/** @deprecate use `git_object_t` */ #define git_otype git_object_t +/** @deprecate use `GIT_OBJECT_ANY` */ #define GIT_OBJ_ANY GIT_OBJECT_ANY +/** @deprecate use `GIT_OBJECT_INVALID` */ #define GIT_OBJ_BAD GIT_OBJECT_INVALID +/** @deprecated this value is not public */ #define GIT_OBJ__EXT1 0 +/** @deprecate use `GIT_OBJECT_COMMIT` */ #define GIT_OBJ_COMMIT GIT_OBJECT_COMMIT +/** @deprecate use `GIT_OBJECT_TREE` */ #define GIT_OBJ_TREE GIT_OBJECT_TREE +/** @deprecate use `GIT_OBJECT_BLOB` */ #define GIT_OBJ_BLOB GIT_OBJECT_BLOB +/** @deprecate use `GIT_OBJECT_TAG` */ #define GIT_OBJ_TAG GIT_OBJECT_TAG +/** @deprecated this value is not public */ #define GIT_OBJ__EXT2 5 +/** @deprecate use `GIT_OBJECT_OFS_DELTA` */ #define GIT_OBJ_OFS_DELTA GIT_OBJECT_OFS_DELTA +/** @deprecate use `GIT_OBJECT_REF_DELTA` */ #define GIT_OBJ_REF_DELTA GIT_OBJECT_REF_DELTA /** @@ -610,17 +700,27 @@ GIT_EXTERN(int) git_remote_is_valid_name(const char *remote_name); /**@{*/ /** Basic type of any Git reference. */ +/** @deprecate use `git_reference_t` */ #define git_ref_t git_reference_t +/** @deprecate use `git_reference_format_t` */ #define git_reference_normalize_t git_reference_format_t +/** @deprecate use `GIT_REFERENCE_INVALID` */ #define GIT_REF_INVALID GIT_REFERENCE_INVALID +/** @deprecate use `GIT_REFERENCE_DIRECT` */ #define GIT_REF_OID GIT_REFERENCE_DIRECT +/** @deprecate use `GIT_REFERENCE_SYMBOLIC` */ #define GIT_REF_SYMBOLIC GIT_REFERENCE_SYMBOLIC +/** @deprecate use `GIT_REFERENCE_ALL` */ #define GIT_REF_LISTALL GIT_REFERENCE_ALL +/** @deprecate use `GIT_REFERENCE_FORMAT_NORMAL` */ #define GIT_REF_FORMAT_NORMAL GIT_REFERENCE_FORMAT_NORMAL +/** @deprecate use `GIT_REFERENCE_FORMAT_ALLOW_ONELEVEL` */ #define GIT_REF_FORMAT_ALLOW_ONELEVEL GIT_REFERENCE_FORMAT_ALLOW_ONELEVEL +/** @deprecate use `GIT_REFERENCE_FORMAT_REFSPEC_PATTERN` */ #define GIT_REF_FORMAT_REFSPEC_PATTERN GIT_REFERENCE_FORMAT_REFSPEC_PATTERN +/** @deprecate use `GIT_REFERENCE_FORMAT_REFSPEC_SHORTHAND` */ #define GIT_REF_FORMAT_REFSPEC_SHORTHAND GIT_REFERENCE_FORMAT_REFSPEC_SHORTHAND /** @@ -661,8 +761,11 @@ GIT_EXTERN(int) git_tag_create_frombuffer( typedef git_revspec_t git_revparse_mode_t; +/** @deprecated use `GIT_REVSPEC_SINGLE` */ #define GIT_REVPARSE_SINGLE GIT_REVSPEC_SINGLE +/** @deprecated use `GIT_REVSPEC_RANGE` */ #define GIT_REVPARSE_RANGE GIT_REVSPEC_RANGE +/** @deprecated use `GIT_REVSPEC_MERGE_BASE` */ #define GIT_REVPARSE_MERGE_BASE GIT_REVSPEC_MERGE_BASE /**@}*/ @@ -691,14 +794,22 @@ 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; +/** @deprecated use `git_credential_t` */ #define git_credtype_t git_credential_t +/** @deprecated use `GIT_CREDENTIAL_USERPASS_PLAINTEXT` */ #define GIT_CREDTYPE_USERPASS_PLAINTEXT GIT_CREDENTIAL_USERPASS_PLAINTEXT +/** @deprecated use `GIT_CREDENTIAL_SSH_KEY` */ #define GIT_CREDTYPE_SSH_KEY GIT_CREDENTIAL_SSH_KEY +/** @deprecated use `GIT_CREDENTIAL_SSH_CUSTOM` */ #define GIT_CREDTYPE_SSH_CUSTOM GIT_CREDENTIAL_SSH_CUSTOM +/** @deprecated use `GIT_CREDENTIAL_DEFAULT` */ #define GIT_CREDTYPE_DEFAULT GIT_CREDENTIAL_DEFAULT +/** @deprecated use `GIT_CREDENTIAL_SSH_INTERACTIVE` */ #define GIT_CREDTYPE_SSH_INTERACTIVE GIT_CREDENTIAL_SSH_INTERACTIVE +/** @deprecated use `GIT_CREDENTIAL_USERNAME` */ #define GIT_CREDTYPE_USERNAME GIT_CREDENTIAL_USERNAME +/** @deprecated use `GIT_CREDENTIAL_SSH_MEMORY` */ #define GIT_CREDTYPE_SSH_MEMORY GIT_CREDENTIAL_SSH_MEMORY GIT_EXTERN(void) git_cred_free(git_credential *cred); @@ -775,6 +886,15 @@ typedef git_trace_cb git_trace_callback; */ /**@{*/ +#ifndef GIT_EXPERIMENTAL_SHA256 +/** Deprecated OID "raw size" definition */ +# define GIT_OID_RAWSZ GIT_OID_SHA1_SIZE +/** Deprecated OID "hex size" definition */ +# define GIT_OID_HEXSZ GIT_OID_SHA1_HEXSIZE +/** Deprecated OID "hex zero" definition */ +# define GIT_OID_HEX_ZERO GIT_OID_SHA1_HEXZERO +#endif + GIT_EXTERN(int) git_oid_iszero(const git_oid *id); /**@}*/ @@ -884,6 +1004,24 @@ GIT_EXTERN(void) git_strarray_free(git_strarray *array); /**@}*/ +/** @name Deprecated Version Constants + * + * These constants are retained for backward compatibility. The newer + * versions of these constants should be preferred in all new code. + * + * There is no plan to remove these backward compatibility constants at + * this time. + */ +/**@{*/ + +#define LIBGIT2_VER_MAJOR LIBGIT2_VERSION_MAJOR +#define LIBGIT2_VER_MINOR LIBGIT2_VERSION_MINOR +#define LIBGIT2_VER_REVISION LIBGIT2_VERSION_REVISION +#define LIBGIT2_VER_PATCH LIBGIT2_VERSION_PATCH +#define LIBGIT2_VER_PRERELEASE LIBGIT2_VERSION_PRERELEASE + +/**@}*/ + /** @name Deprecated Options Initialization Functions * * These functions are retained for backward compatibility. The newer diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/describe.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/describe.h index 1d2ca14..938c470 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/describe.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/describe.h @@ -13,10 +13,14 @@ /** * @file git2/describe.h - * @brief Git describing routines + * @brief Describe a commit in reference to tags * @defgroup git_describe Git describing routines * @ingroup Git * @{ + * + * Describe a commit, showing information about how the current commit + * relates to the tags. This can be useful for showing how the current + * commit has changed from a particular tagged version of the repository. */ GIT_BEGIN_DECL @@ -30,7 +34,7 @@ GIT_BEGIN_DECL typedef enum { GIT_DESCRIBE_DEFAULT, GIT_DESCRIBE_TAGS, - GIT_DESCRIBE_ALL, + GIT_DESCRIBE_ALL } git_describe_strategy_t; /** @@ -60,10 +64,15 @@ typedef struct git_describe_options { int show_commit_oid_as_fallback; } git_describe_options; +/** Default maximum candidate tags */ #define GIT_DESCRIBE_DEFAULT_MAX_CANDIDATES_TAGS 10 +/** Default abbreviated size */ #define GIT_DESCRIBE_DEFAULT_ABBREVIATED_SIZE 7 +/** Current version for the `git_describe_options` structure */ #define GIT_DESCRIBE_OPTIONS_VERSION 1 + +/** Static constructor for `git_describe_options` */ #define GIT_DESCRIBE_OPTIONS_INIT { \ GIT_DESCRIBE_OPTIONS_VERSION, \ GIT_DESCRIBE_DEFAULT_MAX_CANDIDATES_TAGS, \ @@ -110,7 +119,10 @@ typedef struct { const char *dirty_suffix; } git_describe_format_options; +/** Current version for the `git_describe_format_options` structure */ #define GIT_DESCRIBE_FORMAT_OPTIONS_VERSION 1 + +/** Static constructor for `git_describe_format_options` */ #define GIT_DESCRIBE_FORMAT_OPTIONS_INIT { \ GIT_DESCRIBE_FORMAT_OPTIONS_VERSION, \ GIT_DESCRIBE_DEFAULT_ABBREVIATED_SIZE, \ @@ -142,6 +154,7 @@ typedef struct git_describe_result git_describe_result; * you're done with it. * @param committish a committish to describe * @param opts the lookup options (or NULL for defaults) + * @return 0 or an error code. */ GIT_EXTERN(int) git_describe_commit( git_describe_result **result, @@ -152,13 +165,14 @@ GIT_EXTERN(int) git_describe_commit( * 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 + * worktree. After performing 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) + * @return 0 or an error code. */ GIT_EXTERN(int) git_describe_workdir( git_describe_result **out, @@ -172,6 +186,7 @@ GIT_EXTERN(int) git_describe_workdir( * @param result the result from `git_describe_commit()` or * `git_describe_workdir()`. * @param opts the formatting options (or NULL for defaults) + * @return 0 or an error code. */ GIT_EXTERN(int) git_describe_format( git_buf *out, @@ -180,6 +195,8 @@ GIT_EXTERN(int) git_describe_format( /** * Free the describe result. + * + * @param result The result to free. */ GIT_EXTERN(void) git_describe_result_free(git_describe_result *result); diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/diff.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/diff.h index a14c019..b12e8ab 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/diff.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/diff.h @@ -15,7 +15,7 @@ /** * @file git2/diff.h - * @brief Git tree and file differencing routines. + * @brief Indicate the differences between two versions of the repository * @ingroup Git * @{ */ @@ -170,7 +170,7 @@ typedef enum { /** 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_SHOW_BINARY = (1u << 30) } git_diff_option_t; /** @@ -208,6 +208,7 @@ typedef enum { 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_VALID_SIZE = (1u << 4) /**< file size value is known correct */ } git_diff_flag_t; /** @@ -231,7 +232,7 @@ typedef enum { 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_CONFLICTED = 10 /**< entry in the index is conflicted */ } git_delta_t; /** @@ -273,7 +274,7 @@ typedef struct { /** * Represents the known length of the `id` field, when - * converted to a hex string. It is generally `GIT_OID_HEXSZ`, unless this + * converted to a hex string. It is generally `GIT_OID_SHA1_HEXSIZE`, unless this * delta was created from reading a patch file, in which case it may be * abbreviated to something reasonable, like 7 characters. */ @@ -341,6 +342,12 @@ typedef struct { * diff process continues. * - returns 0, the delta is inserted into the diff, and the diff process * continues. + * + * @param diff_so_far the diff structure as it currently exists + * @param delta_to_add the delta that is to be added + * @param matched_pathspec the pathspec + * @param payload the user-specified callback payload + * @return 0 on success, 1 to skip this delta, or an error code */ typedef int GIT_CALLBACK(git_diff_notify_cb)( const git_diff *diff_so_far, @@ -356,7 +363,8 @@ typedef int GIT_CALLBACK(git_diff_notify_cb)( * @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. + * @param payload the user-specified callback payload + * @return 0 or an error code */ typedef int GIT_CALLBACK(git_diff_progress_cb)( const git_diff *diff_so_far, @@ -420,6 +428,22 @@ typedef struct { */ uint32_t interhunk_lines; + /** + * The object ID type to emit in diffs; this is used by functions + * that operate without a repository - namely `git_diff_buffers`, + * or `git_diff_blobs` and `git_diff_blob_to_buffer` when one blob + * is `NULL`. + * + * This may be omitted (set to `0`). If a repository is available, + * the object ID format of the repository will be used. If no + * repository is available then the default is `GIT_OID_SHA`. + * + * If this is specified and a repository is available, then the + * specified `oid_type` must match the repository's object ID + * format. + */ + git_oid_t oid_type; + /** * The abbreviation length to use when formatting object ids. * Defaults to the value of 'core.abbrev' from the config, or 7 if unset. @@ -446,10 +470,10 @@ typedef struct { const char *new_prefix; } git_diff_options; -/* The current version of the diff options structure */ +/** The current version of the diff options structure */ #define GIT_DIFF_OPTIONS_VERSION 1 -/* Stack initializer for diff options. Alternatively use +/** Stack initializer for diff options. Alternatively use * `git_diff_options_init` programmatic initialization. */ #define GIT_DIFF_OPTIONS_INIT \ @@ -475,12 +499,14 @@ GIT_EXTERN(int) git_diff_options_init( * @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 + * @return 0 or an error code */ typedef int GIT_CALLBACK(git_diff_file_cb)( const git_diff_delta *delta, float progress, void *payload); +/** Maximum size of the hunk header */ #define GIT_DIFF_HUNK_HEADER_SIZE 128 /** @@ -497,7 +523,7 @@ typedef enum { GIT_DIFF_BINARY_LITERAL, /** The binary data is the delta from one side to the other. */ - GIT_DIFF_BINARY_DELTA, + GIT_DIFF_BINARY_DELTA } git_diff_binary_t; /** The contents of one of the files in a binary diff. */ @@ -541,6 +567,11 @@ typedef struct { /** * When iterating over a diff, callback that will be made for * binary content within the diff. + * + * @param delta the delta + * @param binary the binary content + * @param payload the user-specified callback payload + * @return 0 or an error code */ typedef int GIT_CALLBACK(git_diff_binary_cb)( const git_diff_delta *delta, @@ -567,6 +598,11 @@ typedef struct { /** * When iterating over a diff, callback that will be made per hunk. + * + * @param delta the delta + * @param hunk the hunk + * @param payload the user-specified callback payload + * @return 0 or an error code */ typedef int GIT_CALLBACK(git_diff_hunk_cb)( const git_diff_delta *delta, @@ -628,6 +664,12 @@ typedef struct { * 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. + * + * @param delta the delta that contains the line + * @param hunk the hunk that contains the line + * @param line the line in the diff + * @param payload the user-specified callback payload + * @return 0 or an error code */ typedef int GIT_CALLBACK(git_diff_line_cb)( const git_diff_delta *delta, /**< delta that contains this data */ @@ -706,7 +748,7 @@ typedef enum { * 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_REMOVE_UNMODIFIED = (1u << 16) } git_diff_find_t; /** @@ -758,7 +800,7 @@ typedef struct { uint16_t copy_threshold; /** - * Treshold below which similar files will be split into a delete/add pair. + * Threshold 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; @@ -768,7 +810,7 @@ typedef struct { * * 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. + * Defaults to 1000. */ size_t rename_limit; @@ -785,7 +827,10 @@ typedef struct { git_diff_similarity_metric *metric; } git_diff_find_options; +/** Current version for the `git_diff_find_options` structure */ #define GIT_DIFF_FIND_OPTIONS_VERSION 1 + +/** Static constructor for `git_diff_find_options` */ #define GIT_DIFF_FIND_OPTIONS_INIT {GIT_DIFF_FIND_OPTIONS_VERSION} /** @@ -831,6 +876,7 @@ GIT_EXTERN(void) git_diff_free(git_diff *diff); * @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. + * @return 0 or an error code. */ GIT_EXTERN(int) git_diff_tree_to_tree( git_diff **diff, @@ -857,6 +903,7 @@ GIT_EXTERN(int) git_diff_tree_to_tree( * @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. + * @return 0 or an error code. */ GIT_EXTERN(int) git_diff_tree_to_index( git_diff **diff, @@ -884,6 +931,7 @@ GIT_EXTERN(int) git_diff_tree_to_index( * @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. + * @return 0 or an error code. */ GIT_EXTERN(int) git_diff_index_to_workdir( git_diff **diff, @@ -913,6 +961,7 @@ GIT_EXTERN(int) git_diff_index_to_workdir( * @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. + * @return 0 or an error code. */ GIT_EXTERN(int) git_diff_tree_to_workdir( git_diff **diff, @@ -932,6 +981,7 @@ GIT_EXTERN(int) git_diff_tree_to_workdir( * @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. + * @return 0 or an error code. */ GIT_EXTERN(int) git_diff_tree_to_workdir_with_index( git_diff **diff, @@ -950,6 +1000,7 @@ GIT_EXTERN(int) git_diff_tree_to_workdir_with_index( * @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. + * @return 0 or an error code. */ GIT_EXTERN(int) git_diff_index_to_index( git_diff **diff, @@ -970,6 +1021,7 @@ GIT_EXTERN(int) git_diff_index_to_index( * * @param onto Diff to merge into. * @param from Diff to merge. + * @return 0 or an error code. */ GIT_EXTERN(int) git_diff_merge( git_diff *onto, @@ -1107,7 +1159,7 @@ typedef enum { 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_PATCH_ID = 6u /**< git diff as used by git patch-id */ } git_diff_format_t; /** @@ -1145,9 +1197,8 @@ GIT_EXTERN(int) git_diff_to_buf( /**@}*/ - /* - * Misc + * Low-level file comparison, invoking callbacks per difference. */ /** @@ -1263,6 +1314,25 @@ GIT_EXTERN(int) git_diff_buffers( git_diff_line_cb line_cb, void *payload); +/* Patch file parsing. */ + +/** + * Options for parsing a diff / patch file. + */ +typedef struct { + unsigned int version; + git_oid_t oid_type; +} git_diff_parse_options; + +/** The current version of the diff parse options structure */ +#define GIT_DIFF_PARSE_OPTIONS_VERSION 1 + +/** Stack initializer for diff parse options. Alternatively use + * `git_diff_parse_options_init` programmatic initialization. + */ +#define GIT_DIFF_PARSE_OPTIONS_INIT \ + { GIT_DIFF_PARSE_OPTIONS_VERSION, GIT_OID_DEFAULT } + /** * Read the contents of a git patch file into a `git_diff` object. * @@ -1285,7 +1355,11 @@ GIT_EXTERN(int) git_diff_buffers( GIT_EXTERN(int) git_diff_from_buffer( git_diff **out, const char *content, - size_t content_len); + size_t content_len +#ifdef GIT_EXPERIMENTAL_SHA256 + , git_diff_parse_options *opts +#endif + ); /** * This is an opaque structure which is allocated by `git_diff_get_stats`. @@ -1311,13 +1385,13 @@ typedef enum { 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_INCLUDE_SUMMARY = (1u << 3) } git_diff_stats_format_t; /** * Accumulate diff statistics for all patches. * - * @param out Structure containg the diff statistics. + * @param out Structure containing the diff statistics. * @param diff A git_diff generated by one of the above functions. * @return 0 on success; non-zero on error */ @@ -1386,7 +1460,10 @@ typedef struct git_diff_patchid_options { unsigned int version; } git_diff_patchid_options; +/** Current version for the `git_diff_patchid_options` structure */ #define GIT_DIFF_PATCHID_OPTIONS_VERSION 1 + +/** Static constructor for `git_diff_patchid_options` */ #define GIT_DIFF_PATCHID_OPTIONS_INIT { GIT_DIFF_PATCHID_OPTIONS_VERSION } /** @@ -1424,8 +1501,7 @@ GIT_EXTERN(int) git_diff_patchid_options_init( */ GIT_EXTERN(int) git_diff_patchid(git_oid *out, git_diff *diff, git_diff_patchid_options *opts); -GIT_END_DECL - /** @} */ +GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/email.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/email.h index b56be5d..ad37e42 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/email.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/email.h @@ -8,10 +8,11 @@ #define INCLUDE_git_email_h__ #include "common.h" +#include "diff.h" /** * @file git2/email.h - * @brief Git email formatting and application routines. + * @brief Produce email-ready patches * @ingroup Git * @{ */ @@ -34,7 +35,7 @@ typedef enum { GIT_EMAIL_CREATE_ALWAYS_NUMBER = (1u << 1), /** Do not perform rename or similarity detection. */ - GIT_EMAIL_CREATE_NO_RENAMES = (1u << 2), + GIT_EMAIL_CREATE_NO_RENAMES = (1u << 2) } git_email_create_flags_t; /** @@ -70,11 +71,14 @@ typedef struct { size_t reroll_number; } git_email_create_options; -/* +/** Current version for the `git_email_create_options` structure */ +#define GIT_EMAIL_CREATE_OPTIONS_VERSION 1 + +/** Static constructor for `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, \ @@ -83,30 +87,6 @@ typedef struct { 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. @@ -114,14 +94,14 @@ GIT_EXTERN(int) git_email_create_from_diff( * @param out buffer to store the e-mail patch in * @param commit commit to create a patch for * @param opts email creation options + * @return 0 or an error code */ GIT_EXTERN(int) git_email_create_from_commit( git_buf *out, git_commit *commit, const git_email_create_options *opts); -GIT_END_DECL - /** @} */ +GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/errors.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/errors.h index de51582..1141390 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/errors.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/errors.h @@ -11,7 +11,7 @@ /** * @file git2/errors.h - * @brief Git error handling routines and variables + * @brief Error handling routines and variables * @ingroup Git * @{ */ @@ -19,25 +19,32 @@ GIT_BEGIN_DECL /** Generic return codes */ typedef enum { - GIT_OK = 0, /**< No error */ + /** + * No error occurred; the call was successful. + */ + GIT_OK = 0, + + /** + * An error occurred; call `git_error_last` for more information. + */ + GIT_ERROR = -1, - 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_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_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_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 */ @@ -58,20 +65,17 @@ typedef enum { 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_EOWNER = -36, /**< The object is not owned by the current user */ + GIT_TIMEOUT = -37, /**< The operation timed out */ + GIT_EUNCHANGED = -38, /**< There were no changes */ + GIT_ENOTSUPPORTED = -39, /**< An option is not supported */ + GIT_EREADONLY = -40 /**< The subject is read-only */ } 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 + * Error classes are the category of error. They reflect the area of the + * code where an error occurred. */ -typedef struct { - char *message; - int klass; -} git_error; - -/** Error classes */ typedef enum { GIT_ERROR_NONE = 0, GIT_ERROR_NOMEMORY, @@ -106,59 +110,45 @@ typedef enum { GIT_ERROR_FILESYSTEM, GIT_ERROR_PATCH, GIT_ERROR_WORKTREE, - GIT_ERROR_SHA1, + GIT_ERROR_SHA, GIT_ERROR_HTTP, - GIT_ERROR_INTERNAL + GIT_ERROR_INTERNAL, + GIT_ERROR_GRAFTS } 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. + * Structure to store extra details of the last error that occurred. * - * @return A git_error object. - */ -GIT_EXTERN(const git_error *) git_error_last(void); - -/** - * Clear the last library error that occurred for this thread. + * 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 */ -GIT_EXTERN(void) git_error_clear(void); +typedef struct { + char *message; /**< The error message for the last error. */ + int klass; /**< The category of the last error. @type git_error_t */ +} git_error; /** - * Set the error message string for this thread. + * Return the last `git_error` object that was generated for the + * current 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 function will never return NULL. * - * This error message is stored in thread-local storage and only applies - * to the particular thread that this libgit2 call is made from. + * Callers should not rely on this to determine whether an error has + * occurred. For error checking, callers should examine the return + * codes of libgit2 functions. * - * @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. + * This call can only reliably report error messages when an error + * has occurred. (It may contain stale information if it is called + * after a different function that succeeds.) + * + * The memory for this object is managed by libgit2. It should not + * be freed. * - * 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. + * @return A pointer to a `git_error` object that describes the error. */ -GIT_EXTERN(void) git_error_set_oom(void); +GIT_EXTERN(const git_error *) git_error_last(void); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/experimental.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/experimental.h new file mode 100644 index 0000000..543f62f --- /dev/null +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/experimental.h @@ -0,0 +1,13 @@ +/* + * 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_experimental_h__ +#define INCLUDE_experimental_h__ + +/* #undef GIT_EXPERIMENTAL_SHA256 */ + +#endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/filter.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/filter.h index 0465e5b..cf6c5f5 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/filter.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/filter.h @@ -14,9 +14,15 @@ /** * @file git2/filter.h - * @brief Git filter APIs - * + * @brief Filters modify files during checkout or commit * @ingroup Git + * + * During checkout, filters update a file from a "canonical" state to + * a format appropriate for the local filesystem; during commit, filters + * produce the canonical state. For example, on Windows, the line ending + * filters _may_ take a canonical state (with Unix-style newlines) in + * the repository, and place the contents on-disk with Windows-style + * `\r\n` line endings. * @{ */ GIT_BEGIN_DECL @@ -32,7 +38,7 @@ 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_CLEAN = GIT_FILTER_TO_ODB } git_filter_mode_t; /** @@ -54,7 +60,7 @@ typedef enum { * 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_ATTRIBUTES_FROM_COMMIT = (1u << 3) } git_filter_flag_t; /** @@ -79,8 +85,11 @@ typedef struct { git_oid attr_commit_id; } git_filter_options; - #define GIT_FILTER_OPTIONS_VERSION 1 - #define GIT_FILTER_OPTIONS_INIT {GIT_FILTER_OPTIONS_VERSION} +/** Current version for the `git_filter_options` structure */ +#define GIT_FILTER_OPTIONS_VERSION 1 + +/** Static constructor for `git_filter_options` */ +#define GIT_FILTER_OPTIONS_INIT {GIT_FILTER_OPTIONS_VERSION} /** * A filter that can transform file data @@ -196,6 +205,7 @@ GIT_EXTERN(int) git_filter_list_apply_to_buffer( * @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 + * @return 0 or an error code. */ GIT_EXTERN(int) git_filter_list_apply_to_file( git_buf *out, @@ -209,6 +219,7 @@ GIT_EXTERN(int) git_filter_list_apply_to_file( * @param out buffer into which to store the filtered file * @param filters the list of filters to apply * @param blob the blob to filter + * @return 0 or an error code. */ GIT_EXTERN(int) git_filter_list_apply_to_blob( git_buf *out, @@ -222,6 +233,7 @@ GIT_EXTERN(int) git_filter_list_apply_to_blob( * @param buffer the buffer to filter * @param len the size of the buffer * @param target the stream into which the data will be written + * @return 0 or an error code. */ GIT_EXTERN(int) git_filter_list_stream_buffer( git_filter_list *filters, @@ -237,6 +249,7 @@ GIT_EXTERN(int) git_filter_list_stream_buffer( * @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 + * @return 0 or an error code. */ GIT_EXTERN(int) git_filter_list_stream_file( git_filter_list *filters, @@ -250,6 +263,7 @@ GIT_EXTERN(int) git_filter_list_stream_file( * @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 + * @return 0 or an error code. */ GIT_EXTERN(int) git_filter_list_stream_blob( git_filter_list *filters, @@ -263,9 +277,7 @@ GIT_EXTERN(int) git_filter_list_stream_blob( */ GIT_EXTERN(void) git_filter_list_free(git_filter_list *filters); - -GIT_END_DECL - /** @} */ +GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/global.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/global.h index 2a87e10..f15eb2d 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/global.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/global.h @@ -9,6 +9,12 @@ #include "common.h" +/** + * @file git2/global.h + * @brief libgit2 library initializer and shutdown functionality + * @ingroup Git + * @{ + */ GIT_BEGIN_DECL /** @@ -32,7 +38,7 @@ GIT_EXTERN(int) git_libgit2_init(void); * 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. */ @@ -40,5 +46,6 @@ GIT_EXTERN(int) git_libgit2_shutdown(void); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/graph.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/graph.h index 712ae47..1792020 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/graph.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/graph.h @@ -13,7 +13,7 @@ /** * @file git2/graph.h - * @brief Git graph traversal routines + * @brief Graph traversal routines * @defgroup git_revwalk Git graph traversal routines * @ingroup Git * @{ @@ -33,6 +33,7 @@ GIT_BEGIN_DECL * @param repo the repository where the commits exist * @param local the commit for local * @param upstream the commit for upstream + * @return 0 or an error code. */ GIT_EXTERN(int) git_graph_ahead_behind(size_t *ahead, size_t *behind, git_repository *repo, const git_oid *local, const git_oid *upstream); @@ -60,8 +61,8 @@ GIT_EXTERN(int) git_graph_descendant_of( * * @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 + * @param length the number of commits in the provided `descendant_array` * @return 1 if the given commit is an ancestor of any of the given potential * descendants, 0 if not, error code otherwise. */ @@ -73,4 +74,5 @@ GIT_EXTERN(int) git_graph_reachable_from_any( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/ignore.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/ignore.h index f5143f3..730f221 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/ignore.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/ignore.h @@ -10,6 +10,15 @@ #include "common.h" #include "types.h" +/** + * @file git2/ignore.h + * @brief Ignore particular untracked files + * @ingroup Git + * @{ + * + * When examining the repository status, git can optionally ignore + * specified untracked files. + */ GIT_BEGIN_DECL /** @@ -29,7 +38,7 @@ GIT_BEGIN_DECL * 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. + * @param rules Text of rules, the contents to add on 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 @@ -73,6 +82,7 @@ GIT_EXTERN(int) git_ignore_path_is_ignored( git_repository *repo, const char *path); +/** @} */ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/index.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/index.h index 532a520..0adff1a 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/index.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/index.h @@ -15,9 +15,14 @@ /** * @file git2/index.h - * @brief Git index parsing and manipulation routines + * @brief Index (aka "cache" aka "staging area") * @defgroup git_index Git index parsing and manipulation routines * @ingroup Git + * + * The index (or "cache", or "staging area") is the contents of the + * next commit. In addition, the index stores other data, such as + * conflicts that occurred during the last merge operation, and + * the "treecache" to speed up various on-disk operations. * @{ */ GIT_BEGIN_DECL @@ -77,8 +82,11 @@ typedef struct git_index_entry { * data in the `flags`. */ +/** Mask for name length */ #define GIT_INDEX_ENTRY_NAMEMASK (0x0fff) +/** Mask for index entry stage */ #define GIT_INDEX_ENTRY_STAGEMASK (0x3000) +/** Shift bits for index entry */ #define GIT_INDEX_ENTRY_STAGESHIFT 12 /** @@ -86,12 +94,20 @@ typedef struct git_index_entry { */ typedef enum { GIT_INDEX_ENTRY_EXTENDED = (0x4000), - GIT_INDEX_ENTRY_VALID = (0x8000), + GIT_INDEX_ENTRY_VALID = (0x8000) } git_index_entry_flag_t; +/** + * Macro to get the stage value (0 for the "main index", or a conflict + * value) from an index entry. + */ #define GIT_INDEX_ENTRY_STAGE(E) \ (((E)->flags & GIT_INDEX_ENTRY_STAGEMASK) >> GIT_INDEX_ENTRY_STAGESHIFT) +/** + * Macro to set the stage value (0 for the "main index", or a conflict + * value) for an index entry. + */ #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) @@ -119,7 +135,7 @@ typedef enum { 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_UPTODATE = (1 << 2) } git_index_entry_extended_flag_t; /** Capabilities of system that affect index actions. */ @@ -127,11 +143,18 @@ 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_FROM_OWNER = -1 } git_index_capability_t; -/** Callback for APIs that add/remove/update files matching pathspec */ +/** + * Callback for APIs that add/remove/update files matching pathspec + * + * @param path the path + * @param matched_pathspec the given pathspec + * @param payload the user-specified payload + * @return 0 to continue with the index operation, positive number to skip this file for the index operation, negative number on failure + */ typedef int GIT_CALLBACK(git_index_matched_path_cb)( const char *path, const char *matched_pathspec, void *payload); @@ -140,7 +163,7 @@ 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_CHECK_PATHSPEC = (1u << 2) } git_index_add_option_t; /** Git index stage states */ @@ -163,9 +186,77 @@ typedef enum { GIT_INDEX_STAGE_OURS = 2, /** The "theirs" side of a conflict. */ - GIT_INDEX_STAGE_THEIRS = 3, + GIT_INDEX_STAGE_THEIRS = 3 } git_index_stage_t; +#ifdef GIT_EXPERIMENTAL_SHA256 + +/** + * The options for opening or creating an index. + * + * Initialize with `GIT_INDEX_OPTIONS_INIT`. Alternatively, you can + * use `git_index_options_init`. + * + * @options[version] GIT_INDEX_OPTIONS_VERSION + * @options[init_macro] GIT_INDEX_OPTIONS_INIT + * @options[init_function] git_index_options_init + */ +typedef struct git_index_options { + unsigned int version; /**< The version */ + + /** + * The object ID type for the object IDs that exist in the index. + * + * If this is not specified, this defaults to `GIT_OID_SHA1`. + */ + git_oid_t oid_type; +} git_index_options; + +/** Current version for the `git_index_options` structure */ +#define GIT_INDEX_OPTIONS_VERSION 1 + +/** Static constructor for `git_index_options` */ +#define GIT_INDEX_OPTIONS_INIT { GIT_INDEX_OPTIONS_VERSION } + +/** + * Initialize git_index_options structure + * + * Initializes a `git_index_options` with default values. Equivalent to creating + * an instance with GIT_INDEX_OPTIONS_INIT. + * + * @param opts The `git_index_options` struct to initialize. + * @param version The struct version; pass `GIT_INDEX_OPTIONS_VERSION`. + * @return Zero on success; -1 on failure. + */ +GIT_EXTERN(int) git_index_options_init( + git_index_options *opts, + unsigned int version); + +/** + * Creates a new bare Git index object, without a repository to back + * it. This index object is capable of storing SHA256 objects. + * + * @param index_out the pointer for the new index + * @param index_path the path to the index file in disk + * @param opts the options for opening the index, or NULL + * @return 0 or an error code + */ +GIT_EXTERN(int) git_index_open( + git_index **index_out, + const char *index_path, + const git_index_options *opts); + +/** + * Create an in-memory index object. + * + * @param index_out the pointer for the new index + * @param opts the options for opening the index, or NULL + * @return 0 or an error code + */ +GIT_EXTERN(int) git_index_new(git_index **index_out, const git_index_options *opts); + +#else + /** * Create a new bare Git index object as a memory representation * of the Git index file in 'index_path', without a repository @@ -180,11 +271,11 @@ typedef enum { * * The index must be freed once it's no longer in use. * - * @param out the pointer for the new index + * @param index_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); +GIT_EXTERN(int) git_index_open(git_index **index_out, const char *index_path); /** * Create an in-memory index object. @@ -194,10 +285,12 @@ GIT_EXTERN(int) git_index_open(git_index **out, const char *index_path); * * The index must be freed once it's no longer in use. * - * @param out the pointer for the new index + * @param index_out the pointer for the new index * @return 0 or an error code */ -GIT_EXTERN(int) git_index_new(git_index **out); +GIT_EXTERN(int) git_index_new(git_index **index_out); + +#endif /** * Free an existing index object. @@ -296,6 +389,7 @@ GIT_EXTERN(int) git_index_write(git_index *index); */ GIT_EXTERN(const char *) git_index_path(const git_index *index); +#ifndef GIT_DEPRECATE_HARD /** * Get the checksum of the index * @@ -303,10 +397,12 @@ GIT_EXTERN(const char *) git_index_path(const git_index *index); * last 20 bytes which are the checksum itself). In cases where the * index does not exist on-disk, it will be zeroed out. * + * @deprecated this function is deprecated with no replacement * @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); +#endif /** * Read a tree into the index file with stats @@ -491,6 +587,7 @@ GIT_EXTERN(int) git_index_entry_is_conflict(const git_index_entry *entry); * * @param iterator_out The newly created iterator * @param index The index to iterate + * @return 0 or an error code. */ GIT_EXTERN(int) git_index_iterator_new( git_index_iterator **iterator_out, @@ -787,6 +884,7 @@ GIT_EXTERN(int) git_index_conflict_cleanup(git_index *index); /** * Determine if the index contains entries representing file conflicts. * + * @param index An existing index object. * @return 1 if at least one conflict is found, 0 otherwise. */ GIT_EXTERN(int) git_index_has_conflicts(const git_index *index); @@ -811,6 +909,7 @@ GIT_EXTERN(int) git_index_conflict_iterator_new( * @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 + * @param iterator The conflict iterator. * @return 0 (no error), GIT_ITEROVER (iteration is done) or an error code * (negative value) */ @@ -830,4 +929,5 @@ GIT_EXTERN(void) git_index_conflict_iterator_free( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/indexer.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/indexer.h index a434d24..9aaedc3 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/indexer.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/indexer.h @@ -4,13 +4,23 @@ * 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__ +#ifndef INCLUDE_git_indexer_h__ +#define INCLUDE_git_indexer_h__ #include "common.h" #include "types.h" #include "oid.h" +/** + * @file git2/indexer.h + * @brief Packfile indexing + * @ingroup Git + * @{ + * + * Indexing is the operation of taking a packfile - which is simply a + * collection of unordered commits - and producing an "index" so that + * one can lookup a commit in the packfile by object ID. + */ GIT_BEGIN_DECL /** A git indexer object */ @@ -53,6 +63,7 @@ typedef struct git_indexer_progress { * * @param stats Structure containing information about the state of the transfer * @param payload Payload provided by caller + * @return 0 on success or an error code */ typedef int GIT_CALLBACK(git_indexer_progress_cb)(const git_indexer_progress *stats, void *payload); @@ -62,6 +73,22 @@ typedef int GIT_CALLBACK(git_indexer_progress_cb)(const git_indexer_progress *st typedef struct git_indexer_options { unsigned int version; +#ifdef GIT_EXPERIMENTAL_SHA256 + /** permissions to use creating packfile or 0 for defaults */ + unsigned int mode; + + /** the type of object ids in the packfile or 0 for SHA1 */ + git_oid_t oid_type; + + /** + * object database from which to read base objects when + * fixing thin packs. This can be NULL if there are no thin + * packs; if a thin pack is encountered, an error will be + * returned if there are bases missing. + */ + git_odb *odb; +#endif + /** progress_cb function to call with progress information */ git_indexer_progress_cb progress_cb; @@ -72,7 +99,10 @@ typedef struct git_indexer_options { unsigned char verify; } git_indexer_options; +/** Current version for the `git_indexer_options` structure */ #define GIT_INDEXER_OPTIONS_VERSION 1 + +/** Static constructor for `git_indexer_options` */ #define GIT_INDEXER_OPTIONS_INIT { GIT_INDEXER_OPTIONS_VERSION } /** @@ -87,6 +117,20 @@ GIT_EXTERN(int) git_indexer_options_init( git_indexer_options *opts, unsigned int version); +#ifdef GIT_EXPERIMENTAL_SHA256 +/** + * 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 opts the options to create the indexer with + * @return 0 or an error code. + */ +GIT_EXTERN(int) git_indexer_new( + git_indexer **out, + const char *path, + git_indexer_options *opts); +#else /** * Create a new indexer instance * @@ -98,6 +142,7 @@ GIT_EXTERN(int) git_indexer_options_init( * will be returned if there are bases missing) * @param opts Optional structure containing additional options. See * `git_indexer_options` above. + * @return 0 or an error code. */ GIT_EXTERN(int) git_indexer_new( git_indexer **out, @@ -105,6 +150,7 @@ GIT_EXTERN(int) git_indexer_new( unsigned int mode, git_odb *odb, git_indexer_options *opts); +#endif /** * Add data to the indexer @@ -113,6 +159,7 @@ GIT_EXTERN(int) git_indexer_new( * @param data the data to add * @param size the size of the data in bytes * @param stats stat storage + * @return 0 or an error code. */ GIT_EXTERN(int) git_indexer_append(git_indexer *idx, const void *data, size_t size, git_indexer_progress *stats); @@ -122,18 +169,35 @@ GIT_EXTERN(int) git_indexer_append(git_indexer *idx, const void *data, size_t si * Resolve any pending deltas and write out the index file * * @param idx the indexer + * @param stats Stat storage. + * @return 0 or an error code. */ GIT_EXTERN(int) git_indexer_commit(git_indexer *idx, git_indexer_progress *stats); +#ifndef GIT_DEPRECATE_HARD /** * 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. * + * @deprecated use git_indexer_name * @param idx the indexer instance + * @return the packfile's hash */ GIT_EXTERN(const git_oid *) git_indexer_hash(const git_indexer *idx); +#endif + +/** + * Get the unique name for the resulting packfile. + * + * The packfile's name is derived from the packfile's content. + * This is only correct after the index has been finalized. + * + * @param idx the indexer instance + * @return a NUL terminated string for the packfile name + */ +GIT_EXTERN(const char *) git_indexer_name(const git_indexer *idx); /** * Free the indexer and its resources @@ -142,6 +206,7 @@ GIT_EXTERN(const git_oid *) git_indexer_hash(const git_indexer *idx); */ GIT_EXTERN(void) git_indexer_free(git_indexer *idx); +/** @} */ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/mailmap.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/mailmap.h index 7c3f60f..fd6ae71 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/mailmap.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/mailmap.h @@ -13,10 +13,15 @@ /** * @file git2/mailmap.h - * @brief Mailmap parsing routines + * @brief Mailmaps provide alternate email addresses for users * @defgroup git_mailmap Git mailmap routines * @ingroup Git * @{ + * + * A mailmap can be used to specify alternate email addresses for + * repository committers or authors. This allows systems to map + * commits made using different email addresses to the same logical + * person. */ GIT_BEGIN_DECL @@ -112,4 +117,5 @@ GIT_EXTERN(int) git_mailmap_resolve_signature( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/merge.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/merge.h index fc27c9d..be3b065 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/merge.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/merge.h @@ -17,9 +17,12 @@ /** * @file git2/merge.h - * @brief Git merge routines + * @brief Merge re-joins diverging branches of history * @defgroup git_merge Git merge routines * @ingroup Git + * + * Merge will take two commits and attempt to produce a commit that + * includes the changes that were made in both branches. * @{ */ GIT_BEGIN_DECL @@ -45,7 +48,10 @@ typedef struct { unsigned int mode; } git_merge_file_input; +/** Current version for the `git_merge_file_input_options` structure */ #define GIT_MERGE_FILE_INPUT_VERSION 1 + +/** Static constructor for `git_merge_file_input_options` */ #define GIT_MERGE_FILE_INPUT_INIT {GIT_MERGE_FILE_INPUT_VERSION} /** @@ -92,6 +98,14 @@ typedef enum { * merge base to `git-merge-resolve`. */ GIT_MERGE_NO_RECURSIVE = (1 << 3), + + /** + * Treat this merge as if it is to produce the virtual base + * of a recursive merge. This will ensure that there are + * no conflicts, any conflicting regions will keep conflict + * markers in the merge result. + */ + GIT_MERGE_VIRTUAL_BASE = (1 << 4) } git_merge_flag_t; /** @@ -127,7 +141,7 @@ typedef enum { * 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_UNION = 3 } git_merge_file_favor_t; /** @@ -160,8 +174,19 @@ typedef enum { /** Take extra time to find minimal diff */ GIT_MERGE_FILE_DIFF_MINIMAL = (1 << 7), + + /** Create zdiff3 ("zealous diff3")-style files */ + GIT_MERGE_FILE_STYLE_ZDIFF3 = (1 << 8), + + /** + * Do not produce file conflicts when common regions have + * changed; keep the conflict markers in the file and accept + * that as the merge result. + */ + GIT_MERGE_FILE_ACCEPT_CONFLICTS = (1 << 9) } git_merge_file_flag_t; +/** Default size for conflict markers */ #define GIT_MERGE_CONFLICT_MARKER_SIZE 7 /** @@ -199,7 +224,10 @@ typedef struct { unsigned short marker_size; } git_merge_file_options; +/** Current version for the `git_merge_file_options` structure */ #define GIT_MERGE_FILE_OPTIONS_VERSION 1 + +/** Static constructor for `git_merge_file_options` */ #define GIT_MERGE_FILE_OPTIONS_INIT {GIT_MERGE_FILE_OPTIONS_VERSION} /** @@ -294,7 +322,10 @@ typedef struct { uint32_t file_flags; } git_merge_options; +/** Current version for the `git_merge_options` structure */ #define GIT_MERGE_OPTIONS_VERSION 1 + +/** Static constructor for `git_merge_options` */ #define GIT_MERGE_OPTIONS_INIT { \ GIT_MERGE_OPTIONS_VERSION, GIT_MERGE_FIND_RENAMES } @@ -341,7 +372,7 @@ typedef enum { * 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_UNBORN = (1 << 3) } git_merge_analysis_t; /** @@ -364,7 +395,7 @@ typedef enum { * 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_FASTFORWARD_ONLY = (1 << 1) } git_merge_preference_t; /** @@ -372,6 +403,7 @@ typedef enum { * merging them into the HEAD of the repository. * * @param analysis_out analysis enumeration that the result is written into + * @param preference_out One of the `git_merge_preference_t` flag. * @param repo the repository to merge * @param their_heads the heads to merge into * @param their_heads_len the number of heads to merge @@ -389,6 +421,7 @@ GIT_EXTERN(int) git_merge_analysis( * merging them into a reference. * * @param analysis_out analysis enumeration that the result is written into + * @param preference_out One of the `git_merge_preference_t` flag. * @param repo the repository to merge * @param our_ref the reference to perform the analysis from * @param their_heads the heads to merge into @@ -451,6 +484,37 @@ GIT_EXTERN(int) git_merge_base_many( /** * Find all merge bases given a list of commits * + * This behaves similar to [`git merge-base`](https://git-scm.com/docs/git-merge-base#_discussion). + * + * Given three commits `a`, `b`, and `c`, `merge_base_many` + * will compute a hypothetical commit `m`, which is a merge between `b` + * and `c`. + + * For example, with the following topology: + * ```text + * o---o---o---o---C + * / + * / o---o---o---B + * / / + * ---2---1---o---o---o---A + * ``` + * + * the result of `merge_base_many` given `a`, `b`, and `c` is 1. This is + * because the equivalent topology with the imaginary merge commit `m` + * between `b` and `c` is: + * ```text + * o---o---o---o---o + * / \ + * / o---o---o---o---M + * / / + * ---2---1---o---o---o---A + * ``` + * + * and the result of `merge_base_many` given `a` and `m` is 1. + * + * If you're looking to recieve the common ancestor between all the + * given commits, use `merge_base_octopus`. + * * @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` @@ -583,7 +647,7 @@ GIT_EXTERN(int) git_merge_commits( * 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), + * state. Once the commit is done (or if the user wishes to abort), * you should clear this state by calling * `git_repository_state_cleanup()`. * @@ -603,4 +667,5 @@ GIT_EXTERN(int) git_merge( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/message.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/message.h index 42ca3e5..874d027 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/message.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/message.h @@ -12,7 +12,7 @@ /** * @file git2/message.h - * @brief Git message management routines + * @brief Commit messages * @ingroup Git * @{ */ @@ -75,10 +75,12 @@ GIT_EXTERN(int) git_message_trailers(git_message_trailer_array *arr, const char /** * Clean's up any allocated memory in the git_message_trailer_array filled by * a call to git_message_trailers. + * + * @param arr The trailer to free. */ GIT_EXTERN(void) git_message_trailer_array_free(git_message_trailer_array *arr); /** @} */ GIT_END_DECL -#endif /* INCLUDE_git_message_h__ */ +#endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/net.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/net.h index 8103eaf..93bdac4 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/net.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/net.h @@ -13,12 +13,13 @@ /** * @file git2/net.h - * @brief Git networking declarations + * @brief Low-level networking functionality * @ingroup Git * @{ */ GIT_BEGIN_DECL +/** Default git protocol port number */ #define GIT_DEFAULT_PORT "9418" /** @@ -51,4 +52,5 @@ struct git_remote_head { /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/notes.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/notes.h index c135881..3784d5f 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/notes.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/notes.h @@ -11,7 +11,7 @@ /** * @file git2/notes.h - * @brief Git notes management routines + * @brief Notes are metadata attached to an object * @defgroup git_note Git notes management routines * @ingroup Git * @{ @@ -21,13 +21,15 @@ 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` + * @param blob_id object id of the blob containing the message + * @param annotated_object_id the id of the object being annotated + * @param payload user-specified data to the foreach function + * @return 0 on success, or a negative number on failure */ typedef int GIT_CALLBACK(git_note_foreach_cb)( - const git_oid *blob_id, const git_oid *annotated_object_id, void *payload); + const git_oid *blob_id, + const git_oid *annotated_object_id, + void *payload); /** * note iterator @@ -303,4 +305,5 @@ GIT_EXTERN(int) git_note_foreach( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/object.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/object.h index 984dbb7..8a50239 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/object.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/object.h @@ -14,13 +14,14 @@ /** * @file git2/object.h - * @brief Git revision object management routines + * @brief Objects are blobs (files), trees (directories), commits, and annotated tags * @defgroup git_object Git revision object management routines * @ingroup Git * @{ */ GIT_BEGIN_DECL +/** Maximum size of a git object */ #define GIT_OBJECT_SIZE_MAX UINT64_MAX /** @@ -53,18 +54,18 @@ GIT_EXTERN(int) git_object_lookup( * * 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. + * (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 + * 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 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 @@ -221,9 +222,58 @@ GIT_EXTERN(int) git_object_peel( * * @param dest Pointer to store the copy of the object * @param source Original object to copy + * @return 0 or an error code */ GIT_EXTERN(int) git_object_dup(git_object **dest, git_object *source); +#ifdef GIT_EXPERIMENTAL_SHA256 +/** + * Analyzes a buffer of raw object content and determines its validity. + * Tree, commit, and tag objects will be parsed and ensured that they + * are valid, parseable content. (Blobs are always valid by definition.) + * An error message will be set with an informative message if the object + * is not valid. + * + * @warning This function is experimental and its signature may change in + * the future. + * + * @param valid Output pointer to set with validity of the object content + * @param buf The contents to validate + * @param len The length of the buffer + * @param object_type The type of the object in the buffer + * @param oid_type The object ID type for the OIDs in the given buffer + * @return 0 on success or an error code + */ +GIT_EXTERN(int) git_object_rawcontent_is_valid( + int *valid, + const char *buf, + size_t len, + git_object_t object_type, + git_oid_t oid_type); +#else +/** + * Analyzes a buffer of raw object content and determines its validity. + * Tree, commit, and tag objects will be parsed and ensured that they + * are valid, parseable content. (Blobs are always valid by definition.) + * An error message will be set with an informative message if the object + * is not valid. + * + * @warning This function is experimental and its signature may change in + * the future. + * + * @param[out] valid Output pointer to set with validity of the object content + * @param buf The contents to validate + * @param len The length of the buffer + * @param object_type The type of the object in the buffer + * @return 0 on success or an error code + */ +GIT_EXTERN(int) git_object_rawcontent_is_valid( + int *valid, + const char *buf, + size_t len, + git_object_t object_type); +#endif + /** @} */ GIT_END_DECL diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/odb.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/odb.h index dd48455..e809c36 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/odb.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/odb.h @@ -15,29 +15,91 @@ /** * @file git2/odb.h - * @brief Git object database routines + * @brief An object database manages the storage of git objects * @defgroup git_odb Git object database routines * @ingroup Git * @{ */ GIT_BEGIN_DECL +/** Flags controlling the behavior of ODB lookup operations */ +typedef enum { + /** + * Don't call `git_odb_refresh` if the lookup fails. Useful when doing + * a batch of lookup operations for objects that may legitimately not + * exist. When using this flag, you may wish to manually call + * `git_odb_refresh` before processing a batch of objects. + */ + GIT_ODB_LOOKUP_NO_REFRESH = (1 << 0) +} git_odb_lookup_flags_t; + /** * Function type for callbacks from git_odb_foreach. + * + * @param id an id of an object in the object database + * @param payload the payload from the initial call to git_odb_foreach + * @return 0 on success, or an error code */ typedef int GIT_CALLBACK(git_odb_foreach_cb)(const git_oid *id, void *payload); +/** Options for configuring a loose object backend. */ +typedef struct { + unsigned int version; /**< version for the struct */ + + /** + * Type of object IDs to use for this object database, or + * 0 for default (currently SHA1). + */ + git_oid_t oid_type; +} git_odb_options; + +/** The current version of the diff options structure */ +#define GIT_ODB_OPTIONS_VERSION 1 + +/** + * Stack initializer for odb options. Alternatively use + * `git_odb_options_init` programmatic initialization. + */ +#define GIT_ODB_OPTIONS_INIT { GIT_ODB_OPTIONS_VERSION } + +#ifdef GIT_EXPERIMENTAL_SHA256 + +/** + * Create a new object database with no backends. + * + * @param[out] odb location to store the database pointer, if opened. + * @param opts the options for this object database or NULL for defaults + * @return 0 or an error code + */ +GIT_EXTERN(int) git_odb_new(git_odb **odb, const git_odb_options *opts); + +/** + * Create a new object database and automatically add loose and packed + * backends. + * + * @param[out] odb_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. + * @param opts the options for this object database or NULL for defaults + * @return 0 or an error code + */ +GIT_EXTERN(int) git_odb_open( + git_odb **odb_out, + const char *objects_dir, + const git_odb_options *opts); + +#else + /** * 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. + * @param[out] odb location to store the database pointer, if opened. * @return 0 or an error code */ -GIT_EXTERN(int) git_odb_new(git_odb **out); +GIT_EXTERN(int) git_odb_new(git_odb **odb); /** * Create a new object database and automatically add @@ -50,12 +112,13 @@ GIT_EXTERN(int) git_odb_new(git_odb **out); * 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. + * @param[out] odb_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); +GIT_EXTERN(int) git_odb_open(git_odb **odb_out, const char *objects_dir); +#endif /** * Add an on-disk alternate to an existing Object DB. @@ -91,13 +154,13 @@ GIT_EXTERN(void) git_odb_free(git_odb *db); * 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[out] obj 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); +GIT_EXTERN(int) git_odb_read(git_odb_object **obj, git_odb *db, const git_oid *id); /** * Read an object from the database, given a prefix @@ -106,7 +169,7 @@ GIT_EXTERN(int) git_odb_read(git_odb_object **out, git_odb *db, const git_oid *i * 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 + * The remaining (GIT_OID_SHA1_HEXSIZE-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 @@ -117,7 +180,7 @@ GIT_EXTERN(int) git_odb_read(git_odb_object **out, git_odb *db, const git_oid *i * 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[out] obj 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 @@ -125,7 +188,7 @@ GIT_EXTERN(int) git_odb_read(git_odb_object **out, git_odb *db, const git_oid *i * 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); +GIT_EXTERN(int) git_odb_read_prefix(git_odb_object **obj, git_odb *db, const git_oid *short_id, size_t len); /** * Read the header of an object from the database, without @@ -137,8 +200,8 @@ GIT_EXTERN(int) git_odb_read_prefix(git_odb_object **out, git_odb *db, const git * 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[out] len_out pointer where to store the length + * @param[out] 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 @@ -155,6 +218,17 @@ GIT_EXTERN(int) git_odb_read_header(size_t *len_out, git_object_t *type_out, git */ GIT_EXTERN(int) git_odb_exists(git_odb *db, const git_oid *id); +/** + * Determine if the given object can be found in the object database, with + * extended options. + * + * @param db database to be searched for the given object. + * @param id the object to search for. + * @param flags flags affecting the lookup (see `git_odb_lookup_flags_t`) + * @return 1 if the object was found, 0 otherwise + */ +GIT_EXTERN(int) git_odb_exists_ext(git_odb *db, const git_oid *id, unsigned int flags); + /** * Determine if an object can be found in the object database by an * abbreviated object ID. @@ -192,12 +266,13 @@ typedef struct 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. + * 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_SHA1_HEXSIZE`) 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 @@ -231,7 +306,7 @@ GIT_EXTERN(int) git_odb_expand_ids( * @param db database to refresh * @return 0 on success, error code otherwise */ -GIT_EXTERN(int) git_odb_refresh(struct git_odb *db); +GIT_EXTERN(int) git_odb_refresh(git_odb *db); /** * List all objects available in the database @@ -246,7 +321,10 @@ GIT_EXTERN(int) git_odb_refresh(struct git_odb *db); * @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); +GIT_EXTERN(int) git_odb_foreach( + git_odb *db, + git_odb_foreach_cb cb, + void *payload); /** * Write an object directly into the ODB @@ -261,7 +339,7 @@ GIT_EXTERN(int) git_odb_foreach(git_odb *db, git_odb_foreach_cb cb, void *payloa * * @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 data @type `const unsigned char *` 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 @@ -323,6 +401,11 @@ GIT_EXTERN(int) git_odb_stream_finalize_write(git_oid *out, git_odb_stream *stre * Read from an odb stream * * Most backends don't implement streaming reads + * + * @param stream the stream + * @param buffer a user-allocated buffer to store the data in. + * @param len the buffer's length + * @return the number of bytes read if succeeded, error code otherwise */ GIT_EXTERN(int) git_odb_stream_read(git_odb_stream *stream, char *buffer, size_t len); @@ -383,6 +466,7 @@ GIT_EXTERN(int) git_odb_open_rstream( * 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 + * @return 0 or an error code. */ GIT_EXTERN(int) git_odb_write_pack( git_odb_writepack **out, @@ -400,23 +484,59 @@ GIT_EXTERN(int) git_odb_write_pack( * exist). * * @param db object database where the `multi-pack-index` file will be written. + * @return 0 or an error code. */ GIT_EXTERN(int) git_odb_write_multi_pack_index( git_odb *db); +#ifdef GIT_EXPERIMENTAL_SHA256 + /** - * Determine the object-ID (sha1 hash) of a data buffer + * Generate the object ID (in SHA1 or SHA256 format) for a given 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] oid the resulting object ID. + * @param data data to hash + * @param len size of the data + * @param object_type of the data to hash + * @param oid_type the oid type to hash to + * @return 0 or an error code + */ +GIT_EXTERN(int) git_odb_hash( + git_oid *oid, + const void *data, + size_t len, + git_object_t object_type, + git_oid_t oid_type); + +/** + * Determine the object ID of a file on disk. + * + * @param[out] oid oid structure the result is written into. + * @param path file to read and determine object id for + * @param object_type of the data to hash + * @param oid_type the oid type to hash to + * @return 0 or an error code + */ +GIT_EXTERN(int) git_odb_hashfile( + git_oid *oid, + const char *path, + git_object_t object_type, + git_oid_t oid_type); +#else + +/** + * Determine the object-ID (sha1 or sha256 hash) of a data buffer + * + * The resulting 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[out] oid the resulting object-ID. * @param data data to hash * @param len size of the data - * @param type of the data to hash + * @param object_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); +GIT_EXTERN(int) git_odb_hash(git_oid *oid, const void *data, size_t len, git_object_t object_type); /** * Read a file from disk and fill a git_oid with the object id @@ -426,12 +546,14 @@ GIT_EXTERN(int) git_odb_hash(git_oid *out, const void *data, size_t len, git_obj * 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[out] oid 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 + * @param object_type of the data to hash * @return 0 or an error code */ -GIT_EXTERN(int) git_odb_hashfile(git_oid *out, const char *path, git_object_t type); +GIT_EXTERN(int) git_odb_hashfile(git_oid *oid, const char *path, git_object_t object_type); + +#endif /** * Create a copy of an odb_object @@ -476,7 +598,7 @@ GIT_EXTERN(const git_oid *) git_odb_object_id(git_odb_object *object); * This pointer is owned by the object and shall not be free'd. * * @param object the object - * @return a pointer to the data + * @return @type `const unsigned char *` a pointer to the data */ GIT_EXTERN(const void *) git_odb_object_data(git_odb_object *object); @@ -556,7 +678,7 @@ GIT_EXTERN(int) git_odb_get_backend(git_odb_backend **out, git_odb *odb, size_t /** * Set the git commit-graph for the ODB. * - * After a successfull call, the ownership of the cgraph parameter will be + * After a successful 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 @@ -570,4 +692,5 @@ GIT_EXTERN(int) git_odb_set_commit_graph(git_odb *odb, git_commit_graph *cgraph) /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/odb_backend.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/odb_backend.h index c593bac..88ca29f 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/odb_backend.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/odb_backend.h @@ -13,46 +13,135 @@ /** * @file git2/backend.h - * @brief Git custom backend functions + * @brief Object database backends manage the storage of git objects * @defgroup git_odb Git object database routines * @ingroup Git * @{ */ GIT_BEGIN_DECL +/** Options for configuring a packfile object backend. */ +typedef struct { + unsigned int version; /**< version for the struct */ + + /** + * Type of object IDs to use for this object database, or + * 0 for default (currently SHA1). + */ + git_oid_t oid_type; +} git_odb_backend_pack_options; + +/** The current version of the diff options structure */ +#define GIT_ODB_BACKEND_PACK_OPTIONS_VERSION 1 + +/** + * Stack initializer for odb pack backend options. Alternatively use + * `git_odb_backend_pack_options_init` programmatic initialization. + */ +#define GIT_ODB_BACKEND_PACK_OPTIONS_INIT \ + { GIT_ODB_BACKEND_PACK_OPTIONS_VERSION } + +typedef enum { + GIT_ODB_BACKEND_LOOSE_FSYNC = (1 << 0) +} git_odb_backend_loose_flag_t; + +/** Options for configuring a loose object backend. */ +typedef struct { + unsigned int version; /**< version for the struct */ + + /** A combination of the `git_odb_backend_loose_flag_t` types. */ + uint32_t flags; + + /** + * zlib compression level to use (0-9), where 1 is the fastest + * at the expense of larger files, and 9 produces the best + * compression at the expense of speed. 0 indicates that no + * compression should be performed. -1 is the default (currently + * optimizing for speed). + */ + int compression_level; + + /** Permissions to use creating a directory or 0 for defaults */ + unsigned int dir_mode; + + /** Permissions to use creating a file or 0 for defaults */ + unsigned int file_mode; + + /** + * Type of object IDs to use for this object database, or + * 0 for default (currently SHA1). + */ + git_oid_t oid_type; +} git_odb_backend_loose_options; + +/** The current version of the diff options structure */ +#define GIT_ODB_BACKEND_LOOSE_OPTIONS_VERSION 1 + +/** + * Stack initializer for odb loose backend options. Alternatively use + * `git_odb_backend_loose_options_init` programmatic initialization. + */ +#define GIT_ODB_BACKEND_LOOSE_OPTIONS_INIT \ + { GIT_ODB_BACKEND_LOOSE_OPTIONS_VERSION, 0, -1 } + /* * Constructors for in-box ODB backends. */ +#ifdef GIT_EXPERIMENTAL_SHA256 + /** - * Create a backend for the packfiles. + * Create a backend for a directory containing packfiles. * - * @param out location to store the odb backend pointer + * @param[out] out location to store the odb backend pointer * @param objects_dir the Git repository's objects directory + * @param opts the options to use when creating the pack backend + * @return 0 or an error code + */ +GIT_EXTERN(int) git_odb_backend_pack( + git_odb_backend **out, + const char *objects_dir, + const git_odb_backend_pack_options *opts); + +/** + * Create a backend for a single packfile. * + * @param[out] out location to store the odb backend pointer + * @param index_file path to the packfile's .idx file + * @param opts the options to use when creating the pack backend * @return 0 or an error code */ -GIT_EXTERN(int) git_odb_backend_pack(git_odb_backend **out, const char *objects_dir); +GIT_EXTERN(int) git_odb_backend_one_pack( + git_odb_backend **out, + const char *index_file, + const git_odb_backend_pack_options *opts); /** * Create a backend for loose objects * - * @param out location to store the odb backend pointer + * @param[out] 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 + * @param opts options for the loose object backend or NULL * * @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); + git_odb_backend_loose_options *opts); + +#else + +/** + * Create a backend for a directory containing packfiles. + * + * @param[out] 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 out of a single packfile @@ -60,18 +149,40 @@ GIT_EXTERN(int) git_odb_backend_loose( * This can be useful for inspecting the contents of a single * packfile. * - * @param out location to store the odb backend pointer + * @param[out] 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); + +/** + * Create a backend for loose objects * + * @param[out] out location to store the odb backend pointer + * @param objects_dir the Git repository's objects directory + * @param compression_level zlib compression level (0-9), or -1 for the default + * @param do_fsync if non-zero, perform an fsync on write + * @param dir_mode permission to use when creating directories, or 0 for default + * @param file_mode permission to use when creating directories, or 0 for default * @return 0 or an error code */ -GIT_EXTERN(int) git_odb_backend_one_pack(git_odb_backend **out, const char *index_file); +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); + +#endif /** Streaming mode */ typedef enum { GIT_STREAM_RDONLY = (1 << 1), GIT_STREAM_WRONLY = (1 << 2), - GIT_STREAM_RW = (GIT_STREAM_RDONLY | GIT_STREAM_WRONLY), + GIT_STREAM_RW = (GIT_STREAM_RDONLY | GIT_STREAM_WRONLY) } git_odb_stream_t; /** @@ -87,6 +198,10 @@ struct git_odb_stream { unsigned int mode; void *hash_ctx; +#ifdef GIT_EXPERIMENTAL_SHA256 + git_oid_t oid_type; +#endif + git_object_size_t declared_size; git_object_size_t received_bytes; @@ -130,6 +245,7 @@ struct git_odb_writepack { void GIT_CALLBACK(free)(git_odb_writepack *writepack); }; +/** @} */ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/oid.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/oid.h index 549df4e..8539b4e 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/oid.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/oid.h @@ -8,22 +8,92 @@ #define INCLUDE_git_oid_h__ #include "common.h" -#include "types.h" +#include "experimental.h" /** * @file git2/oid.h - * @brief Git object id routines + * @brief Object IDs * @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 +/** The type of object id. */ +typedef enum { -/** Size (in bytes) of a hex formatted oid */ -#define GIT_OID_HEXSZ (GIT_OID_RAWSZ * 2) +#ifdef GIT_EXPERIMENTAL_SHA256 + GIT_OID_SHA1 = 1, /**< SHA1 */ + GIT_OID_SHA256 = 2 /**< SHA256 */ +#else + GIT_OID_SHA1 = 1 /**< SHA1 */ +#endif + +} git_oid_t; + +/* + * SHA1 is currently the only supported object ID type. + */ + +/** SHA1 is currently libgit2's default oid type. */ +#define GIT_OID_DEFAULT GIT_OID_SHA1 + +/** Size (in bytes) of a raw/binary sha1 oid */ +#define GIT_OID_SHA1_SIZE 20 +/** Size (in bytes) of a hex formatted sha1 oid */ +#define GIT_OID_SHA1_HEXSIZE (GIT_OID_SHA1_SIZE * 2) + +/** + * The binary representation of the null sha1 object ID. + */ +#ifndef GIT_EXPERIMENTAL_SHA256 +# define GIT_OID_SHA1_ZERO { { 0 } } +#else +# define GIT_OID_SHA1_ZERO { GIT_OID_SHA1, { 0 } } +#endif + +/** + * The string representation of the null sha1 object ID. + */ +#define GIT_OID_SHA1_HEXZERO "0000000000000000000000000000000000000000" + +/* + * Experimental SHA256 support is a breaking change to the API. + * This exists for application compatibility testing. + */ + +#ifdef GIT_EXPERIMENTAL_SHA256 + +/** Size (in bytes) of a raw/binary sha256 oid */ +# define GIT_OID_SHA256_SIZE 32 +/** Size (in bytes) of a hex formatted sha256 oid */ +# define GIT_OID_SHA256_HEXSIZE (GIT_OID_SHA256_SIZE * 2) + +/** + * The binary representation of the null sha256 object ID. + */ +# define GIT_OID_SHA256_ZERO { GIT_OID_SHA256, { 0 } } + +/** + * The string representation of the null sha256 object ID. + */ +# define GIT_OID_SHA256_HEXZERO "0000000000000000000000000000000000000000000000000000000000000000" + +#endif + +/** Maximum possible object ID size in raw format */ +#ifdef GIT_EXPERIMENTAL_SHA256 +# define GIT_OID_MAX_SIZE GIT_OID_SHA256_SIZE +#else +# define GIT_OID_MAX_SIZE GIT_OID_SHA1_SIZE +#endif + +/** Maximum possible object ID size in hex format */ +#ifdef GIT_EXPERIMENTAL_SHA256 +# define GIT_OID_MAX_HEXSIZE GIT_OID_SHA256_HEXSIZE +#else +# define GIT_OID_MAX_HEXSIZE GIT_OID_SHA1_HEXSIZE +#endif /** Minimum length (in number of hex characters, * i.e. packets of 4 bits) of an oid prefix */ @@ -31,23 +101,43 @@ GIT_BEGIN_DECL /** Unique identity of any object (commit, tree, blob, tag). */ typedef struct git_oid { + +#ifdef GIT_EXPERIMENTAL_SHA256 + /** type of object id */ + unsigned char type; +#endif + /** raw binary formatted id */ - unsigned char id[GIT_OID_RAWSZ]; + unsigned char id[GIT_OID_MAX_SIZE]; } git_oid; +#ifdef GIT_EXPERIMENTAL_SHA256 + +GIT_EXTERN(int) git_oid_fromstr(git_oid *out, const char *str, git_oid_t type); +GIT_EXTERN(int) git_oid_fromstrp(git_oid *out, const char *str, git_oid_t type); +GIT_EXTERN(int) git_oid_fromstrn(git_oid *out, const char *str, size_t length, git_oid_t type); +GIT_EXTERN(int) git_oid_fromraw(git_oid *out, const unsigned char *raw, git_oid_t type); + +#else + /** * Parse a hex formatted object id into a git_oid. * + * The appropriate number of bytes for the given object ID type will + * be read from the string - 40 bytes for SHA1, 64 bytes for SHA256. + * The given string need not be NUL terminated. + * * @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). + * needed for an oid encoded in hex (40 bytes for sha1, + * 256 bytes for sha256). * @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. + * Parse a hex formatted NUL-terminated string into a git_oid. * * @param out oid structure the result is written into. * @param str input hex string; must be null-terminated. @@ -77,14 +167,17 @@ GIT_EXTERN(int) git_oid_fromstrn(git_oid *out, const char *str, size_t length); */ GIT_EXTERN(int) git_oid_fromraw(git_oid *out, const unsigned char *raw); +#endif + /** * 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. + * needed for an oid encoded in hex (40 bytes for SHA1, + * 64 bytes for SHA256). 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 */ @@ -94,7 +187,7 @@ 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 + * If the number of bytes is > GIT_OID_SHA1_HEXSIZE, 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. @@ -110,9 +203,10 @@ GIT_EXTERN(int) git_oid_nfmt(char *out, size_t n, const git_oid *id); * * @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. + * needed for an oid encoded in hex (41 bytes for SHA1, + * 65 bytes for SHA256). 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 */ @@ -127,14 +221,16 @@ GIT_EXTERN(int) git_oid_pathfmt(char *out, const git_oid *id); * concurrent calls of the function. * * @param oid The oid structure to format - * @return the c-string + * @return the c-string or NULL on failure */ 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 + * If the buffer is smaller than the size of a hex-formatted oid string + * plus an additional byte (GIT_OID_SHA_HEXSIZE + 1 for SHA1 or + * GIT_OID_SHA256_HEXSIZE + 1 for SHA256), then the resulting * oid c-string will be truncated to n-1 characters (but will still be * NUL-byte terminated). * @@ -210,6 +306,7 @@ GIT_EXTERN(int) git_oid_strcmp(const git_oid *id, const char *str); /** * Check is an oid is all zeros. * + * @param id the object ID to check * @return 1 if all zeros, 0 otherwise. */ GIT_EXTERN(int) git_oid_is_zero(const git_oid *id); @@ -270,4 +367,5 @@ GIT_EXTERN(void) git_oid_shorten_free(git_oid_shorten *os); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/oidarray.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/oidarray.h index 94fc58d..e79a559 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/oidarray.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/oidarray.h @@ -10,6 +10,13 @@ #include "common.h" #include "oid.h" +/** + * @file git2/oidarray.h + * @brief An array of object IDs + * @defgroup git_oidarray Arrays of object IDs + * @ingroup Git + * @{ + */ GIT_BEGIN_DECL /** Array of object ids */ @@ -34,4 +41,3 @@ GIT_EXTERN(void) git_oidarray_dispose(git_oidarray *array); GIT_END_DECL #endif - diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/pack.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/pack.h index 3b9beb6..3837e04 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/pack.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/pack.h @@ -51,7 +51,7 @@ GIT_BEGIN_DECL */ typedef enum { GIT_PACKBUILDER_ADDING_OBJECTS = 0, - GIT_PACKBUILDER_DELTAFICATION = 1, + GIT_PACKBUILDER_DELTAFICATION = 1 } git_packbuilder_stage_t; /** @@ -148,6 +148,7 @@ GIT_EXTERN(int) git_packbuilder_insert_recur(git_packbuilder *pb, const git_oid * * @param buf Buffer where to write the packfile * @param pb The packbuilder + * @return 0 or an error code */ GIT_EXTERN(int) git_packbuilder_write_buf(git_buf *buf, git_packbuilder *pb); @@ -169,15 +170,30 @@ GIT_EXTERN(int) git_packbuilder_write( git_indexer_progress_cb progress_cb, void *progress_cb_payload); +#ifndef GIT_DEPRECATE_HARD /** -* 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 -*/ + * 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. + * + * @deprecated use git_packbuilder_name + * @param pb The packbuilder object + * @return 0 or an error code + */ GIT_EXTERN(const git_oid *) git_packbuilder_hash(git_packbuilder *pb); +#endif + +/** + * Get the unique name for the resulting packfile. + * + * The packfile's name is derived from the packfile's content. + * This is only correct after the packfile has been written. + * + * @param pb the packbuilder instance + * @return a NUL terminated string for the packfile name + */ +GIT_EXTERN(const char *) git_packbuilder_name(git_packbuilder *pb); /** * Callback used to iterate over packed objects @@ -217,7 +233,15 @@ GIT_EXTERN(size_t) git_packbuilder_object_count(git_packbuilder *pb); */ GIT_EXTERN(size_t) git_packbuilder_written(git_packbuilder *pb); -/** Packbuilder progress notification function */ +/** + * Packbuilder progress notification function. + * + * @param stage the stage of the packbuilder + * @param current the current object + * @param total the total number of objects + * @param payload the callback payload + * @return 0 on success or an error code + */ typedef int GIT_CALLBACK(git_packbuilder_progress)( int stage, uint32_t current, @@ -231,6 +255,9 @@ typedef int GIT_CALLBACK(git_packbuilder_progress)( * @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. + * When progress_cb returns an error, the pack building process will be + * aborted and the error will be returned from the invoked function. + * `pb` must then be freed. * @param progress_cb_payload Payload for progress callback. * @return 0 or an error code */ @@ -248,4 +275,5 @@ GIT_EXTERN(void) git_packbuilder_free(git_packbuilder *pb); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/patch.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/patch.h index fde9659..7824821 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/patch.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/patch.h @@ -14,7 +14,7 @@ /** * @file git2/patch.h - * @brief Patch handling routines. + * @brief Patches store the textual diffs in a delta * @ingroup Git * @{ */ @@ -139,17 +139,25 @@ GIT_EXTERN(int) git_patch_from_buffers( /** * Free a git_patch object. + * + * @param patch The patch to free. */ 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. + * + * @param patch The patch in which to get the delta. + * @return The delta associated with the patch. */ GIT_EXTERN(const git_diff_delta *) git_patch_get_delta(const git_patch *patch); /** * Get the number of hunks in a patch + * + * @param patch The patch in which to get the number of hunks. + * @return The number of hunks of the patch. */ GIT_EXTERN(size_t) git_patch_num_hunks(const git_patch *patch); @@ -275,8 +283,7 @@ GIT_EXTERN(int) git_patch_to_buf( git_buf *out, git_patch *patch); -GIT_END_DECL - /**@}*/ +GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/pathspec.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/pathspec.h index 3299657..6f6918c 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/pathspec.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/pathspec.h @@ -12,6 +12,13 @@ #include "strarray.h" #include "diff.h" +/** + * @file git2/pathspec.h + * @brief Specifiers for path matching + * @defgroup git_pathspec Specifiers for path matching + * @ingroup Git + * @{ + */ GIT_BEGIN_DECL /** @@ -69,7 +76,7 @@ typedef enum { * 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_FAILURES_ONLY = (1u << 5) } git_pathspec_flag_t; /** @@ -276,5 +283,7 @@ GIT_EXTERN(size_t) git_pathspec_match_list_failed_entrycount( 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/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/proxy.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/proxy.h index 653425d..195ab75 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/proxy.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/proxy.h @@ -12,6 +12,12 @@ #include "cert.h" #include "credential.h" +/** + * @file git2/proxy.h + * @brief TLS proxies + * @ingroup Git + * @{ + */ GIT_BEGIN_DECL /** @@ -32,7 +38,7 @@ typedef enum { /** * Connect via the URL given in the options */ - GIT_PROXY_SPECIFIED, + GIT_PROXY_SPECIFIED } git_proxy_t; /** @@ -78,7 +84,10 @@ typedef struct { void *payload; } git_proxy_options; +/** Current version for the `git_proxy_options` structure */ #define GIT_PROXY_OPTIONS_VERSION 1 + +/** Static constructor for `git_proxy_options` */ #define GIT_PROXY_OPTIONS_INIT {GIT_PROXY_OPTIONS_VERSION} /** @@ -93,6 +102,7 @@ typedef struct { */ GIT_EXTERN(int) git_proxy_options_init(git_proxy_options *opts, unsigned int version); +/** @} */ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/rebase.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/rebase.h index 11e452c..3fb3e57 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/rebase.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/rebase.h @@ -17,8 +17,8 @@ /** * @file git2/rebase.h - * @brief Git rebase routines - * @defgroup git_rebase Git merge routines + * @brief Rebase manipulates commits, placing them on a new parent + * @defgroup git_rebase Rebase manipulates commits, placing them on a new parent * @ingroup Git * @{ */ @@ -67,10 +67,9 @@ typedef struct { /** * 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_rebase_next` and `git_rebase_abort`. Note that during + * `abort`, these options will add an implied `GIT_CHECKOUT_FORCE` + * to match git semantics. */ git_checkout_options checkout_options; @@ -152,10 +151,13 @@ typedef enum { * No commit will be cherry-picked. The client should run the given * command and (if successful) continue. */ - GIT_REBASE_OPERATION_EXEC, + GIT_REBASE_OPERATION_EXEC } git_rebase_operation_t; +/** Current version for the `git_rebase_options` structure */ #define GIT_REBASE_OPTIONS_VERSION 1 + +/** Static constructor for `git_rebase_options` */ #define GIT_REBASE_OPTIONS_INIT \ { GIT_REBASE_OPTIONS_VERSION, 0, 0, NULL, GIT_MERGE_OPTIONS_INIT, \ GIT_CHECKOUT_OPTIONS_INIT, NULL, NULL } @@ -242,6 +244,7 @@ GIT_EXTERN(int) git_rebase_open( /** * Gets the original `HEAD` ref name for merge rebases. * + * @param rebase The in-progress rebase. * @return The original `HEAD` ref name */ GIT_EXTERN(const char *) git_rebase_orig_head_name(git_rebase *rebase); @@ -249,6 +252,7 @@ GIT_EXTERN(const char *) git_rebase_orig_head_name(git_rebase *rebase); /** * Gets the original `HEAD` id for merge rebases. * + * @param rebase The in-progress rebase. * @return The original `HEAD` id */ GIT_EXTERN(const git_oid *) git_rebase_orig_head_id(git_rebase *rebase); @@ -256,6 +260,7 @@ GIT_EXTERN(const git_oid *) git_rebase_orig_head_id(git_rebase *rebase); /** * Gets the `onto` ref name for merge rebases. * + * @param rebase The in-progress rebase. * @return The `onto` ref name */ GIT_EXTERN(const char *) git_rebase_onto_name(git_rebase *rebase); @@ -263,6 +268,7 @@ GIT_EXTERN(const char *) git_rebase_onto_name(git_rebase *rebase); /** * Gets the `onto` id for merge rebases. * + * @param rebase The in-progress rebase. * @return The `onto` id */ GIT_EXTERN(const git_oid *) git_rebase_onto_id(git_rebase *rebase); @@ -322,6 +328,10 @@ GIT_EXTERN(int) git_rebase_next( * This is only applicable for in-memory rebases; for rebases within * a working directory, the changes were applied to the repository's * index. + * + * @param index The result index of the last operation. + * @param rebase The in-progress rebase. + * @return 0 or an error code */ GIT_EXTERN(int) git_rebase_inmemory_index( git_index **index, @@ -388,4 +398,5 @@ GIT_EXTERN(void) git_rebase_free(git_rebase *rebase); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/refdb.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/refdb.h index a315876..536ef10 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/refdb.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/refdb.h @@ -14,8 +14,8 @@ /** * @file git2/refdb.h - * @brief Git custom refs backend functions - * @defgroup git_refdb Git custom refs backend API + * @brief A database for references (branches and tags) + * @defgroup git_refdb A database for references (branches and tags) * @ingroup Git * @{ */ @@ -52,6 +52,9 @@ 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. + * + * @param refdb The reference database to optimize. + * @return 0 or an error code. */ GIT_EXTERN(int) git_refdb_compress(git_refdb *refdb); diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/reflog.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/reflog.h index c949a28..a0956c6 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/reflog.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/reflog.h @@ -13,8 +13,8 @@ /** * @file git2/reflog.h - * @brief Git reflog management routines - * @defgroup git_reflog Git reflog management routines + * @brief Reference logs store how references change + * @defgroup git_reflog Reference logs store how references change * @ingroup Git * @{ */ @@ -31,7 +31,7 @@ GIT_BEGIN_DECL * git_reflog_free(). * * @param out pointer to reflog - * @param repo the repostiory + * @param repo the repository * @param name reference to look up * @return 0 or an error code */ @@ -167,4 +167,5 @@ GIT_EXTERN(void) git_reflog_free(git_reflog *reflog); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/refs.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/refs.h index 7ebb209..d820f2a 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/refs.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/refs.h @@ -14,8 +14,8 @@ /** * @file git2/refs.h - * @brief Git reference management routines - * @defgroup git_reference Git reference management routines + * @brief References point to a commit; generally these are branches and tags + * @defgroup git_reference References point to a commit; generally these are branches and tags * @ingroup Git * @{ */ @@ -29,7 +29,7 @@ GIT_BEGIN_DECL * 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[out] 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. @@ -57,7 +57,7 @@ GIT_EXTERN(int) git_reference_name_to_id( /** * Lookup a reference by DWIMing its short name * - * Apply the git precendence rules to the given shorthand to determine + * Apply the git precedence rules to the given shorthand to determine * which reference the user is referring to. * * @param out pointer in which to store the reference @@ -371,6 +371,7 @@ GIT_EXTERN(int) git_reference_set_target( * reflog is enabled for the repository. We only rename * the reflog if it exists. * + * @param[out] new_ref The new reference * @param ref The reference to rename * @param new_name The new name for the reference * @param force Overwrite an existing reference @@ -406,6 +407,7 @@ GIT_EXTERN(int) git_reference_delete(git_reference *ref); * This method removes the named reference from the repository without * looking at its old value. * + * @param repo The repository to remove the reference from * @param name The reference to remove * @return 0 or an error code */ @@ -518,7 +520,7 @@ GIT_EXTERN(int) git_reference_cmp( /** * Create an iterator for the repo's references * - * @param out pointer in which to store the iterator + * @param[out] out pointer in which to store the iterator * @param repo the repository * @return 0 or an error code */ @@ -543,7 +545,7 @@ GIT_EXTERN(int) git_reference_iterator_glob_new( /** * Get the next reference * - * @param out pointer in which to store the reference + * @param[out] 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 */ @@ -686,7 +688,7 @@ typedef enum { * so the `ONELEVEL` naming rules aren't enforced and 'master' * becomes a valid name. */ - GIT_REFERENCE_FORMAT_REFSPEC_SHORTHAND = (1u << 2), + GIT_REFERENCE_FORMAT_REFSPEC_SHORTHAND = (1u << 2) } git_reference_format_t; /** @@ -724,7 +726,7 @@ GIT_EXTERN(int) git_reference_normalize_name( * 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[out] 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). @@ -768,4 +770,5 @@ GIT_EXTERN(const char *) git_reference_shorthand(const git_reference *ref); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/refspec.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/refspec.h index eaf7747..49d5f89 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/refspec.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/refspec.h @@ -14,8 +14,8 @@ /** * @file git2/refspec.h - * @brief Git refspec attributes - * @defgroup git_refspec Git refspec attributes + * @brief Refspecs map local references to remote references + * @defgroup git_refspec Refspecs map local references to remote references * @ingroup Git * @{ */ @@ -58,7 +58,7 @@ 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 + * @return the refspec's original string */ GIT_EXTERN(const char *) git_refspec_string(const git_refspec *refspec); @@ -79,7 +79,16 @@ GIT_EXTERN(int) git_refspec_force(const git_refspec *refspec); GIT_EXTERN(git_direction) git_refspec_direction(const git_refspec *spec); /** - * Check if a refspec's source descriptor matches a reference + * Check if a refspec's source descriptor matches a negative 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_negative(const git_refspec *refspec, const char *refname); + +/** + * Check if a refspec's source descriptor matches a reference * * @param refspec the refspec * @param refname the name of the reference to check @@ -116,6 +125,7 @@ GIT_EXTERN(int) git_refspec_transform(git_buf *out, const git_refspec *spec, con */ GIT_EXTERN(int) git_refspec_rtransform(git_buf *out, const git_refspec *spec, const char *name); +/** @} */ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/remote.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/remote.h index 4d57eaa..2472ded 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/remote.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/remote.h @@ -19,8 +19,8 @@ /** * @file git2/remote.h - * @brief Git remote management functions - * @defgroup git_remote remote management functions + * @brief Remotes are where local repositories fetch from and push to + * @defgroup git_remote Remotes are where local repositories fetch from and push to * @ingroup Git * @{ */ @@ -41,6 +41,30 @@ GIT_EXTERN(int) git_remote_create( const char *name, const char *url); +/** + * Remote redirection settings; whether redirects to another host + * are permitted. By default, git will follow a redirect on the + * initial request (`/info/refs`), but not subsequent requests. + */ +typedef enum { + /** + * Do not follow any off-site redirects at any stage of + * the fetch or push. + */ + GIT_REMOTE_REDIRECT_NONE = (1 << 0), + + /** + * Allow off-site redirects only upon the initial request. + * This is the default. + */ + GIT_REMOTE_REDIRECT_INITIAL = (1 << 1), + + /** + * Allow redirects at any stage in the fetch or push. + */ + GIT_REMOTE_REDIRECT_ALL = (1 << 2) +} git_remote_redirect_t; + /** * Remote creation options flags */ @@ -49,9 +73,20 @@ typedef enum { 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_SKIP_DEFAULT_FETCHSPEC = (1 << 1) } git_remote_create_flags; +/** + * How to handle reference updates. + */ +typedef enum { + /* Write the fetch results to FETCH_HEAD. */ + GIT_REMOTE_UPDATE_FETCHHEAD = (1 << 0), + + /* Report unchanged tips in the update_refs callback. */ + GIT_REMOTE_UPDATE_REPORT_UNCHANGED = (1 << 1) +} git_remote_update_flags; + /** * Remote creation options structure * @@ -81,7 +116,10 @@ typedef struct git_remote_create_options { unsigned int flags; } git_remote_create_options; +/** Current version for the `git_remote_create_options` structure */ #define GIT_REMOTE_CREATE_OPTIONS_VERSION 1 + +/** Static constructor for `git_remote_create_options` */ #define GIT_REMOTE_CREATE_OPTIONS_INIT {GIT_REMOTE_CREATE_OPTIONS_VERSION} /** @@ -211,9 +249,9 @@ 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. + * If url.*.insteadOf has been configured for this URL, it will return + * the modified URL. This function does not consider if a push url has + * been configured for this remote (use `git_remote_pushurl` if needed). * * @param remote the remote * @return a pointer to the url @@ -300,6 +338,7 @@ GIT_EXTERN(int) git_remote_add_fetch(git_repository *repo, const char *remote, c * * @param array pointer to the array in which to store the strings * @param remote the remote to query + * @return 0 or an error code. */ GIT_EXTERN(int) git_remote_get_fetch_refspecs(git_strarray *array, const git_remote *remote); @@ -324,6 +363,7 @@ GIT_EXTERN(int) git_remote_add_push(git_repository *repo, const char *remote, co * * @param array pointer to the array in which to store the strings * @param remote the remote to query + * @return 0 or an error code. */ GIT_EXTERN(int) git_remote_get_push_refspecs(git_strarray *array, const git_remote *remote); @@ -344,23 +384,6 @@ GIT_EXTERN(size_t) git_remote_refspec_count(const git_remote *remote); */ 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 * @@ -443,10 +466,18 @@ GIT_EXTERN(int) git_remote_list(git_strarray *out, git_repository *repo); typedef enum git_remote_completion_t { GIT_REMOTE_COMPLETION_DOWNLOAD, GIT_REMOTE_COMPLETION_INDEXING, - GIT_REMOTE_COMPLETION_ERROR, + GIT_REMOTE_COMPLETION_ERROR } git_remote_completion_t; -/** Push network progress notification function */ +/** + * Push network progress notification callback. + * + * @param current The number of objects pushed so far + * @param total The total number of objects to push + * @param bytes The number of bytes pushed + * @param payload The user-specified payload callback + * @return 0 or an error code to stop the transfer + */ typedef int GIT_CALLBACK(git_push_transfer_progress_cb)( unsigned int current, unsigned int total, @@ -482,8 +513,12 @@ typedef struct { * as commands to the destination. * @param len number of elements in `updates` * @param payload Payload provided by the caller + * @return 0 or an error code to stop the push */ -typedef int GIT_CALLBACK(git_push_negotiation)(const git_push_update **updates, size_t len, void *payload); +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. @@ -548,7 +583,8 @@ struct git_remote_callbacks { * 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); + int GIT_CALLBACK(completion)(git_remote_completion_t type, + void *data); /** * This will be called if the remote host requires @@ -574,11 +610,22 @@ struct git_remote_callbacks { */ git_indexer_progress_cb transfer_progress; +#ifdef GIT_DEPRECATE_HARD + void *reserved_update_tips; +#else /** - * Each time a reference is updated locally, this function - * will be called with information about it. + * Deprecated callback for reference updates, callers should + * set `update_refs` instead. This is retained for backward + * compatibility; if you specify both `update_refs` and + * `update_tips`, then only the `update_refs` function will + * be called. + * + * @deprecated the `update_refs` callback in this structure + * should be preferred */ - int GIT_CALLBACK(update_tips)(const char *refname, const git_oid *a, const git_oid *b, void *data); + int GIT_CALLBACK(update_tips)(const char *refname, + const git_oid *a, const git_oid *b, void *data); +#endif /** * Function to call with progress information during pack @@ -635,9 +682,25 @@ struct git_remote_callbacks { */ git_url_resolve_cb resolve_url; #endif + + /** + * Each time a reference is updated locally, this function + * will be called with information about it. This should be + * preferred over the `update_tips` callback in this + * structure. + */ + int GIT_CALLBACK(update_refs)( + const char *refname, + const git_oid *a, + const git_oid *b, + git_refspec *spec, + void *data); }; +/** Current version for the `git_remote_callbacks_options` structure */ #define GIT_REMOTE_CALLBACKS_VERSION 1 + +/** Static constructor for `git_remote_callbacks_options` */ #define GIT_REMOTE_CALLBACKS_INIT {GIT_REMOTE_CALLBACKS_VERSION} /** @@ -665,7 +728,7 @@ typedef enum { /** * Force pruning off */ - GIT_FETCH_NO_PRUNE, + GIT_FETCH_NO_PRUNE } git_fetch_prune_t; /** @@ -690,9 +753,18 @@ typedef enum { /** * Ask for the all the tags. */ - GIT_REMOTE_DOWNLOAD_TAGS_ALL, + GIT_REMOTE_DOWNLOAD_TAGS_ALL } git_remote_autotag_option_t; +/** Constants for fetch depth (shallowness of fetch). */ +typedef enum { + /** The fetch is "full" (not shallow). This is the default. */ + GIT_FETCH_DEPTH_FULL = 0, + + /** The fetch should "unshallow" and fetch missing data. */ + GIT_FETCH_DEPTH_UNSHALLOW = 2147483647 +} git_fetch_depth_t; + /** * Fetch options structure. * @@ -715,10 +787,9 @@ typedef struct { 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. + * How to handle reference updates; see `git_remote_update_flags`. */ - int update_fetchhead; + unsigned int update_fetchhead; /** * Determines how to behave regarding tags on the remote, such @@ -734,15 +805,39 @@ typedef struct { */ git_proxy_options proxy_opts; + /** + * Depth of the fetch to perform, or `GIT_FETCH_DEPTH_FULL` + * (or `0`) for full history, or `GIT_FETCH_DEPTH_UNSHALLOW` + * to "unshallow" a shallow repository. + * + * The default is full (`GIT_FETCH_DEPTH_FULL` or `0`). + */ + int depth; + + /** + * Whether to allow off-site redirects. If this is not + * specified, the `http.followRedirects` configuration setting + * will be consulted. + */ + git_remote_redirect_t follow_redirects; + /** * Extra headers for this fetch operation */ git_strarray custom_headers; } git_fetch_options; +/** Current version for the `git_fetch_options` structure */ #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 } + +/** Static constructor for `git_fetch_options` */ +#define GIT_FETCH_OPTIONS_INIT { \ + GIT_FETCH_OPTIONS_VERSION, \ + GIT_REMOTE_CALLBACKS_INIT, \ + GIT_FETCH_PRUNE_UNSPECIFIED, \ + GIT_REMOTE_UPDATE_FETCHHEAD, \ + GIT_REMOTE_DOWNLOAD_TAGS_UNSPECIFIED, \ + GIT_PROXY_OPTIONS_INIT } /** * Initialize git_fetch_options structure @@ -785,13 +880,28 @@ typedef struct { */ git_proxy_options proxy_opts; + /** + * Whether to allow off-site redirects. If this is not + * specified, the `http.followRedirects` configuration setting + * will be consulted. + */ + git_remote_redirect_t follow_redirects; + /** * Extra headers for this push operation */ git_strarray custom_headers; + + /** + * "Push options" to deliver to the remote. + */ + git_strarray remote_push_options; } git_push_options; +/** Current version for the `git_push_options` structure */ #define GIT_PUSH_OPTIONS_VERSION 1 + +/** Static constructor for `git_push_options` */ #define GIT_PUSH_OPTIONS_INIT { GIT_PUSH_OPTIONS_VERSION, 1, GIT_REMOTE_CALLBACKS_INIT, GIT_PROXY_OPTIONS_INIT } /** @@ -809,7 +919,103 @@ GIT_EXTERN(int) git_push_options_init( unsigned int version); /** - * Download and index the packfile + * Remote creation options structure + * + * Initialize with `GIT_REMOTE_CREATE_OPTIONS_INIT`. Alternatively, you can + * use `git_remote_create_options_init`. + * + */ +typedef struct { + unsigned int version; + + /** Callbacks to use for this connection */ + git_remote_callbacks callbacks; + + /** HTTP Proxy settings */ + git_proxy_options proxy_opts; + + /** + * Whether to allow off-site redirects. If this is not + * specified, the `http.followRedirects` configuration setting + * will be consulted. + */ + git_remote_redirect_t follow_redirects; + + /** Extra HTTP headers to use in this connection */ + git_strarray custom_headers; +} git_remote_connect_options; + +/** Current version for the `git_remote_connect_options` structure */ +#define GIT_REMOTE_CONNECT_OPTIONS_VERSION 1 + +/** Static constructor for `git_remote_connect_options` */ +#define GIT_REMOTE_CONNECT_OPTIONS_INIT { \ + GIT_REMOTE_CONNECT_OPTIONS_VERSION, \ + GIT_REMOTE_CALLBACKS_INIT, \ + GIT_PROXY_OPTIONS_INIT } + +/** + * Initialize git_remote_connect_options structure. + * + * Initializes a `git_remote_connect_options` with default values. + * Equivalent to creating an instance with + * `GIT_REMOTE_CONNECT_OPTIONS_INIT`. + * + * @param opts The `git_remote_connect_options` struct to initialize. + * @param version The struct version; pass `GIT_REMOTE_CONNECT_OPTIONS_VERSION`. + * @return Zero on success; -1 on failure. + */ +GIT_EXTERN(int) git_remote_connect_options_init( + git_remote_connect_options *opts, + unsigned int version); + +/** + * 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 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); + +/** + * Open a connection to a remote with extended options. + * + * The transport is selected based on the URL; the direction argument + * is due to a limitation of the git protocol which starts up a + * specific binary which can only do the one or the other. + * + * The given options structure will form the defaults for connection + * options and callback setup. Callers may override these defaults + * by specifying `git_fetch_options` or `git_push_options` in + * subsequent calls. + * + * @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 opts the remote connection options + * @return 0 or an error code + */ +GIT_EXTERN(int) git_remote_connect_ext( + git_remote *remote, + git_direction direction, + const git_remote_connect_options *opts); + +/** + * 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 @@ -818,19 +1024,31 @@ GIT_EXTERN(int) git_push_options_init( * The .idx file will be created and both it and the packfile with be * renamed to their final name. * + * If options are specified and this remote is already connected then + * the existing remote connection options will be discarded and the + * remote will now use the new options. + * * @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 + * @param opts the options to use for this fetch or NULL * @return 0 or an error code */ - GIT_EXTERN(int) git_remote_download(git_remote *remote, const git_strarray *refspecs, const git_fetch_options *opts); + 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. + * the remote git which objects are missing, create a packfile with + * the missing objects and send it. + * + * If options are specified and this remote is already connected then + * the existing remote connection options will be discarded and the + * remote will now use the new options. * * @param remote the remote * @param refspecs the refspecs to use for this negotiation and @@ -838,39 +1056,49 @@ GIT_EXTERN(int) git_push_options_init( * @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); +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 + * Update the tips to the new state. + * + * If callbacks are not specified then the callbacks specified to + * `git_remote_connect` will be used (if it was called). * * @param remote the remote to update + * @param callbacks pointer to the callback structure to use or NULL + * @param update_flags the git_remote_update_flags for these tips. + * @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()`. * @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, + unsigned int update_flags, git_remote_autotag_option_t download_tags, const char *reflog_message); /** - * Download new data and update tips + * Download new data and update tips. * * Convenience function to connect to a remote, download the data, * disconnect and update the remote-tracking branches. * + * If options are specified and this remote is already connected then + * the existing remote connection options will be discarded and the + * remote will now use the new options. + * * @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 opts options to use for this fetch or NULL * @param reflog_message The message to insert into the reflogs. If NULL, the * default is "fetch" * @return 0 or an error code @@ -882,30 +1110,42 @@ GIT_EXTERN(int) git_remote_fetch( const char *reflog_message); /** - * Prune tracking refs that are no longer present on remote + * Prune tracking refs that are no longer present on remote. + * + * If callbacks are not specified then the callbacks specified to + * `git_remote_connect` will be used (if it was called). * * @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); +GIT_EXTERN(int) git_remote_prune( + git_remote *remote, + const git_remote_callbacks *callbacks); /** - * Perform a push + * Perform a push. * - * Peform all the steps from a push. + * If options are specified and this remote is already connected then + * the existing remote connection options will be discarded and the + * remote will now use the new options. * * @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 + * @return 0 or an error code. */ -GIT_EXTERN(int) git_remote_push(git_remote *remote, - const git_strarray *refspecs, - const git_push_options *opts); +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. + * + * @param remote the remote to get statistics for + * @return the git_indexer_progress for the remote */ GIT_EXTERN(const git_indexer_progress *) git_remote_stats(git_remote *remote); @@ -1005,4 +1245,5 @@ GIT_EXTERN(int) git_remote_default_branch(git_buf *out, git_remote *remote); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/repository.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/repository.h index 8d1cffc..b203576 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/repository.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/repository.h @@ -10,12 +10,14 @@ #include "common.h" #include "types.h" #include "oid.h" +#include "odb.h" #include "buffer.h" +#include "commit.h" /** * @file git2/repository.h - * @brief Git repository management routines - * @defgroup git_repository Git repository management routines + * @brief The repository stores revisions for a source tree + * @defgroup git_repository The repository stores revisions for a source tree * @ingroup Git * @{ */ @@ -30,7 +32,11 @@ GIT_BEGIN_DECL * 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 + * Note that the libgit2 library _must_ be initialized using + * `git_libgit2_init` before any APIs can be called, including + * this one. + * + * @param[out] out pointer to the repo which will be opened * @param path the path to the repository * @return 0 or an error code */ @@ -58,7 +64,9 @@ GIT_EXTERN(int) git_repository_open_from_worktree(git_repository **out, git_work * @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); +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. @@ -70,6 +78,10 @@ GIT_EXTERN(int) git_repository_wrap_odb(git_repository **out, git_odb *odb); * The method will automatically detect if the repository is bare * (if there is a repository). * + * Note that the libgit2 library _must_ be initialized using + * `git_libgit2_init` before any APIs can be called, including + * this one. + * * @param out A pointer to a user-allocated git_buf which will contain * the found path. * @@ -141,13 +153,17 @@ typedef enum { * `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_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 + * Note that the libgit2 library _must_ be initialized using + * `git_libgit2_init` before any APIs can be called, including + * this one. + * + * @param[out] 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 @@ -175,7 +191,11 @@ GIT_EXTERN(int) git_repository_open_ext( * if you're e.g. hosting git repositories and need to access them * efficiently * - * @param out Pointer to the repo which will be opened. + * Note that the libgit2 library _must_ be initialized using + * `git_libgit2_init` before any APIs can be called, including + * this one. + * + * @param[out] 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 */ @@ -200,7 +220,11 @@ GIT_EXTERN(void) git_repository_free(git_repository *repo); * TODO: * - Reinit the repository * - * @param out pointer to the repo which will be created or reinitialized + * Note that the libgit2 library _must_ be initialized using + * `git_libgit2_init` before any APIs can be called, including + * this one. + * + * @param[out] 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 @@ -267,7 +291,7 @@ typedef enum { * 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_RELATIVE_GITLINK = (1u << 6) } git_repository_init_flag_t; /** @@ -292,7 +316,7 @@ typedef enum { /** * Use "--shared=all" behavior, adding world readability. */ - GIT_REPOSITORY_INIT_SHARED_ALL = 0002777, + GIT_REPOSITORY_INIT_SHARED_ALL = 0002777 } git_repository_init_mode_t; /** @@ -351,9 +375,21 @@ typedef struct { * pointing to this URL. */ const char *origin_url; + +#ifdef GIT_EXPERIMENTAL_SHA256 + /** + * + * Type of object IDs to use for this repository, or 0 for + * default (currently SHA1). + */ + git_oid_t oid_type; +#endif } git_repository_init_options; +/** Current version for the `git_repository_init_options` structure */ #define GIT_REPOSITORY_INIT_OPTIONS_VERSION 1 + +/** Static constructor for `git_repository_init_options` */ #define GIT_REPOSITORY_INIT_OPTIONS_INIT {GIT_REPOSITORY_INIT_OPTIONS_VERSION} /** @@ -378,6 +414,10 @@ GIT_EXTERN(int) git_repository_init_options_init( * auto-detect the case sensitivity of the file system and if the * file system supports file mode bits correctly. * + * Note that the libgit2 library _must_ be initialized using + * `git_libgit2_init` before any APIs can be called, including + * this one. + * * @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. @@ -395,7 +435,7 @@ GIT_EXTERN(int) git_repository_init_ext( * `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[out] 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 @@ -456,7 +496,9 @@ 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. + * apart from HEAD, which must be pointing to the unborn master branch, + * or the branch specified for the repository in the `init.defaultBranch` + * configuration variable. * * @param repo Repo to test * @return 1 if the repository is empty, 0 if it isn't, error code @@ -482,6 +524,7 @@ typedef enum { GIT_REPOSITORY_ITEM_LOGS, GIT_REPOSITORY_ITEM_MODULES, GIT_REPOSITORY_ITEM_WORKTREES, + GIT_REPOSITORY_ITEM_WORKTREE_CONFIG, GIT_REPOSITORY_ITEM__LAST } git_repository_item_t; @@ -525,7 +568,7 @@ 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. @@ -613,7 +656,7 @@ GIT_EXTERN(int) git_repository_config_snapshot(git_config **out, git_repository * The ODB must be freed once it's no longer being used by * the user. * - * @param out Pointer to store the loaded ODB + * @param[out] out Pointer to store the loaded ODB * @param repo A repository object * @return 0, or an error code */ @@ -629,7 +672,7 @@ GIT_EXTERN(int) git_repository_odb(git_odb **out, git_repository *repo); * The refdb must be freed once it's no longer being used by * the user. * - * @param out Pointer to store the loaded refdb + * @param[out] out Pointer to store the loaded refdb * @param repo A repository object * @return 0, or an error code */ @@ -645,7 +688,7 @@ GIT_EXTERN(int) git_repository_refdb(git_refdb **out, git_repository *repo); * The index must be freed once it's no longer being used by * the user. * - * @param out Pointer to store the loaded index + * @param[out] out Pointer to store the loaded index * @param repo A repository object * @return 0, or an error code */ @@ -673,6 +716,9 @@ 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. + * + * @param repo Repository to remove prepared message from. + * @return 0 or an error code. */ GIT_EXTERN(int) git_repository_message_remove(git_repository *repo); @@ -808,19 +854,19 @@ GIT_EXTERN(int) git_repository_set_head( * 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 + * If the provided committish 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 + * @param committish 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); + const git_oid *committish); /** * Make the repository HEAD directly point to the Commit. @@ -832,11 +878,13 @@ GIT_EXTERN(int) git_repository_set_head_detached( * * See the documentation for `git_repository_set_head_detached()`. * - * @see git_repository_set_head_detached + * @param repo Repository pointer + * @param committish annotated commit to point HEAD to + * @return 0 on success, or an error code */ GIT_EXTERN(int) git_repository_set_head_detached_from_annotated( git_repository *repo, - const git_annotated_commit *commitish); + const git_annotated_commit *committish); /** * Detach the HEAD. @@ -846,7 +894,7 @@ GIT_EXTERN(int) git_repository_set_head_detached_from_annotated( * 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 + * If the HEAD is already detached and points to a non committish, the HEAD is * unaltered, and -1 is returned. * * Otherwise, the HEAD will be detached and point to the peeled Commit. @@ -876,7 +924,7 @@ typedef enum { 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_APPLY_MAILBOX_OR_REBASE } git_repository_state_t; /** @@ -925,9 +973,10 @@ GIT_EXTERN(int) git_repository_is_shallow(git_repository *repo); * 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[out] name where to store the pointer to the name + * @param[out] email where to store the pointer to the email * @param repo the repository + * @return 0 or an error code */ GIT_EXTERN(int) git_repository_ident(const char **name, const char **email, const git_repository *repo); @@ -941,9 +990,30 @@ GIT_EXTERN(int) git_repository_ident(const char **name, const char **email, cons * @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 + * @return 0 or an error code. */ GIT_EXTERN(int) git_repository_set_ident(git_repository *repo, const char *name, const char *email); +/** + * Gets the object type used by this repository. + * + * @param repo the repository + * @return the object id type + */ +GIT_EXTERN(git_oid_t) git_repository_oid_type(git_repository *repo); + +/** + * Gets the parents of the next commit, given the current repository state. + * Generally, this is the HEAD commit, except when performing a merge, in + * which case it is two or more commits. + * + * @param commits a `git_commitarray` that will contain the commit parents + * @param repo the repository + * @return 0 or an error code + */ +GIT_EXTERN(int) git_repository_commit_parents(git_commitarray *commits, git_repository *repo); + /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/reset.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/reset.h index be25414..0123f7c 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/reset.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/reset.h @@ -14,7 +14,7 @@ /** * @file git2/reset.h - * @brief Git reset management routines + * @brief Reset will update the local repository to a prior state * @ingroup Git * @{ */ @@ -26,7 +26,7 @@ GIT_BEGIN_DECL 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_HARD = 3 /**< MIXED plus changes in working tree discarded */ } git_reset_t; /** @@ -48,7 +48,7 @@ typedef enum { * * @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 + * git_tag. When a git_tag is being passed, it should be dereferenceable * to a git_commit which oid will be used as the target of the branch. * * @param reset_type Kind of reset operation to perform. @@ -75,11 +75,23 @@ GIT_EXTERN(int) git_reset( * * See the documentation for `git_reset()`. * - * @see git_reset + * @param repo Repository where to perform the reset operation. + * + * @param target Annotated commit to which the Head should be moved to. + * This object must belong to the given `repo`, it will be dereferenced + * 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_from_annotated( git_repository *repo, - const git_annotated_commit *commit, + const git_annotated_commit *target, git_reset_t reset_type, const git_checkout_options *checkout_opts); @@ -108,4 +120,5 @@ GIT_EXTERN(int) git_reset_default( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/revert.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/revert.h index 331e90d..ec51eca 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/revert.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/revert.h @@ -13,8 +13,8 @@ /** * @file git2/revert.h - * @brief Git revert routines - * @defgroup git_revert Git revert routines + * @brief Cherry-pick the inverse of a change to "undo" its effects + * @defgroup git_revert Cherry-pick the inverse of a change to "undo" its effects * @ingroup Git * @{ */ @@ -33,8 +33,13 @@ typedef struct { git_checkout_options checkout_opts; /**< Options for the checkout */ } git_revert_options; +/** Current version for the `git_revert_options` structure */ #define GIT_REVERT_OPTIONS_VERSION 1 -#define GIT_REVERT_OPTIONS_INIT {GIT_REVERT_OPTIONS_VERSION, 0, GIT_MERGE_OPTIONS_INIT, GIT_CHECKOUT_OPTIONS_INIT} + +/** Static constructor for `git_revert_options` */ +#define GIT_REVERT_OPTIONS_INIT { \ + GIT_REVERT_OPTIONS_VERSION, 0, \ + GIT_MERGE_OPTIONS_INIT, GIT_CHECKOUT_OPTIONS_INIT } /** * Initialize git_revert_options structure @@ -87,5 +92,5 @@ GIT_EXTERN(int) git_revert( /** @} */ GIT_END_DECL -#endif +#endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/revparse.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/revparse.h index e14ddee..c14fe3d 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/revparse.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/revparse.h @@ -12,8 +12,8 @@ /** * @file git2/revparse.h - * @brief Git revision parsing routines - * @defgroup git_revparse Git revision parsing routines + * @brief Parse the textual revision information + * @defgroup git_revparse Parse the textual revision information * @ingroup Git * @{ */ @@ -74,7 +74,7 @@ typedef enum { /** 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_MERGE_BASE = 1 << 2 } git_revspec_t; /** @@ -107,7 +107,7 @@ GIT_EXTERN(int) git_revparse( git_repository *repo, const char *spec); - /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/revwalk.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/revwalk.h index 98dcbf8..7c4ac54 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/revwalk.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/revwalk.h @@ -13,8 +13,8 @@ /** * @file git2/revwalk.h - * @brief Git revision traversal routines - * @defgroup git_revwalk Git revision traversal routines + * @brief Traverse (walk) the commit graph (revision history) + * @defgroup git_revwalk Traverse (walk) the commit graph (revision history) * @ingroup Git * @{ */ @@ -49,7 +49,7 @@ typedef enum { * order; this sorting mode can be combined with * any of the above. */ - GIT_SORT_REVERSE = 1 << 2, + GIT_SORT_REVERSE = 1 << 2 } git_sort_t; /** @@ -249,6 +249,7 @@ GIT_EXTERN(int) git_revwalk_push_range(git_revwalk *walk, const char *range); * * No parents other than the first for each commit will be enqueued. * + * @param walk The revision walker. * @return 0 or an error code */ GIT_EXTERN(int) git_revwalk_simplify_first_parent(git_revwalk *walk); @@ -277,6 +278,7 @@ GIT_EXTERN(git_repository *) git_revwalk_repository(git_revwalk *walk); * * @param commit_id oid of Commit * @param payload User-specified pointer to data to be passed as data payload + * @return non-zero to hide the commmit and it parent. */ typedef int GIT_CALLBACK(git_revwalk_hide_cb)( const git_oid *commit_id, @@ -288,6 +290,7 @@ typedef int GIT_CALLBACK(git_revwalk_hide_cb)( * @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 + * @return 0 or an error code. */ GIT_EXTERN(int) git_revwalk_add_hide_cb( git_revwalk *walk, @@ -296,4 +299,5 @@ GIT_EXTERN(int) git_revwalk_add_hide_cb( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/signature.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/signature.h index b14f3ea..20ec24b 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/signature.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/signature.h @@ -12,9 +12,13 @@ /** * @file git2/signature.h - * @brief Git signature creation + * @brief Signatures are the actor in a repository and when they acted * @defgroup git_signature Git signature creation * @ingroup Git + * + * Signatures contain the information about the actor (committer or + * author) in a repository, and the time that they performed the + * commit, or authoring. * @{ */ GIT_BEGIN_DECL @@ -48,6 +52,42 @@ GIT_EXTERN(int) git_signature_new(git_signature **out, const char *name, const c */ GIT_EXTERN(int) git_signature_now(git_signature **out, const char *name, const char *email); +/** + * Create a new author and/or committer signatures with default + * information based on the configuration and environment variables. + * + * If `author_out` is set, it will be populated with the author + * information. The `GIT_AUTHOR_NAME` and `GIT_AUTHOR_EMAIL` + * environment variables will be honored, and `user.name` and + * `user.email` configuration options will be honored if the + * environment variables are unset. For timestamps, `GIT_AUTHOR_DATE` + * will be used, otherwise the current time will be used. + * + * If `committer_out` is set, it will be populated with the + * committer information. The `GIT_COMMITTER_NAME` and + * `GIT_COMMITTER_EMAIL` environment variables will be honored, + * and `user.name` and `user.email` configuration options will + * be honored if the environment variables are unset. For timestamps, + * `GIT_COMMITTER_DATE` will be used, otherwise the current time will + * be used. + * + * If neither `GIT_AUTHOR_DATE` nor `GIT_COMMITTER_DATE` are set, + * both timestamps will be set to the same time. + * + * It will return `GIT_ENOTFOUND` if either the `user.name` or + * `user.email` are not set and there is no fallback from an environment + * variable. One of `author_out` or `committer_out` must be set. + * + * @param author_out pointer to set the author signature, or NULL + * @param committer_out pointer to set the committer signature, or NULL + * @param repo repository pointer + * @return 0 on success, GIT_ENOTFOUND if config is missing, or error code + */ +GIT_EXTERN(int) git_signature_default_from_env( + git_signature **author_out, + git_signature **committer_out, + git_repository *repo); + /** * Create a new action signature with default user and now timestamp. * @@ -56,6 +96,10 @@ GIT_EXTERN(int) git_signature_now(git_signature **out, const char *name, const c * based on that information. It will return GIT_ENOTFOUND if either the * user.name or user.email are not set. * + * Note that these do not examine environment variables, only the + * configuration files. Use `git_signature_default_from_env` to + * consider the environment variables. + * * @param out new signature * @param repo repository pointer * @return 0 on success, GIT_ENOTFOUND if config is missing, or error code @@ -71,7 +115,7 @@ GIT_EXTERN(int) git_signature_default(git_signature **out, git_repository *repo) * * @param out new signature * @param buf signature string - * @return 0 on success, or an error code + * @return 0 on success, GIT_EINVALID if the signature is not parseable, or an error code */ GIT_EXTERN(int) git_signature_from_buffer(git_signature **out, const char *buf); @@ -100,4 +144,5 @@ GIT_EXTERN(void) git_signature_free(git_signature *sig); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/stash.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/stash.h index 795920e..ad28c32 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/stash.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/stash.h @@ -13,8 +13,13 @@ /** * @file git2/stash.h - * @brief Git stash management routines + * @brief Stashes stores some uncommitted state in the repository * @ingroup Git + * + * Stashes stores some uncommitted state in the repository; generally + * this allows a user to stash some changes so that they can restore + * the working directory to an unmodified state. This can allow a + * developer to work on two different changes in parallel. * @{ */ GIT_BEGIN_DECL @@ -45,6 +50,11 @@ typedef enum { * the working directory */ GIT_STASH_INCLUDE_IGNORED = (1 << 2), + + /** + * All changes in the index and working directory are left intact + */ + GIT_STASH_KEEP_ALL = (1 << 3) } git_stash_flags; /** @@ -52,15 +62,10 @@ typedef enum { * * @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. */ @@ -71,6 +76,63 @@ GIT_EXTERN(int) git_stash_save( const char *message, uint32_t flags); +/** + * Stash save options structure + * + * Initialize with `GIT_STASH_SAVE_OPTIONS_INIT`. Alternatively, you can + * use `git_stash_save_options_init`. + * + */ +typedef struct git_stash_save_options { + unsigned int version; + + /** Flags to control the stashing process. (see GIT_STASH_* above) */ + uint32_t flags; + + /** The identity of the person performing the stashing. */ + const git_signature *stasher; + + /** Optional description along with the stashed state. */ + const char *message; + + /** Optional paths that control which files are stashed. */ + git_strarray paths; +} git_stash_save_options; + +/** Current version for the `git_stash_save_options` structure */ +#define GIT_STASH_SAVE_OPTIONS_VERSION 1 + +/** Static constructor for `git_stash_save_options` */ +#define GIT_STASH_SAVE_OPTIONS_INIT { GIT_STASH_SAVE_OPTIONS_VERSION } + +/** + * Initialize git_stash_save_options structure + * + * Initializes a `git_stash_save_options` with default values. Equivalent to + * creating an instance with `GIT_STASH_SAVE_OPTIONS_INIT`. + * + * @param opts The `git_stash_save_options` struct to initialize. + * @param version The struct version; pass `GIT_STASH_SAVE_OPTIONS_VERSION`. + * @return Zero on success; -1 on failure. + */ +GIT_EXTERN(int) git_stash_save_options_init( + git_stash_save_options *opts, unsigned int version); + +/** + * Save the local modifications to a new stash, with options. + * + * @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 opts The stash options. + * @return 0 on success, GIT_ENOTFOUND where there's nothing to stash, + * or error code. + */ +GIT_EXTERN(int) git_stash_save_with_opts( + git_oid *out, + git_repository *repo, + const git_stash_save_options *opts); + /** Stash application flags. */ typedef enum { GIT_STASH_APPLY_DEFAULT = 0, @@ -78,7 +140,7 @@ typedef enum { /* 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_REINSTATE_INDEX = (1 << 0) } git_stash_apply_flags; /** Stash apply progression states */ @@ -104,13 +166,17 @@ typedef enum { GIT_STASH_APPLY_PROGRESS_CHECKOUT_MODIFIED, /** The stash was applied successfully. */ - GIT_STASH_APPLY_PROGRESS_DONE, + 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. + * + * @param progress the progress information + * @param payload the user-specified payload to the apply function + * @return 0 on success, -1 on error */ typedef int GIT_CALLBACK(git_stash_apply_progress_cb)( git_stash_apply_progress_t progress, @@ -137,7 +203,10 @@ typedef struct git_stash_apply_options { void *progress_payload; } git_stash_apply_options; +/** Current version for the `git_stash_apply_options` structure */ #define GIT_STASH_APPLY_OPTIONS_VERSION 1 + +/** Static constructor for `git_stash_apply_options` */ #define GIT_STASH_APPLY_OPTIONS_INIT { \ GIT_STASH_APPLY_OPTIONS_VERSION, \ GIT_STASH_APPLY_DEFAULT, \ @@ -171,8 +240,6 @@ GIT_EXTERN(int) git_stash_apply_options_init( * 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. @@ -257,4 +324,5 @@ GIT_EXTERN(int) git_stash_pop( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/status.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/status.h index 543e3fa..e13783b 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/status.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/status.h @@ -14,7 +14,7 @@ /** * @file git2/status.h - * @brief Git file status routines + * @brief Status indicates how a user has changed the working directory and index * @defgroup git_status Git file status routines * @ingroup Git * @{ @@ -48,17 +48,16 @@ typedef enum { GIT_STATUS_WT_UNREADABLE = (1u << 12), GIT_STATUS_IGNORED = (1u << 14), - GIT_STATUS_CONFLICTED = (1u << 15), + 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. + * @param path is the path to the file + * @param status_flags the `git_status_t` values for file's status + * @param payload the user-specified payload to the foreach function + * @return 0 on success, or a negative number on failure */ typedef int GIT_CALLBACK(git_status_cb)( const char *path, unsigned int status_flags, void *payload); @@ -87,7 +86,7 @@ typedef enum { * 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_WORKDIR_ONLY = 2 } git_status_show_t; /** @@ -204,9 +203,10 @@ typedef enum { * 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_INCLUDE_UNREADABLE_AS_UNTRACKED = (1u << 15) } git_status_opt_t; +/** Default `git_status_opt_t` values */ #define GIT_STATUS_OPT_DEFAULTS \ (GIT_STATUS_OPT_INCLUDE_IGNORED | \ GIT_STATUS_OPT_INCLUDE_UNTRACKED | \ @@ -227,13 +227,16 @@ typedef struct { /** * The `show` value is one of the `git_status_show_t` constants that - * control which files to scan and in what order. + * control which files to scan and in what order. The default is + * `GIT_STATUS_SHOW_INDEX_AND_WORKDIR`. */ git_status_show_t show; /** * The `flags` value is an OR'ed combination of the - * `git_status_opt_t` values above. + * `git_status_opt_t` values above. The default is + * `GIT_STATUS_OPT_DEFAULTS`, which matches git's default + * behavior. */ unsigned int flags; @@ -250,9 +253,18 @@ typedef struct { * working directory and index; defaults to HEAD. */ git_tree *baseline; + + /** + * Threshold above which similar files will be considered renames. + * This is equivalent to the -M option. Defaults to 50. + */ + uint16_t rename_threshold; } git_status_options; +/** Current version for the `git_status_options` structure */ #define GIT_STATUS_OPTIONS_VERSION 1 + +/** Static constructor for `git_status_options` */ #define GIT_STATUS_OPTIONS_INIT {GIT_STATUS_OPTIONS_VERSION} /** @@ -440,4 +452,5 @@ GIT_EXTERN(int) git_status_should_ignore( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/stdint.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/stdint.h index 6950427..4f532e1 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/stdint.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/stdint.h @@ -1,37 +1,37 @@ -// 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_ // [ +/* 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 @@ -40,10 +40,11 @@ #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 +/* 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 @@ -52,7 +53,7 @@ extern "C" { } #endif -// Define _W64 macros to mark types changing their size, like intptr_t. +/* 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 @@ -62,13 +63,14 @@ extern "C" { #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. +/* 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; @@ -88,7 +90,7 @@ typedef signed __int64 int64_t; typedef unsigned __int64 uint64_t; -// 7.18.1.2 Minimum-width integer types +/* 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; @@ -98,7 +100,7 @@ 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 +/* 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; @@ -108,25 +110,25 @@ 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 // [ +/* 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 ][ +#else /* _WIN64 ][ */ typedef _W64 signed int intptr_t; typedef _W64 unsigned int uintptr_t; -#endif // _WIN64 ] +#endif /* _WIN64 ] */ -// 7.18.1.5 Greatest-width integer types +/* 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 +/* 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 +#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 +/* 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) @@ -140,7 +142,7 @@ typedef uint64_t uintmax_t; #define UINT32_MAX _UI32_MAX #define UINT64_MAX _UI64_MAX -// 7.18.2.2 Limits of minimum-width integer types +/* 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 @@ -154,7 +156,7 @@ typedef uint64_t uintmax_t; #define UINT_LEAST32_MAX UINT32_MAX #define UINT_LEAST64_MAX UINT64_MAX -// 7.18.2.3 Limits of fastest minimum-width integer types +/* 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 @@ -168,62 +170,62 @@ typedef uint64_t uintmax_t; #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 // [ +/* 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 ][ +#else /* _WIN64 ][ */ # define INTPTR_MIN INT32_MIN # define INTPTR_MAX INT32_MAX # define UINTPTR_MAX UINT32_MAX -#endif // _WIN64 ] +#endif /* _WIN64 ] */ -// 7.18.2.5 Limits of greatest-width integer types +/* 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 +/* 7.18.3 Limits of other integer types */ -#ifdef _WIN64 // [ +#ifdef _WIN64 /* [ */ # define PTRDIFF_MIN _I64_MIN # define PTRDIFF_MAX _I64_MAX -#else // _WIN64 ][ +#else /* _WIN64 ][ */ # define PTRDIFF_MIN _I32_MIN # define PTRDIFF_MAX _I32_MAX -#endif // _WIN64 ] +#endif /* _WIN64 ] */ #define SIG_ATOMIC_MIN INT_MIN #define SIG_ATOMIC_MAX INT_MAX -#ifndef SIZE_MAX // [ -# ifdef _WIN64 // [ +#ifndef SIZE_MAX /* [ */ +# ifdef _WIN64 /* [ */ # define SIZE_MAX _UI64_MAX -# else // _WIN64 ][ +# else /* _WIN64 ][ */ # define SIZE_MAX _UI32_MAX -# endif // _WIN64 ] -#endif // SIZE_MAX ] +# endif /* _WIN64 ] */ +#endif /* SIZE_MAX ] */ -// WCHAR_MIN and WCHAR_MAX are also defined in -#ifndef WCHAR_MIN // [ +/* WCHAR_MIN and WCHAR_MAX are also defined in */ +#ifndef WCHAR_MIN /* [ */ # define WCHAR_MIN 0 -#endif // WCHAR_MIN ] -#ifndef WCHAR_MAX // [ +#endif /* WCHAR_MIN ] */ +#ifndef WCHAR_MAX /* [ */ # define WCHAR_MAX _UI16_MAX -#endif // WCHAR_MAX ] +#endif /* WCHAR_MAX ] */ #define WINT_MIN 0 #define WINT_MAX _UI16_MAX -#endif // __STDC_LIMIT_MACROS ] +#endif /* __STDC_LIMIT_MACROS ] */ -// 7.18.4 Limits of other integer types +/* 7.18.4 Limits of other integer types */ -#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [ See footnote 224 at page 260 +#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) /* [ See footnote 224 at page 260 */ -// 7.18.4.1 Macros for minimum-width integer constants +/* 7.18.4.1 Macros for minimum-width integer constants */ #define INT8_C(val) val##i8 #define INT16_C(val) val##i16 @@ -235,13 +237,13 @@ typedef uint64_t uintmax_t; #define UINT32_C(val) val##ui32 #define UINT64_C(val) val##ui64 -// 7.18.4.2 Macros for greatest-width integer constants +/* 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 /* __STDC_CONSTANT_MACROS ] */ -#endif // _MSC_STDINT_H_ ] +#endif /* _MSC_STDINT_H_ ] */ -#endif // _MSC_VER ] \ No newline at end of file +#endif /* _MSC_VER ] */ diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/strarray.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/strarray.h index 0f657e6..dcb628a 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/strarray.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/strarray.h @@ -11,8 +11,8 @@ /** * @file git2/strarray.h - * @brief Git string array routines - * @defgroup git_strarray Git string array routines + * @brief An array of strings for the user to free + * @defgroup git_strarray An array of strings for the user to free * @ingroup Git * @{ */ @@ -36,21 +36,7 @@ typedef struct git_strarray { */ 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/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/submodule.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/submodule.h index 29d8bc1..911b3ce 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/submodule.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/submodule.h @@ -15,7 +15,7 @@ /** * @file git2/submodule.h - * @brief Git submodule management utilities + * @brief Submodules place another repository's contents within this one * * 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 @@ -85,23 +85,30 @@ typedef enum { 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_WD_UNTRACKED = (1u << 13) } git_submodule_status_t; +/** Submodule source bits */ #define GIT_SUBMODULE_STATUS__IN_FLAGS 0x000Fu +/** Submodule index status */ #define GIT_SUBMODULE_STATUS__INDEX_FLAGS 0x0070u +/** Submodule working directory status */ #define GIT_SUBMODULE_STATUS__WD_FLAGS 0x3F80u +/** Whether the submodule is modified */ #define GIT_SUBMODULE_STATUS_IS_UNMODIFIED(S) \ (((S) & ~GIT_SUBMODULE_STATUS__IN_FLAGS) == 0) +/** Whether the submodule is modified (in the index) */ #define GIT_SUBMODULE_STATUS_IS_INDEX_UNMODIFIED(S) \ (((S) & GIT_SUBMODULE_STATUS__INDEX_FLAGS) == 0) +/** Whether the submodule is modified (in the working directory) */ #define GIT_SUBMODULE_STATUS_IS_WD_UNMODIFIED(S) \ (((S) & (GIT_SUBMODULE_STATUS__WD_FLAGS & \ ~GIT_SUBMODULE_STATUS_WD_UNINITIALIZED)) == 0) +/** Whether the submodule working directory is dirty */ #define GIT_SUBMODULE_STATUS_IS_WD_DIRTY(S) \ (((S) & (GIT_SUBMODULE_STATUS_WD_INDEX_MODIFIED | \ GIT_SUBMODULE_STATUS_WD_WD_MODIFIED | \ @@ -130,10 +137,8 @@ typedef struct git_submodule_update_options { /** * 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. + * checkout, set the `checkout_strategy` to `GIT_CHECKOUT_NONE` + * or `GIT_CHECKOUT_DRY_RUN`. */ git_checkout_options checkout_opts; @@ -152,11 +157,15 @@ typedef struct git_submodule_update_options { int allow_fetch; } git_submodule_update_options; +/** Current version for the `git_submodule_update_options` structure */ #define GIT_SUBMODULE_UPDATE_OPTIONS_VERSION 1 + +/** Static constructor for `git_submodule_update_options` */ #define GIT_SUBMODULE_UPDATE_OPTIONS_INIT \ { GIT_SUBMODULE_UPDATE_OPTIONS_VERSION, \ - { GIT_CHECKOUT_OPTIONS_VERSION, GIT_CHECKOUT_SAFE }, \ - GIT_FETCH_OPTIONS_INIT, 1 } + GIT_CHECKOUT_OPTIONS_INIT, \ + GIT_FETCH_OPTIONS_INIT, \ + 1 } /** * Initialize git_submodule_update_options structure @@ -181,7 +190,7 @@ GIT_EXTERN(int) git_submodule_update_options_init( * @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. + * return an error if attempting to update an uninitialized 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. @@ -229,6 +238,7 @@ GIT_EXTERN(int) git_submodule_lookup( * * @param out Pointer to store the copy of the submodule. * @param source Original submodule to copy. + * @return 0 */ GIT_EXTERN(int) git_submodule_dup(git_submodule **out, git_submodule *source); @@ -320,6 +330,7 @@ GIT_EXTERN(int) git_submodule_clone( * (but doesn't actually do the commit). * * @param submodule The submodule to finish adding. + * @return 0 or an error code. */ GIT_EXTERN(int) git_submodule_add_finalize(git_submodule *submodule); @@ -529,7 +540,8 @@ GIT_EXTERN(int) git_submodule_set_update( * 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 + * @param submodule the submodule to examine + * @return the submodule recursion configuration */ GIT_EXTERN(git_submodule_recurse_t) git_submodule_fetch_recurse_submodules( git_submodule *submodule); @@ -541,7 +553,7 @@ GIT_EXTERN(git_submodule_recurse_t) git_submodule_fetch_recurse_submodules( * * @param repo the repository to affect * @param name the submodule to configure - * @param fetch_recurse_submodules Boolean value + * @param fetch_recurse_submodules the submodule recursion configuration * @return old value for fetchRecurseSubmodules */ GIT_EXTERN(int) git_submodule_set_fetch_recurse_submodules( @@ -589,6 +601,9 @@ GIT_EXTERN(int) git_submodule_repo_init( * 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. + * + * @param submodule The submodule to copy. + * @return 0 or an error code. */ GIT_EXTERN(int) git_submodule_sync(git_submodule *submodule); @@ -660,4 +675,5 @@ GIT_EXTERN(int) git_submodule_location( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/alloc.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/alloc.h index c295807..67506f2 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/alloc.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/alloc.h @@ -10,6 +10,17 @@ #include "git2/common.h" +/** + * @file git2/sys/alloc.h + * @brief Custom memory allocators + * @defgroup git_merge Git merge routines + * @ingroup Git + * + * Users can configure custom allocators; this is particularly + * interesting when running in constrained environments, when calling + * from another language, or during testing. + * @{ + */ GIT_BEGIN_DECL /** @@ -24,28 +35,6 @@ 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 @@ -53,18 +42,6 @@ typedef struct { */ 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. @@ -96,6 +73,7 @@ int git_stdalloc_init_allocator(git_allocator *allocator); */ int git_win32_crtdbg_init_allocator(git_allocator *allocator); +/** @} */ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/commit.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/commit.h index ba67106..a8253c0 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/commit.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/commit.h @@ -14,7 +14,7 @@ /** * @file git2/sys/commit.h * @brief Low-level Git commit creation - * @defgroup git_backend Git custom backend APIs + * @defgroup git_commit Low-level Git commit creation * @ingroup Git * @{ */ @@ -29,7 +29,43 @@ GIT_BEGIN_DECL * the `tree`, neither the `parents` list of `git_oid`s are checked for * validity. * - * @see git_commit_create + * @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_from_ids( git_oid *id, @@ -49,6 +85,10 @@ GIT_EXTERN(int) git_commit_create_from_ids( * 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. + * + * @param idx the index of the parent + * @param payload the user-specified payload + * @return the object id of the parent, or NULL if there are no further parents */ typedef const git_oid * GIT_CALLBACK(git_commit_parent_callback)(size_t idx, void *payload); @@ -61,7 +101,40 @@ typedef const git_oid * GIT_CALLBACK(git_commit_parent_callback)(size_t idx, voi * with `parent_payload` and should return `git_oid` values or NULL to * indicate that all parents are accounted for. * - * @see git_commit_create + * @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_cb Callback to invoke to obtain parent information + * + * @param parent_payload User-specified payload to provide to the callback + * + * @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_from_callback( git_oid *id, @@ -77,4 +150,5 @@ GIT_EXTERN(int) git_commit_create_from_callback( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/commit_graph.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/commit_graph.h index f6c0fc4..ff547ef 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/commit_graph.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/commit_graph.h @@ -12,13 +12,52 @@ /** * @file git2/sys/commit_graph.h - * @brief Git commit-graph - * @defgroup git_commit_graph Git commit-graph APIs + * @brief Commit graphs store information about commit relationships + * @defgroup git_commit_graph Commit graphs * @ingroup Git * @{ */ GIT_BEGIN_DECL +/** + * Options structure for `git_commit_graph_open_new`. + * + * Initialize with `GIT_COMMIT_GRAPH_OPEN_OPTIONS_INIT`. Alternatively, + * you can use `git_commit_graph_open_options_init`. + */ +typedef struct { + unsigned int version; + +#ifdef GIT_EXPERIMENTAL_SHA256 + /** The object ID type that this commit graph contains. */ + git_oid_t oid_type; +#endif +} git_commit_graph_open_options; + +/** Current version for the `git_commit_graph_open_options` structure */ +#define GIT_COMMIT_GRAPH_OPEN_OPTIONS_VERSION 1 + +/** Static constructor for `git_commit_graph_open_options` */ +#define GIT_COMMIT_GRAPH_OPEN_OPTIONS_INIT { \ + GIT_COMMIT_GRAPH_OPEN_OPTIONS_VERSION \ + } + +/** + * Initialize git_commit_graph_open_options structure + * + * Initializes a `git_commit_graph_open_options` with default values. + * Equivalent to creating an instance with + * `GIT_COMMIT_GRAPH_OPEN_OPTIONS_INIT`. + * + * @param opts The `git_commit_graph_open_options` struct to initialize. + * @param version The struct version; pass `GIT_COMMIT_GRAPH_OPEN_OPTIONS_VERSION`. + * @return Zero on success; -1 on failure. + */ +GIT_EXTERN(int) git_commit_graph_open_options_init( + git_commit_graph_open_options *opts, + unsigned int version); + + /** * Opens a `git_commit_graph` from a path to an objects directory. * @@ -28,7 +67,13 @@ GIT_BEGIN_DECL * @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); +GIT_EXTERN(int) git_commit_graph_open( + git_commit_graph **cgraph_out, + const char *objects_dir +#ifdef GIT_EXPERIMENTAL_SHA256 + , const git_commit_graph_open_options *options +#endif + ); /** * Frees commit-graph data. This should only be called when memory allocated @@ -40,50 +85,6 @@ GIT_EXTERN(int) git_commit_graph_open(git_commit_graph **cgraph_out, const char */ 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 @@ -94,19 +95,23 @@ 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_SINGLE_FILE = 0 } git_commit_graph_split_strategy_t; /** - * Options structure for - * `git_commit_graph_writer_commit`/`git_commit_graph_writer_dump`. + * Options structure for `git_commit_graph_writer_new`. * - * Initialize with `GIT_COMMIT_GRAPH_WRITER_OPTIONS_INIT`. Alternatively, you - * can use `git_commit_graph_writer_options_init`. + * Initialize with `GIT_COMMIT_GRAPH_WRITER_OPTIONS_INIT`. Alternatively, + * you can use `git_commit_graph_writer_options_init`. */ typedef struct { unsigned int version; +#ifdef GIT_EXPERIMENTAL_SHA256 + /** The object ID type that this commit graph contains. */ + git_oid_t oid_type; +#endif + /** * The strategy to use when adding new commits to a pre-existing commit-graph * chain. @@ -126,7 +131,10 @@ typedef struct { size_t max_commits; } git_commit_graph_writer_options; +/** Current version for the `git_commit_graph_writer_options` structure */ #define GIT_COMMIT_GRAPH_WRITER_OPTIONS_VERSION 1 + +/** Static constructor for `git_commit_graph_writer_options` */ #define GIT_COMMIT_GRAPH_WRITER_OPTIONS_INIT { \ GIT_COMMIT_GRAPH_WRITER_OPTIONS_VERSION \ } @@ -145,30 +153,73 @@ GIT_EXTERN(int) git_commit_graph_writer_options_init( git_commit_graph_writer_options *opts, unsigned int version); +/** + * 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. + * @param options The options for the commit graph writer. + * @return 0 or an error code + */ +GIT_EXTERN(int) git_commit_graph_writer_new( + git_commit_graph_writer **out, + const char *objects_info_dir, + const git_commit_graph_writer_options *options); + +/** + * 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); + /** * 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); + git_commit_graph_writer *w); /** * 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[out] 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_commit_graph_writer *w); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/config.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/config.h index 0a9005e..cc4a399 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/config.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/config.h @@ -13,13 +13,28 @@ /** * @file git2/sys/config.h - * @brief Git config backend routines - * @defgroup git_backend Git custom backend APIs + * @brief Custom configuration database backends + * @defgroup git_backend Custom configuration database backends * @ingroup Git * @{ */ GIT_BEGIN_DECL +/** + * An entry in a configuration backend. This is provided so that + * backend implementors can have a mechanism to free their data. + */ +typedef struct git_config_backend_entry { + /** The base configuration entry */ + struct git_config_entry entry; + + /** + * Free function for this entry; for internal purposes. Callers + * should call `git_config_entry_free` to free data. + */ + void GIT_CALLBACK(free)(struct git_config_backend_entry *entry); +} git_config_backend_entry; + /** * Every iterator must have this struct as its first element, so the * API can talk to it. You'd define your iterator as @@ -39,7 +54,7 @@ struct git_config_iterator { * 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); + int GIT_CALLBACK(next)(git_config_backend_entry **entry, git_config_iterator *iter); /** * Free the iterator @@ -59,7 +74,7 @@ struct git_config_backend { /* 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(get)(struct git_config_backend *, const char *key, git_config_backend_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); @@ -83,7 +98,11 @@ struct git_config_backend { int GIT_CALLBACK(unlock)(struct git_config_backend *, int success); void GIT_CALLBACK(free)(struct git_config_backend *); }; + +/** Current version for the `git_config_backend_options` structure */ #define GIT_CONFIG_BACKEND_VERSION 1 + +/** Static constructor for `git_config_backend_options` */ #define GIT_CONFIG_BACKEND_INIT {GIT_CONFIG_BACKEND_VERSION} /** @@ -125,6 +144,63 @@ GIT_EXTERN(int) git_config_add_backend( const git_repository *repo, int force); +/** Options for in-memory configuration backends. */ +typedef struct { + unsigned int version; + + /** + * The type of this backend (eg, "command line"). If this is + * NULL, then this will be "in-memory". + */ + const char *backend_type; + + /** + * The path to the origin; if this is NULL then it will be + * left unset in the resulting configuration entries. + */ + const char *origin_path; +} git_config_backend_memory_options; + +/** Current version for the `git_config_backend_memory_options` structure */ +#define GIT_CONFIG_BACKEND_MEMORY_OPTIONS_VERSION 1 + +/** Static constructor for `git_config_backend_memory_options` */ +#define GIT_CONFIG_BACKEND_MEMORY_OPTIONS_INIT { GIT_CONFIG_BACKEND_MEMORY_OPTIONS_VERSION } + + +/** + * Create an in-memory configuration backend from a string in standard + * git configuration file format. + * + * @param out the new backend + * @param cfg the configuration that is to be parsed + * @param len the length of the string pointed to by `cfg` + * @param opts the options to initialize this backend with, or NULL + * @return 0 on success or an error code + */ +extern int git_config_backend_from_string( + git_config_backend **out, + const char *cfg, + size_t len, + git_config_backend_memory_options *opts); + +/** + * Create an in-memory configuration backend from a list of name/value + * pairs. + * + * @param out the new backend + * @param values the configuration values to set (in "key=value" format) + * @param len the length of the values array + * @param opts the options to initialize this backend with, or NULL + * @return 0 on success or an error code + */ +extern int git_config_backend_from_values( + git_config_backend **out, + const char **values, + size_t len, + git_config_backend_memory_options *opts); + /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/credential.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/credential.h index bb4c9f9..0d573a3 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/credential.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/credential.h @@ -11,9 +11,9 @@ #include "git2/credential.h" /** - * @file git2/sys/cred.h - * @brief Git credentials low-level implementation - * @defgroup git_credential Git credentials low-level implementation + * @file git2/sys/credential.h + * @brief Low-level credentials implementation + * @defgroup git_credential Low-level credentials implementation * @ingroup Git * @{ */ @@ -85,6 +85,7 @@ struct git_credential_ssh_custom { void *payload; /**< Payload passed to prompt_callback */ }; +/** @} */ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/diff.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/diff.h index aefd7b9..a398f54 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/diff.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/diff.h @@ -15,7 +15,7 @@ /** * @file git2/sys/diff.h - * @brief Low-level Git diff utilities + * @brief Low-level diff utilities * @ingroup Git * @{ */ @@ -33,6 +33,12 @@ GIT_BEGIN_DECL * 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). + * + * @param delta the delta being processed + * @param hunk the hunk being processed + * @param line the line being processed + * @param payload the payload provided by the diff generator + * @return 0 on success or an error code */ GIT_EXTERN(int) git_diff_print_callback__to_buf( const git_diff_delta *delta, @@ -53,6 +59,12 @@ GIT_EXTERN(int) git_diff_print_callback__to_buf( * 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`. + * + * @param delta the delta being processed + * @param hunk the hunk being processed + * @param line the line being processed + * @param payload the payload provided by the diff generator + * @return 0 on success or an error code */ GIT_EXTERN(int) git_diff_print_callback__to_file_handle( const git_diff_delta *delta, @@ -70,7 +82,10 @@ typedef struct { size_t oid_calculations; /**< Number of ID calculations */ } git_diff_perfdata; +/** Current version for the `git_diff_perfdata_options` structure */ #define GIT_DIFF_PERFDATA_VERSION 1 + +/** Static constructor for `git_diff_perfdata_options` */ #define GIT_DIFF_PERFDATA_INIT {GIT_DIFF_PERFDATA_VERSION,0,0} /** @@ -85,10 +100,15 @@ GIT_EXTERN(int) git_diff_get_perfdata( /** * Get performance data for diffs from a git_status_list + * + * @param out Structure to be filled with diff performance data + * @param status Diff to read performance data from + * @return 0 for success, <0 for error */ GIT_EXTERN(int) git_status_list_get_perfdata( git_diff_perfdata *out, const git_status_list *status); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/email.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/email.h index 6f4a286..26e792a 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/email.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/email.h @@ -7,6 +7,11 @@ #ifndef INCLUDE_sys_git_email_h__ #define INCLUDE_sys_git_email_h__ +#include "git2/common.h" +#include "git2/diff.h" +#include "git2/email.h" +#include "git2/types.h" + /** * @file git2/sys/email.h * @brief Advanced git email creation routines @@ -28,6 +33,7 @@ GIT_BEGIN_DECL * @param body optional text to include above the diffstat * @param author the person who authored this commit * @param opts email creation options + * @return 0 on success or an error code */ GIT_EXTERN(int) git_email_create_from_diff( git_buf *out, @@ -42,4 +48,5 @@ GIT_EXTERN(int) git_email_create_from_diff( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/errors.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/errors.h new file mode 100644 index 0000000..44e8ecb --- /dev/null +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/errors.h @@ -0,0 +1,76 @@ +/* + * 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_errors_h__ +#define INCLUDE_sys_git_errors_h__ + +#include "git2/common.h" + +/** + * @file git2/sys/errors.h + * @brief Advanced error handling + * @ingroup Git + * + * Error handling for advanced consumers; those who use callbacks + * or those who create custom databases. + * @{ + */ +GIT_BEGIN_DECL + +/** + * 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, using `printf`-style + * formatting. + * + * 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 fmt The `printf`-style format string; subsequent arguments must + * be the arguments for the format string. + */ +GIT_EXTERN(void) git_error_set(int error_class, const char *fmt, ...) + GIT_FORMAT_PRINTF(2, 3); + +/** + * Set the error message string for this thread. This function is like + * `git_error_set` but takes a static string instead of a `printf`-style + * format. + * + * @param error_class One of the `git_error_t` enum above describing the + * general subsystem that is responsible for the error. + * @param string The 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/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/filter.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/filter.h index b375941..60466d1 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/filter.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/filter.h @@ -11,8 +11,8 @@ /** * @file git2/sys/filter.h - * @brief Git filter backend and plugin routines - * @defgroup git_backend Git custom backend APIs + * @brief Custom filter backends and plugins + * @defgroup git_backend Custom filter backends and plugins * @ingroup Git * @{ */ @@ -26,7 +26,10 @@ GIT_BEGIN_DECL */ GIT_EXTERN(git_filter *) git_filter_lookup(const char *name); +/** The "crlf" filter */ #define GIT_FILTER_CRLF "crlf" + +/** The "ident" filter */ #define GIT_FILTER_IDENT "ident" /** @@ -53,6 +56,12 @@ GIT_EXTERN(git_filter *) git_filter_lookup(const char *name); * 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. + * + * @param out the filter list + * @param repo the repository to use for configuration + * @param mode the filter mode (direction) + * @param options the options + * @return 0 on success or an error code */ GIT_EXTERN(int) git_filter_list_new( git_filter_list **out, @@ -72,6 +81,11 @@ GIT_EXTERN(int) git_filter_list_new( * 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! + * + * @param fl the filter list + * @param filter the filter to push + * @param payload the payload for the filter + * @return 0 on success or an error code */ GIT_EXTERN(int) git_filter_list_push( git_filter_list *fl, git_filter *filter, void *payload); @@ -96,17 +110,26 @@ typedef struct git_filter_source git_filter_source; /** * Get the repository that the source data is coming from. + * + * @param src the filter source + * @return the repository for the filter information */ GIT_EXTERN(git_repository *) git_filter_source_repo(const git_filter_source *src); /** * Get the path that the source data is coming from. + * + * @param src the filter source + * @return the path that is being filtered */ 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 + * + * @param src the filter source + * @return the file mode for the file being filtered */ GIT_EXTERN(uint16_t) git_filter_source_filemode(const git_filter_source *src); @@ -114,16 +137,25 @@ 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. + * + * @param src the filter source + * @return the object id of the file being filtered */ GIT_EXTERN(const git_oid *) git_filter_source_id(const git_filter_source *src); /** * Get the git_filter_mode_t to be used + * + * @param src the filter source + * @return the mode (direction) of the filter */ 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 + * + * @param src the filter source + * @return the flags of the filter */ GIT_EXTERN(uint32_t) git_filter_source_flags(const git_filter_source *src); @@ -137,6 +169,9 @@ GIT_EXTERN(uint32_t) git_filter_source_flags(const git_filter_source *src); * 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). + * + * @param self the filter to initialize + * @return 0 on success, negative number on failure */ typedef int GIT_CALLBACK(git_filter_init_fn)(git_filter *self); @@ -149,6 +184,8 @@ typedef int GIT_CALLBACK(git_filter_init_fn)(git_filter *self); * This may be called even if the `initialize` callback was not made. * * Typically this function will free the `git_filter` object itself. + * + * @param self the filter to shutdown */ typedef void GIT_CALLBACK(git_filter_shutdown_fn)(git_filter *self); @@ -171,6 +208,12 @@ typedef void GIT_CALLBACK(git_filter_shutdown_fn)(git_filter *self); * 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. + * + * @param self the filter check + * @param payload a data for future filter functions + * @param src the filter source + * @param attr_values the attribute values + * @return 0 on success or a negative value on error */ typedef int GIT_CALLBACK(git_filter_check_fn)( git_filter *self, @@ -191,6 +234,12 @@ typedef int GIT_CALLBACK(git_filter_check_fn)( * 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. * + * @param self the filter check + * @param payload a data for future filter functions + * @param to the input buffer + * @param from the output buffer + * @param src the filter source + * @return 0 on success or a negative value on error * @deprecated use git_filter_stream_fn */ typedef int GIT_CALLBACK(git_filter_apply_fn)( @@ -209,6 +258,13 @@ typedef int GIT_CALLBACK(git_filter_apply_fn)( * `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. + * + * @param out the write stream + * @param self the filter + * @param payload a data for future filter functions + * @param src the filter source + * @param next the output stream + * @return 0 on success or a negative value on error */ typedef int GIT_CALLBACK(git_filter_stream_fn)( git_writestream **out, @@ -225,6 +281,9 @@ typedef int GIT_CALLBACK(git_filter_stream_fn)( * `stream` callbacks allocated a `payload` to keep per-source filter * state, use this callback to free that payload and release resources * as required. + * + * @param self the filter + * @param payload a data for future filter functions */ typedef void GIT_CALLBACK(git_filter_cleanup_fn)( git_filter *self, @@ -291,7 +350,10 @@ struct git_filter { git_filter_cleanup_fn cleanup; }; +/** Current version for the `git_filter_options` structure */ #define GIT_FILTER_VERSION 1 + +/** Static constructor for `git_filter_options` */ #define GIT_FILTER_INIT {GIT_FILTER_VERSION} /** @@ -300,7 +362,7 @@ struct git_filter { * * @param filter the `git_filter` struct to initialize. * @param version Version the struct; pass `GIT_FILTER_VERSION` - * @return Zero on success; -1 on failure. + * @return 0 on success; -1 on failure. */ GIT_EXTERN(int) git_filter_init(git_filter *filter, unsigned int version); @@ -350,4 +412,5 @@ GIT_EXTERN(int) git_filter_unregister(const char *name); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/hashsig.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/hashsig.h index 09c19ae..0d7be53 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/hashsig.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/hashsig.h @@ -9,6 +9,16 @@ #include "git2/common.h" +/** + * @file git2/sys/hashsig.h + * @brief Signatures for file similarity comparison + * @defgroup git_hashsig Git merge routines + * @ingroup Git + * + * Hash signatures are used for file similary comparison; this is + * used for git's rename handling. + * @{ + */ GIT_BEGIN_DECL /** @@ -101,6 +111,7 @@ GIT_EXTERN(int) git_hashsig_compare( const git_hashsig *a, const git_hashsig *b); +/** @} */ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/index.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/index.h index 1f6d93f..b3b86a0 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/index.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/index.h @@ -12,8 +12,8 @@ /** * @file git2/sys/index.h - * @brief Low-level Git index manipulation routines - * @defgroup git_backend Git custom backend APIs + * @brief Low-level index manipulation routines + * @defgroup git_index Low-level index manipulation routines * @ingroup Git * @{ */ @@ -67,6 +67,7 @@ GIT_EXTERN(const git_index_name_entry *) git_index_name_get_byindex( * @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 + * @return 0 on success, or an error code */ GIT_EXTERN(int) git_index_name_add(git_index *index, const char *ancestor, const char *ours, const char *theirs); diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/mempack.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/mempack.h index 17da590..be902be 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/mempack.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/mempack.h @@ -15,8 +15,8 @@ /** * @file git2/sys/mempack.h - * @brief Custom ODB backend that permits packing objects in-memory - * @defgroup git_backend Git custom backend APIs + * @brief A custom object database backend for storing objects in-memory + * @defgroup git_mempack A custom object database backend for storing objects in-memory * @ingroup Git * @{ */ @@ -44,6 +44,26 @@ GIT_BEGIN_DECL */ GIT_EXTERN(int) git_mempack_new(git_odb_backend **out); +/** + * Write a thin packfile with the objects in the memory store. + * + * A thin packfile is a packfile that does not contain its transitive closure of + * references. This is useful for efficiently distributing additions to a + * repository over the network, but also finds use in the efficient bulk + * addition of objects to a repository, locally. + * + * This operation performs the (shallow) insert operations into the + * `git_packbuilder`, but does not write the packfile to disk; + * see `git_packbuilder_write_buf`. + * + * It also does not reset the in-memory object database; see `git_mempack_reset`. + * + * @param backend The mempack backend + * @param pb The packbuilder to use to write the packfile + * @return 0 on success or an error code + */ +GIT_EXTERN(int) git_mempack_write_thin_pack(git_odb_backend *backend, git_packbuilder *pb); + /** * Dump all the queued in-memory writes to a packfile. * @@ -82,6 +102,16 @@ GIT_EXTERN(int) git_mempack_dump(git_buf *pack, git_repository *repo, git_odb_ba */ GIT_EXTERN(int) git_mempack_reset(git_odb_backend *backend); +/** + * Get the total number of objects in mempack + * + * @param count The count of objects in the mempack + * @param backend The mempack backend + * @return 0 on success, or -1 on error + */ +GIT_EXTERN(int) git_mempack_object_count(size_t *count, git_odb_backend *backend); + +/** @} */ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/merge.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/merge.h index ef4bc5a..a9f5220 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/merge.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/merge.h @@ -14,13 +14,18 @@ /** * @file git2/sys/merge.h - * @brief Git merge driver backend and plugin routines - * @defgroup git_merge Git merge driver APIs + * @brief Custom merge drivers + * @defgroup git_merge Custom merge drivers * @ingroup Git * @{ */ GIT_BEGIN_DECL +/** + * A "merge driver" is a mechanism that can be configured to handle + * conflict resolution for files changed in both the "ours" and "theirs" + * side of a merge. + */ typedef struct git_merge_driver git_merge_driver; /** @@ -31,8 +36,11 @@ typedef struct git_merge_driver git_merge_driver; */ GIT_EXTERN(git_merge_driver *) git_merge_driver_lookup(const char *name); +/** The "text" merge driver */ #define GIT_MERGE_DRIVER_TEXT "text" +/** The "binary" merge driver */ #define GIT_MERGE_DRIVER_BINARY "binary" +/** The "union" merge driver */ #define GIT_MERGE_DRIVER_UNION "union" /** @@ -40,23 +48,48 @@ GIT_EXTERN(git_merge_driver *) git_merge_driver_lookup(const char *name); */ typedef struct git_merge_driver_source git_merge_driver_source; -/** Get the repository that the source data is coming from. */ +/** + * Get the repository that the source data is coming from. + * + * @param src the merge driver source + * @return the repository + */ GIT_EXTERN(git_repository *) git_merge_driver_source_repo( const git_merge_driver_source *src); -/** Gets the ancestor of the file to merge. */ +/** + * Gets the ancestor of the file to merge. + * + * @param src the merge driver source + * @return the ancestor or NULL if there was no ancestor + */ 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. */ +/** + * Gets the ours side of the file to merge. + * + * @param src the merge driver source + * @return the ours side or NULL if there was no ours side + */ 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. */ +/** + * Gets the theirs side of the file to merge. + * + * @param src the merge driver source + * @return the theirs side or NULL if there was no theirs side + */ 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 */ +/** + * Gets the merge file options that the merge was invoked with. + * + * @param src the merge driver source + * @return the options + */ GIT_EXTERN(const git_merge_file_options *) git_merge_driver_source_file_options( const git_merge_driver_source *src); @@ -72,6 +105,9 @@ GIT_EXTERN(const git_merge_file_options *) git_merge_driver_source_file_options( * 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). + * + * @param self the merge driver to initialize + * @return 0 on success, or a negative number on failure */ typedef int GIT_CALLBACK(git_merge_driver_init_fn)(git_merge_driver *self); @@ -84,6 +120,8 @@ typedef int GIT_CALLBACK(git_merge_driver_init_fn)(git_merge_driver *self); * This may be called even if the `initialize` callback was not made. * * Typically this function will free the `git_merge_driver` object itself. + * + * @param self the merge driver to shutdown */ typedef void GIT_CALLBACK(git_merge_driver_shutdown_fn)(git_merge_driver *self); @@ -104,6 +142,14 @@ typedef void GIT_CALLBACK(git_merge_driver_shutdown_fn)(git_merge_driver *self); * specified by the file's attributes. * * The `src` contains the data about the file to be merged. + * + * @param self the merge driver + * @param path_out the resolved path + * @param mode_out the resolved mode + * @param merged_out the merged output contents + * @param filter_name the filter that was invoked + * @param src the data about the unmerged file + * @return 0 on success, or an error code */ typedef int GIT_CALLBACK(git_merge_driver_apply_fn)( git_merge_driver *self, @@ -139,6 +185,7 @@ struct git_merge_driver { git_merge_driver_apply_fn apply; }; +/** The version for the `git_merge_driver` */ #define GIT_MERGE_DRIVER_VERSION 1 /** @@ -179,4 +226,5 @@ GIT_EXTERN(int) git_merge_driver_unregister(const char *name); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/midx.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/midx.h index e3d7498..b3a68af 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/midx.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/midx.h @@ -11,14 +11,52 @@ #include "git2/types.h" /** - * @file git2/midx.h - * @brief Git multi-pack-index routines - * @defgroup git_midx Git multi-pack-index routines + * @file git2/sys/midx.h + * @brief Incremental multi-pack indexes + * @defgroup git_midx Incremental multi-pack indexes * @ingroup Git * @{ */ GIT_BEGIN_DECL +/** + * Options structure for `git_midx_writer_options`. + * + * Initialize with `GIT_MIDX_WRITER_OPTIONS_INIT`. Alternatively, + * you can use `git_midx_writer_options_init`. + */ +typedef struct { + unsigned int version; + +#ifdef GIT_EXPERIMENTAL_SHA256 + /** The object ID type that this commit graph contains. */ + git_oid_t oid_type; +#endif +} git_midx_writer_options; + +/** Current version for the `git_midx_writer_options` structure */ +#define GIT_MIDX_WRITER_OPTIONS_VERSION 1 + +/** Static constructor for `git_midx_writer_options` */ +#define GIT_MIDX_WRITER_OPTIONS_INIT { \ + GIT_MIDX_WRITER_OPTIONS_VERSION \ + } + +/** + * Initialize git_midx_writer_options structure + * + * Initializes a `git_midx_writer_options` with default values. + * Equivalent to creating an instance with + * `GIT_MIDX_WRITER_OPTIONS_INIT`. + * + * @param opts The `git_midx_writer_options` struct to initialize. + * @param version The struct version; pass `GIT_MIDX_WRITER_OPTIONS_VERSION`. + * @return Zero on success; -1 on failure. + */ +GIT_EXTERN(int) git_midx_writer_options_init( + git_midx_writer_options *opts, + unsigned int version); + /** * Create a new writer for `multi-pack-index` files. * @@ -29,7 +67,11 @@ GIT_BEGIN_DECL */ GIT_EXTERN(int) git_midx_writer_new( git_midx_writer **out, - const char *pack_dir); + const char *pack_dir +#ifdef GIT_EXPERIMENTAL_SHA256 + , git_midx_writer_options *options +#endif + ); /** * Free the multi-pack-index writer and its resources. @@ -71,4 +113,5 @@ GIT_EXTERN(int) git_midx_writer_dump( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/odb_backend.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/odb_backend.h index 9ae0ed9..53d8d06 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/odb_backend.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/odb_backend.h @@ -13,9 +13,9 @@ #include "git2/odb.h" /** - * @file git2/sys/backend.h - * @brief Git custom backend implementors functions - * @defgroup git_backend Git custom backend APIs + * @file git2/sys/odb_backend.h + * @brief Object database backends for custom object storage + * @defgroup git_backend Object database backends for custom object storage * @ingroup Git * @{ */ @@ -36,7 +36,7 @@ struct git_odb_backend { 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. + * must be so that the remaining (GIT_OID_SHA1_HEXSIZE - len)*4 bits are 0s. */ int GIT_CALLBACK(read_prefix)( git_oid *, void **, size_t *, git_object_t *, @@ -69,11 +69,8 @@ struct git_odb_backend { * 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()`). + * The odb layer will automatically call this when needed on failed + * lookups (ie. `exists()`, `read()`, `read_header()`). */ int GIT_CALLBACK(refresh)(git_odb_backend *); @@ -109,7 +106,10 @@ struct git_odb_backend { void GIT_CALLBACK(free)(git_odb_backend *); }; +/** Current version for the `git_odb_backend_options` structure */ #define GIT_ODB_BACKEND_VERSION 1 + +/** Static constructor for `git_odb_backend_options` */ #define GIT_ODB_BACKEND_INIT {GIT_ODB_BACKEND_VERSION} /** @@ -170,6 +170,7 @@ GIT_EXTERN(void *) git_odb_backend_malloc(git_odb_backend *backend, size_t len); #endif +/** @} */ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/openssl.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/openssl.h index b41c55c..8b74a98 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/openssl.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/openssl.h @@ -9,6 +9,12 @@ #include "git2/common.h" +/** + * @file git2/sys/openssl.h + * @brief Custom OpenSSL functionality + * @defgroup git_openssl Custom OpenSSL functionality + * @{ + */ GIT_BEGIN_DECL /** @@ -33,6 +39,7 @@ GIT_BEGIN_DECL */ GIT_EXTERN(int) git_openssl_set_locking(void); +/** @} */ GIT_END_DECL -#endif +#endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/path.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/path.h index 2a0c7e0..2963bca 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/path.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/path.h @@ -10,6 +10,16 @@ #include "git2/common.h" +/** + * @file git2/sys/path.h + * @brief Custom path handling + * @defgroup git_path Custom path handling + * @ingroup Git + * + * Merge will take two commits and attempt to produce a commit that + * includes the changes that were made in both branches. + * @{ + */ GIT_BEGIN_DECL /** @@ -59,6 +69,7 @@ typedef enum { */ 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 */ +#endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/refdb_backend.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/refdb_backend.h index c31e26d..813822a 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/refdb_backend.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/refdb_backend.h @@ -12,9 +12,9 @@ #include "git2/oid.h" /** - * @file git2/refdb_backend.h - * @brief Git custom refs backend functions - * @defgroup git_refdb_backend Git custom refs backend API + * @file git2/sys/refdb_backend.h + * @brief Custom reference database backends for refs storage + * @defgroup git_refdb_backend Custom reference database backends for refs storage * @ingroup Git * @{ */ @@ -65,9 +65,9 @@ struct git_refdb_backend { * * A refdb implementation must provide this function. * - * @arg exists The implementation shall set this to `0` if a ref does + * @param 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 + * @param ref_name The reference's name that should be checked for * existence. * @return `0` on success, a negative error value code. */ @@ -81,9 +81,9 @@ struct git_refdb_backend { * * A refdb implementation must provide this function. * - * @arg out The implementation shall set this to the allocated + * @param 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 + * @param 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. @@ -98,12 +98,12 @@ struct git_refdb_backend { * * A refdb implementation must provide this function. * - * @arg out The implementation shall set this to the allocated + * @param 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 + * @param 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. @@ -118,20 +118,20 @@ struct git_refdb_backend { * * A refdb implementation must provide this function. * - * @arg ref The reference to persist. May either be a symbolic or + * @param 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 + * @param 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 + * @param 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 + * @param 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 + * @param 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 + * @param 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 @@ -149,15 +149,15 @@ struct git_refdb_backend { * * A refdb implementation must provide this function. * - * @arg out The implementation shall set this to the newly created + * @param 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 + * @param old_name The current name of the reference that is to be renamed. + * @param new_name The new name that the old reference shall be renamed to. + * @param 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 + * @param 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 + * @param 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. */ @@ -173,11 +173,11 @@ struct git_refdb_backend { * * 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 + * @param ref_name The name of the reference name that shall be deleted. + * @param 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 + * @param 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. @@ -243,7 +243,7 @@ struct git_refdb_backend { * * A refdb implementation must provide this function. * - * @arg reflog The complete reference log for a given reference. Note + * @param 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 @@ -255,8 +255,8 @@ struct git_refdb_backend { * * 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. + * @param old_name The name of old reference whose reflog shall be renamed from. + * @param 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); @@ -266,7 +266,7 @@ struct git_refdb_backend { * * A refdb implementation must provide this function. * - * @arg name The name of the reference whose reflog shall be deleted. + * @param 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); @@ -277,9 +277,9 @@ struct git_refdb_backend { * 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 + * @param payload_out Opaque parameter that will be passed verbosely to * `unlock`. - * @arg refname Reference that shall be locked. + * @param 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); @@ -294,16 +294,16 @@ struct git_refdb_backend { * 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 + * @param payload The payload returned by `lock`. + * @param 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` + * @param 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 + * @param ref The reference which should be unlocked. + * @param 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 + * @param 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 @@ -312,7 +312,10 @@ struct git_refdb_backend { const git_reference *ref, const git_signature *sig, const char *message); }; +/** Current version for the `git_refdb_backend_options` structure */ #define GIT_REFDB_BACKEND_VERSION 1 + +/** Static constructor for `git_refdb_backend_options` */ #define GIT_REFDB_BACKEND_INIT {GIT_REFDB_BACKEND_VERSION} /** @@ -356,6 +359,7 @@ GIT_EXTERN(int) git_refdb_set_backend( git_refdb *refdb, git_refdb_backend *backend); +/** @} */ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/reflog.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/reflog.h deleted file mode 100644 index c9d0041..0000000 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/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/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/refs.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/refs.h index d2ce2e0..e434e67 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/refs.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/refs.h @@ -13,8 +13,8 @@ /** * @file git2/sys/refs.h - * @brief Low-level Git ref creation - * @defgroup git_backend Git custom backend APIs + * @brief Low-level git reference creation + * @defgroup git_backend Low-level git reference creation * @ingroup Git * @{ */ @@ -46,4 +46,5 @@ GIT_EXTERN(git_reference *) git_reference__alloc_symbolic( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/remote.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/remote.h new file mode 100644 index 0000000..476965d --- /dev/null +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/remote.h @@ -0,0 +1,53 @@ +/* + * 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_remote_h +#define INCLUDE_sys_git_remote_h + +#include "git2/remote.h" + +/** + * @file git2/sys/remote.h + * @brief Low-level remote functionality for custom transports + * @defgroup git_remote Low-level remote functionality for custom transports + * @ingroup Git + * @{ +*/ + +GIT_BEGIN_DECL + +/** + * A remote's capabilities. + */ +typedef enum { + /** Remote supports fetching an advertised object by ID. */ + GIT_REMOTE_CAPABILITY_TIP_OID = (1 << 0), + + /** Remote supports fetching an individual reachable object. */ + GIT_REMOTE_CAPABILITY_REACHABLE_OID = (1 << 1), + + /** Remote supports push options. */ + GIT_REMOTE_CAPABILITY_PUSH_OPTIONS = (1 << 2), +} git_remote_capability_t; + +/** + * Disposes libgit2-initialized fields from a git_remote_connect_options. + * This should only be used for git_remote_connect_options returned by + * git_transport_remote_connect_options. + * + * Note that this does not free the `git_remote_connect_options` itself, just + * the memory pointed to by it. + * + * @param opts The `git_remote_connect_options` struct to dispose. + */ +GIT_EXTERN(void) git_remote_connect_options_dispose( + git_remote_connect_options *opts); + +/** @} */ +GIT_END_DECL + +#endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/repository.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/repository.h index 892be66..026ac8a 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/repository.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/repository.h @@ -9,16 +9,71 @@ #include "git2/common.h" #include "git2/types.h" +#include "git2/oid.h" /** * @file git2/sys/repository.h - * @brief Git repository custom implementation routines - * @defgroup git_backend Git custom backend APIs + * @brief Custom repository handling + * @defgroup git_repository Custom repository handling * @ingroup Git * @{ */ GIT_BEGIN_DECL +#ifdef GIT_EXPERIMENTAL_SHA256 + +/** + * The options for creating an repository from scratch. + * + * Initialize with `GIT_REPOSITORY_NEW_OPTIONS_INIT`. Alternatively, + * you can use `git_repository_new_options_init`. + * + * @options[version] GIT_REPOSITORY_NEW_OPTIONS_VERSION + * @options[init_macro] GIT_REPOSITORY_NEW_OPTIONS_INIT + * @options[init_function] git_repository_new_options_init + */ +typedef struct git_repository_new_options { + unsigned int version; /**< The version */ + + /** + * The object ID type for the object IDs that exist in the index. + * + * If this is not specified, this defaults to `GIT_OID_SHA1`. + */ + git_oid_t oid_type; +} git_repository_new_options; + +/** Current version for the `git_repository_new_options` structure */ +#define GIT_REPOSITORY_NEW_OPTIONS_VERSION 1 + +/** Static constructor for `git_repository_new_options` */ +#define GIT_REPOSITORY_NEW_OPTIONS_INIT { GIT_REPOSITORY_NEW_OPTIONS_VERSION } + +/** + * Initialize git_repository_new_options structure + * + * Initializes a `git_repository_new_options` with default values. + * Equivalent to creating an instance with + * `GIT_REPOSITORY_NEW_OPTIONS_INIT`. + * + * @param opts The `git_repository_new_options` struct to initialize. + * @param version The struct version; pass `GIT_REPOSITORY_NEW_OPTIONS_VERSION`. + * @return Zero on success; -1 on failure. + */ +GIT_EXTERN(int) git_repository_new_options_init( + git_repository_new_options *opts, + unsigned int version); + +/** + * Create a new repository with no backends. + * + * @param[out] out The blank repository + * @param opts the options for repository creation, or NULL for defaults + * @return 0 on success, or an error code + */ +GIT_EXTERN(int) git_repository_new(git_repository **out, git_repository_new_options *opts); +#else + /** * Create a new repository with neither backends nor config object * @@ -29,11 +84,13 @@ GIT_BEGIN_DECL * can fail to function properly: locations under $GIT_DIR, $GIT_COMMON_DIR, * or $GIT_INFO_DIR are impacted. * - * @param out The blank repository + * @param[out] out The blank repository * @return 0 on success, or an error code */ GIT_EXTERN(int) git_repository_new(git_repository **out); +#endif + /** * Reset all the internal state in a repository. * @@ -156,6 +213,7 @@ GIT_EXTERN(int) git_repository_set_bare(git_repository *repo); * and caches them so that subsequent calls to `git_submodule_lookup` are O(1). * * @param repo the repository whose submodules will be cached. + * @return 0 on success, or an error code */ GIT_EXTERN(int) git_repository_submodule_cache_all( git_repository *repo); @@ -171,10 +229,12 @@ GIT_EXTERN(int) git_repository_submodule_cache_all( * of these has changed, the cache might become invalid. * * @param repo the repository whose submodule cache will be cleared + * @return 0 on success, or an error code */ GIT_EXTERN(int) git_repository_submodule_cache_clear( git_repository *repo); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/stream.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/stream.h index 6f93cc4..eabff68 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/stream.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/stream.h @@ -11,8 +11,16 @@ #include "git2/types.h" #include "git2/proxy.h" +/** + * @file git2/sys/stream.h + * @brief Streaming file I/O functionality + * @defgroup git_stream Streaming file I/O functionality + * @ingroup Git + * @{ + */ GIT_BEGIN_DECL +/** Current version for the `git_stream` structures */ #define GIT_STREAM_VERSION 1 /** @@ -29,8 +37,22 @@ GIT_BEGIN_DECL typedef struct git_stream { int version; - int encrypted; - int proxy_support; + unsigned int encrypted : 1, + proxy_support : 1; + + /** + * Timeout for read and write operations; can be set to `0` to + * block indefinitely. + */ + int timeout; + + /** + * Timeout to connect to the remote server; can be set to `0` + * to use the system defaults. This can be shorter than the + * system default - often 75 seconds - but cannot be longer. + */ + int connect_timeout; + 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); @@ -79,7 +101,7 @@ typedef enum { GIT_STREAM_STANDARD = 1, /** A TLS-encrypted socket. */ - GIT_STREAM_TLS = 2, + GIT_STREAM_TLS = 2 } git_stream_t; /** @@ -133,6 +155,7 @@ GIT_EXTERN(int) git_stream_register_tls(git_stream_cb ctor); #endif +/**@}*/ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/transport.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/transport.h index fee3454..ad6765c 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/transport.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/sys/transport.h @@ -9,46 +9,40 @@ #define INCLUDE_sys_git_transport_h #include "git2/net.h" +#include "git2/oidarray.h" +#include "git2/proxy.h" +#include "git2/remote.h" +#include "git2/strarray.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 + * @brief Custom transport registration interfaces and functions + * @defgroup git_transport Custom transport registration * @ingroup Git + * + * Callers can override the default HTTPS or SSH implementation by + * specifying a custom transport. * @{ */ GIT_BEGIN_DECL /** - * Flags to pass to transport - * - * Currently unused. + * The negotiation state during a fetch smart transport negotiation. */ -typedef enum { - GIT_TRANSPORTFLAGS_NONE = 0, -} git_transport_flags_t; +typedef struct { + const git_remote_head * const *refs; + size_t refs_len; + git_oid *shallow_roots; + size_t shallow_roots_len; + int depth; +} git_fetch_negotiation; 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. @@ -56,11 +50,39 @@ struct git_transport { 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); + const git_remote_connect_options *connect_opts); + + /** + * Resets the connect options for the given transport. This + * is useful for updating settings or callbacks for an already + * connected transport. + */ + int GIT_CALLBACK(set_connect_opts)( + git_transport *transport, + const git_remote_connect_options *connect_opts); + + /** + * Gets the capabilities for this remote repository. + * + * This function may be called after a successful call to + * `connect()`. + */ + int GIT_CALLBACK(capabilities)( + unsigned int *capabilities, + git_transport *transport); + +#ifdef GIT_EXPERIMENTAL_SHA256 + /** + * Gets the object type for the remote repository. + * + * This function may be called after a successful call to + * `connect()`. + */ + int GIT_CALLBACK(oid_type)( + git_oid_t *object_type, + git_transport *transport); +#endif /** * Get the list of available references in the remote repository. @@ -75,7 +97,9 @@ struct git_transport { 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); + int GIT_CALLBACK(push)( + git_transport *transport, + git_push *push); /** * Negotiate a fetch with the remote repository. @@ -87,8 +111,17 @@ struct git_transport { int GIT_CALLBACK(negotiate_fetch)( git_transport *transport, git_repository *repo, - const git_remote_head * const *refs, - size_t count); + const git_fetch_negotiation *fetch_data); + + /** + * Return the shallow roots of the remote. + * + * This function may be called after a successful call to + * `negotiate_fetch`. + */ + int GIT_CALLBACK(shallow_roots)( + git_oidarray *out, + git_transport *transport); /** * Start downloading the packfile from the remote repository. @@ -99,16 +132,11 @@ struct git_transport { int GIT_CALLBACK(download_pack)( git_transport *transport, git_repository *repo, - git_indexer_progress *stats, - git_indexer_progress_cb progress_cb, - void *progress_payload); + git_indexer_progress *stats); /** 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); @@ -124,7 +152,10 @@ struct git_transport { void GIT_CALLBACK(free)(git_transport *transport); }; +/** Current version for the `git_transport` structure */ #define GIT_TRANSPORT_VERSION 1 + +/** Static constructor for `git_transport` */ #define GIT_TRANSPORT_INIT {GIT_TRANSPORT_VERSION} /** @@ -270,14 +301,18 @@ GIT_EXTERN(int) git_transport_smart_certificate_check(git_transport *transport, 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 + * Get a copy of the remote connect options * - * The url is copied and must be freed by the caller. + * All data is copied and must be freed by the caller by calling + * `git_remote_connect_options_dispose`. * * @param out options struct to fill * @param transport the transport to extract the data from. + * @return 0 on success, or an error code */ -GIT_EXTERN(int) git_transport_smart_proxy_options(git_proxy_options *out, git_transport *transport); +GIT_EXTERN(int) git_transport_remote_connect_options( + git_remote_connect_options *out, + git_transport *transport); /* *** End of base transport interface *** @@ -289,7 +324,7 @@ typedef enum { GIT_SERVICE_UPLOADPACK_LS = 1, GIT_SERVICE_UPLOADPACK = 2, GIT_SERVICE_RECEIVEPACK_LS = 3, - GIT_SERVICE_RECEIVEPACK = 4, + GIT_SERVICE_RECEIVEPACK = 4 } git_smart_service_t; typedef struct git_smart_subtransport git_smart_subtransport; @@ -361,7 +396,14 @@ struct git_smart_subtransport { void GIT_CALLBACK(free)(git_smart_subtransport *transport); }; -/** A function which creates a new subtransport for the smart transport */ +/** + * A function that creates a new subtransport for the smart transport + * + * @param out the smart subtransport + * @param owner the transport owner + * @param param the input parameter + * @return 0 on success, or an error code + */ typedef int GIT_CALLBACK(git_smart_subtransport_cb)( git_smart_subtransport **out, git_transport *owner, @@ -404,6 +446,7 @@ typedef struct git_smart_subtransport_definition { * * @param out The newly created subtransport * @param owner The smart transport to own this subtransport + * @param param custom parameters for the subtransport * @return 0 or an error code */ GIT_EXTERN(int) git_smart_subtransport_http( @@ -416,6 +459,7 @@ GIT_EXTERN(int) git_smart_subtransport_http( * * @param out The newly created subtransport * @param owner The smart transport to own this subtransport + * @param param custom parameters for the subtransport * @return 0 or an error code */ GIT_EXTERN(int) git_smart_subtransport_git( @@ -428,6 +472,7 @@ GIT_EXTERN(int) git_smart_subtransport_git( * * @param out The newly created subtransport * @param owner The smart transport to own this subtransport + * @param param custom parameters for the subtransport * @return 0 or an error code */ GIT_EXTERN(int) git_smart_subtransport_ssh( @@ -437,4 +482,5 @@ GIT_EXTERN(int) git_smart_subtransport_ssh( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/tag.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/tag.h index a392136..3b0c12e 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/tag.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/tag.h @@ -15,7 +15,7 @@ /** * @file git2/tag.h - * @brief Git tag parsing routines + * @brief A (nearly) immutable pointer to a commit; useful for versioning * @defgroup git_tag Git tag management * @ingroup Git * @{ @@ -335,6 +335,7 @@ typedef int GIT_CALLBACK(git_tag_foreach_cb)(const char *name, git_oid *oid, voi * @param repo Repository * @param callback Callback function * @param payload Pointer to callback data (optional) + * @return 0 on success or an error code */ GIT_EXTERN(int) git_tag_foreach( git_repository *repo, @@ -362,6 +363,7 @@ GIT_EXTERN(int) git_tag_peel( * * @param out Pointer to store the copy of the tag * @param source Original tag to copy + * @return 0 */ GIT_EXTERN(int) git_tag_dup(git_tag **out, git_tag *source); @@ -379,4 +381,5 @@ GIT_EXTERN(int) git_tag_name_is_valid(int *valid, const char *name); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/trace.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/trace.h index 8cee3a9..62cb87c 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/trace.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/trace.h @@ -12,8 +12,8 @@ /** * @file git2/trace.h - * @brief Git tracing configuration routines - * @defgroup git_trace Git tracing configuration routines + * @brief Tracing functionality to introspect libgit2 in your application + * @defgroup git_trace Tracing functionality to introspect libgit2 in your application * @ingroup Git * @{ */ @@ -48,8 +48,13 @@ typedef enum { /** * An instance for a tracing function + * + * @param level the trace level + * @param msg the trace message */ -typedef void GIT_CALLBACK(git_trace_cb)(git_trace_level_t level, const char *msg); +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 @@ -64,4 +69,5 @@ GIT_EXTERN(int) git_trace_set(git_trace_level_t level, git_trace_cb cb); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/transaction.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/transaction.h index 4938570..212d329 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/transaction.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/transaction.h @@ -12,8 +12,8 @@ /** * @file git2/transaction.h - * @brief Git transactional reference routines - * @defgroup git_transaction Git transactional reference routines + * @brief Transactional reference handling + * @defgroup git_transaction Transactional reference handling * @ingroup Git * @{ */ @@ -118,4 +118,5 @@ GIT_EXTERN(void) git_transaction_free(git_transaction *tx); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/transport.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/transport.h index 5a27de9..04a7390 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/transport.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/transport.h @@ -15,8 +15,8 @@ /** * @file git2/transport.h - * @brief Git transport interfaces and functions - * @defgroup git_transport interfaces and functions + * @brief Transports are the low-level mechanism to connect to a remote server + * @defgroup git_transport Transports are the low-level mechanism to connect to a remote server * @ingroup Git * @{ */ @@ -30,10 +30,18 @@ GIT_BEGIN_DECL * @param str The message from the transport * @param len The length of the message * @param payload Payload provided by the caller + * @return 0 on success or an error code */ typedef int GIT_CALLBACK(git_transport_message_cb)(const char *str, int len, void *payload); -/** Signature of a function which creates a transport */ +/** + * Signature of a function which creates a transport. + * + * @param out the transport generate + * @param owner the owner for the transport + * @param param the param to the transport creation + * @return 0 on success or an error code + */ typedef int GIT_CALLBACK(git_transport_cb)(git_transport **out, git_remote *owner, void *param); /** @} */ diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/tree.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/tree.h index f2289fc..b8e2de2 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/tree.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/tree.h @@ -14,8 +14,8 @@ /** * @file git2/tree.h - * @brief Git tree parsing, loading routines - * @defgroup git_tree Git tree parsing, loading routines + * @brief Trees are collections of files and folders to make up the repository hierarchy + * @defgroup git_tree Trees are collections of files and folders to make up the repository hierarchy * @ingroup Git * @{ */ @@ -24,7 +24,7 @@ GIT_BEGIN_DECL /** * Lookup a tree object from the repository. * - * @param out Pointer to the looked up tree + * @param[out] 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 @@ -255,7 +255,7 @@ GIT_EXTERN(int) git_treebuilder_new( git_treebuilder **out, git_repository *repo, const git_tree *source); /** - * Clear all the entires in the builder + * Clear all the entries in the builder * * @param bld Builder to clear * @return 0 on success; error code otherwise @@ -345,6 +345,10 @@ GIT_EXTERN(int) git_treebuilder_remove( * 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). + * + * @param entry the tree entry for the callback to examine + * @param payload the payload from the caller + * @return 0 to do nothing, non-zero to remove the entry */ typedef int GIT_CALLBACK(git_treebuilder_filter_cb)( const git_tree_entry *entry, void *payload); @@ -379,14 +383,21 @@ GIT_EXTERN(int) git_treebuilder_filter( GIT_EXTERN(int) git_treebuilder_write( git_oid *id, git_treebuilder *bld); -/** Callback for the tree traversal method */ +/** + * Callback for the tree traversal method. + * + * @param root the current (relative) root to the entry + * @param entry the tree entry + * @param payload the caller-provided callback payload + * @return a positive value to skip the entry, a negative value to stop the walk + */ 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_POST = 1 /* Post-order */ } git_treewalk_mode; /** @@ -418,6 +429,7 @@ GIT_EXTERN(int) git_tree_walk( * * @param out Pointer to store the copy of the tree * @param source Original tree to copy + * @return 0 */ GIT_EXTERN(int) git_tree_dup(git_tree **out, git_tree *source); @@ -428,7 +440,7 @@ 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_REMOVE } git_tree_update_t; /** @@ -469,6 +481,6 @@ typedef struct { 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/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/types.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/types.h index aac8e42..a4afd18 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/types.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/types.h @@ -78,16 +78,21 @@ typedef enum { 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_REF_DELTA = 7 /**< A delta, base is given by object id. */ } git_object_t; -/** An open object database handle. */ +/** + * An object database stores the objects (commit, trees, blobs, tags, + * etc) for a repository. + */ 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 */ +/** + * A "raw" object read from the object database. + */ typedef struct git_odb_object git_odb_object; /** A stream to read/write from the ODB */ @@ -194,7 +199,18 @@ 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. */ +/** + * Annotated commits are commits with additional metadata about how the + * commit was resolved, which can be used for maintaining the user's + * "intent" through commands like merge and rebase. + * + * For example, if a user wants to conceptually "merge `HEAD`", then the + * commit portion of an annotated commit will point to the `HEAD` commit, + * but the _annotation_ will denote the ref `HEAD`. This allows git to + * perform the internal bookkeeping so that the system knows both the + * content of what is being merged but also how the content was looked up + * so that it can be recorded in the reflog appropriately. + */ typedef struct git_annotated_commit git_annotated_commit; /** Representation of a status collection */ @@ -208,14 +224,14 @@ 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_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_ALL = GIT_BRANCH_LOCAL|GIT_BRANCH_REMOTE } git_branch_t; /** Valid modes for index and tree entries. */ @@ -225,7 +241,7 @@ typedef enum { GIT_FILEMODE_BLOB = 0100644, GIT_FILEMODE_BLOB_EXECUTABLE = 0100755, GIT_FILEMODE_LINK = 0120000, - GIT_FILEMODE_COMMIT = 0160000, + GIT_FILEMODE_COMMIT = 0160000 } git_filemode_t; /** @@ -236,7 +252,7 @@ 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). + * which case it does not have backing configuration entries). */ typedef struct git_remote git_remote; @@ -334,7 +350,7 @@ typedef enum { 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_ALL = 4 /**< never dirty */ } git_submodule_ignore_t; /** @@ -350,7 +366,7 @@ typedef enum { typedef enum { GIT_SUBMODULE_RECURSE_NO = 0, GIT_SUBMODULE_RECURSE_YES = 1, - GIT_SUBMODULE_RECURSE_ONDEMAND = 2, + GIT_SUBMODULE_RECURSE_ONDEMAND = 2 } git_submodule_recurse_t; typedef struct git_writestream git_writestream; diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/version.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/version.h index 3503a62..587a101 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/version.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/version.h @@ -7,12 +7,71 @@ #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 +#include "common.h" -#define LIBGIT2_SOVERSION "1.3" +/** + * @file git2/version.h + * @brief The version of libgit2 + * @ingroup Git + * @{ + */ +GIT_BEGIN_DECL + +/** + * The version string for libgit2. This string follows semantic + * versioning (v2) guidelines. + */ +#define LIBGIT2_VERSION "1.9.1" + +/** The major version number for this version of libgit2. */ +#define LIBGIT2_VERSION_MAJOR 1 + +/** The minor version number for this version of libgit2. */ +#define LIBGIT2_VERSION_MINOR 9 + +/** The revision ("teeny") version number for this version of libgit2. */ +#define LIBGIT2_VERSION_REVISION 1 + +/** The Windows DLL patch number for this version of libgit2. */ +#define LIBGIT2_VERSION_PATCH 0 + +/** + * The prerelease string for this version of libgit2. For development + * (nightly) builds, this will be "alpha". For prereleases, this will be + * a prerelease name like "beta" or "rc1". For final releases, this will + * be `NULL`. + */ +#define LIBGIT2_VERSION_PRERELEASE NULL + +/** + * The library ABI soversion for this version of libgit2. This should + * only be changed when the library has a breaking ABI change, and so + * may not reflect the library's API version number. + */ +#define LIBGIT2_SOVERSION "1.9" + +/** + * An integer value representing the libgit2 version number. For example, + * libgit2 1.6.3 is 1060300. + */ +#define LIBGIT2_VERSION_NUMBER ( \ + (LIBGIT2_VERSION_MAJOR * 1000000) + \ + (LIBGIT2_VERSION_MINOR * 10000) + \ + (LIBGIT2_VERSION_REVISION * 100)) + +/** + * Compare the libgit2 version against a given version. Evaluates to true + * if the given major, minor, and revision values are greater than or equal + * to the currently running libgit2 version. For example: + * + * #if LIBGIT2_VERSION_CHECK(1, 6, 3) + * # error libgit2 version is >= 1.6.3 + * #endif + */ +#define LIBGIT2_VERSION_CHECK(major, minor, revision) \ + (LIBGIT2_VERSION_NUMBER >= ((major)*1000000)+((minor)*10000)+((revision)*100)) + +/** @} */ +GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/worktree.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/worktree.h index 23084d8..fd37517 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/worktree.h +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/git2/worktree.h @@ -11,11 +11,12 @@ #include "buffer.h" #include "types.h" #include "strarray.h" +#include "checkout.h" /** - * @file git2/worktrees.h - * @brief Git worktree related functions - * @defgroup git_commit Git worktree related functions + * @file git2/worktree.h + * @brief Additional working directories for a repository + * @defgroup git_commit Additional working directories for a repository * @ingroup Git * @{ */ @@ -52,6 +53,7 @@ GIT_EXTERN(int) git_worktree_lookup(git_worktree **out, git_repository *repo, co * * @param out Out-pointer for the newly allocated worktree * @param repo Repository to look up worktree for + * @return 0 or an error code */ GIT_EXTERN(int) git_worktree_open_from_repository(git_worktree **out, git_repository *repo); @@ -84,12 +86,22 @@ GIT_EXTERN(int) git_worktree_validate(const git_worktree *wt); 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 */ + int lock; /**< lock newly created worktree */ + int checkout_existing; /**< allow checkout of existing branch matching worktree name */ + git_reference *ref; /**< reference to use for the new worktree HEAD */ + + /** + * Options for the checkout. + */ + git_checkout_options checkout_options; } git_worktree_add_options; +/** Current version for the `git_worktree_add_options` structure */ #define GIT_WORKTREE_ADD_OPTIONS_VERSION 1 -#define GIT_WORKTREE_ADD_OPTIONS_INIT {GIT_WORKTREE_ADD_OPTIONS_VERSION,0,NULL} + +/** Static constructor for `git_worktree_add_options` */ +#define GIT_WORKTREE_ADD_OPTIONS_INIT { GIT_WORKTREE_ADD_OPTIONS_VERSION, \ + 0, 0, NULL, GIT_CHECKOUT_OPTIONS_INIT } /** * Initialize git_worktree_add_options structure @@ -185,7 +197,7 @@ typedef enum { /* 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_WORKING_TREE = 1u << 2 } git_worktree_prune_t; /** @@ -202,7 +214,10 @@ typedef struct git_worktree_prune_options { uint32_t flags; } git_worktree_prune_options; +/** Current version for the `git_worktree_prune_options` structure */ #define GIT_WORKTREE_PRUNE_OPTIONS_VERSION 1 + +/** Static constructor for `git_worktree_prune_options` */ #define GIT_WORKTREE_PRUNE_OPTIONS_INIT {GIT_WORKTREE_PRUNE_OPTIONS_VERSION,0} /** @@ -231,7 +246,13 @@ GIT_EXTERN(int) git_worktree_prune_options_init( * * 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. + * positive value. If the worktree is not prunable, an error + * message will be set (visible in `giterr_last`) with details about + * why. + * + * @param wt Worktree to check. + * @param opts The prunable options. + * @return 1 if the worktree is prunable, 0 otherwise, or an error code. */ GIT_EXTERN(int) git_worktree_is_prunable(git_worktree *wt, git_worktree_prune_options *opts); @@ -253,4 +274,5 @@ GIT_EXTERN(int) git_worktree_prune(git_worktree *wt, /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/libssh2.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/libssh2.h new file mode 100644 index 0000000..f47858a --- /dev/null +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/libssh2.h @@ -0,0 +1,1516 @@ +/* Copyright (C) Sara Golemon + * Copyright (C) Daniel Stenberg + * Copyright (C) Simon Josefsson + * All rights reserved. + * + * Redistribution and use in source and binary forms, + * with or without modification, are permitted provided + * that the following conditions are met: + * + * Redistributions of source code must retain the above + * copyright notice, this list of conditions and the + * following disclaimer. + * + * 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. + * + * Neither the name of the copyright holder nor the names + * of any other contributors may be used to endorse or + * promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + * CONTRIBUTORS "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 COPYRIGHT OWNER OR + * CONTRIBUTORS 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. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef LIBSSH2_H +#define LIBSSH2_H 1 + +#define LIBSSH2_COPYRIGHT "The libssh2 project and its contributors." + +/* We use underscore instead of dash when appending DEV in dev versions just + to make the BANNER define (used by src/session.c) be a valid SSH + banner. Release versions have no appended strings and may of course not + have dashes either. */ +#define LIBSSH2_VERSION "1.11.1" + +/* The numeric version number is also available "in parts" by using these + defines: */ +#define LIBSSH2_VERSION_MAJOR 1 +#define LIBSSH2_VERSION_MINOR 11 +#define LIBSSH2_VERSION_PATCH 1 + +/* This is the numeric version of the libssh2 version number, meant for easier + parsing and comparisons by programs. The LIBSSH2_VERSION_NUM define will + always follow this syntax: + + 0xXXYYZZ + + Where XX, YY and ZZ are the main version, release and patch numbers in + hexadecimal (using 8 bits each). All three numbers are always represented + using two digits. 1.2 would appear as "0x010200" while version 9.11.7 + appears as "0x090b07". + + This 6-digit (24 bits) hexadecimal number does not show pre-release number, + and it is always a greater number in a more recent release. It makes + comparisons with greater than and less than work. +*/ +#define LIBSSH2_VERSION_NUM 0x010b01 + +/* + * This is the date and time when the full source package was created. The + * timestamp is not stored in the source code repo, as the timestamp is + * properly set in the tarballs by the maketgz script. + * + * The format of the date should follow this template: + * + * "Mon Feb 12 11:35:33 UTC 2007" + */ +#define LIBSSH2_TIMESTAMP "Wed Oct 16 08:03:21 UTC 2024" + +#ifndef RC_INVOKED + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef _WIN32 +# include +# include +#endif + +#include +#include +#include +#include + +/* Allow alternate API prefix from CFLAGS or calling app */ +#ifndef LIBSSH2_API +# ifdef _WIN32 +# if defined(LIBSSH2_EXPORTS) || defined(_WINDLL) +# ifdef LIBSSH2_LIBRARY +# define LIBSSH2_API __declspec(dllexport) +# else +# define LIBSSH2_API __declspec(dllimport) +# endif /* LIBSSH2_LIBRARY */ +# else +# define LIBSSH2_API +# endif +# else /* !_WIN32 */ +# define LIBSSH2_API +# endif /* _WIN32 */ +#endif /* LIBSSH2_API */ + +#ifdef HAVE_SYS_UIO_H +# include +#endif + +#ifdef _MSC_VER +typedef unsigned char uint8_t; +typedef unsigned short int uint16_t; +typedef unsigned int uint32_t; +typedef __int32 int32_t; +typedef __int64 int64_t; +typedef unsigned __int64 uint64_t; +typedef unsigned __int64 libssh2_uint64_t; +typedef __int64 libssh2_int64_t; +#if (!defined(HAVE_SSIZE_T) && !defined(ssize_t)) +typedef SSIZE_T ssize_t; +#define HAVE_SSIZE_T +#endif +#else +#include +typedef unsigned long long libssh2_uint64_t; +typedef long long libssh2_int64_t; +#endif + +#ifdef _WIN32 +typedef SOCKET libssh2_socket_t; +#define LIBSSH2_INVALID_SOCKET INVALID_SOCKET +#define LIBSSH2_SOCKET_CLOSE(s) closesocket(s) +#else /* !_WIN32 */ +typedef int libssh2_socket_t; +#define LIBSSH2_INVALID_SOCKET -1 +#define LIBSSH2_SOCKET_CLOSE(s) close(s) +#endif /* _WIN32 */ + +/* Compile-time deprecation macros */ +#if !defined(LIBSSH2_DISABLE_DEPRECATION) && !defined(LIBSSH2_LIBRARY) +# if defined(_MSC_VER) +# if _MSC_VER >= 1400 +# define LIBSSH2_DEPRECATED(version, message) \ + __declspec(deprecated("since libssh2 " # version ". " message)) +# elif _MSC_VER >= 1310 +# define LIBSSH2_DEPRECATED(version, message) \ + __declspec(deprecated) +# endif +# elif defined(__GNUC__) && !defined(__INTEL_COMPILER) +# if (defined(__clang__) && __clang_major__ >= 3) || \ + (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)) +# define LIBSSH2_DEPRECATED(version, message) \ + __attribute__((deprecated("since libssh2 " # version ". " message))) +# elif __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 0) +# define LIBSSH2_DEPRECATED(version, message) \ + __attribute__((deprecated)) +# endif +# elif defined(__SUNPRO_C) && __SUNPRO_C >= 0x5130 +# define LIBSSH2_DEPRECATED(version, message) \ + __attribute__((deprecated)) +# endif +#endif + +#ifndef LIBSSH2_DEPRECATED +#define LIBSSH2_DEPRECATED(version, message) +#endif + +/* + * Determine whether there is small or large file support on windows. + */ + +#if defined(_MSC_VER) && !defined(_WIN32_WCE) +# if (_MSC_VER >= 900) && (_INTEGRAL_MAX_BITS >= 64) +# define LIBSSH2_USE_WIN32_LARGE_FILES +# else +# define LIBSSH2_USE_WIN32_SMALL_FILES +# endif +#endif + +#if defined(__MINGW32__) && !defined(LIBSSH2_USE_WIN32_LARGE_FILES) +# define LIBSSH2_USE_WIN32_LARGE_FILES +#endif + +#if defined(__WATCOMC__) && !defined(LIBSSH2_USE_WIN32_LARGE_FILES) +# define LIBSSH2_USE_WIN32_LARGE_FILES +#endif + +#if defined(__POCC__) +# undef LIBSSH2_USE_WIN32_LARGE_FILES +#endif + +#if defined(_WIN32) && !defined(LIBSSH2_USE_WIN32_LARGE_FILES) && \ + !defined(LIBSSH2_USE_WIN32_SMALL_FILES) +# define LIBSSH2_USE_WIN32_SMALL_FILES +#endif + +/* + * Large file (>2Gb) support using WIN32 functions. + */ + +#ifdef LIBSSH2_USE_WIN32_LARGE_FILES +# include +# define LIBSSH2_STRUCT_STAT_SIZE_FORMAT "%I64d" +typedef struct _stati64 libssh2_struct_stat; +typedef __int64 libssh2_struct_stat_size; +#endif + +/* + * Small file (<2Gb) support using WIN32 functions. + */ + +#ifdef LIBSSH2_USE_WIN32_SMALL_FILES +# ifndef _WIN32_WCE +# define LIBSSH2_STRUCT_STAT_SIZE_FORMAT "%d" +typedef struct _stat libssh2_struct_stat; +typedef off_t libssh2_struct_stat_size; +# endif +#endif + +#ifndef LIBSSH2_STRUCT_STAT_SIZE_FORMAT +# ifdef __VMS +/* We have to roll our own format here because %z is a C99-ism we don't + have. */ +# if __USE_OFF64_T || __USING_STD_STAT +# define LIBSSH2_STRUCT_STAT_SIZE_FORMAT "%Ld" +# else +# define LIBSSH2_STRUCT_STAT_SIZE_FORMAT "%d" +# endif +# else +# define LIBSSH2_STRUCT_STAT_SIZE_FORMAT "%zd" +# endif +typedef struct stat libssh2_struct_stat; +typedef off_t libssh2_struct_stat_size; +#endif + +/* Part of every banner, user specified or not */ +#define LIBSSH2_SSH_BANNER "SSH-2.0-libssh2_" LIBSSH2_VERSION + +#define LIBSSH2_SSH_DEFAULT_BANNER LIBSSH2_SSH_BANNER +#define LIBSSH2_SSH_DEFAULT_BANNER_WITH_CRLF LIBSSH2_SSH_DEFAULT_BANNER "\r\n" + +/* Defaults for pty requests */ +#define LIBSSH2_TERM_WIDTH 80 +#define LIBSSH2_TERM_HEIGHT 24 +#define LIBSSH2_TERM_WIDTH_PX 0 +#define LIBSSH2_TERM_HEIGHT_PX 0 + +/* 1/4 second */ +#define LIBSSH2_SOCKET_POLL_UDELAY 250000 +/* 0.25 * 120 == 30 seconds */ +#define LIBSSH2_SOCKET_POLL_MAXLOOPS 120 + +/* Maximum size to allow a payload to compress to, plays it safe by falling + short of spec limits */ +#define LIBSSH2_PACKET_MAXCOMP 32000 + +/* Maximum size to allow a payload to deccompress to, plays it safe by + allowing more than spec requires */ +#define LIBSSH2_PACKET_MAXDECOMP 40000 + +/* Maximum size for an inbound compressed payload, plays it safe by + overshooting spec limits */ +#define LIBSSH2_PACKET_MAXPAYLOAD 40000 + +/* Malloc callbacks */ +#define LIBSSH2_ALLOC_FUNC(name) void *name(size_t count, void **abstract) +#define LIBSSH2_REALLOC_FUNC(name) void *name(void *ptr, size_t count, \ + void **abstract) +#define LIBSSH2_FREE_FUNC(name) void name(void *ptr, void **abstract) + +typedef struct _LIBSSH2_USERAUTH_KBDINT_PROMPT +{ + unsigned char *text; + size_t length; + unsigned char echo; +} LIBSSH2_USERAUTH_KBDINT_PROMPT; + +typedef struct _LIBSSH2_USERAUTH_KBDINT_RESPONSE +{ + char *text; + unsigned int length; /* FIXME: change type to size_t */ +} LIBSSH2_USERAUTH_KBDINT_RESPONSE; + +typedef struct _LIBSSH2_SK_SIG_INFO { + uint8_t flags; + uint32_t counter; + unsigned char *sig_r; + size_t sig_r_len; + unsigned char *sig_s; + size_t sig_s_len; +} LIBSSH2_SK_SIG_INFO; + +/* 'publickey' authentication callback */ +#define LIBSSH2_USERAUTH_PUBLICKEY_SIGN_FUNC(name) \ + int name(LIBSSH2_SESSION *session, unsigned char **sig, size_t *sig_len, \ + const unsigned char *data, size_t data_len, void **abstract) + +/* 'keyboard-interactive' authentication callback */ +/* FIXME: name_len, instruction_len -> size_t, num_prompts -> unsigned int? */ +#define LIBSSH2_USERAUTH_KBDINT_RESPONSE_FUNC(name_) \ + void name_(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) + +/* SK authentication callback */ +#define LIBSSH2_USERAUTH_SK_SIGN_FUNC(name) \ + int name(LIBSSH2_SESSION *session, LIBSSH2_SK_SIG_INFO *sig_info, \ + const unsigned char *data, size_t data_len, \ + int algorithm, uint8_t flags, \ + const char *application, const unsigned char *key_handle, \ + size_t handle_len, \ + void **abstract) + +/* Flags for SK authentication */ +#define LIBSSH2_SK_PRESENCE_REQUIRED 0x01 +#define LIBSSH2_SK_VERIFICATION_REQUIRED 0x04 + +/* FIXME: update lengths to size_t (or ssize_t): */ + +/* Callbacks for special SSH packets */ +#define LIBSSH2_IGNORE_FUNC(name) \ + void name(LIBSSH2_SESSION *session, const char *message, int message_len, \ + void **abstract) + +#define LIBSSH2_DEBUG_FUNC(name) \ + void name(LIBSSH2_SESSION *session, int always_display, \ + const char *message, int message_len, \ + const char *language, int language_len, \ + void **abstract) + +#define LIBSSH2_DISCONNECT_FUNC(name) \ + void name(LIBSSH2_SESSION *session, int reason, \ + const char *message, int message_len, \ + const char *language, int language_len, \ + void **abstract) + +#define LIBSSH2_PASSWD_CHANGEREQ_FUNC(name) \ + void name(LIBSSH2_SESSION *session, char **newpw, int *newpw_len, \ + void **abstract) + +#define LIBSSH2_MACERROR_FUNC(name) \ + int name(LIBSSH2_SESSION *session, const char *packet, int packet_len, \ + void **abstract) + +#define LIBSSH2_X11_OPEN_FUNC(name) \ + void name(LIBSSH2_SESSION *session, LIBSSH2_CHANNEL *channel, \ + const char *shost, int sport, void **abstract) + +#define LIBSSH2_AUTHAGENT_FUNC(name) \ + void name(LIBSSH2_SESSION *session, LIBSSH2_CHANNEL *channel, \ + void **abstract) + +#define LIBSSH2_ADD_IDENTITIES_FUNC(name) \ + void name(LIBSSH2_SESSION *session, void *buffer, \ + const char *agent_path, void **abstract) + +#define LIBSSH2_AUTHAGENT_SIGN_FUNC(name) \ + int name(LIBSSH2_SESSION* session, \ + unsigned char *blob, unsigned int blen, \ + const unsigned char *data, unsigned int dlen, \ + unsigned char **signature, unsigned int *sigLen, \ + const char *agentPath, \ + void **abstract) + +#define LIBSSH2_CHANNEL_CLOSE_FUNC(name) \ + void name(LIBSSH2_SESSION *session, void **session_abstract, \ + LIBSSH2_CHANNEL *channel, void **channel_abstract) + +/* I/O callbacks */ +#define LIBSSH2_RECV_FUNC(name) \ + ssize_t name(libssh2_socket_t socket, \ + void *buffer, size_t length, \ + int flags, void **abstract) +#define LIBSSH2_SEND_FUNC(name) \ + ssize_t name(libssh2_socket_t socket, \ + const void *buffer, size_t length, \ + int flags, void **abstract) + +/* libssh2_session_callback_set() constants */ +#define LIBSSH2_CALLBACK_IGNORE 0 +#define LIBSSH2_CALLBACK_DEBUG 1 +#define LIBSSH2_CALLBACK_DISCONNECT 2 +#define LIBSSH2_CALLBACK_MACERROR 3 +#define LIBSSH2_CALLBACK_X11 4 +#define LIBSSH2_CALLBACK_SEND 5 +#define LIBSSH2_CALLBACK_RECV 6 +#define LIBSSH2_CALLBACK_AUTHAGENT 7 +#define LIBSSH2_CALLBACK_AUTHAGENT_IDENTITIES 8 +#define LIBSSH2_CALLBACK_AUTHAGENT_SIGN 9 + +/* libssh2_session_method_pref() constants */ +#define LIBSSH2_METHOD_KEX 0 +#define LIBSSH2_METHOD_HOSTKEY 1 +#define LIBSSH2_METHOD_CRYPT_CS 2 +#define LIBSSH2_METHOD_CRYPT_SC 3 +#define LIBSSH2_METHOD_MAC_CS 4 +#define LIBSSH2_METHOD_MAC_SC 5 +#define LIBSSH2_METHOD_COMP_CS 6 +#define LIBSSH2_METHOD_COMP_SC 7 +#define LIBSSH2_METHOD_LANG_CS 8 +#define LIBSSH2_METHOD_LANG_SC 9 +#define LIBSSH2_METHOD_SIGN_ALGO 10 + +/* flags */ +#define LIBSSH2_FLAG_SIGPIPE 1 +#define LIBSSH2_FLAG_COMPRESS 2 +#define LIBSSH2_FLAG_QUOTE_PATHS 3 + +typedef struct _LIBSSH2_SESSION LIBSSH2_SESSION; +typedef struct _LIBSSH2_CHANNEL LIBSSH2_CHANNEL; +typedef struct _LIBSSH2_LISTENER LIBSSH2_LISTENER; +typedef struct _LIBSSH2_KNOWNHOSTS LIBSSH2_KNOWNHOSTS; +typedef struct _LIBSSH2_AGENT LIBSSH2_AGENT; + +/* SK signature callback */ +typedef struct _LIBSSH2_PRIVKEY_SK { + int algorithm; + uint8_t flags; + const char *application; + const unsigned char *key_handle; + size_t handle_len; + LIBSSH2_USERAUTH_SK_SIGN_FUNC((*sign_callback)); + void **orig_abstract; +} LIBSSH2_PRIVKEY_SK; + +int +libssh2_sign_sk(LIBSSH2_SESSION *session, + unsigned char **sig, + size_t *sig_len, + const unsigned char *data, + size_t data_len, + void **abstract); + +typedef struct _LIBSSH2_POLLFD { + unsigned char type; /* LIBSSH2_POLLFD_* below */ + + union { + libssh2_socket_t socket; /* File descriptors -- examined with + system select() call */ + LIBSSH2_CHANNEL *channel; /* Examined by checking internal state */ + LIBSSH2_LISTENER *listener; /* Read polls only -- are inbound + connections waiting to be accepted? */ + } fd; + + unsigned long events; /* Requested Events */ + unsigned long revents; /* Returned Events */ +} LIBSSH2_POLLFD; + +/* Poll FD Descriptor Types */ +#define LIBSSH2_POLLFD_SOCKET 1 +#define LIBSSH2_POLLFD_CHANNEL 2 +#define LIBSSH2_POLLFD_LISTENER 3 + +/* Note: Win32 Doesn't actually have a poll() implementation, so some of these + values are faked with select() data */ +/* Poll FD events/revents -- Match sys/poll.h where possible */ +#define LIBSSH2_POLLFD_POLLIN 0x0001 /* Data available to be read or + connection available -- + All */ +#define LIBSSH2_POLLFD_POLLPRI 0x0002 /* Priority data available to + be read -- Socket only */ +#define LIBSSH2_POLLFD_POLLEXT 0x0002 /* Extended data available to + be read -- Channel only */ +#define LIBSSH2_POLLFD_POLLOUT 0x0004 /* Can may be written -- + Socket/Channel */ +/* revents only */ +#define LIBSSH2_POLLFD_POLLERR 0x0008 /* Error Condition -- Socket */ +#define LIBSSH2_POLLFD_POLLHUP 0x0010 /* HangUp/EOF -- Socket */ +#define LIBSSH2_POLLFD_SESSION_CLOSED 0x0010 /* Session Disconnect */ +#define LIBSSH2_POLLFD_POLLNVAL 0x0020 /* Invalid request -- Socket + Only */ +#define LIBSSH2_POLLFD_POLLEX 0x0040 /* Exception Condition -- + Socket/Win32 */ +#define LIBSSH2_POLLFD_CHANNEL_CLOSED 0x0080 /* Channel Disconnect */ +#define LIBSSH2_POLLFD_LISTENER_CLOSED 0x0080 /* Listener Disconnect */ + +#define HAVE_LIBSSH2_SESSION_BLOCK_DIRECTION +/* Block Direction Types */ +#define LIBSSH2_SESSION_BLOCK_INBOUND 0x0001 +#define LIBSSH2_SESSION_BLOCK_OUTBOUND 0x0002 + +/* Hash Types */ +#define LIBSSH2_HOSTKEY_HASH_MD5 1 +#define LIBSSH2_HOSTKEY_HASH_SHA1 2 +#define LIBSSH2_HOSTKEY_HASH_SHA256 3 + +/* Hostkey Types */ +#define LIBSSH2_HOSTKEY_TYPE_UNKNOWN 0 +#define LIBSSH2_HOSTKEY_TYPE_RSA 1 +#define LIBSSH2_HOSTKEY_TYPE_DSS 2 /* deprecated */ +#define LIBSSH2_HOSTKEY_TYPE_ECDSA_256 3 +#define LIBSSH2_HOSTKEY_TYPE_ECDSA_384 4 +#define LIBSSH2_HOSTKEY_TYPE_ECDSA_521 5 +#define LIBSSH2_HOSTKEY_TYPE_ED25519 6 + +/* Disconnect Codes (defined by SSH protocol) */ +#define SSH_DISCONNECT_HOST_NOT_ALLOWED_TO_CONNECT 1 +#define SSH_DISCONNECT_PROTOCOL_ERROR 2 +#define SSH_DISCONNECT_KEY_EXCHANGE_FAILED 3 +#define SSH_DISCONNECT_RESERVED 4 +#define SSH_DISCONNECT_MAC_ERROR 5 +#define SSH_DISCONNECT_COMPRESSION_ERROR 6 +#define SSH_DISCONNECT_SERVICE_NOT_AVAILABLE 7 +#define SSH_DISCONNECT_PROTOCOL_VERSION_NOT_SUPPORTED 8 +#define SSH_DISCONNECT_HOST_KEY_NOT_VERIFIABLE 9 +#define SSH_DISCONNECT_CONNECTION_LOST 10 +#define SSH_DISCONNECT_BY_APPLICATION 11 +#define SSH_DISCONNECT_TOO_MANY_CONNECTIONS 12 +#define SSH_DISCONNECT_AUTH_CANCELLED_BY_USER 13 +#define SSH_DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE 14 +#define SSH_DISCONNECT_ILLEGAL_USER_NAME 15 + +/* Error Codes (defined by libssh2) */ +#define LIBSSH2_ERROR_NONE 0 + +/* The library once used -1 as a generic error return value on numerous places + through the code, which subsequently was converted to + LIBSSH2_ERROR_SOCKET_NONE uses over time. As this is a generic error code, + the goal is to never ever return this code but instead make sure that a + more accurate and descriptive error code is used. */ +#define LIBSSH2_ERROR_SOCKET_NONE -1 + +#define LIBSSH2_ERROR_BANNER_RECV -2 +#define LIBSSH2_ERROR_BANNER_SEND -3 +#define LIBSSH2_ERROR_INVALID_MAC -4 +#define LIBSSH2_ERROR_KEX_FAILURE -5 +#define LIBSSH2_ERROR_ALLOC -6 +#define LIBSSH2_ERROR_SOCKET_SEND -7 +#define LIBSSH2_ERROR_KEY_EXCHANGE_FAILURE -8 +#define LIBSSH2_ERROR_TIMEOUT -9 +#define LIBSSH2_ERROR_HOSTKEY_INIT -10 +#define LIBSSH2_ERROR_HOSTKEY_SIGN -11 +#define LIBSSH2_ERROR_DECRYPT -12 +#define LIBSSH2_ERROR_SOCKET_DISCONNECT -13 +#define LIBSSH2_ERROR_PROTO -14 +#define LIBSSH2_ERROR_PASSWORD_EXPIRED -15 +#define LIBSSH2_ERROR_FILE -16 +#define LIBSSH2_ERROR_METHOD_NONE -17 +#define LIBSSH2_ERROR_AUTHENTICATION_FAILED -18 +#define LIBSSH2_ERROR_PUBLICKEY_UNRECOGNIZED \ + LIBSSH2_ERROR_AUTHENTICATION_FAILED +#define LIBSSH2_ERROR_PUBLICKEY_UNVERIFIED -19 +#define LIBSSH2_ERROR_CHANNEL_OUTOFORDER -20 +#define LIBSSH2_ERROR_CHANNEL_FAILURE -21 +#define LIBSSH2_ERROR_CHANNEL_REQUEST_DENIED -22 +#define LIBSSH2_ERROR_CHANNEL_UNKNOWN -23 +#define LIBSSH2_ERROR_CHANNEL_WINDOW_EXCEEDED -24 +#define LIBSSH2_ERROR_CHANNEL_PACKET_EXCEEDED -25 +#define LIBSSH2_ERROR_CHANNEL_CLOSED -26 +#define LIBSSH2_ERROR_CHANNEL_EOF_SENT -27 +#define LIBSSH2_ERROR_SCP_PROTOCOL -28 +#define LIBSSH2_ERROR_ZLIB -29 +#define LIBSSH2_ERROR_SOCKET_TIMEOUT -30 +#define LIBSSH2_ERROR_SFTP_PROTOCOL -31 +#define LIBSSH2_ERROR_REQUEST_DENIED -32 +#define LIBSSH2_ERROR_METHOD_NOT_SUPPORTED -33 +#define LIBSSH2_ERROR_INVAL -34 +#define LIBSSH2_ERROR_INVALID_POLL_TYPE -35 +#define LIBSSH2_ERROR_PUBLICKEY_PROTOCOL -36 +#define LIBSSH2_ERROR_EAGAIN -37 +#define LIBSSH2_ERROR_BUFFER_TOO_SMALL -38 +#define LIBSSH2_ERROR_BAD_USE -39 +#define LIBSSH2_ERROR_COMPRESS -40 +#define LIBSSH2_ERROR_OUT_OF_BOUNDARY -41 +#define LIBSSH2_ERROR_AGENT_PROTOCOL -42 +#define LIBSSH2_ERROR_SOCKET_RECV -43 +#define LIBSSH2_ERROR_ENCRYPT -44 +#define LIBSSH2_ERROR_BAD_SOCKET -45 +#define LIBSSH2_ERROR_KNOWN_HOSTS -46 +#define LIBSSH2_ERROR_CHANNEL_WINDOW_FULL -47 +#define LIBSSH2_ERROR_KEYFILE_AUTH_FAILED -48 +#define LIBSSH2_ERROR_RANDGEN -49 +#define LIBSSH2_ERROR_MISSING_USERAUTH_BANNER -50 +#define LIBSSH2_ERROR_ALGO_UNSUPPORTED -51 +#define LIBSSH2_ERROR_MAC_FAILURE -52 +#define LIBSSH2_ERROR_HASH_INIT -53 +#define LIBSSH2_ERROR_HASH_CALC -54 + +/* this is a define to provide the old (<= 1.2.7) name */ +#define LIBSSH2_ERROR_BANNER_NONE LIBSSH2_ERROR_BANNER_RECV + +/* Global API */ +#define LIBSSH2_INIT_NO_CRYPTO 0x0001 + +/* + * libssh2_init() + * + * Initialize the libssh2 functions. This typically initialize the + * crypto library. It uses a global state, and is not thread safe -- + * you must make sure this function is not called concurrently. + * + * Flags can be: + * 0: Normal initialize + * LIBSSH2_INIT_NO_CRYPTO: Do not initialize the crypto library (ie. + * OPENSSL_add_cipher_algoritms() for OpenSSL + * + * Returns 0 if succeeded, or a negative value for error. + */ +LIBSSH2_API int libssh2_init(int flags); + +/* + * libssh2_exit() + * + * Exit the libssh2 functions and free's all memory used internal. + */ +LIBSSH2_API void libssh2_exit(void); + +/* + * libssh2_free() + * + * Deallocate memory allocated by earlier call to libssh2 functions. + */ +LIBSSH2_API void libssh2_free(LIBSSH2_SESSION *session, void *ptr); + +/* + * libssh2_session_supported_algs() + * + * Fills algs with a list of supported acryptographic algorithms. Returns a + * non-negative number (number of supported algorithms) on success or a + * negative number (an error code) on failure. + * + * NOTE: on success, algs must be deallocated (by calling libssh2_free) when + * not needed anymore + */ +LIBSSH2_API int libssh2_session_supported_algs(LIBSSH2_SESSION* session, + int method_type, + const char ***algs); + +/* Session API */ +LIBSSH2_API LIBSSH2_SESSION * +libssh2_session_init_ex(LIBSSH2_ALLOC_FUNC((*my_alloc)), + LIBSSH2_FREE_FUNC((*my_free)), + LIBSSH2_REALLOC_FUNC((*my_realloc)), void *abstract); +#define libssh2_session_init() libssh2_session_init_ex(NULL, NULL, NULL, NULL) + +LIBSSH2_API void **libssh2_session_abstract(LIBSSH2_SESSION *session); + +typedef void (libssh2_cb_generic)(void); + +LIBSSH2_API libssh2_cb_generic * +libssh2_session_callback_set2(LIBSSH2_SESSION *session, int cbtype, + libssh2_cb_generic *callback); + +LIBSSH2_DEPRECATED(1.11.1, "Use libssh2_session_callback_set2()") +LIBSSH2_API void *libssh2_session_callback_set(LIBSSH2_SESSION *session, + int cbtype, void *callback); +LIBSSH2_API int libssh2_session_banner_set(LIBSSH2_SESSION *session, + const char *banner); +#ifndef LIBSSH2_NO_DEPRECATED +LIBSSH2_DEPRECATED(1.4.0, "Use libssh2_session_banner_set()") +LIBSSH2_API int libssh2_banner_set(LIBSSH2_SESSION *session, + const char *banner); + +LIBSSH2_DEPRECATED(1.2.8, "Use libssh2_session_handshake()") +LIBSSH2_API int libssh2_session_startup(LIBSSH2_SESSION *session, int sock); +#endif +LIBSSH2_API int libssh2_session_handshake(LIBSSH2_SESSION *session, + libssh2_socket_t sock); +LIBSSH2_API int libssh2_session_disconnect_ex(LIBSSH2_SESSION *session, + int reason, + const char *description, + const char *lang); +#define libssh2_session_disconnect(session, description) \ + libssh2_session_disconnect_ex((session), SSH_DISCONNECT_BY_APPLICATION, \ + (description), "") + +LIBSSH2_API int libssh2_session_free(LIBSSH2_SESSION *session); + +LIBSSH2_API const char *libssh2_hostkey_hash(LIBSSH2_SESSION *session, + int hash_type); + +LIBSSH2_API const char *libssh2_session_hostkey(LIBSSH2_SESSION *session, + size_t *len, int *type); + +LIBSSH2_API int libssh2_session_method_pref(LIBSSH2_SESSION *session, + int method_type, + const char *prefs); +LIBSSH2_API const char *libssh2_session_methods(LIBSSH2_SESSION *session, + int method_type); +LIBSSH2_API int libssh2_session_last_error(LIBSSH2_SESSION *session, + char **errmsg, + int *errmsg_len, int want_buf); +LIBSSH2_API int libssh2_session_last_errno(LIBSSH2_SESSION *session); +LIBSSH2_API int libssh2_session_set_last_error(LIBSSH2_SESSION* session, + int errcode, + const char *errmsg); +LIBSSH2_API int libssh2_session_block_directions(LIBSSH2_SESSION *session); + +LIBSSH2_API int libssh2_session_flag(LIBSSH2_SESSION *session, int flag, + int value); +LIBSSH2_API const char *libssh2_session_banner_get(LIBSSH2_SESSION *session); + +/* Userauth API */ +LIBSSH2_API char *libssh2_userauth_list(LIBSSH2_SESSION *session, + const char *username, + unsigned int username_len); +LIBSSH2_API int libssh2_userauth_banner(LIBSSH2_SESSION *session, + char **banner); +LIBSSH2_API int libssh2_userauth_authenticated(LIBSSH2_SESSION *session); + +LIBSSH2_API int +libssh2_userauth_password_ex(LIBSSH2_SESSION *session, + const char *username, + unsigned int username_len, + const char *password, + unsigned int password_len, + LIBSSH2_PASSWD_CHANGEREQ_FUNC + ((*passwd_change_cb))); + +#define libssh2_userauth_password(session, username, password) \ + libssh2_userauth_password_ex((session), (username), \ + (unsigned int)strlen(username), \ + (password), (unsigned int)strlen(password), \ + NULL) + +LIBSSH2_API int +libssh2_userauth_publickey_fromfile_ex(LIBSSH2_SESSION *session, + const char *username, + unsigned int username_len, + const char *publickey, + const char *privatekey, + const char *passphrase); + +#define libssh2_userauth_publickey_fromfile(session, username, publickey, \ + privatekey, passphrase) \ + libssh2_userauth_publickey_fromfile_ex((session), (username), \ + (unsigned int)strlen(username), \ + (publickey), \ + (privatekey), (passphrase)) + +LIBSSH2_API int +libssh2_userauth_publickey(LIBSSH2_SESSION *session, + const char *username, + const unsigned char *pubkeydata, + size_t pubkeydata_len, + LIBSSH2_USERAUTH_PUBLICKEY_SIGN_FUNC + ((*sign_callback)), + void **abstract); + +LIBSSH2_API int +libssh2_userauth_hostbased_fromfile_ex(LIBSSH2_SESSION *session, + const char *username, + unsigned int username_len, + const char *publickey, + const char *privatekey, + const char *passphrase, + const char *hostname, + unsigned int hostname_len, + const char *local_username, + unsigned int local_username_len); + +#define libssh2_userauth_hostbased_fromfile(session, username, publickey, \ + privatekey, passphrase, hostname) \ + libssh2_userauth_hostbased_fromfile_ex((session), (username), \ + (unsigned int)strlen(username), \ + (publickey), \ + (privatekey), (passphrase), \ + (hostname), \ + (unsigned int)strlen(hostname), \ + (username), \ + (unsigned int)strlen(username)) + +LIBSSH2_API int +libssh2_userauth_publickey_frommemory(LIBSSH2_SESSION *session, + const char *username, + size_t username_len, + const char *publickeyfiledata, + size_t publickeyfiledata_len, + const char *privatekeyfiledata, + size_t privatekeyfiledata_len, + const char *passphrase); + +/* + * response_callback is provided with filled by library prompts array, + * but client must allocate and fill individual responses. Responses + * array is already allocated. Responses data will be freed by libssh2 + * after callback return, but before subsequent callback invocation. + */ +LIBSSH2_API int +libssh2_userauth_keyboard_interactive_ex(LIBSSH2_SESSION* session, + const char *username, + unsigned int username_len, + LIBSSH2_USERAUTH_KBDINT_RESPONSE_FUNC + ((*response_callback))); + +#define libssh2_userauth_keyboard_interactive(session, username, \ + response_callback) \ + libssh2_userauth_keyboard_interactive_ex((session), (username), \ + (unsigned int)strlen(username), \ + (response_callback)) + +LIBSSH2_API int +libssh2_userauth_publickey_sk(LIBSSH2_SESSION *session, + const char *username, + size_t username_len, + const unsigned char *pubkeydata, + size_t pubkeydata_len, + const char *privatekeydata, + size_t privatekeydata_len, + const char *passphrase, + LIBSSH2_USERAUTH_SK_SIGN_FUNC + ((*sign_callback)), + void **abstract); + +LIBSSH2_API int libssh2_poll(LIBSSH2_POLLFD *fds, unsigned int nfds, + long timeout); + +/* Channel API */ +#define LIBSSH2_CHANNEL_WINDOW_DEFAULT (2*1024*1024) +#define LIBSSH2_CHANNEL_PACKET_DEFAULT 32768 +#define LIBSSH2_CHANNEL_MINADJUST 1024 + +/* Extended Data Handling */ +#define LIBSSH2_CHANNEL_EXTENDED_DATA_NORMAL 0 +#define LIBSSH2_CHANNEL_EXTENDED_DATA_IGNORE 1 +#define LIBSSH2_CHANNEL_EXTENDED_DATA_MERGE 2 + +#define SSH_EXTENDED_DATA_STDERR 1 + +/* Returned by any function that would block during a read/write operation */ +#define LIBSSH2CHANNEL_EAGAIN LIBSSH2_ERROR_EAGAIN + +LIBSSH2_API LIBSSH2_CHANNEL * +libssh2_channel_open_ex(LIBSSH2_SESSION *session, const char *channel_type, + unsigned int channel_type_len, + unsigned int window_size, unsigned int packet_size, + const char *message, unsigned int message_len); + +#define libssh2_channel_open_session(session) \ + libssh2_channel_open_ex((session), "session", sizeof("session") - 1, \ + LIBSSH2_CHANNEL_WINDOW_DEFAULT, \ + LIBSSH2_CHANNEL_PACKET_DEFAULT, NULL, 0) + +LIBSSH2_API LIBSSH2_CHANNEL * +libssh2_channel_direct_tcpip_ex(LIBSSH2_SESSION *session, const char *host, + int port, const char *shost, int sport); +#define libssh2_channel_direct_tcpip(session, host, port) \ + libssh2_channel_direct_tcpip_ex((session), (host), (port), "127.0.0.1", 22) + +LIBSSH2_API LIBSSH2_CHANNEL * +libssh2_channel_direct_streamlocal_ex(LIBSSH2_SESSION * session, + const char *socket_path, + const char *shost, int sport); + +LIBSSH2_API LIBSSH2_LISTENER * +libssh2_channel_forward_listen_ex(LIBSSH2_SESSION *session, const char *host, + int port, int *bound_port, + int queue_maxsize); +#define libssh2_channel_forward_listen(session, port) \ + libssh2_channel_forward_listen_ex((session), NULL, (port), NULL, 16) + +LIBSSH2_API int libssh2_channel_forward_cancel(LIBSSH2_LISTENER *listener); + +LIBSSH2_API LIBSSH2_CHANNEL * +libssh2_channel_forward_accept(LIBSSH2_LISTENER *listener); + +LIBSSH2_API int libssh2_channel_setenv_ex(LIBSSH2_CHANNEL *channel, + const char *varname, + unsigned int varname_len, + const char *value, + unsigned int value_len); + +#define libssh2_channel_setenv(channel, varname, value) \ + libssh2_channel_setenv_ex((channel), (varname), \ + (unsigned int)strlen(varname), (value), \ + (unsigned int)strlen(value)) + +LIBSSH2_API int libssh2_channel_request_auth_agent(LIBSSH2_CHANNEL *channel); + +LIBSSH2_API int libssh2_channel_request_pty_ex(LIBSSH2_CHANNEL *channel, + const char *term, + unsigned int term_len, + const char *modes, + unsigned int modes_len, + int width, int height, + int width_px, int height_px); +#define libssh2_channel_request_pty(channel, term) \ + libssh2_channel_request_pty_ex((channel), (term), \ + (unsigned int)strlen(term), \ + NULL, 0, \ + LIBSSH2_TERM_WIDTH, \ + LIBSSH2_TERM_HEIGHT, \ + LIBSSH2_TERM_WIDTH_PX, \ + LIBSSH2_TERM_HEIGHT_PX) + +LIBSSH2_API int libssh2_channel_request_pty_size_ex(LIBSSH2_CHANNEL *channel, + int width, int height, + int width_px, + int height_px); +#define libssh2_channel_request_pty_size(channel, width, height) \ + libssh2_channel_request_pty_size_ex((channel), (width), (height), 0, 0) + +LIBSSH2_API int libssh2_channel_x11_req_ex(LIBSSH2_CHANNEL *channel, + int single_connection, + const char *auth_proto, + const char *auth_cookie, + int screen_number); +#define libssh2_channel_x11_req(channel, screen_number) \ + libssh2_channel_x11_req_ex((channel), 0, NULL, NULL, (screen_number)) + +LIBSSH2_API int libssh2_channel_signal_ex(LIBSSH2_CHANNEL *channel, + const char *signame, + size_t signame_len); +#define libssh2_channel_signal(channel, signame) \ + libssh2_channel_signal_ex((channel), signame, strlen(signame)) + +LIBSSH2_API int libssh2_channel_process_startup(LIBSSH2_CHANNEL *channel, + const char *request, + unsigned int request_len, + const char *message, + unsigned int message_len); +#define libssh2_channel_shell(channel) \ + libssh2_channel_process_startup((channel), "shell", sizeof("shell") - 1, \ + NULL, 0) +#define libssh2_channel_exec(channel, command) \ + libssh2_channel_process_startup((channel), "exec", sizeof("exec") - 1, \ + (command), (unsigned int)strlen(command)) +#define libssh2_channel_subsystem(channel, subsystem) \ + libssh2_channel_process_startup((channel), "subsystem", \ + sizeof("subsystem") - 1, (subsystem), \ + (unsigned int)strlen(subsystem)) + +LIBSSH2_API ssize_t libssh2_channel_read_ex(LIBSSH2_CHANNEL *channel, + int stream_id, char *buf, + size_t buflen); +#define libssh2_channel_read(channel, buf, buflen) \ + libssh2_channel_read_ex((channel), 0, \ + (buf), (buflen)) +#define libssh2_channel_read_stderr(channel, buf, buflen) \ + libssh2_channel_read_ex((channel), SSH_EXTENDED_DATA_STDERR, \ + (buf), (buflen)) + +LIBSSH2_API int libssh2_poll_channel_read(LIBSSH2_CHANNEL *channel, + int extended); + +LIBSSH2_API unsigned long +libssh2_channel_window_read_ex(LIBSSH2_CHANNEL *channel, + unsigned long *read_avail, + unsigned long *window_size_initial); +#define libssh2_channel_window_read(channel) \ + libssh2_channel_window_read_ex((channel), NULL, NULL) + +#ifndef LIBSSH2_NO_DEPRECATED +LIBSSH2_DEPRECATED(1.1.0, "Use libssh2_channel_receive_window_adjust2()") +LIBSSH2_API unsigned long +libssh2_channel_receive_window_adjust(LIBSSH2_CHANNEL *channel, + unsigned long adjustment, + unsigned char force); +#endif +LIBSSH2_API int +libssh2_channel_receive_window_adjust2(LIBSSH2_CHANNEL *channel, + unsigned long adjustment, + unsigned char force, + unsigned int *storewindow); + +LIBSSH2_API ssize_t libssh2_channel_write_ex(LIBSSH2_CHANNEL *channel, + int stream_id, const char *buf, + size_t buflen); + +#define libssh2_channel_write(channel, buf, buflen) \ + libssh2_channel_write_ex((channel), 0, \ + (buf), (buflen)) +#define libssh2_channel_write_stderr(channel, buf, buflen) \ + libssh2_channel_write_ex((channel), SSH_EXTENDED_DATA_STDERR, \ + (buf), (buflen)) + +LIBSSH2_API unsigned long +libssh2_channel_window_write_ex(LIBSSH2_CHANNEL *channel, + unsigned long *window_size_initial); +#define libssh2_channel_window_write(channel) \ + libssh2_channel_window_write_ex((channel), NULL) + +LIBSSH2_API void libssh2_session_set_blocking(LIBSSH2_SESSION* session, + int blocking); +LIBSSH2_API int libssh2_session_get_blocking(LIBSSH2_SESSION* session); + +LIBSSH2_API void libssh2_channel_set_blocking(LIBSSH2_CHANNEL *channel, + int blocking); + +LIBSSH2_API void libssh2_session_set_timeout(LIBSSH2_SESSION* session, + long timeout); +LIBSSH2_API long libssh2_session_get_timeout(LIBSSH2_SESSION* session); + +LIBSSH2_API void libssh2_session_set_read_timeout(LIBSSH2_SESSION* session, + long timeout); +LIBSSH2_API long libssh2_session_get_read_timeout(LIBSSH2_SESSION* session); + +#ifndef LIBSSH2_NO_DEPRECATED +LIBSSH2_DEPRECATED(1.1.0, "libssh2_channel_handle_extended_data2()") +LIBSSH2_API void libssh2_channel_handle_extended_data(LIBSSH2_CHANNEL *channel, + int ignore_mode); +#endif +LIBSSH2_API int libssh2_channel_handle_extended_data2(LIBSSH2_CHANNEL *channel, + int ignore_mode); + +#ifndef LIBSSH2_NO_DEPRECATED +/* libssh2_channel_ignore_extended_data() is defined below for BC with version + * 0.1 + * + * Future uses should use libssh2_channel_handle_extended_data() directly if + * LIBSSH2_CHANNEL_EXTENDED_DATA_MERGE is passed, extended data will be read + * (FIFO) from the standard data channel + */ +/* DEPRECATED since 0.3.0. Use libssh2_channel_handle_extended_data2(). */ +#define libssh2_channel_ignore_extended_data(channel, ignore) \ + libssh2_channel_handle_extended_data((channel), (ignore) ? \ + LIBSSH2_CHANNEL_EXTENDED_DATA_IGNORE : \ + LIBSSH2_CHANNEL_EXTENDED_DATA_NORMAL) +#endif + +#define LIBSSH2_CHANNEL_FLUSH_EXTENDED_DATA -1 +#define LIBSSH2_CHANNEL_FLUSH_ALL -2 +LIBSSH2_API int libssh2_channel_flush_ex(LIBSSH2_CHANNEL *channel, + int streamid); +#define libssh2_channel_flush(channel) libssh2_channel_flush_ex((channel), 0) +#define libssh2_channel_flush_stderr(channel) \ + libssh2_channel_flush_ex((channel), SSH_EXTENDED_DATA_STDERR) + +LIBSSH2_API int libssh2_channel_get_exit_status(LIBSSH2_CHANNEL* channel); +LIBSSH2_API int libssh2_channel_get_exit_signal(LIBSSH2_CHANNEL* channel, + char **exitsignal, + size_t *exitsignal_len, + char **errmsg, + size_t *errmsg_len, + char **langtag, + size_t *langtag_len); +LIBSSH2_API int libssh2_channel_send_eof(LIBSSH2_CHANNEL *channel); +LIBSSH2_API int libssh2_channel_eof(LIBSSH2_CHANNEL *channel); +LIBSSH2_API int libssh2_channel_wait_eof(LIBSSH2_CHANNEL *channel); +LIBSSH2_API int libssh2_channel_close(LIBSSH2_CHANNEL *channel); +LIBSSH2_API int libssh2_channel_wait_closed(LIBSSH2_CHANNEL *channel); +LIBSSH2_API int libssh2_channel_free(LIBSSH2_CHANNEL *channel); + +#ifndef LIBSSH2_NO_DEPRECATED +LIBSSH2_DEPRECATED(1.7.0, "Use libssh2_scp_recv2()") +LIBSSH2_API LIBSSH2_CHANNEL *libssh2_scp_recv(LIBSSH2_SESSION *session, + const char *path, + struct stat *sb); +#endif +/* Use libssh2_scp_recv2() for large (> 2GB) file support on windows */ +LIBSSH2_API LIBSSH2_CHANNEL *libssh2_scp_recv2(LIBSSH2_SESSION *session, + const char *path, + libssh2_struct_stat *sb); +LIBSSH2_API LIBSSH2_CHANNEL *libssh2_scp_send_ex(LIBSSH2_SESSION *session, + const char *path, int mode, + size_t size, long mtime, + long atime); +LIBSSH2_API LIBSSH2_CHANNEL * +libssh2_scp_send64(LIBSSH2_SESSION *session, const char *path, int mode, + libssh2_int64_t size, time_t mtime, time_t atime); + +#define libssh2_scp_send(session, path, mode, size) \ + libssh2_scp_send_ex((session), (path), (mode), (size), 0, 0) + +/* DEPRECATED */ +LIBSSH2_API int libssh2_base64_decode(LIBSSH2_SESSION *session, char **dest, + unsigned int *dest_len, + const char *src, unsigned int src_len); + +LIBSSH2_API +const char *libssh2_version(int req_version_num); + +typedef enum { + libssh2_no_crypto = 0, + libssh2_openssl, + libssh2_gcrypt, + libssh2_mbedtls, + libssh2_wincng, + libssh2_os400qc3 +} libssh2_crypto_engine_t; + +LIBSSH2_API +libssh2_crypto_engine_t libssh2_crypto_engine(void); + +#define HAVE_LIBSSH2_KNOWNHOST_API 0x010101 /* since 1.1.1 */ +#define HAVE_LIBSSH2_VERSION_API 0x010100 /* libssh2_version since 1.1 */ +#define HAVE_LIBSSH2_CRYPTOENGINE_API 0x011100 /* libssh2_crypto_engine + since 1.11 */ + +struct libssh2_knownhost { + unsigned int magic; /* magic stored by the library */ + void *node; /* handle to the internal representation of this host */ + char *name; /* this is NULL if no plain text host name exists */ + char *key; /* key in base64/printable format */ + int typemask; +}; + +/* + * libssh2_knownhost_init() + * + * Init a collection of known hosts. Returns the pointer to a collection. + * + */ +LIBSSH2_API LIBSSH2_KNOWNHOSTS * +libssh2_knownhost_init(LIBSSH2_SESSION *session); + +/* + * libssh2_knownhost_add() + * + * Add a host and its associated key to the collection of known hosts. + * + * The 'type' argument specifies on what format the given host and keys are: + * + * plain - ascii "hostname.domain.tld" + * sha1 - SHA1( ) base64-encoded! + * custom - another hash + * + * If 'sha1' is selected as type, the salt must be provided to the salt + * argument. This too base64 encoded. + * + * The SHA-1 hash is what OpenSSH can be told to use in known_hosts files. If + * a custom type is used, salt is ignored and you must provide the host + * pre-hashed when checking for it in the libssh2_knownhost_check() function. + * + * The keylen parameter may be omitted (zero) if the key is provided as a + * NULL-terminated base64-encoded string. + */ + +/* host format (2 bits) */ +#define LIBSSH2_KNOWNHOST_TYPE_MASK 0xffff +#define LIBSSH2_KNOWNHOST_TYPE_PLAIN 1 +#define LIBSSH2_KNOWNHOST_TYPE_SHA1 2 /* always base64 encoded */ +#define LIBSSH2_KNOWNHOST_TYPE_CUSTOM 3 + +/* key format (2 bits) */ +#define LIBSSH2_KNOWNHOST_KEYENC_MASK (3<<16) +#define LIBSSH2_KNOWNHOST_KEYENC_RAW (1<<16) +#define LIBSSH2_KNOWNHOST_KEYENC_BASE64 (2<<16) + +/* type of key (4 bits) */ +#define LIBSSH2_KNOWNHOST_KEY_MASK (15<<18) +#define LIBSSH2_KNOWNHOST_KEY_SHIFT 18 +#define LIBSSH2_KNOWNHOST_KEY_RSA1 (1<<18) +#define LIBSSH2_KNOWNHOST_KEY_SSHRSA (2<<18) +#define LIBSSH2_KNOWNHOST_KEY_SSHDSS (3<<18) /* deprecated */ +#define LIBSSH2_KNOWNHOST_KEY_ECDSA_256 (4<<18) +#define LIBSSH2_KNOWNHOST_KEY_ECDSA_384 (5<<18) +#define LIBSSH2_KNOWNHOST_KEY_ECDSA_521 (6<<18) +#define LIBSSH2_KNOWNHOST_KEY_ED25519 (7<<18) +#define LIBSSH2_KNOWNHOST_KEY_UNKNOWN (15<<18) + +LIBSSH2_API int +libssh2_knownhost_add(LIBSSH2_KNOWNHOSTS *hosts, + const char *host, + const char *salt, + const char *key, size_t keylen, int typemask, + struct libssh2_knownhost **store); + +/* + * libssh2_knownhost_addc() + * + * Add a host and its associated key to the collection of known hosts. + * + * Takes a comment argument that may be NULL. A NULL comment indicates + * there is no comment and the entry will end directly after the key + * when written out to a file. An empty string "" comment will indicate an + * empty comment which will cause a single space to be written after the key. + * + * The 'type' argument specifies on what format the given host and keys are: + * + * plain - ascii "hostname.domain.tld" + * sha1 - SHA1( ) base64-encoded! + * custom - another hash + * + * If 'sha1' is selected as type, the salt must be provided to the salt + * argument. This too base64 encoded. + * + * The SHA-1 hash is what OpenSSH can be told to use in known_hosts files. + * If a custom type is used, salt is ignored and you must provide the host + * pre-hashed when checking for it in the libssh2_knownhost_check() function. + * + * The keylen parameter may be omitted (zero) if the key is provided as a + * NULL-terminated base64-encoded string. + */ + +LIBSSH2_API int +libssh2_knownhost_addc(LIBSSH2_KNOWNHOSTS *hosts, + const char *host, + const char *salt, + const char *key, size_t keylen, + const char *comment, size_t commentlen, int typemask, + struct libssh2_knownhost **store); + +/* + * libssh2_knownhost_check() + * + * Check a host and its associated key against the collection of known hosts. + * + * The type is the type/format of the given host name. + * + * plain - ascii "hostname.domain.tld" + * custom - prehashed base64 encoded. Note that this cannot use any salts. + * + * + * 'knownhost' may be set to NULL if you don't care about that info. + * + * Returns: + * + * LIBSSH2_KNOWNHOST_CHECK_* values, see below + * + */ + +#define LIBSSH2_KNOWNHOST_CHECK_MATCH 0 +#define LIBSSH2_KNOWNHOST_CHECK_MISMATCH 1 +#define LIBSSH2_KNOWNHOST_CHECK_NOTFOUND 2 +#define LIBSSH2_KNOWNHOST_CHECK_FAILURE 3 + +LIBSSH2_API int +libssh2_knownhost_check(LIBSSH2_KNOWNHOSTS *hosts, + const char *host, const char *key, size_t keylen, + int typemask, + struct libssh2_knownhost **knownhost); + +/* this function is identital to the above one, but also takes a port + argument that allows libssh2 to do a better check */ +LIBSSH2_API int +libssh2_knownhost_checkp(LIBSSH2_KNOWNHOSTS *hosts, + const char *host, int port, + const char *key, size_t keylen, + int typemask, + struct libssh2_knownhost **knownhost); + +/* + * libssh2_knownhost_del() + * + * Remove a host from the collection of known hosts. The 'entry' struct is + * retrieved by a call to libssh2_knownhost_check(). + * + */ +LIBSSH2_API int +libssh2_knownhost_del(LIBSSH2_KNOWNHOSTS *hosts, + struct libssh2_knownhost *entry); + +/* + * libssh2_knownhost_free() + * + * Free an entire collection of known hosts. + * + */ +LIBSSH2_API void +libssh2_knownhost_free(LIBSSH2_KNOWNHOSTS *hosts); + +/* + * libssh2_knownhost_readline() + * + * Pass in a line of a file of 'type'. It makes libssh2 read this line. + * + * LIBSSH2_KNOWNHOST_FILE_OPENSSH is the only supported type. + * + */ +LIBSSH2_API int +libssh2_knownhost_readline(LIBSSH2_KNOWNHOSTS *hosts, + const char *line, size_t len, int type); + +/* + * libssh2_knownhost_readfile() + * + * Add hosts+key pairs from a given file. + * + * Returns a negative value for error or number of successfully added hosts. + * + * This implementation currently only knows one 'type' (openssh), all others + * are reserved for future use. + */ + +#define LIBSSH2_KNOWNHOST_FILE_OPENSSH 1 + +LIBSSH2_API int +libssh2_knownhost_readfile(LIBSSH2_KNOWNHOSTS *hosts, + const char *filename, int type); + +/* + * libssh2_knownhost_writeline() + * + * Ask libssh2 to convert a known host to an output line for storage. + * + * Note that this function returns LIBSSH2_ERROR_BUFFER_TOO_SMALL if the given + * output buffer is too small to hold the desired output. + * + * This implementation currently only knows one 'type' (openssh), all others + * are reserved for future use. + * + */ +LIBSSH2_API int +libssh2_knownhost_writeline(LIBSSH2_KNOWNHOSTS *hosts, + struct libssh2_knownhost *known, + char *buffer, size_t buflen, + size_t *outlen, /* the amount of written data */ + int type); + +/* + * libssh2_knownhost_writefile() + * + * Write hosts+key pairs to a given file. + * + * This implementation currently only knows one 'type' (openssh), all others + * are reserved for future use. + */ + +LIBSSH2_API int +libssh2_knownhost_writefile(LIBSSH2_KNOWNHOSTS *hosts, + const char *filename, int type); + +/* + * libssh2_knownhost_get() + * + * Traverse the internal list of known hosts. Pass NULL to 'prev' to get + * the first one. Or pass a pointer to the previously returned one to get the + * next. + * + * Returns: + * 0 if a fine host was stored in 'store' + * 1 if end of hosts + * [negative] on errors + */ +LIBSSH2_API int +libssh2_knownhost_get(LIBSSH2_KNOWNHOSTS *hosts, + struct libssh2_knownhost **store, + struct libssh2_knownhost *prev); + +#define HAVE_LIBSSH2_AGENT_API 0x010202 /* since 1.2.2 */ + +struct libssh2_agent_publickey { + unsigned int magic; /* magic stored by the library */ + void *node; /* handle to the internal representation of key */ + unsigned char *blob; /* public key blob */ + size_t blob_len; /* length of the public key blob */ + char *comment; /* comment in printable format */ +}; + +/* + * libssh2_agent_init() + * + * Init an ssh-agent handle. Returns the pointer to the handle. + * + */ +LIBSSH2_API LIBSSH2_AGENT * +libssh2_agent_init(LIBSSH2_SESSION *session); + +/* + * libssh2_agent_connect() + * + * Connect to an ssh-agent. + * + * Returns 0 if succeeded, or a negative value for error. + */ +LIBSSH2_API int +libssh2_agent_connect(LIBSSH2_AGENT *agent); + +/* + * libssh2_agent_list_identities() + * + * Request an ssh-agent to list identities. + * + * Returns 0 if succeeded, or a negative value for error. + */ +LIBSSH2_API int +libssh2_agent_list_identities(LIBSSH2_AGENT *agent); + +/* + * libssh2_agent_get_identity() + * + * Traverse the internal list of public keys. Pass NULL to 'prev' to get + * the first one. Or pass a pointer to the previously returned one to get the + * next. + * + * Returns: + * 0 if a fine public key was stored in 'store' + * 1 if end of public keys + * [negative] on errors + */ +LIBSSH2_API int +libssh2_agent_get_identity(LIBSSH2_AGENT *agent, + struct libssh2_agent_publickey **store, + struct libssh2_agent_publickey *prev); + +/* + * libssh2_agent_userauth() + * + * Do publickey user authentication with the help of ssh-agent. + * + * Returns 0 if succeeded, or a negative value for error. + */ +LIBSSH2_API int +libssh2_agent_userauth(LIBSSH2_AGENT *agent, + const char *username, + struct libssh2_agent_publickey *identity); + +/* + * libssh2_agent_sign() + * + * Sign a payload using a system-installed ssh-agent. + * + * Returns 0 if succeeded, or a negative value for error. + */ +LIBSSH2_API int +libssh2_agent_sign(LIBSSH2_AGENT *agent, + struct libssh2_agent_publickey *identity, + unsigned char **sig, + size_t *s_len, + const unsigned char *data, + size_t d_len, + const char *method, + unsigned int method_len); + +/* + * libssh2_agent_disconnect() + * + * Close a connection to an ssh-agent. + * + * Returns 0 if succeeded, or a negative value for error. + */ +LIBSSH2_API int +libssh2_agent_disconnect(LIBSSH2_AGENT *agent); + +/* + * libssh2_agent_free() + * + * Free an ssh-agent handle. This function also frees the internal + * collection of public keys. + */ +LIBSSH2_API void +libssh2_agent_free(LIBSSH2_AGENT *agent); + +/* + * libssh2_agent_set_identity_path() + * + * Allows a custom agent identity socket path beyond SSH_AUTH_SOCK env + * + */ +LIBSSH2_API void +libssh2_agent_set_identity_path(LIBSSH2_AGENT *agent, + const char *path); + +/* + * libssh2_agent_get_identity_path() + * + * Returns the custom agent identity socket path if set + * + */ +LIBSSH2_API const char * +libssh2_agent_get_identity_path(LIBSSH2_AGENT *agent); + +/* + * libssh2_keepalive_config() + * + * Set how often keepalive messages should be sent. WANT_REPLY + * indicates whether the keepalive messages should request a response + * from the server. INTERVAL is number of seconds that can pass + * without any I/O, use 0 (the default) to disable keepalives. To + * avoid some busy-loop corner-cases, if you specify an interval of 1 + * it will be treated as 2. + * + * Note that non-blocking applications are responsible for sending the + * keepalive messages using libssh2_keepalive_send(). + */ +LIBSSH2_API void libssh2_keepalive_config(LIBSSH2_SESSION *session, + int want_reply, + unsigned int interval); + +/* + * libssh2_keepalive_send() + * + * Send a keepalive message if needed. SECONDS_TO_NEXT indicates how + * many seconds you can sleep after this call before you need to call + * it again. Returns 0 on success, or LIBSSH2_ERROR_SOCKET_SEND on + * I/O errors. + */ +LIBSSH2_API int libssh2_keepalive_send(LIBSSH2_SESSION *session, + int *seconds_to_next); + +/* NOTE NOTE NOTE + libssh2_trace() has no function in builds that aren't built with debug + enabled + */ +LIBSSH2_API int libssh2_trace(LIBSSH2_SESSION *session, int bitmask); +#define LIBSSH2_TRACE_TRANS (1<<1) +#define LIBSSH2_TRACE_KEX (1<<2) +#define LIBSSH2_TRACE_AUTH (1<<3) +#define LIBSSH2_TRACE_CONN (1<<4) +#define LIBSSH2_TRACE_SCP (1<<5) +#define LIBSSH2_TRACE_SFTP (1<<6) +#define LIBSSH2_TRACE_ERROR (1<<7) +#define LIBSSH2_TRACE_PUBLICKEY (1<<8) +#define LIBSSH2_TRACE_SOCKET (1<<9) + +typedef void (*libssh2_trace_handler_func)(LIBSSH2_SESSION*, + void *, + const char *, + size_t); +LIBSSH2_API int libssh2_trace_sethandler(LIBSSH2_SESSION *session, + void *context, + libssh2_trace_handler_func callback); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* !RC_INVOKED */ + +#endif /* LIBSSH2_H */ diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/libssh2_publickey.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/libssh2_publickey.h new file mode 100644 index 0000000..566acd6 --- /dev/null +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/libssh2_publickey.h @@ -0,0 +1,128 @@ +/* Copyright (C) Sara Golemon + * All rights reserved. + * + * Redistribution and use in source and binary forms, + * with or without modification, are permitted provided + * that the following conditions are met: + * + * Redistributions of source code must retain the above + * copyright notice, this list of conditions and the + * following disclaimer. + * + * 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. + * + * Neither the name of the copyright holder nor the names + * of any other contributors may be used to endorse or + * promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + * CONTRIBUTORS "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 COPYRIGHT OWNER OR + * CONTRIBUTORS 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. + */ + +/* Note: This include file is only needed for using the + * publickey SUBSYSTEM which is not the same as publickey + * authentication. For authentication you only need libssh2.h + * + * For more information on the publickey subsystem, + * refer to IETF draft: secsh-publickey + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef LIBSSH2_PUBLICKEY_H +#define LIBSSH2_PUBLICKEY_H 1 + +#include "libssh2.h" + +typedef struct _LIBSSH2_PUBLICKEY LIBSSH2_PUBLICKEY; + +typedef struct _libssh2_publickey_attribute { + const char *name; + unsigned long name_len; + const char *value; + unsigned long value_len; + char mandatory; +} libssh2_publickey_attribute; + +typedef struct _libssh2_publickey_list { + unsigned char *packet; /* For freeing */ + + const unsigned char *name; + unsigned long name_len; + const unsigned char *blob; + unsigned long blob_len; + unsigned long num_attrs; + libssh2_publickey_attribute *attrs; /* free me */ +} libssh2_publickey_list; + +/* Generally use the first macro here, but if both name and value are string + literals, you can use _fast() to take advantage of preprocessing */ +#define libssh2_publickey_attribute(name, value, mandatory) \ + { (name), strlen(name), (value), strlen(value), (mandatory) }, +#define libssh2_publickey_attribute_fast(name, value, mandatory) \ + { (name), sizeof(name) - 1, (value), sizeof(value) - 1, (mandatory) }, + +#ifdef __cplusplus +extern "C" { +#endif + +/* Publickey Subsystem */ +LIBSSH2_API LIBSSH2_PUBLICKEY * +libssh2_publickey_init(LIBSSH2_SESSION *session); + +LIBSSH2_API int +libssh2_publickey_add_ex(LIBSSH2_PUBLICKEY *pkey, + const unsigned char *name, + unsigned long name_len, + const unsigned char *blob, + unsigned long blob_len, char overwrite, + unsigned long num_attrs, + const libssh2_publickey_attribute attrs[]); +#define libssh2_publickey_add(pkey, name, blob, blob_len, overwrite, \ + num_attrs, attrs) \ + libssh2_publickey_add_ex((pkey), \ + (name), strlen(name), \ + (blob), (blob_len), \ + (overwrite), (num_attrs), (attrs)) + +LIBSSH2_API int libssh2_publickey_remove_ex(LIBSSH2_PUBLICKEY *pkey, + const unsigned char *name, + unsigned long name_len, + const unsigned char *blob, + unsigned long blob_len); +#define libssh2_publickey_remove(pkey, name, blob, blob_len) \ + libssh2_publickey_remove_ex((pkey), \ + (name), strlen(name), \ + (blob), (blob_len)) + +LIBSSH2_API int +libssh2_publickey_list_fetch(LIBSSH2_PUBLICKEY *pkey, + unsigned long *num_keys, + libssh2_publickey_list **pkey_list); +LIBSSH2_API void +libssh2_publickey_list_free(LIBSSH2_PUBLICKEY *pkey, + libssh2_publickey_list *pkey_list); + +LIBSSH2_API int libssh2_publickey_shutdown(LIBSSH2_PUBLICKEY *pkey); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* LIBSSH2_PUBLICKEY_H */ diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/libssh2_sftp.h b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/libssh2_sftp.h new file mode 100644 index 0000000..ab7b0af --- /dev/null +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/libssh2_sftp.h @@ -0,0 +1,382 @@ +/* Copyright (C) Sara Golemon + * All rights reserved. + * + * Redistribution and use in source and binary forms, + * with or without modification, are permitted provided + * that the following conditions are met: + * + * Redistributions of source code must retain the above + * copyright notice, this list of conditions and the + * following disclaimer. + * + * 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. + * + * Neither the name of the copyright holder nor the names + * of any other contributors may be used to endorse or + * promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + * CONTRIBUTORS "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 COPYRIGHT OWNER OR + * CONTRIBUTORS 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. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef LIBSSH2_SFTP_H +#define LIBSSH2_SFTP_H 1 + +#include "libssh2.h" + +#ifndef _WIN32 +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Note: Version 6 was documented at the time of writing + * However it was marked as "DO NOT IMPLEMENT" due to pending changes + * + * Let's start with Version 3 (The version found in OpenSSH) and go from there + */ +#define LIBSSH2_SFTP_VERSION 3 + +typedef struct _LIBSSH2_SFTP LIBSSH2_SFTP; +typedef struct _LIBSSH2_SFTP_HANDLE LIBSSH2_SFTP_HANDLE; +typedef struct _LIBSSH2_SFTP_ATTRIBUTES LIBSSH2_SFTP_ATTRIBUTES; +typedef struct _LIBSSH2_SFTP_STATVFS LIBSSH2_SFTP_STATVFS; + +/* Flags for open_ex() */ +#define LIBSSH2_SFTP_OPENFILE 0 +#define LIBSSH2_SFTP_OPENDIR 1 + +/* Flags for rename_ex() */ +#define LIBSSH2_SFTP_RENAME_OVERWRITE 0x00000001 +#define LIBSSH2_SFTP_RENAME_ATOMIC 0x00000002 +#define LIBSSH2_SFTP_RENAME_NATIVE 0x00000004 + +/* Flags for stat_ex() */ +#define LIBSSH2_SFTP_STAT 0 +#define LIBSSH2_SFTP_LSTAT 1 +#define LIBSSH2_SFTP_SETSTAT 2 + +/* Flags for symlink_ex() */ +#define LIBSSH2_SFTP_SYMLINK 0 +#define LIBSSH2_SFTP_READLINK 1 +#define LIBSSH2_SFTP_REALPATH 2 + +/* Flags for sftp_mkdir() */ +#define LIBSSH2_SFTP_DEFAULT_MODE -1 + +/* SFTP attribute flag bits */ +#define LIBSSH2_SFTP_ATTR_SIZE 0x00000001 +#define LIBSSH2_SFTP_ATTR_UIDGID 0x00000002 +#define LIBSSH2_SFTP_ATTR_PERMISSIONS 0x00000004 +#define LIBSSH2_SFTP_ATTR_ACMODTIME 0x00000008 +#define LIBSSH2_SFTP_ATTR_EXTENDED 0x80000000 + +/* SFTP statvfs flag bits */ +#define LIBSSH2_SFTP_ST_RDONLY 0x00000001 +#define LIBSSH2_SFTP_ST_NOSUID 0x00000002 + +struct _LIBSSH2_SFTP_ATTRIBUTES { + /* If flags & ATTR_* bit is set, then the value in this struct will be + * meaningful Otherwise it should be ignored + */ + unsigned long flags; + + libssh2_uint64_t filesize; + unsigned long uid, gid; + unsigned long permissions; + unsigned long atime, mtime; +}; + +struct _LIBSSH2_SFTP_STATVFS { + libssh2_uint64_t f_bsize; /* file system block size */ + libssh2_uint64_t f_frsize; /* fragment size */ + libssh2_uint64_t f_blocks; /* size of fs in f_frsize units */ + libssh2_uint64_t f_bfree; /* # free blocks */ + libssh2_uint64_t f_bavail; /* # free blocks for non-root */ + libssh2_uint64_t f_files; /* # inodes */ + libssh2_uint64_t f_ffree; /* # free inodes */ + libssh2_uint64_t f_favail; /* # free inodes for non-root */ + libssh2_uint64_t f_fsid; /* file system ID */ + libssh2_uint64_t f_flag; /* mount flags */ + libssh2_uint64_t f_namemax; /* maximum filename length */ +}; + +/* SFTP filetypes */ +#define LIBSSH2_SFTP_TYPE_REGULAR 1 +#define LIBSSH2_SFTP_TYPE_DIRECTORY 2 +#define LIBSSH2_SFTP_TYPE_SYMLINK 3 +#define LIBSSH2_SFTP_TYPE_SPECIAL 4 +#define LIBSSH2_SFTP_TYPE_UNKNOWN 5 +#define LIBSSH2_SFTP_TYPE_SOCKET 6 +#define LIBSSH2_SFTP_TYPE_CHAR_DEVICE 7 +#define LIBSSH2_SFTP_TYPE_BLOCK_DEVICE 8 +#define LIBSSH2_SFTP_TYPE_FIFO 9 + +/* + * Reproduce the POSIX file modes here for systems that are not POSIX + * compliant. + * + * These is used in "permissions" of "struct _LIBSSH2_SFTP_ATTRIBUTES" + */ +/* File type */ +#define LIBSSH2_SFTP_S_IFMT 0170000 /* type of file mask */ +#define LIBSSH2_SFTP_S_IFIFO 0010000 /* named pipe (fifo) */ +#define LIBSSH2_SFTP_S_IFCHR 0020000 /* character special */ +#define LIBSSH2_SFTP_S_IFDIR 0040000 /* directory */ +#define LIBSSH2_SFTP_S_IFBLK 0060000 /* block special */ +#define LIBSSH2_SFTP_S_IFREG 0100000 /* regular */ +#define LIBSSH2_SFTP_S_IFLNK 0120000 /* symbolic link */ +#define LIBSSH2_SFTP_S_IFSOCK 0140000 /* socket */ + +/* File mode */ +/* Read, write, execute/search by owner */ +#define LIBSSH2_SFTP_S_IRWXU 0000700 /* RWX mask for owner */ +#define LIBSSH2_SFTP_S_IRUSR 0000400 /* R for owner */ +#define LIBSSH2_SFTP_S_IWUSR 0000200 /* W for owner */ +#define LIBSSH2_SFTP_S_IXUSR 0000100 /* X for owner */ +/* Read, write, execute/search by group */ +#define LIBSSH2_SFTP_S_IRWXG 0000070 /* RWX mask for group */ +#define LIBSSH2_SFTP_S_IRGRP 0000040 /* R for group */ +#define LIBSSH2_SFTP_S_IWGRP 0000020 /* W for group */ +#define LIBSSH2_SFTP_S_IXGRP 0000010 /* X for group */ +/* Read, write, execute/search by others */ +#define LIBSSH2_SFTP_S_IRWXO 0000007 /* RWX mask for other */ +#define LIBSSH2_SFTP_S_IROTH 0000004 /* R for other */ +#define LIBSSH2_SFTP_S_IWOTH 0000002 /* W for other */ +#define LIBSSH2_SFTP_S_IXOTH 0000001 /* X for other */ + +/* macros to check for specific file types, added in 1.2.5 */ +#define LIBSSH2_SFTP_S_ISLNK(m) \ + (((m) & LIBSSH2_SFTP_S_IFMT) == LIBSSH2_SFTP_S_IFLNK) +#define LIBSSH2_SFTP_S_ISREG(m) \ + (((m) & LIBSSH2_SFTP_S_IFMT) == LIBSSH2_SFTP_S_IFREG) +#define LIBSSH2_SFTP_S_ISDIR(m) \ + (((m) & LIBSSH2_SFTP_S_IFMT) == LIBSSH2_SFTP_S_IFDIR) +#define LIBSSH2_SFTP_S_ISCHR(m) \ + (((m) & LIBSSH2_SFTP_S_IFMT) == LIBSSH2_SFTP_S_IFCHR) +#define LIBSSH2_SFTP_S_ISBLK(m) \ + (((m) & LIBSSH2_SFTP_S_IFMT) == LIBSSH2_SFTP_S_IFBLK) +#define LIBSSH2_SFTP_S_ISFIFO(m) \ + (((m) & LIBSSH2_SFTP_S_IFMT) == LIBSSH2_SFTP_S_IFIFO) +#define LIBSSH2_SFTP_S_ISSOCK(m) \ + (((m) & LIBSSH2_SFTP_S_IFMT) == LIBSSH2_SFTP_S_IFSOCK) + +/* SFTP File Transfer Flags -- (e.g. flags parameter to sftp_open()) + * Danger will robinson... APPEND doesn't have any effect on OpenSSH servers */ +#define LIBSSH2_FXF_READ 0x00000001 +#define LIBSSH2_FXF_WRITE 0x00000002 +#define LIBSSH2_FXF_APPEND 0x00000004 +#define LIBSSH2_FXF_CREAT 0x00000008 +#define LIBSSH2_FXF_TRUNC 0x00000010 +#define LIBSSH2_FXF_EXCL 0x00000020 + +/* SFTP Status Codes (returned by libssh2_sftp_last_error() ) */ +#define LIBSSH2_FX_OK 0UL +#define LIBSSH2_FX_EOF 1UL +#define LIBSSH2_FX_NO_SUCH_FILE 2UL +#define LIBSSH2_FX_PERMISSION_DENIED 3UL +#define LIBSSH2_FX_FAILURE 4UL +#define LIBSSH2_FX_BAD_MESSAGE 5UL +#define LIBSSH2_FX_NO_CONNECTION 6UL +#define LIBSSH2_FX_CONNECTION_LOST 7UL +#define LIBSSH2_FX_OP_UNSUPPORTED 8UL +#define LIBSSH2_FX_INVALID_HANDLE 9UL +#define LIBSSH2_FX_NO_SUCH_PATH 10UL +#define LIBSSH2_FX_FILE_ALREADY_EXISTS 11UL +#define LIBSSH2_FX_WRITE_PROTECT 12UL +#define LIBSSH2_FX_NO_MEDIA 13UL +#define LIBSSH2_FX_NO_SPACE_ON_FILESYSTEM 14UL +#define LIBSSH2_FX_QUOTA_EXCEEDED 15UL +#define LIBSSH2_FX_UNKNOWN_PRINCIPLE 16UL /* Initial mis-spelling */ +#define LIBSSH2_FX_UNKNOWN_PRINCIPAL 16UL +#define LIBSSH2_FX_LOCK_CONFlICT 17UL /* Initial mis-spelling */ +#define LIBSSH2_FX_LOCK_CONFLICT 17UL +#define LIBSSH2_FX_DIR_NOT_EMPTY 18UL +#define LIBSSH2_FX_NOT_A_DIRECTORY 19UL +#define LIBSSH2_FX_INVALID_FILENAME 20UL +#define LIBSSH2_FX_LINK_LOOP 21UL + +/* Returned by any function that would block during a read/write operation */ +#define LIBSSH2SFTP_EAGAIN LIBSSH2_ERROR_EAGAIN + +/* SFTP API */ +LIBSSH2_API LIBSSH2_SFTP *libssh2_sftp_init(LIBSSH2_SESSION *session); +LIBSSH2_API int libssh2_sftp_shutdown(LIBSSH2_SFTP *sftp); +LIBSSH2_API unsigned long libssh2_sftp_last_error(LIBSSH2_SFTP *sftp); +LIBSSH2_API LIBSSH2_CHANNEL *libssh2_sftp_get_channel(LIBSSH2_SFTP *sftp); + +/* File / Directory Ops */ +LIBSSH2_API LIBSSH2_SFTP_HANDLE * +libssh2_sftp_open_ex(LIBSSH2_SFTP *sftp, + const char *filename, + unsigned int filename_len, + unsigned long flags, + long mode, int open_type); +#define libssh2_sftp_open(sftp, filename, flags, mode) \ + libssh2_sftp_open_ex((sftp), \ + (filename), (unsigned int)strlen(filename), \ + (flags), (mode), LIBSSH2_SFTP_OPENFILE) +#define libssh2_sftp_opendir(sftp, path) \ + libssh2_sftp_open_ex((sftp), \ + (path), (unsigned int)strlen(path), \ + 0, 0, LIBSSH2_SFTP_OPENDIR) +LIBSSH2_API LIBSSH2_SFTP_HANDLE * +libssh2_sftp_open_ex_r(LIBSSH2_SFTP *sftp, + const char *filename, + size_t filename_len, + unsigned long flags, + long mode, int open_type, + LIBSSH2_SFTP_ATTRIBUTES *attrs); +#define libssh2_sftp_open_r(sftp, filename, flags, mode, attrs) \ + libssh2_sftp_open_ex_r((sftp), (filename), strlen(filename), \ + (flags), (mode), LIBSSH2_SFTP_OPENFILE, \ + (attrs)) + +LIBSSH2_API ssize_t libssh2_sftp_read(LIBSSH2_SFTP_HANDLE *handle, + char *buffer, size_t buffer_maxlen); + +LIBSSH2_API int libssh2_sftp_readdir_ex(LIBSSH2_SFTP_HANDLE *handle, \ + char *buffer, size_t buffer_maxlen, + char *longentry, + size_t longentry_maxlen, + LIBSSH2_SFTP_ATTRIBUTES *attrs); +#define libssh2_sftp_readdir(handle, buffer, buffer_maxlen, attrs) \ + libssh2_sftp_readdir_ex((handle), (buffer), (buffer_maxlen), NULL, 0, \ + (attrs)) + +LIBSSH2_API ssize_t libssh2_sftp_write(LIBSSH2_SFTP_HANDLE *handle, + const char *buffer, size_t count); +LIBSSH2_API int libssh2_sftp_fsync(LIBSSH2_SFTP_HANDLE *handle); + +LIBSSH2_API int libssh2_sftp_close_handle(LIBSSH2_SFTP_HANDLE *handle); +#define libssh2_sftp_close(handle) libssh2_sftp_close_handle(handle) +#define libssh2_sftp_closedir(handle) libssh2_sftp_close_handle(handle) + +LIBSSH2_API void libssh2_sftp_seek(LIBSSH2_SFTP_HANDLE *handle, size_t offset); +LIBSSH2_API void libssh2_sftp_seek64(LIBSSH2_SFTP_HANDLE *handle, + libssh2_uint64_t offset); +#define libssh2_sftp_rewind(handle) libssh2_sftp_seek64((handle), 0) + +LIBSSH2_API size_t libssh2_sftp_tell(LIBSSH2_SFTP_HANDLE *handle); +LIBSSH2_API libssh2_uint64_t libssh2_sftp_tell64(LIBSSH2_SFTP_HANDLE *handle); + +LIBSSH2_API int libssh2_sftp_fstat_ex(LIBSSH2_SFTP_HANDLE *handle, + LIBSSH2_SFTP_ATTRIBUTES *attrs, + int setstat); +#define libssh2_sftp_fstat(handle, attrs) \ + libssh2_sftp_fstat_ex((handle), (attrs), 0) +#define libssh2_sftp_fsetstat(handle, attrs) \ + libssh2_sftp_fstat_ex((handle), (attrs), 1) + +/* Miscellaneous Ops */ +LIBSSH2_API int libssh2_sftp_rename_ex(LIBSSH2_SFTP *sftp, + const char *source_filename, + unsigned int srouce_filename_len, + const char *dest_filename, + unsigned int dest_filename_len, + long flags); +#define libssh2_sftp_rename(sftp, sourcefile, destfile) \ + libssh2_sftp_rename_ex((sftp), \ + (sourcefile), (unsigned int)strlen(sourcefile), \ + (destfile), (unsigned int)strlen(destfile), \ + LIBSSH2_SFTP_RENAME_OVERWRITE | \ + LIBSSH2_SFTP_RENAME_ATOMIC | \ + LIBSSH2_SFTP_RENAME_NATIVE) + +LIBSSH2_API int libssh2_sftp_posix_rename_ex(LIBSSH2_SFTP *sftp, + const char *source_filename, + size_t srouce_filename_len, + const char *dest_filename, + size_t dest_filename_len); +#define libssh2_sftp_posix_rename(sftp, sourcefile, destfile) \ + libssh2_sftp_posix_rename_ex((sftp), (sourcefile), strlen(sourcefile), \ + (destfile), strlen(destfile)) + +LIBSSH2_API int libssh2_sftp_unlink_ex(LIBSSH2_SFTP *sftp, + const char *filename, + unsigned int filename_len); +#define libssh2_sftp_unlink(sftp, filename) \ + libssh2_sftp_unlink_ex((sftp), (filename), (unsigned int)strlen(filename)) + +LIBSSH2_API int libssh2_sftp_fstatvfs(LIBSSH2_SFTP_HANDLE *handle, + LIBSSH2_SFTP_STATVFS *st); + +LIBSSH2_API int libssh2_sftp_statvfs(LIBSSH2_SFTP *sftp, + const char *path, + size_t path_len, + LIBSSH2_SFTP_STATVFS *st); + +LIBSSH2_API int libssh2_sftp_mkdir_ex(LIBSSH2_SFTP *sftp, + const char *path, + unsigned int path_len, long mode); +#define libssh2_sftp_mkdir(sftp, path, mode) \ + libssh2_sftp_mkdir_ex((sftp), (path), (unsigned int)strlen(path), (mode)) + +LIBSSH2_API int libssh2_sftp_rmdir_ex(LIBSSH2_SFTP *sftp, + const char *path, + unsigned int path_len); +#define libssh2_sftp_rmdir(sftp, path) \ + libssh2_sftp_rmdir_ex((sftp), (path), (unsigned int)strlen(path)) + +LIBSSH2_API int libssh2_sftp_stat_ex(LIBSSH2_SFTP *sftp, + const char *path, + unsigned int path_len, + int stat_type, + LIBSSH2_SFTP_ATTRIBUTES *attrs); +#define libssh2_sftp_stat(sftp, path, attrs) \ + libssh2_sftp_stat_ex((sftp), (path), (unsigned int)strlen(path), \ + LIBSSH2_SFTP_STAT, (attrs)) +#define libssh2_sftp_lstat(sftp, path, attrs) \ + libssh2_sftp_stat_ex((sftp), (path), (unsigned int)strlen(path), \ + LIBSSH2_SFTP_LSTAT, (attrs)) +#define libssh2_sftp_setstat(sftp, path, attrs) \ + libssh2_sftp_stat_ex((sftp), (path), (unsigned int)strlen(path), \ + LIBSSH2_SFTP_SETSTAT, (attrs)) + +LIBSSH2_API int libssh2_sftp_symlink_ex(LIBSSH2_SFTP *sftp, + const char *path, + unsigned int path_len, + char *target, + unsigned int target_len, + int link_type); +#define libssh2_sftp_symlink(sftp, orig, linkpath) \ + libssh2_sftp_symlink_ex((sftp), \ + (orig), (unsigned int)strlen(orig), \ + (linkpath), (unsigned int)strlen(linkpath), \ + LIBSSH2_SFTP_SYMLINK) +#define libssh2_sftp_readlink(sftp, path, target, maxlen) \ + libssh2_sftp_symlink_ex((sftp), \ + (path), (unsigned int)strlen(path), \ + (target), (maxlen), \ + LIBSSH2_SFTP_READLINK) +#define libssh2_sftp_realpath(sftp, path, target, maxlen) \ + libssh2_sftp_symlink_ex((sftp), \ + (path), (unsigned int)strlen(path), \ + (target), (maxlen), \ + LIBSSH2_SFTP_REALPATH) + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* LIBSSH2_SFTP_H */ diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/module.modulemap b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/module.modulemap index fe5729d..3a9a9ba 100644 --- a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/module.modulemap +++ b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/Headers/module.modulemap @@ -28,4 +28,13 @@ module Clibgit2 { export * module * { export * } } + + // Expose libssh2 headers + explicit module libssh2 { + header "libssh2.h" + header "libssh2_sftp.h" + header "libssh2_publickey.h" + + export * + } } diff --git a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/libgit2_all.a b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/libgit2_all.a index 3f527fb..765a929 100644 Binary files a/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/libgit2_all.a and b/Clibgit2.xcframework/ios-arm64_x86_64-maccatalyst/libgit2_all.a differ diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2.h index 2961cc3..3457e5f 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2.h @@ -28,6 +28,7 @@ #include "git2/diff.h" #include "git2/email.h" #include "git2/errors.h" +#include "git2/experimental.h" #include "git2/filter.h" #include "git2/global.h" #include "git2/graph.h" diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/annotated_commit.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/annotated_commit.h index 3b7103f..04f3b1c 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/annotated_commit.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/annotated_commit.h @@ -13,9 +13,16 @@ /** * @file git2/annotated_commit.h - * @brief Git annotated commit routines + * @brief A commit and information about how it was looked up by the user. * @defgroup git_annotated_commit Git annotated commit routines * @ingroup Git + * + * An "annotated commit" is a commit that contains information about + * how the commit was resolved, which can be used for maintaining the + * user's "intent" through commands like merge and rebase. For example, + * if a user wants to "merge HEAD" then an annotated commit is used to + * both contain the HEAD commit _and_ the fact that it was resolved as + * the HEAD ref. * @{ */ GIT_BEGIN_DECL @@ -25,7 +32,7 @@ GIT_BEGIN_DECL * 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[out] 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 @@ -40,7 +47,7 @@ GIT_EXTERN(int) git_annotated_commit_from_ref( * 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[out] 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 @@ -67,7 +74,7 @@ GIT_EXTERN(int) git_annotated_commit_from_fetchhead( * 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[out] 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 @@ -84,7 +91,7 @@ GIT_EXTERN(int) git_annotated_commit_lookup( * 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[out] 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 diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/apply.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/apply.h index bc637df..7ab939d 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/apply.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/apply.h @@ -14,9 +14,12 @@ /** * @file git2/apply.h - * @brief Git patch application routines + * @brief Apply patches to the working directory or index * @defgroup git_apply Git patch application routines * @ingroup Git + * + * Mechanisms to apply a patch to the index, the working directory, + * or both. * @{ */ GIT_BEGIN_DECL @@ -32,6 +35,8 @@ GIT_BEGIN_DECL * * @param delta The delta to be applied * @param payload User-specified payload + * @return 0 if the delta is applied, < 0 if the apply process will be aborted + * or > 0 if the delta will not be applied. */ typedef int GIT_CALLBACK(git_apply_delta_cb)( const git_diff_delta *delta, @@ -48,27 +53,44 @@ typedef int GIT_CALLBACK(git_apply_delta_cb)( * * @param hunk The hunk to be applied * @param payload User-specified payload + * @return 0 if the hunk is applied, < 0 if the apply process will be aborted + * or > 0 if the hunk will not be applied. */ typedef int GIT_CALLBACK(git_apply_hunk_cb)( const git_diff_hunk *hunk, void *payload); -/** Flags controlling the behavior of git_apply */ +/** + * Flags controlling the behavior of `git_apply`. + * + * 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. + */ 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_CHECK = (1 << 0) } git_apply_flags_t; /** - * Apply options structure + * Apply options structure. + * + * 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. * * Initialize with `GIT_APPLY_OPTIONS_INIT`. Alternatively, you can * use `git_apply_options_init`. * - * @see git_apply_to_tree, git_apply + * @see git_apply_to_tree + * @see git_apply */ typedef struct { unsigned int version; /**< The version */ @@ -79,16 +101,29 @@ typedef struct { /** 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. */ + /** Payload passed to both `delta_cb` & `hunk_cb`. */ void *payload; - /** Bitmask of git_apply_flags_t */ + /** Bitmask of `git_apply_flags_t` */ unsigned int flags; } git_apply_options; +/** Current version for the `git_apply_options` structure */ #define GIT_APPLY_OPTIONS_VERSION 1 + +/** Static constructor for `git_apply_options` */ #define GIT_APPLY_OPTIONS_INIT {GIT_APPLY_OPTIONS_VERSION} +/** + * Initialize git_apply_options structure + * + * Initialize a `git_apply_options` with default values. Equivalent to creating + * an instance with GIT_APPLY_OPTIONS_INIT. + * + * @param opts The `git_apply_options` struct to initialize. + * @param version The struct version; pass `GIT_APPLY_OPTIONS_VERSION` + * @return 0 on success or -1 on failure. + */ GIT_EXTERN(int) git_apply_options_init(git_apply_options *opts, unsigned int version); /** @@ -127,7 +162,7 @@ typedef enum { * 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_BOTH = 2 } git_apply_location_t; /** diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/attr.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/attr.h index 3891a0c..e5216fe 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/attr.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/attr.h @@ -12,9 +12,13 @@ /** * @file git2/attr.h - * @brief Git attribute management routines + * @brief Attribute management routines * @defgroup git_attr Git attribute management routines * @ingroup Git + * + * Attributes specify additional information about how git should + * handle particular paths - for example, they may indicate whether + * a particular filter is applied, like LFS or line ending conversions. * @{ */ GIT_BEGIN_DECL @@ -83,7 +87,7 @@ 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_STRING /**< This attribute has a value */ } git_attr_value_t; /** @@ -114,16 +118,18 @@ GIT_EXTERN(git_attr_value_t) git_attr_value(const char *attr); * use index only for creating archives or for a bare repo (if an * index has been specified for the bare repo). */ + +/** Examine attribute in working directory, then index */ #define GIT_ATTR_CHECK_FILE_THEN_INDEX 0 +/** Examine attribute in index, then working directory */ #define GIT_ATTR_CHECK_INDEX_THEN_FILE 1 -#define GIT_ATTR_CHECK_INDEX_ONLY 2 +/** Examine attributes only in the index */ +#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. @@ -134,8 +140,12 @@ GIT_EXTERN(git_attr_value_t) git_attr_value(const char *attr); * Passing the `GIT_ATTR_CHECK_INCLUDE_COMMIT` flag will use attributes * from a `.gitattributes` file in a specific commit. */ + +/** Ignore system attributes */ #define GIT_ATTR_CHECK_NO_SYSTEM (1 << 2) +/** Honor `.gitattributes` in the HEAD revision */ #define GIT_ATTR_CHECK_INCLUDE_HEAD (1 << 3) +/** Honor `.gitattributes` in a specific commit */ #define GIT_ATTR_CHECK_INCLUDE_COMMIT (1 << 4) /** @@ -160,7 +170,10 @@ typedef struct { git_oid attr_commit_id; } git_attr_options; +/** Current version for the `git_attr_options` structure */ #define GIT_ATTR_OPTIONS_VERSION 1 + +/** Static constructor for `git_attr_options` */ #define GIT_ATTR_OPTIONS_INIT {GIT_ATTR_OPTIONS_VERSION} /** @@ -177,6 +190,7 @@ typedef struct { * 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. + * @return 0 or an error code. */ GIT_EXTERN(int) git_attr_get( const char **value_out, @@ -199,6 +213,7 @@ GIT_EXTERN(int) git_attr_get( * 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. + * @return 0 or an error code. */ GIT_EXTERN(int) git_attr_get_ext( const char **value_out, @@ -235,6 +250,7 @@ GIT_EXTERN(int) git_attr_get_ext( * 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. + * @return 0 or an error code. */ GIT_EXTERN(int) git_attr_get_many( const char **values_out, @@ -259,6 +275,7 @@ GIT_EXTERN(int) git_attr_get_many( * 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. + * @return 0 or an error code. */ GIT_EXTERN(int) git_attr_get_many_ext( const char **values_out, @@ -344,11 +361,16 @@ GIT_EXTERN(int) git_attr_cache_flush( * 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 + * file of the repository (plus the built-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"); + * + * @param repo The repository to add the macro in. + * @param name The name of the macro. + * @param values The value for the macro. + * @return 0 or an error code. */ GIT_EXTERN(int) git_attr_add_macro( git_repository *repo, diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/blame.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/blame.h index d193ce1..f3e6692 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/blame.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/blame.h @@ -13,9 +13,14 @@ /** * @file git2/blame.h - * @brief Git blame routines + * @brief Specify a file's most recent changes per-line * @defgroup git_blame Git blame routines * @ingroup Git + * + * Producing a "blame" (or "annotated history") decorates individual + * lines in a file with the commit that introduced that particular line + * of changes. This can be useful to indicate when and why a particular + * change was made. * @{ */ GIT_BEGIN_DECL @@ -73,7 +78,7 @@ typedef enum { GIT_BLAME_USE_MAILMAP = (1<<5), /** Ignore whitespace differences */ - GIT_BLAME_IGNORE_WHITESPACE = (1<<6), + GIT_BLAME_IGNORE_WHITESPACE = (1<<6) } git_blame_flag_t; /** @@ -87,7 +92,7 @@ typedef struct git_blame_options { unsigned int version; /** A combination of `git_blame_flag_t` */ - uint32_t flags; + unsigned int flags; /** * The lower bound on the number of alphanumeric characters that @@ -122,7 +127,10 @@ typedef struct git_blame_options { size_t max_line; } git_blame_options; +/** Current version for the `git_blame_options` structure */ #define GIT_BLAME_OPTIONS_VERSION 1 + +/** Static constructor for `git_blame_options` */ #define GIT_BLAME_OPTIONS_INIT {GIT_BLAME_OPTIONS_VERSION} /** @@ -165,6 +173,13 @@ typedef struct git_blame_hunk { */ git_signature *final_signature; + /** + * The committer 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_committer; + /** * The OID of the commit where this hunk was found. * This will usually be the same as `final_commit_id`, except when @@ -190,6 +205,18 @@ typedef struct git_blame_hunk { */ git_signature *orig_signature; + /** + * The committer 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_committer; + + /* + * The summary of the commit. + */ + const char *summary; + /** * The 1 iff the hunk has been tracked to a boundary commit (the root, * or the commit specified in git_blame_options.oldest_commit) @@ -197,13 +224,75 @@ typedef struct git_blame_hunk { char boundary; } git_blame_hunk; +/** + * Structure that represents a line in a blamed file. + */ +typedef struct git_blame_line { + const char *ptr; + size_t len; +} git_blame_line; /** Opaque structure to hold blame results */ typedef struct git_blame git_blame; +/** + * Gets the number of lines that exist in the blame structure. + * + * @param blame The blame structure to query. + * @return The number of line. + */ +GIT_EXTERN(size_t) git_blame_linecount(git_blame *blame); + /** * Gets the number of hunks that exist in the blame structure. + * + * @param blame The blame structure to query. + * @return The number of hunks. */ +GIT_EXTERN(size_t) git_blame_hunkcount(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_hunk_byindex( + git_blame *blame, + size_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_hunk_byline( + git_blame *blame, + size_t lineno); + +/** + * Gets the information about the line in the blame. + * + * @param blame the blame structure to query + * @param idx the (1-based) line number + * @return the blamed line, or NULL on error + */ +GIT_EXTERN(const git_blame_line *) git_blame_line_byindex( + git_blame *blame, + size_t idx); + +#ifndef GIT_DEPRECATE_HARD +/** + * Gets the number of hunks that exist in the blame structure. + * + * @param blame The blame structure to query. + * @return The number of hunks. + */ + GIT_EXTERN(uint32_t) git_blame_get_hunk_count(git_blame *blame); /** @@ -213,9 +302,9 @@ GIT_EXTERN(uint32_t) git_blame_get_hunk_count(git_blame *blame); * @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); +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. @@ -224,39 +313,58 @@ GIT_EXTERN(const git_blame_hunk*) git_blame_get_hunk_byindex( * @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); +GIT_EXTERN(const git_blame_hunk *) git_blame_get_hunk_byline( + git_blame *blame, + size_t lineno); +#endif /** - * Get the blame for a single file. + * Get the blame for a single file in the repository. * * @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.) + * @param options options for the blame operation or NULL + * @return 0 on success, or an error code */ GIT_EXTERN(int) git_blame_file( - git_blame **out, - git_repository *repo, - const char *path, - git_blame_options *options); + git_blame **out, + git_repository *repo, + const char *path, + git_blame_options *options); +/** + * Get the blame for a single file in the repository, using the specified + * buffer contents as the uncommitted changes of the file (the working + * directory contents). + * + * @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 contents the uncommitted changes + * @param contents_len the length of the changes buffer + * @param options options for the blame operation or NULL + * @return 0 on success, or an error code + */ +GIT_EXTERN(int) git_blame_file_from_buffer( + git_blame **out, + git_repository *repo, + const char *path, + const char *contents, + size_t contents_len, + 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. + * Get blame data for a file that has been modified in memory. The `blame` + * 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. + * 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 + * @param base 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 @@ -264,10 +372,10 @@ GIT_EXTERN(int) git_blame_file( * about the error) */ GIT_EXTERN(int) git_blame_buffer( - git_blame **out, - git_blame *reference, - const char *buffer, - size_t buffer_len); + git_blame **out, + git_blame *base, + const char *buffer, + size_t buffer_len); /** * Free memory allocated by git_blame_file or git_blame_buffer. diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/blob.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/blob.h index 8fc7391..0ed1685 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/blob.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/blob.h @@ -15,9 +15,13 @@ /** * @file git2/blob.h - * @brief Git blob load and write routines + * @brief A blob represents a file in a git repository. * @defgroup git_blob Git blob load and write routines * @ingroup Git + * + * A blob represents a file in a git repository. This is the raw data + * as it is stored in the repository itself. Blobs may be "filtered" + * to produce the on-disk content. * @{ */ GIT_BEGIN_DECL @@ -25,12 +29,15 @@ GIT_BEGIN_DECL /** * Lookup a blob object from a repository. * - * @param blob pointer to the looked up blob + * @param[out] 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); +GIT_EXTERN(int) git_blob_lookup( + git_blob **blob, + git_repository *repo, + const git_oid *id); /** * Lookup a blob object from a repository, @@ -38,7 +45,7 @@ GIT_EXTERN(int) git_blob_lookup(git_blob **blob, git_repository *repo, const git * * @see git_object_lookup_prefix * - * @param blob pointer to the looked up blob + * @param[out] 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 @@ -84,7 +91,7 @@ GIT_EXTERN(git_repository *) git_blob_owner(const git_blob *blob); * time. * * @param blob pointer to the blob - * @return the pointer, or NULL on error + * @return @type `unsigned char *` the pointer, or NULL on error */ GIT_EXTERN(const void *) git_blob_rawcontent(const git_blob *blob); @@ -92,12 +99,14 @@ 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 + * @return size in bytes */ GIT_EXTERN(git_object_size_t) git_blob_rawsize(const git_blob *blob); /** * Flags to control the functionality of `git_blob_filter`. + * + * @flags */ typedef enum { /** When set, filters will not be applied to binary files. */ @@ -119,7 +128,7 @@ typedef enum { * 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_ATTRIBUTES_FROM_COMMIT = (1 << 3) } git_blob_filter_flag_t; /** @@ -128,16 +137,34 @@ typedef enum { * Initialize with `GIT_BLOB_FILTER_OPTIONS_INIT`. Alternatively, you can * use `git_blob_filter_options_init`. * + * @options[version] GIT_BLOB_FILTER_OPTIONS_VERSION + * @options[init_macro] GIT_BLOB_FILTER_OPTIONS_INIT + * @options[init_function] git_blob_filter_options_init */ typedef struct { + /** Version number of the options structure. */ int version; - /** Flags to control the filtering process, see `git_blob_filter_flag_t` above */ + /** + * Flags to control the filtering process, see `git_blob_filter_flag_t` above. + * + * @type[flags] git_blob_filter_flag_t + */ uint32_t flags; #ifdef GIT_DEPRECATE_HARD + /** + * Unused and reserved for ABI compatibility. + * + * @deprecated this value should not be set + */ void *reserved; #else + /** + * This value is unused and reserved for API compatibility. + * + * @deprecated this value should not be set + */ git_oid *commit_id; #endif @@ -148,8 +175,18 @@ typedef struct { git_oid attr_commit_id; } git_blob_filter_options; +/** + * The current version number for the `git_blob_filter_options` structure ABI. + */ #define GIT_BLOB_FILTER_OPTIONS_VERSION 1 -#define GIT_BLOB_FILTER_OPTIONS_INIT {GIT_BLOB_FILTER_OPTIONS_VERSION, GIT_BLOB_FILTER_CHECK_FOR_BINARY} + +/** + * The default values for `git_blob_filter_options`. + */ +#define GIT_BLOB_FILTER_OPTIONS_INIT { \ + GIT_BLOB_FILTER_OPTIONS_VERSION, \ + GIT_BLOB_FILTER_CHECK_FOR_BINARY \ + } /** * Initialize git_blob_filter_options structure @@ -158,10 +195,12 @@ typedef struct { * 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`. + * @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); +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. @@ -171,7 +210,7 @@ GIT_EXTERN(int) git_blob_filter_options_init(git_blob_filter_options *opts, unsi * 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 + * The output is written into a `git_buf` which the caller must dispose * when done (via `git_buf_dispose`). * * If no filters need to be applied, then the `out` buffer will just @@ -183,7 +222,7 @@ GIT_EXTERN(int) git_blob_filter_options_init(git_blob_filter_options *opts, unsi * @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 + * @return @type[enum] git_error_code 0 on success or an error code */ GIT_EXTERN(int) git_blob_filter( git_buf *out, @@ -192,10 +231,10 @@ GIT_EXTERN(int) git_blob_filter( 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 + * Read a file from the working folder of a repository and write it + * to the object database. * - * @param id return the id of the written blob + * @param[out] 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, @@ -205,19 +244,23 @@ GIT_EXTERN(int) git_blob_filter( 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 + * Read a file from the filesystem (not necessarily inside the + * working folder of the repository) and write it to the object + * database. * - * @param id return the id of the written blob + * @param[out] 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); +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 + * Create a stream to write a new blob into the object database. * * 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 @@ -234,7 +277,7 @@ GIT_EXTERN(int) git_blob_create_from_disk(git_oid *id, git_repository *repo, con * 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[out] 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 @@ -247,11 +290,11 @@ GIT_EXTERN(int) git_blob_create_from_stream( const char *hintpath); /** - * Close the stream and write the blob to the object db + * Close the stream and finalize writing the blob to the object database. * * The stream will be closed and freed. * - * @param out the id of the new blob + * @param[out] out the id of the new blob * @param stream the stream to close * @return 0 or an error code */ @@ -260,9 +303,9 @@ GIT_EXTERN(int) git_blob_create_from_stream_commit( git_writestream *stream); /** - * Write an in-memory buffer to the ODB as a blob + * Write an in-memory buffer to the object database as a blob. * - * @param id return the id of the written blob + * @param[out] 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 @@ -272,24 +315,37 @@ 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. + * Determine if the blob content is most likely 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 + * @return @type bool 1 if the content of the blob is detected * as binary; 0 otherwise. */ GIT_EXTERN(int) git_blob_is_binary(const git_blob *blob); +/** + * Determine if the given content is most certainly binary or not; + * this is the same mechanism used by `git_blob_is_binary` but only + * looking at raw data. + * + * @param data The blob data which content should be analyzed + * @param len The length of the data + * @return 1 if the content of the blob is detected + * as binary; 0 otherwise. + */ +GIT_EXTERN(int) git_blob_data_is_binary(const char *data, size_t len); + /** * 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[out] out Pointer to store the copy of the object * @param source Original object to copy + * @return 0. */ GIT_EXTERN(int) git_blob_dup(git_blob **out, git_blob *source); diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/branch.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/branch.h index 24ea7f7..56d737d 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/branch.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/branch.h @@ -13,9 +13,15 @@ /** * @file git2/branch.h - * @brief Git branch parsing routines + * @brief Branch creation and handling * @defgroup git_branch Git branch management * @ingroup Git + * + * A branch is a specific type of reference, at any particular time, + * a git working directory typically is said to have a branch "checked out", + * meaning that commits that are created will be made "on" a branch. + * This occurs by updating the branch reference to point to the new + * commit. The checked out branch is indicated by the `HEAD` meta-ref. * @{ */ GIT_BEGIN_DECL @@ -33,16 +39,13 @@ GIT_BEGIN_DECL * See `git_tag_create()` for rules about valid names. * * @param out Pointer where to store the underlying reference. - * + * @param repo the repository to create the branch in. * @param branch_name Name for the branch; this name is - * validated for consistency. It should also not conflict with - * an already existing branch name. - * + * 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`. - * + * 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. @@ -61,15 +64,21 @@ GIT_EXTERN(int) git_branch_create( * 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 + * @param ref_out Pointer where to store the underlying reference. + * @param repo the repository to create the branch in. + * @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 Annotated 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. */ GIT_EXTERN(int) git_branch_create_from_annotated( git_reference **ref_out, - git_repository *repository, + git_repository *repo, const char *branch_name, - const git_annotated_commit *commit, + const git_annotated_commit *target, int force); /** @@ -127,8 +136,8 @@ GIT_EXTERN(void) git_branch_iterator_free(git_branch_iterator *iter); * 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()`. + * be valid anymore, and should be freed immediately by the user using + * `git_reference_free()`. * * @param out New reference object for the updated name. * @@ -220,7 +229,7 @@ GIT_EXTERN(int) git_branch_upstream( * @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` + * @return @type git_error_t 0 on success; GIT_ENOTFOUND if there's no branch named `branch_name` * or an error code */ GIT_EXTERN(int) git_branch_set_upstream( diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/buffer.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/buffer.h index 926f133..3fe4f85 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/buffer.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/buffer.h @@ -11,9 +11,12 @@ /** * @file git2/buffer.h - * @brief Buffer export structure - * + * @brief A data structure to return data to callers * @ingroup Git + * + * The `git_buf` buffer is used to return arbitrary data - typically + * strings - to callers. Callers are responsible for freeing the memory + * in a buffer with the `git_buf_dispose` function. * @{ */ GIT_BEGIN_DECL @@ -23,112 +26,51 @@ GIT_BEGIN_DECL * * 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. + * To make ownership clear in these cases, libgit2 uses `git_buf` to + * return this data. Callers should use `git_buf_dispose()` to release + * the memory when they are done. * - * 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. + * A `git_buf` contains a pointer to a NUL-terminated C string, and + * the length of the string (not including the NUL terminator). */ 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. + * The buffer contents. `ptr` points to the start of the buffer + * being returned. The buffer's length (in bytes) is specified + * by the `size` member of the structure, and contains a NUL + * terminator at position `(size + 1)`. */ - char *ptr; + 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. + * This field is reserved and unused. */ - size_t asize; + size_t reserved; /** - * `size` holds the size (in bytes) of the data that is actually used. + * The length (in bytes) of the buffer pointed to by `ptr`, + * not including a NUL terminator. */ size_t size; } git_buf; /** - * Static initializer for git_buf from static buffer + * Use to initialize a `git_buf` before passing it to a function that + * will populate it. */ -#define GIT_BUF_INIT_CONST(STR,LEN) { (char *)(STR), 0, (size_t)(LEN) } +#define GIT_BUF_INIT { NULL, 0, 0 } /** * 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. + * pointed to by `buffer->ptr`. * * @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 - /** @} */ +GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/cert.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/cert.h index 0ed38ff..7b91b63 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/cert.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/cert.h @@ -12,7 +12,7 @@ /** * @file git2/cert.h - * @brief Git certificate objects + * @brief TLS and SSH certificate handling * @defgroup git_cert Certificate objects * @ingroup Git * @{ @@ -44,7 +44,7 @@ typedef enum git_cert_t { * information about the certificate. This is used when using * curl. */ - GIT_CERT_STRARRAY, + GIT_CERT_STRARRAY } git_cert_t; /** @@ -82,7 +82,7 @@ typedef enum { /** SHA-256 is available */ GIT_CERT_SSH_SHA256 = (1 << 2), /** Raw hostkey is available */ - GIT_CERT_SSH_RAW = (1 << 3), + GIT_CERT_SSH_RAW = (1 << 3) } git_cert_ssh_t; typedef enum { @@ -169,4 +169,5 @@ typedef struct { /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/checkout.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/checkout.h index c7aeee4..bdea928 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/checkout.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/checkout.h @@ -13,9 +13,13 @@ /** * @file git2/checkout.h - * @brief Git checkout routines + * @brief Update the contents of the working directory * @defgroup git_checkout Git checkout routines * @ingroup Git + * + * Update the contents of the working directory, or a subset of the + * files in the working directory, to point to the data in the index + * or a specific commit. * @{ */ GIT_BEGIN_DECL @@ -31,17 +35,11 @@ GIT_BEGIN_DECL * 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. + * You give checkout one of two strategies for update: * - * - `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. + * - `GIT_CHECKOUT_SAFE` is the default, and similar to git's default, + * which will make modifications that will not lose changes in the + * working directory. * * | target == baseline | target != baseline | * ---------------------|-----------------------|----------------------| @@ -55,6 +53,10 @@ GIT_BEGIN_DECL * baseline present | | | * ---------------------|-----------------------|----------------------| * + * - `GIT_CHECKOUT_FORCE` will take any action to make the working + * directory match the target (including potentially discarding + * modified files). + * * 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. @@ -69,6 +71,9 @@ GIT_BEGIN_DECL * * There are some additional flags to modify the behavior of checkout: * + * - `GIT_CHECKOUT_DRY_RUN` is a dry-run strategy that checks for conflicts, + * etc., but doesn't make any actual changes. + * * - GIT_CHECKOUT_ALLOW_CONFLICTS makes SAFE mode apply safe file updates * even if there are conflicts (instead of cancelling the checkout). * @@ -102,29 +107,24 @@ GIT_BEGIN_DECL * 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. + * + * @flags */ 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. + * If the uncommitted changes don't conflict with the checked + * out files, the checkout will still proceed, leaving the + * changes intact. */ - GIT_CHECKOUT_SAFE = (1u << 0), + GIT_CHECKOUT_SAFE = 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. + * Allow all updates to force working directory to look like + * the index, potentially losing data in the process. */ GIT_CHECKOUT_FORCE = (1u << 1), - /** Allow checkout to recreate missing files */ GIT_CHECKOUT_RECREATE_MISSING = (1u << 2), @@ -178,20 +178,31 @@ typedef enum { 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. + * Perform a "dry run", reporting what _would_ be done but + * without actually making changes in the working directory + * or the index. */ GIT_CHECKOUT_DRY_RUN = (1u << 24), - + + /** Include common ancestor data in zdiff3 format for conflicts */ + GIT_CHECKOUT_CONFLICT_STYLE_ZDIFF3 = (1u << 25), + /** + * Do not do a checkout and do not fire callbacks; this is primarily + * useful only for internal functions that will perform the + * checkout themselves but need to pass checkout options into + * another function, for example, `git_clone`. + */ + GIT_CHECKOUT_NONE = (1u << 30), + + /* * 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_UPDATE_SUBMODULES_IF_CHANGED = (1u << 17) } git_checkout_strategy_t; /** @@ -207,6 +218,8 @@ typedef enum { * 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. + * + * @flags */ typedef enum { GIT_CHECKOUT_NOTIFY_NONE = 0, @@ -248,7 +261,17 @@ typedef struct { size_t chmod_calls; } git_checkout_perfdata; -/** Checkout notification callback function */ +/** + * Checkout notification callback function. + * + * @param why the notification reason + * @param path the path to the file being checked out + * @param baseline the baseline's diff file information + * @param target the checkout target diff file information + * @param workdir the working directory diff file information + * @param payload the user-supplied callback payload + * @return 0 on success, or an error code + */ typedef int GIT_CALLBACK(git_checkout_notify_cb)( git_checkout_notify_t why, const char *path, @@ -257,14 +280,26 @@ typedef int GIT_CALLBACK(git_checkout_notify_cb)( const git_diff_file *workdir, void *payload); -/** Checkout progress notification function */ +/** + * Checkout progress notification function. + * + * @param path the path to the file being checked out + * @param completed_steps number of checkout steps completed + * @param total_steps number of total steps in the checkout process + * @param payload the user-supplied callback payload + */ 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 */ +/** + * Checkout performance data reporting function. + * + * @param perfdata the performance data for the checkout + * @param payload the user-supplied callback payload + */ typedef void GIT_CALLBACK(git_checkout_perfdata_cb)( const git_checkout_perfdata *perfdata, void *payload); @@ -275,10 +310,18 @@ typedef void GIT_CALLBACK(git_checkout_perfdata_cb)( * Initialize with `GIT_CHECKOUT_OPTIONS_INIT`. Alternatively, you can * use `git_checkout_options_init`. * + * @options[version] GIT_CHECKOUT_OPTIONS_VERSION + * @options[init_macro] GIT_CHECKOUT_OPTIONS_INIT + * @options[init_function] git_checkout_options_init */ typedef struct git_checkout_options { unsigned int version; /**< The version */ + /** + * Checkout strategy. Default is a safe checkout. + * + * @type[flags] git_checkout_strategy_t + */ unsigned int checkout_strategy; /**< default will be a safe checkout */ int disable_filters; /**< don't apply filters like CRLF conversion */ @@ -286,7 +329,13 @@ typedef struct git_checkout_options { 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 */ + /** + * Checkout notification flags specify what operations the notify + * callback is invoked for. + * + * @type[flags] git_checkout_notify_t + */ + unsigned int notify_flags; /** * Optional callback to get notifications on specific file states. @@ -341,8 +390,12 @@ typedef struct git_checkout_options { void *perfdata_payload; } git_checkout_options; + +/** Current version for the `git_checkout_options` structure */ #define GIT_CHECKOUT_OPTIONS_VERSION 1 -#define GIT_CHECKOUT_OPTIONS_INIT {GIT_CHECKOUT_OPTIONS_VERSION, GIT_CHECKOUT_SAFE} + +/** Static constructor for `git_checkout_options` */ +#define GIT_CHECKOUT_OPTIONS_INIT { GIT_CHECKOUT_OPTIONS_VERSION } /** * Initialize git_checkout_options structure @@ -411,4 +464,5 @@ GIT_EXTERN(int) git_checkout_tree( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/cherrypick.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/cherrypick.h index 0e6a252..e6cf99e 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/cherrypick.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/cherrypick.h @@ -13,9 +13,12 @@ /** * @file git2/cherrypick.h - * @brief Git cherry-pick routines + * @brief Cherry-pick the contents of an individual commit * @defgroup git_cherrypick Git cherry-pick routines * @ingroup Git + * + * "Cherry-pick" will attempts to re-apply the changes in an + * individual commit to the current index and working directory. * @{ */ GIT_BEGIN_DECL @@ -33,8 +36,13 @@ typedef struct { git_checkout_options checkout_opts; /**< Options for the checkout */ } git_cherrypick_options; +/** Current version for the `git_cherrypick_options` structure */ #define GIT_CHERRYPICK_OPTIONS_VERSION 1 -#define GIT_CHERRYPICK_OPTIONS_INIT {GIT_CHERRYPICK_OPTIONS_VERSION, 0, GIT_MERGE_OPTIONS_INIT, GIT_CHECKOUT_OPTIONS_INIT} + +/** Static constructor for `git_cherrypick_options` */ +#define GIT_CHERRYPICK_OPTIONS_INIT { \ + GIT_CHERRYPICK_OPTIONS_VERSION, 0, \ + GIT_MERGE_OPTIONS_INIT, GIT_CHECKOUT_OPTIONS_INIT } /** * Initialize git_cherrypick_options structure @@ -89,4 +97,3 @@ GIT_EXTERN(int) git_cherrypick( GIT_END_DECL #endif - diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/clone.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/clone.h index 3c3ea26..b7a47ab 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/clone.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/clone.h @@ -17,9 +17,13 @@ /** * @file git2/clone.h - * @brief Git cloning routines + * @brief Clone a remote repository to the local disk * @defgroup git_clone Git cloning routines * @ingroup Git + * + * Clone will take a remote repository - located on a remote server + * accessible by HTTPS or SSH, or a repository located elsewhere on + * the local disk - and place a copy in the given local path. * @{ */ GIT_BEGIN_DECL @@ -49,7 +53,7 @@ typedef enum { * Bypass the git-aware transport, but do not try to use * hardlinks. */ - GIT_CLONE_LOCAL_NO_LINKS, + GIT_CLONE_LOCAL_NO_LINKS } git_clone_local_t; /** @@ -59,7 +63,7 @@ typedef enum { * 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[out] 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 @@ -74,14 +78,14 @@ typedef int GIT_CALLBACK(git_remote_create_cb)( void *payload); /** - * The signature of a function matchin git_repository_init, with an - * aditional void * as callback payload. + * The signature of a function matching git_repository_init, with an + * additional 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[out] 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 @@ -99,14 +103,17 @@ typedef int GIT_CALLBACK(git_repository_create_cb)( * Initialize with `GIT_CLONE_OPTIONS_INIT`. Alternatively, you can * use `git_clone_options_init`. * + * @options[version] GIT_CLONE_OPTIONS_VERSION + * @options[init_macro] GIT_CLONE_OPTIONS_INIT + * @options[init_function] 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`. + * checkout, set the `checkout_strategy` to `GIT_CHECKOUT_NONE` + * or `GIT_CHECKOUT_DRY_RUN`. */ git_checkout_options checkout_opts; @@ -163,10 +170,14 @@ typedef struct git_clone_options { void *remote_cb_payload; } git_clone_options; +/** Current version for the `git_clone_options` structure */ #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 } + +/** Static constructor for `git_clone_options` */ +#define GIT_CLONE_OPTIONS_INIT \ + { GIT_CLONE_OPTIONS_VERSION, \ + GIT_CHECKOUT_OPTIONS_INIT, \ + GIT_FETCH_OPTIONS_INIT } /** * Initialize git_clone_options structure @@ -189,7 +200,11 @@ GIT_EXTERN(int) git_clone_options_init( * 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 + * Note that the libgit2 library _must_ be initialized using + * `git_libgit2_init` before any APIs can be called, including + * this one. + * + * @param[out] 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 @@ -206,4 +221,5 @@ GIT_EXTERN(int) git_clone( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/commit.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/commit.h index 4d74b89..b998e18 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/commit.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/commit.h @@ -14,9 +14,13 @@ /** * @file git2/commit.h - * @brief Git commit parsing, formatting routines + * @brief A representation of a set of changes in the repository * @defgroup git_commit Git commit parsing, formatting routines * @ingroup Git + * + * A commit represents a set of changes made to the files within a + * repository, and metadata about who made the changes, and when the + * changes were made. * @{ */ GIT_BEGIN_DECL @@ -380,7 +384,38 @@ GIT_EXTERN(int) git_commit_create( * * All other parameters remain the same as `git_commit_create()`. * - * @see git_commit_create + * @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 + * + * @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_v( git_oid *id, @@ -394,6 +429,52 @@ GIT_EXTERN(int) git_commit_create_v( size_t parent_count, ...); +typedef struct { + unsigned int version; + + /** + * Flags for creating the commit. + * + * If `allow_empty_commit` is specified, a commit with no changes + * from the prior commit (and "empty" commit) is allowed. Otherwise, + * commit creation will be stopped. + */ + unsigned int allow_empty_commit : 1; + + /** The commit author, or NULL for the default. */ + const git_signature *author; + + /** The committer, or NULL for the default. */ + const git_signature *committer; + + /** Encoding for the commit message; leave NULL for default. */ + const char *message_encoding; +} git_commit_create_options; + +/** Current version for the `git_commit_create_options` structure */ +#define GIT_COMMIT_CREATE_OPTIONS_VERSION 1 + +/** Static constructor for `git_commit_create_options` */ +#define GIT_COMMIT_CREATE_OPTIONS_INIT { GIT_COMMIT_CREATE_OPTIONS_VERSION } + +/** + * Commits the staged changes in the repository; this is a near analog to + * `git commit -m message`. + * + * By default, empty commits are not allowed. + * + * @param id pointer to store the new commit's object id + * @param repo repository to commit changes in + * @param message the commit message + * @param opts options for creating the commit + * @return 0 on success, GIT_EUNCHANGED if there were no changes to commit, or an error code + */ +GIT_EXTERN(int) git_commit_create_from_stage( + git_oid *id, + git_repository *repo, + const char *message, + const git_commit_create_options *opts); + /** * Amend an existing commit by replacing only non-NULL values. * @@ -413,7 +494,36 @@ GIT_EXTERN(int) git_commit_create_v( * * All parameters have the same meanings as in `git_commit_create()`. * - * @see git_commit_create + * @param id Pointer in which to store the OID of the newly created commit + * + * @param commit_to_amend The commit to amend + * + * @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`. + * + * @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_amend( git_oid *id, @@ -479,6 +589,7 @@ GIT_EXTERN(int) git_commit_create_buffer( * to the commit and write it into the given repository. * * @param out the resulting commit id + * @param repo the repository to create the commit in. * @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. @@ -499,6 +610,7 @@ GIT_EXTERN(int) git_commit_create_with_signature( * * @param out Pointer to store the copy of the commit * @param source Original commit to copy + * @return 0 */ GIT_EXTERN(int) git_commit_dup(git_commit **out, git_commit *source); @@ -539,6 +651,25 @@ typedef int (*git_commit_create_cb)( const git_commit *parents[], void *payload); +/** An array of commits returned from the library */ +typedef struct git_commitarray { + git_commit *const *commits; + size_t count; +} git_commitarray; + +/** + * Free the commits contained in a commit array. This method should + * be called on `git_commitarray` objects that were provided by the + * library. Not doing so will result in a memory leak. + * + * This does not free the `git_commitarray` itself, since the library + * will never allocate that object directly itself. + * + * @param array The git_commitarray that contains commits to free + */ +GIT_EXTERN(void) git_commitarray_dispose(git_commitarray *array); + /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/common.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/common.h index 2ee8290..40a3903 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/common.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/common.h @@ -11,7 +11,9 @@ #include #ifdef __cplusplus + /** Start declarations in C mode for C++ compatibility */ # define GIT_BEGIN_DECL extern "C" { + /** End declarations in C mode */ # define GIT_END_DECL } #else /** Start declarations in C mode */ @@ -71,19 +73,19 @@ typedef size_t size_t; # 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 + * @brief Base platform functionality * @defgroup git_common Git common platform definitions * @ingroup Git + * + * Common platform functionality including introspecting libgit2 + * itself - information like how it was built, and the current + * running version. * @{ */ @@ -94,10 +96,10 @@ GIT_BEGIN_DECL * 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 ';' +#if (defined(_WIN32) && !defined(__CYGWIN__)) || defined(AMIGA) +# define GIT_PATH_LIST_SEPARATOR ';' #else -#define GIT_PATH_LIST_SEPARATOR ':' +# define GIT_PATH_LIST_SEPARATOR ':' #endif /** @@ -105,11 +107,6 @@ GIT_BEGIN_DECL */ #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. @@ -122,53 +119,91 @@ GIT_BEGIN_DECL GIT_EXTERN(int) git_libgit2_version(int *major, int *minor, int *rev); /** - * Combinations of these values describe the features with which libgit2 - * was compiled + * Return the prerelease state of the libgit2 library currently being + * used. For nightly builds during active development, this will be + * "alpha". Releases may have a "beta" or release candidate ("rc1", + * "rc2", etc) prerelease. For a final release, this function returns + * NULL. + * + * @return the name of the prerelease state or NULL + */ +GIT_EXTERN(const char *) git_libgit2_prerelease(void); + +/** + * Configurable features of libgit2; either optional settings (like + * threading), or features that can be enabled by one of a number of + * different backend "providers" (like HTTPS, which can be provided by + * OpenSSL, mbedTLS, or system libraries). */ 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), + /** + * libgit2 is thread-aware and can be used from multiple threads + * (as described in the documentation). + */ + GIT_FEATURE_THREADS = (1 << 0), + + /** HTTPS remotes */ + GIT_FEATURE_HTTPS = (1 << 1), + + /** SSH remotes */ + GIT_FEATURE_SSH = (1 << 2), + + /** Sub-second resolution in index timestamps */ + GIT_FEATURE_NSEC = (1 << 3), + + /** HTTP parsing; always available */ + GIT_FEATURE_HTTP_PARSER = (1 << 4), + + /** Regular expression support; always available */ + GIT_FEATURE_REGEX = (1 << 5), + + /** Internationalization support for filename translation */ + GIT_FEATURE_I18N = (1 << 6), + + /** NTLM support over HTTPS */ + GIT_FEATURE_AUTH_NTLM = (1 << 7), + + /** Kerberos (SPNEGO) authentication support over HTTPS */ + GIT_FEATURE_AUTH_NEGOTIATE = (1 << 8), + + /** zlib support; always available */ + GIT_FEATURE_COMPRESSION = (1 << 9), + + /** SHA1 object support; always available */ + GIT_FEATURE_SHA1 = (1 << 10), + + /** SHA256 object support */ + GIT_FEATURE_SHA256 = (1 << 11) } git_feature_t; /** * Query compile time options for libgit2. * * @return A combination of GIT_FEATURE_* values. + */ +GIT_EXTERN(int) git_libgit2_features(void); + +/** + * Query the backend details for the compile-time feature in libgit2. + * + * This will return the "backend" for the feature, which is useful for + * things like HTTPS or SSH support, that can have multiple backends + * that could be compiled in. * - * - 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. + * For example, when libgit2 is compiled with dynamic OpenSSL support, + * the feature backend will be `openssl-dynamic`. The feature backend + * names reflect the compilation options specified to the build system + * (though in all lower case). The backend _may_ be "builtin" for + * features that are provided by libgit2 itself. * - * - GIT_FEATURE_HTTPS - * Libgit2 supports the https:// protocol. This requires the openssl - * library to be found when compiling libgit2. + * If the feature is not supported by the library, this API returns + * `NULL`. * - * - GIT_FEATURE_SSH - * Libgit2 supports the SSH protocol for network operations. This requires - * the libssh2 library to be found when compiling libgit2 + * @param feature the feature to query details for + * @return the provider details, or NULL if the feature is not supported */ -GIT_EXTERN(int) git_libgit2_features(void); +GIT_EXTERN(const char *) git_libgit2_feature_backend( + git_feature_t feature); /** * Global library options @@ -211,7 +246,18 @@ typedef enum { GIT_OPT_SET_ODB_PACKED_PRIORITY, GIT_OPT_SET_ODB_LOOSE_PRIORITY, GIT_OPT_GET_EXTENSIONS, - GIT_OPT_SET_EXTENSIONS + GIT_OPT_SET_EXTENSIONS, + GIT_OPT_GET_OWNER_VALIDATION, + GIT_OPT_SET_OWNER_VALIDATION, + GIT_OPT_GET_HOMEDIR, + GIT_OPT_SET_HOMEDIR, + GIT_OPT_SET_SERVER_CONNECT_TIMEOUT, + GIT_OPT_GET_SERVER_CONNECT_TIMEOUT, + GIT_OPT_SET_SERVER_TIMEOUT, + GIT_OPT_GET_SERVER_TIMEOUT, + GIT_OPT_SET_USER_AGENT_PRODUCT, + GIT_OPT_GET_USER_AGENT_PRODUCT, + GIT_OPT_ADD_SSL_X509_CERT } git_libgit2_opt_t; /** @@ -316,15 +362,52 @@ typedef enum { * > - `path` is the location of a directory holding several * > certificates, one per file. * > + * > Calling `GIT_OPT_ADD_SSL_X509_CERT` may override the + * > data in `path`. + * > * > Either parameter may be `NULL`, but not both. * + * * opts(GIT_OPT_ADD_SSL_X509_CERT, const X509 *cert) + * + * > Add a raw X509 certificate into the SSL certs store. + * > This certificate is only used by libgit2 invocations + * > during the application lifetime and is not persisted + * > to disk. This certificate cannot be removed from the + * > application once is has been added. + * > + * > - `cert` is the raw X509 cert will be added to cert store. + * * * 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. + * > Set the value of the comment section of the User-Agent header. + * > This can be information about your product and its version. + * > By default this is "libgit2" followed by the libgit2 version. + * > + * > This value will be appended to User-Agent _product_, which + * > is typically set to "git/2.0". + * > + * > Set to the empty string ("") to not send any information in the + * > comment section, or set to NULL to restore the default. + * + * * 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_SET_USER_AGENT_PRODUCT, const char *user_agent_product) + * + * > Set the value of the product portion of the User-Agent header. + * > This defaults to "git/2.0", for compatibility with other git + * > clients. It is recommended to keep this as git/ for + * > compatibility with servers that do user-agent detection. * > - * > - `user_agent` is the value that will be delivered as the - * > User-Agent header on HTTP requests. + * > Set to the empty string ("") to not send any user-agent string, + * > or set to NULL to restore the default. + * + * * opts(GIT_OPT_GET_USER_AGENT_PRODUCT, git_buf *out) + * + * > Get the value of the User-Agent product header. + * > The User-Agent product is written to the `out` buffer. * * * opts(GIT_OPT_SET_WINDOWS_SHAREMODE, unsigned long value) * @@ -360,11 +443,6 @@ typedef enum { * > * > - `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, @@ -449,8 +527,43 @@ typedef enum { * > to support repositories with the `noop` extension but does want * > to support repositories with the `newext` extension. * + * opts(GIT_OPT_GET_OWNER_VALIDATION, int *enabled) + * > Gets the owner validation setting for repository + * > directories. + * + * opts(GIT_OPT_SET_OWNER_VALIDATION, int enabled) + * > Set that repository directories should be owned by the current + * > user. The default is to validate ownership. + * + * opts(GIT_OPT_GET_HOMEDIR, git_buf *out) + * > Gets the current user's home directory, as it will be used + * > for file lookups. The path is written to the `out` buffer. + * + * opts(GIT_OPT_SET_HOMEDIR, const char *path) + * > Sets the directory used as the current user's home directory, + * > for file lookups. + * > + * > - `path` directory of home directory. + * + * opts(GIT_OPT_GET_SERVER_CONNECT_TIMEOUT, int *timeout) + * > Gets the timeout (in milliseconds) to attempt connections to + * > a remote server. + * + * opts(GIT_OPT_SET_SERVER_CONNECT_TIMEOUT, int timeout) + * > Sets the timeout (in milliseconds) to attempt connections to + * > a remote server. Set to 0 to use the system default. Note that + * > this may not be able to be configured longer than the system + * > default, typically 75 seconds. + * + * opts(GIT_OPT_GET_SERVER_TIMEOUT, int *timeout) + * > Gets the timeout (in milliseconds) for reading from and writing + * > to a remote server. + * + * opts(GIT_OPT_SET_SERVER_TIMEOUT, int timeout) + * > Sets the timeout (in milliseconds) for reading from and writing + * > to a remote server. Set to 0 to use the system default. + * * @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, ...); diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/config.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/config.h index 7c8e388..f9c2667 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/config.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/config.h @@ -13,78 +13,134 @@ /** * @file git2/config.h - * @brief Git config management routines + * @brief Per-repository, per-user or per-system configuration * @defgroup git_config Git config management routines * @ingroup Git + * + * Git configuration affects the operation of the version control + * system, and can be specified on a per-repository basis, in user + * settings, or at the system level. * @{ */ 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. + * (from higher to lower) when reading or searching for config entries + * in git.git. Meaning that for the same key, the configuration in + * the local configuration is preferred over the configuration in + * the system configuration file. + * + * Callers can add their own custom configuration, beginning at the + * `GIT_CONFIG_LEVEL_APP` level. + * + * Writes, by default, occur in the highest priority level backend + * that is writable. This ordering can be overridden with + * `git_config_set_writeorder`. * * git_config_open_default() and git_repository_config() honor those * priority levels as well. + * + * @see git_config_open_default + * @see git_repository_config */ typedef enum { - /** System-wide on Windows, for compatibility with portable git */ + /** + * System-wide on Windows, for compatibility with "Portable Git". + */ GIT_CONFIG_LEVEL_PROGRAMDATA = 1, - /** System-wide configuration file; /etc/gitconfig on Linux systems */ + /** + * System-wide configuration file; `/etc/gitconfig` on Linux. + */ GIT_CONFIG_LEVEL_SYSTEM = 2, - /** XDG compatible configuration file; typically ~/.config/git/config */ + /** + * XDG compatible configuration file; typically + * `~/.config/git/config`. + */ GIT_CONFIG_LEVEL_XDG = 3, - /** User-specific configuration file (also called Global configuration - * file); typically ~/.gitconfig + /** + * Global configuration file is the user-specific configuration; + * typically `~/.gitconfig`. */ GIT_CONFIG_LEVEL_GLOBAL = 4, - /** Repository specific configuration file; $WORK_DIR/.git/config on - * non-bare repos + /** + * Local configuration, the repository-specific configuration file; + * typically `$GIT_DIR/config`. */ GIT_CONFIG_LEVEL_LOCAL = 5, - /** Application specific configuration file; freely defined by applications + /** + * Worktree-specific configuration; typically + * `$GIT_DIR/config.worktree`. */ - GIT_CONFIG_LEVEL_APP = 6, + GIT_CONFIG_LEVEL_WORKTREE = 6, - /** Represents the highest level available config file (i.e. the most - * specific config file available that actually is loaded) + /** + * Application-specific configuration file. Callers into libgit2 + * can add their own configuration beginning at this level. + */ + GIT_CONFIG_LEVEL_APP = 7, + + /** + * Not a configuration level; callers can use this value when + * querying configuration levels to specify that they want to + * have data from the highest-level currently configuration. + * This can be used to indicate that callers want the most + * specific config file available that actually is loaded. */ - GIT_CONFIG_HIGHEST_LEVEL = -1, + 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 */ + /** Name of the configuration entry (normalized). */ + const char *name; + + /** Literal (string) value of the entry. */ + const char *value; + + /** The type of backend that this entry exists in (eg, "file"). */ + const char *backend_type; + + /** + * The path to the origin of this entry. For config files, this is + * the path to the file. + */ + const char *origin_path; + + /** Depth of includes where this variable was found. */ + unsigned int include_depth; + + /** Configuration level for the file this was found in. */ + git_config_level_t level; } git_config_entry; /** - * Free a config entry + * Free a config entry. + * + * @param entry The entry to free. */ -GIT_EXTERN(void) git_config_entry_free(git_config_entry *); +GIT_EXTERN(void) git_config_entry_free(git_config_entry *entry); /** - * A config enumeration callback + * A config enumeration callback. * * @param entry the entry currently being enumerated * @param payload a user-specified pointer + * @return non-zero to terminate the iteration. */ typedef int GIT_CALLBACK(git_config_foreach_cb)(const git_config_entry *entry, void *payload); /** - * An opaque structure for a configuration iterator + * An opaque structure for a configuration iterator. */ typedef struct git_config_iterator git_config_iterator; @@ -119,7 +175,7 @@ typedef struct { * global configuration file. * * This method will not guess the path to the xdg compatible - * config file (.config/git/config). + * 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`. @@ -146,8 +202,8 @@ 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. + * 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 @@ -158,7 +214,7 @@ 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. + * 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 @@ -209,9 +265,9 @@ GIT_EXTERN(int) git_config_new(git_config **out); * @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 + * @param force replace config file at the given priority level * @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 @@ -269,9 +325,26 @@ GIT_EXTERN(int) git_config_open_level( * * @param out pointer in which to store the config object * @param config the config object in which to look + * @return 0 or an error code. */ GIT_EXTERN(int) git_config_open_global(git_config **out, git_config *config); +/** + * Set the write order for configuration backends. By default, the + * write ordering does not match the read ordering; for example, the + * worktree configuration is a high-priority for reading, but is not + * written to unless explicitly chosen. + * + * @param cfg the configuration to change write order of + * @param levels the ordering of levels for writing + * @param len the length of the levels array + * @return 0 or an error code + */ +GIT_EXTERN(int) git_config_set_writeorder( + git_config *cfg, + git_config_level_t *levels, + size_t len); + /** * Create a snapshot of the configuration * @@ -422,6 +495,7 @@ GIT_EXTERN(int) git_config_get_string_buf(git_buf *out, const git_config *cfg, c * 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 + * @return 0 or an error code. */ 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); @@ -437,14 +511,15 @@ GIT_EXTERN(int) git_config_get_multivar_foreach(const git_config *cfg, const cha * @param name the variable's name * @param regexp regular expression to filter which variables we're * interested in. Use NULL to indicate all + * @return 0 or an error code. */ 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. + * The pointers returned by this function are valid until the next call + * to `git_config_next` or until the iterator is freed. * * @param entry pointer to store the entry * @param iter the iterator @@ -515,6 +590,7 @@ GIT_EXTERN(int) git_config_set_string(git_config *cfg, const char *name, const c * @param name the variable's name * @param regexp a regular expression to indicate which values to replace * @param value the new value. + * @return 0 or an error code. */ GIT_EXTERN(int) git_config_set_multivar(git_config *cfg, const char *name, const char *regexp, const char *value); @@ -524,6 +600,7 @@ GIT_EXTERN(int) git_config_set_multivar(git_config *cfg, const char *name, const * * @param cfg the configuration * @param name the variable to delete + * @return 0 or an error code. */ GIT_EXTERN(int) git_config_delete_entry(git_config *cfg, const char *name); @@ -568,7 +645,8 @@ GIT_EXTERN(int) git_config_foreach( * `git_config_iterator_free` when done. * * @param out pointer to store the iterator - * @param cfg where to ge the variables from + * @param cfg where to get the variables from + * @return 0 or an error code. */ GIT_EXTERN(int) git_config_iterator_new(git_config_iterator **out, const git_config *cfg); @@ -585,6 +663,7 @@ GIT_EXTERN(int) git_config_iterator_new(git_config_iterator **out, const git_con * @param out pointer to store the iterator * @param cfg where to ge the variables from * @param regexp regular expression to match the names + * @return 0 or an error code. */ GIT_EXTERN(int) git_config_iterator_glob_new(git_config_iterator **out, const git_config *cfg, const char *regexp); @@ -662,6 +741,7 @@ GIT_EXTERN(int) git_config_get_mapped( * @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 + * @return 0 or an error code. */ GIT_EXTERN(int) git_config_lookup_map_value( int *out, @@ -678,6 +758,7 @@ GIT_EXTERN(int) git_config_lookup_map_value( * * @param out place to store the result of the parsing * @param value value to parse + * @return 0 or an error code. */ GIT_EXTERN(int) git_config_parse_bool(int *out, const char *value); @@ -690,6 +771,7 @@ GIT_EXTERN(int) git_config_parse_bool(int *out, const char *value); * * @param out place to store the result of the parsing * @param value value to parse + * @return 0 or an error code. */ GIT_EXTERN(int) git_config_parse_int32(int32_t *out, const char *value); @@ -702,6 +784,7 @@ GIT_EXTERN(int) git_config_parse_int32(int32_t *out, const char *value); * * @param out place to store the result of the parsing * @param value value to parse + * @return 0 or an error code. */ GIT_EXTERN(int) git_config_parse_int64(int64_t *out, const char *value); @@ -717,6 +800,7 @@ GIT_EXTERN(int) git_config_parse_int64(int64_t *out, const char *value); * * @param out placae to store the result of parsing * @param value the path to evaluate + * @return 0 or an error code. */ GIT_EXTERN(int) git_config_parse_path(git_buf *out, const char *value); @@ -735,6 +819,7 @@ GIT_EXTERN(int) git_config_parse_path(git_buf *out, const char *value); * @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 + * @return 0 or an error code. */ GIT_EXTERN(int) git_config_backend_foreach_match( git_config_backend *backend, @@ -763,4 +848,5 @@ GIT_EXTERN(int) git_config_lock(git_transaction **tx, git_config *cfg); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/credential.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/credential.h index 9426a6e..33755ca 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/credential.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/credential.h @@ -11,9 +11,12 @@ /** * @file git2/credential.h - * @brief Git authentication & credential management + * @brief Authentication and credential management * @defgroup git_credential Authentication & credential management * @ingroup Git + * + * Credentials specify how to authenticate to a remote system + * over HTTPS or SSH. * @{ */ GIT_BEGIN_DECL @@ -75,7 +78,7 @@ typedef enum { * * @see git_credential_ssh_key_memory_new */ - GIT_CREDENTIAL_SSH_MEMORY = (1u << 6), + GIT_CREDENTIAL_SSH_MEMORY = (1u << 6) } git_credential_t; /** @@ -119,7 +122,7 @@ typedef struct git_credential_ssh_custom git_credential_ssh_custom; * 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[out] 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. @@ -241,6 +244,18 @@ typedef struct _LIBSSH2_USERAUTH_KBDINT_PROMPT LIBSSH2_USERAUTH_KBDINT_PROMPT; typedef struct _LIBSSH2_USERAUTH_KBDINT_RESPONSE LIBSSH2_USERAUTH_KBDINT_RESPONSE; #endif +/** + * Callback for interactive SSH credentials. + * + * @param name the name + * @param name_len the length of the name + * @param instruction the authentication instruction + * @param instruction_len the length of the instruction + * @param num_prompts the number of prompts + * @param prompts the prompts + * @param responses the responses + * @param abstract the abstract + */ typedef void GIT_CALLBACK(git_credential_ssh_interactive_cb)( const char *name, int name_len, @@ -254,6 +269,7 @@ typedef void GIT_CALLBACK(git_credential_ssh_interactive_cb)( * Create a new ssh keyboard-interactive based 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 prompt_callback The callback method used for prompts. * @param payload Additional data to pass to the callback. @@ -277,6 +293,18 @@ GIT_EXTERN(int) git_credential_ssh_key_from_agent( git_credential **out, const char *username); +/** + * Callback for credential signing. + * + * @param session the libssh2 session + * @param sig the signature + * @param sig_len the length of the signature + * @param data the data + * @param data_len the length of the data + * @param abstract the abstract + * @return 0 for success, < 0 to indicate an error, > 0 to indicate + * no credential was acquired + */ typedef int GIT_CALLBACK(git_credential_sign_cb)( LIBSSH2_SESSION *session, unsigned char **sig, size_t *sig_len, @@ -311,4 +339,5 @@ GIT_EXTERN(int) git_credential_ssh_custom_new( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/credential_helpers.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/credential_helpers.h index 9a70ecb..706558d 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/credential_helpers.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/credential_helpers.h @@ -39,6 +39,7 @@ typedef struct git_credential_userpass_payload { * @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*`.) + * @return 0 or an error code. */ GIT_EXTERN(int) git_credential_userpass( git_credential **out, @@ -49,4 +50,5 @@ GIT_EXTERN(int) git_credential_userpass( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/deprecated.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/deprecated.h index 37b9fa0..b8b0238 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/deprecated.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/deprecated.h @@ -52,7 +52,7 @@ /** * @file git2/deprecated.h - * @brief libgit2 deprecated functions and values + * @brief Deprecated functions and values * @ingroup Git * @{ */ @@ -69,15 +69,23 @@ GIT_BEGIN_DECL */ /**@{*/ +/** @deprecated use GIT_ATTR_VALUE_UNSPECIFIED */ #define GIT_ATTR_UNSPECIFIED_T GIT_ATTR_VALUE_UNSPECIFIED +/** @deprecated use GIT_ATTR_VALUE_TRUE */ #define GIT_ATTR_TRUE_T GIT_ATTR_VALUE_TRUE +/** @deprecated use GIT_ATTR_VALUE_FALSE */ #define GIT_ATTR_FALSE_T GIT_ATTR_VALUE_FALSE +/** @deprecated use GIT_ATTR_VALUE_STRING */ #define GIT_ATTR_VALUE_T GIT_ATTR_VALUE_STRING +/** @deprecated use GIT_ATTR_IS_TRUE */ #define GIT_ATTR_TRUE(attr) GIT_ATTR_IS_TRUE(attr) +/** @deprecated use GIT_ATTR_IS_FALSE */ #define GIT_ATTR_FALSE(attr) GIT_ATTR_IS_FALSE(attr) +/** @deprecated use GIT_ATTR_IS_UNSPECIFIED */ #define GIT_ATTR_UNSPECIFIED(attr) GIT_ATTR_IS_UNSPECIFIED(attr) +/** @deprecated use git_attr_value_t */ typedef git_attr_value_t git_attr_t; /**@}*/ @@ -93,6 +101,7 @@ typedef git_attr_value_t git_attr_t; */ /**@{*/ +/** @deprecated use GIT_BLOB_FILTER_ATTRIBUTES_FROM_HEAD */ #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); @@ -285,11 +294,16 @@ typedef int (*git_commit_signing_cb)( */ /**@{*/ +/** @deprecated use GIT_CONFIGMAP_FALSE */ #define GIT_CVAR_FALSE GIT_CONFIGMAP_FALSE +/** @deprecated use GIT_CONFIGMAP_TRUE */ #define GIT_CVAR_TRUE GIT_CONFIGMAP_TRUE +/** @deprecated use GIT_CONFIGMAP_INT32 */ #define GIT_CVAR_INT32 GIT_CONFIGMAP_INT32 +/** @deprecated use GIT_CONFIGMAP_STRING */ #define GIT_CVAR_STRING GIT_CONFIGMAP_STRING +/** @deprecated use git_cvar_map */ typedef git_configmap git_cvar_map; /**@}*/ @@ -313,12 +327,13 @@ typedef enum { 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_EXCLUDE_SUBJECT_PATCH_MARKER = (1 << 0) } git_diff_format_email_flags_t; /** * Options for controlling the formatting of the generated e-mail. + * + * @deprecated use `git_email_create_options` */ typedef struct { unsigned int version; @@ -345,7 +360,9 @@ typedef struct { const git_signature *author; } git_diff_format_email_options; +/** @deprecated use `git_email_create_options` */ #define GIT_DIFF_FORMAT_EMAIL_OPTIONS_VERSION 1 +/** @deprecated use `git_email_create_options` */ #define GIT_DIFF_FORMAT_EMAIL_OPTIONS_INIT {GIT_DIFF_FORMAT_EMAIL_OPTIONS_VERSION, 0, 1, 1, NULL, NULL, NULL, NULL} /** @@ -401,40 +418,76 @@ GIT_EXTERN(int) git_diff_format_email_options_init( */ /**@{*/ +/** @deprecated use `GIT_ERROR_NONE` */ #define GITERR_NONE GIT_ERROR_NONE +/** @deprecated use `GIT_ERROR_NOMEMORY` */ #define GITERR_NOMEMORY GIT_ERROR_NOMEMORY +/** @deprecated use `GIT_ERROR_OS` */ #define GITERR_OS GIT_ERROR_OS +/** @deprecated use `GIT_ERROR_INVALID` */ #define GITERR_INVALID GIT_ERROR_INVALID +/** @deprecated use `GIT_ERROR_REFERENCE` */ #define GITERR_REFERENCE GIT_ERROR_REFERENCE +/** @deprecated use `GIT_ERROR_ZLIB` */ #define GITERR_ZLIB GIT_ERROR_ZLIB +/** @deprecated use `GIT_ERROR_REPOSITORY` */ #define GITERR_REPOSITORY GIT_ERROR_REPOSITORY +/** @deprecated use `GIT_ERROR_CONFIG` */ #define GITERR_CONFIG GIT_ERROR_CONFIG +/** @deprecated use `GIT_ERROR_REGEX` */ #define GITERR_REGEX GIT_ERROR_REGEX +/** @deprecated use `GIT_ERROR_ODB` */ #define GITERR_ODB GIT_ERROR_ODB +/** @deprecated use `GIT_ERROR_INDEX` */ #define GITERR_INDEX GIT_ERROR_INDEX +/** @deprecated use `GIT_ERROR_OBJECT` */ #define GITERR_OBJECT GIT_ERROR_OBJECT +/** @deprecated use `GIT_ERROR_NET` */ #define GITERR_NET GIT_ERROR_NET +/** @deprecated use `GIT_ERROR_TAG` */ #define GITERR_TAG GIT_ERROR_TAG +/** @deprecated use `GIT_ERROR_TREE` */ #define GITERR_TREE GIT_ERROR_TREE +/** @deprecated use `GIT_ERROR_INDEXER` */ #define GITERR_INDEXER GIT_ERROR_INDEXER +/** @deprecated use `GIT_ERROR_SSL` */ #define GITERR_SSL GIT_ERROR_SSL +/** @deprecated use `GIT_ERROR_SUBMODULE` */ #define GITERR_SUBMODULE GIT_ERROR_SUBMODULE +/** @deprecated use `GIT_ERROR_THREAD` */ #define GITERR_THREAD GIT_ERROR_THREAD +/** @deprecated use `GIT_ERROR_STASH` */ #define GITERR_STASH GIT_ERROR_STASH +/** @deprecated use `GIT_ERROR_CHECKOUT` */ #define GITERR_CHECKOUT GIT_ERROR_CHECKOUT +/** @deprecated use `GIT_ERROR_FETCHHEAD` */ #define GITERR_FETCHHEAD GIT_ERROR_FETCHHEAD +/** @deprecated use `GIT_ERROR_MERGE` */ #define GITERR_MERGE GIT_ERROR_MERGE +/** @deprecated use `GIT_ERROR_SSH` */ #define GITERR_SSH GIT_ERROR_SSH +/** @deprecated use `GIT_ERROR_FILTER` */ #define GITERR_FILTER GIT_ERROR_FILTER +/** @deprecated use `GIT_ERROR_REVERT` */ #define GITERR_REVERT GIT_ERROR_REVERT +/** @deprecated use `GIT_ERROR_CALLBACK` */ #define GITERR_CALLBACK GIT_ERROR_CALLBACK +/** @deprecated use `GIT_ERROR_CHERRYPICK` */ #define GITERR_CHERRYPICK GIT_ERROR_CHERRYPICK +/** @deprecated use `GIT_ERROR_DESCRIBE` */ #define GITERR_DESCRIBE GIT_ERROR_DESCRIBE +/** @deprecated use `GIT_ERROR_REBASE` */ #define GITERR_REBASE GIT_ERROR_REBASE +/** @deprecated use `GIT_ERROR_FILESYSTEM` */ #define GITERR_FILESYSTEM GIT_ERROR_FILESYSTEM +/** @deprecated use `GIT_ERROR_PATCH` */ #define GITERR_PATCH GIT_ERROR_PATCH +/** @deprecated use `GIT_ERROR_WORKTREE` */ #define GITERR_WORKTREE GIT_ERROR_WORKTREE +/** @deprecated use `GIT_ERROR_SHA1` */ #define GITERR_SHA1 GIT_ERROR_SHA1 +/** @deprecated use `GIT_ERROR_SHA` */ +#define GIT_ERROR_SHA1 GIT_ERROR_SHA /** * Return the last `git_error` object that was generated for the @@ -498,37 +551,63 @@ GIT_EXTERN(void) giterr_set_oom(void); */ /**@{*/ +/* The git_idxentry_extended_flag_t enum */ +/** @deprecated use `GIT_INDEX_ENTRY_NAMEMASK` */ #define GIT_IDXENTRY_NAMEMASK GIT_INDEX_ENTRY_NAMEMASK +/** @deprecated use `GIT_INDEX_ENTRY_STAGEMASK` */ #define GIT_IDXENTRY_STAGEMASK GIT_INDEX_ENTRY_STAGEMASK +/** @deprecated use `GIT_INDEX_ENTRY_STAGESHIFT` */ #define GIT_IDXENTRY_STAGESHIFT GIT_INDEX_ENTRY_STAGESHIFT /* The git_indxentry_flag_t enum */ +/** @deprecated use `GIT_INDEX_ENTRY_EXTENDED` */ #define GIT_IDXENTRY_EXTENDED GIT_INDEX_ENTRY_EXTENDED +/** @deprecated use `GIT_INDEX_ENTRY_VALID` */ #define GIT_IDXENTRY_VALID GIT_INDEX_ENTRY_VALID +/** @deprecated use `GIT_INDEX_ENTRY_STAGE` */ #define GIT_IDXENTRY_STAGE(E) GIT_INDEX_ENTRY_STAGE(E) +/** @deprecated use `GIT_INDEX_ENTRY_STAGE_SET` */ #define GIT_IDXENTRY_STAGE_SET(E,S) GIT_INDEX_ENTRY_STAGE_SET(E,S) /* The git_idxentry_extended_flag_t enum */ +/** @deprecated use `GIT_INDEX_ENTRY_INTENT_TO_ADD` */ #define GIT_IDXENTRY_INTENT_TO_ADD GIT_INDEX_ENTRY_INTENT_TO_ADD +/** @deprecated use `GIT_INDEX_ENTRY_SKIP_WORKTREE` */ #define GIT_IDXENTRY_SKIP_WORKTREE GIT_INDEX_ENTRY_SKIP_WORKTREE +/** @deprecated use `GIT_INDEX_ENTRY_INTENT_TO_ADD | GIT_INDEX_ENTRY_SKIP_WORKTREE` */ #define GIT_IDXENTRY_EXTENDED_FLAGS (GIT_INDEX_ENTRY_INTENT_TO_ADD | GIT_INDEX_ENTRY_SKIP_WORKTREE) +/** @deprecated this value is not public */ #define GIT_IDXENTRY_EXTENDED2 (1 << 15) +/** @deprecated this value is not public */ #define GIT_IDXENTRY_UPDATE (1 << 0) +/** @deprecated this value is not public */ #define GIT_IDXENTRY_REMOVE (1 << 1) +/** @deprecated this value is not public */ #define GIT_IDXENTRY_UPTODATE (1 << 2) +/** @deprecated this value is not public */ #define GIT_IDXENTRY_ADDED (1 << 3) +/** @deprecated this value is not public */ #define GIT_IDXENTRY_HASHED (1 << 4) +/** @deprecated this value is not public */ #define GIT_IDXENTRY_UNHASHED (1 << 5) +/** @deprecated this value is not public */ #define GIT_IDXENTRY_WT_REMOVE (1 << 6) +/** @deprecated this value is not public */ #define GIT_IDXENTRY_CONFLICTED (1 << 7) +/** @deprecated this value is not public */ #define GIT_IDXENTRY_UNPACKED (1 << 8) +/** @deprecated this value is not public */ #define GIT_IDXENTRY_NEW_SKIP_WORKTREE (1 << 9) /* The git_index_capability_t enum */ +/** @deprecated use `GIT_INDEX_CAPABILITY_IGNORE_CASE` */ #define GIT_INDEXCAP_IGNORE_CASE GIT_INDEX_CAPABILITY_IGNORE_CASE +/** @deprecated use `GIT_INDEX_CAPABILITY_NO_FILEMODE` */ #define GIT_INDEXCAP_NO_FILEMODE GIT_INDEX_CAPABILITY_NO_FILEMODE +/** @deprecated use `GIT_INDEX_CAPABILITY_NO_SYMLINKS` */ #define GIT_INDEXCAP_NO_SYMLINKS GIT_INDEX_CAPABILITY_NO_SYMLINKS +/** @deprecated use `GIT_INDEX_CAPABILITY_FROM_OWNER` */ #define GIT_INDEXCAP_FROM_OWNER GIT_INDEX_CAPABILITY_FROM_OWNER GIT_EXTERN(int) git_index_add_frombuffer( @@ -548,17 +627,28 @@ GIT_EXTERN(int) git_index_add_frombuffer( */ /**@{*/ +/** @deprecate use `git_object_t` */ #define git_otype git_object_t +/** @deprecate use `GIT_OBJECT_ANY` */ #define GIT_OBJ_ANY GIT_OBJECT_ANY +/** @deprecate use `GIT_OBJECT_INVALID` */ #define GIT_OBJ_BAD GIT_OBJECT_INVALID +/** @deprecated this value is not public */ #define GIT_OBJ__EXT1 0 +/** @deprecate use `GIT_OBJECT_COMMIT` */ #define GIT_OBJ_COMMIT GIT_OBJECT_COMMIT +/** @deprecate use `GIT_OBJECT_TREE` */ #define GIT_OBJ_TREE GIT_OBJECT_TREE +/** @deprecate use `GIT_OBJECT_BLOB` */ #define GIT_OBJ_BLOB GIT_OBJECT_BLOB +/** @deprecate use `GIT_OBJECT_TAG` */ #define GIT_OBJ_TAG GIT_OBJECT_TAG +/** @deprecated this value is not public */ #define GIT_OBJ__EXT2 5 +/** @deprecate use `GIT_OBJECT_OFS_DELTA` */ #define GIT_OBJ_OFS_DELTA GIT_OBJECT_OFS_DELTA +/** @deprecate use `GIT_OBJECT_REF_DELTA` */ #define GIT_OBJ_REF_DELTA GIT_OBJECT_REF_DELTA /** @@ -610,17 +700,27 @@ GIT_EXTERN(int) git_remote_is_valid_name(const char *remote_name); /**@{*/ /** Basic type of any Git reference. */ +/** @deprecate use `git_reference_t` */ #define git_ref_t git_reference_t +/** @deprecate use `git_reference_format_t` */ #define git_reference_normalize_t git_reference_format_t +/** @deprecate use `GIT_REFERENCE_INVALID` */ #define GIT_REF_INVALID GIT_REFERENCE_INVALID +/** @deprecate use `GIT_REFERENCE_DIRECT` */ #define GIT_REF_OID GIT_REFERENCE_DIRECT +/** @deprecate use `GIT_REFERENCE_SYMBOLIC` */ #define GIT_REF_SYMBOLIC GIT_REFERENCE_SYMBOLIC +/** @deprecate use `GIT_REFERENCE_ALL` */ #define GIT_REF_LISTALL GIT_REFERENCE_ALL +/** @deprecate use `GIT_REFERENCE_FORMAT_NORMAL` */ #define GIT_REF_FORMAT_NORMAL GIT_REFERENCE_FORMAT_NORMAL +/** @deprecate use `GIT_REFERENCE_FORMAT_ALLOW_ONELEVEL` */ #define GIT_REF_FORMAT_ALLOW_ONELEVEL GIT_REFERENCE_FORMAT_ALLOW_ONELEVEL +/** @deprecate use `GIT_REFERENCE_FORMAT_REFSPEC_PATTERN` */ #define GIT_REF_FORMAT_REFSPEC_PATTERN GIT_REFERENCE_FORMAT_REFSPEC_PATTERN +/** @deprecate use `GIT_REFERENCE_FORMAT_REFSPEC_SHORTHAND` */ #define GIT_REF_FORMAT_REFSPEC_SHORTHAND GIT_REFERENCE_FORMAT_REFSPEC_SHORTHAND /** @@ -661,8 +761,11 @@ GIT_EXTERN(int) git_tag_create_frombuffer( typedef git_revspec_t git_revparse_mode_t; +/** @deprecated use `GIT_REVSPEC_SINGLE` */ #define GIT_REVPARSE_SINGLE GIT_REVSPEC_SINGLE +/** @deprecated use `GIT_REVSPEC_RANGE` */ #define GIT_REVPARSE_RANGE GIT_REVSPEC_RANGE +/** @deprecated use `GIT_REVSPEC_MERGE_BASE` */ #define GIT_REVPARSE_MERGE_BASE GIT_REVSPEC_MERGE_BASE /**@}*/ @@ -691,14 +794,22 @@ 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; +/** @deprecated use `git_credential_t` */ #define git_credtype_t git_credential_t +/** @deprecated use `GIT_CREDENTIAL_USERPASS_PLAINTEXT` */ #define GIT_CREDTYPE_USERPASS_PLAINTEXT GIT_CREDENTIAL_USERPASS_PLAINTEXT +/** @deprecated use `GIT_CREDENTIAL_SSH_KEY` */ #define GIT_CREDTYPE_SSH_KEY GIT_CREDENTIAL_SSH_KEY +/** @deprecated use `GIT_CREDENTIAL_SSH_CUSTOM` */ #define GIT_CREDTYPE_SSH_CUSTOM GIT_CREDENTIAL_SSH_CUSTOM +/** @deprecated use `GIT_CREDENTIAL_DEFAULT` */ #define GIT_CREDTYPE_DEFAULT GIT_CREDENTIAL_DEFAULT +/** @deprecated use `GIT_CREDENTIAL_SSH_INTERACTIVE` */ #define GIT_CREDTYPE_SSH_INTERACTIVE GIT_CREDENTIAL_SSH_INTERACTIVE +/** @deprecated use `GIT_CREDENTIAL_USERNAME` */ #define GIT_CREDTYPE_USERNAME GIT_CREDENTIAL_USERNAME +/** @deprecated use `GIT_CREDENTIAL_SSH_MEMORY` */ #define GIT_CREDTYPE_SSH_MEMORY GIT_CREDENTIAL_SSH_MEMORY GIT_EXTERN(void) git_cred_free(git_credential *cred); @@ -775,6 +886,15 @@ typedef git_trace_cb git_trace_callback; */ /**@{*/ +#ifndef GIT_EXPERIMENTAL_SHA256 +/** Deprecated OID "raw size" definition */ +# define GIT_OID_RAWSZ GIT_OID_SHA1_SIZE +/** Deprecated OID "hex size" definition */ +# define GIT_OID_HEXSZ GIT_OID_SHA1_HEXSIZE +/** Deprecated OID "hex zero" definition */ +# define GIT_OID_HEX_ZERO GIT_OID_SHA1_HEXZERO +#endif + GIT_EXTERN(int) git_oid_iszero(const git_oid *id); /**@}*/ @@ -884,6 +1004,24 @@ GIT_EXTERN(void) git_strarray_free(git_strarray *array); /**@}*/ +/** @name Deprecated Version Constants + * + * These constants are retained for backward compatibility. The newer + * versions of these constants should be preferred in all new code. + * + * There is no plan to remove these backward compatibility constants at + * this time. + */ +/**@{*/ + +#define LIBGIT2_VER_MAJOR LIBGIT2_VERSION_MAJOR +#define LIBGIT2_VER_MINOR LIBGIT2_VERSION_MINOR +#define LIBGIT2_VER_REVISION LIBGIT2_VERSION_REVISION +#define LIBGIT2_VER_PATCH LIBGIT2_VERSION_PATCH +#define LIBGIT2_VER_PRERELEASE LIBGIT2_VERSION_PRERELEASE + +/**@}*/ + /** @name Deprecated Options Initialization Functions * * These functions are retained for backward compatibility. The newer diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/describe.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/describe.h index 1d2ca14..938c470 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/describe.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/describe.h @@ -13,10 +13,14 @@ /** * @file git2/describe.h - * @brief Git describing routines + * @brief Describe a commit in reference to tags * @defgroup git_describe Git describing routines * @ingroup Git * @{ + * + * Describe a commit, showing information about how the current commit + * relates to the tags. This can be useful for showing how the current + * commit has changed from a particular tagged version of the repository. */ GIT_BEGIN_DECL @@ -30,7 +34,7 @@ GIT_BEGIN_DECL typedef enum { GIT_DESCRIBE_DEFAULT, GIT_DESCRIBE_TAGS, - GIT_DESCRIBE_ALL, + GIT_DESCRIBE_ALL } git_describe_strategy_t; /** @@ -60,10 +64,15 @@ typedef struct git_describe_options { int show_commit_oid_as_fallback; } git_describe_options; +/** Default maximum candidate tags */ #define GIT_DESCRIBE_DEFAULT_MAX_CANDIDATES_TAGS 10 +/** Default abbreviated size */ #define GIT_DESCRIBE_DEFAULT_ABBREVIATED_SIZE 7 +/** Current version for the `git_describe_options` structure */ #define GIT_DESCRIBE_OPTIONS_VERSION 1 + +/** Static constructor for `git_describe_options` */ #define GIT_DESCRIBE_OPTIONS_INIT { \ GIT_DESCRIBE_OPTIONS_VERSION, \ GIT_DESCRIBE_DEFAULT_MAX_CANDIDATES_TAGS, \ @@ -110,7 +119,10 @@ typedef struct { const char *dirty_suffix; } git_describe_format_options; +/** Current version for the `git_describe_format_options` structure */ #define GIT_DESCRIBE_FORMAT_OPTIONS_VERSION 1 + +/** Static constructor for `git_describe_format_options` */ #define GIT_DESCRIBE_FORMAT_OPTIONS_INIT { \ GIT_DESCRIBE_FORMAT_OPTIONS_VERSION, \ GIT_DESCRIBE_DEFAULT_ABBREVIATED_SIZE, \ @@ -142,6 +154,7 @@ typedef struct git_describe_result git_describe_result; * you're done with it. * @param committish a committish to describe * @param opts the lookup options (or NULL for defaults) + * @return 0 or an error code. */ GIT_EXTERN(int) git_describe_commit( git_describe_result **result, @@ -152,13 +165,14 @@ GIT_EXTERN(int) git_describe_commit( * 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 + * worktree. After performing 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) + * @return 0 or an error code. */ GIT_EXTERN(int) git_describe_workdir( git_describe_result **out, @@ -172,6 +186,7 @@ GIT_EXTERN(int) git_describe_workdir( * @param result the result from `git_describe_commit()` or * `git_describe_workdir()`. * @param opts the formatting options (or NULL for defaults) + * @return 0 or an error code. */ GIT_EXTERN(int) git_describe_format( git_buf *out, @@ -180,6 +195,8 @@ GIT_EXTERN(int) git_describe_format( /** * Free the describe result. + * + * @param result The result to free. */ GIT_EXTERN(void) git_describe_result_free(git_describe_result *result); diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/diff.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/diff.h index a14c019..b12e8ab 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/diff.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/diff.h @@ -15,7 +15,7 @@ /** * @file git2/diff.h - * @brief Git tree and file differencing routines. + * @brief Indicate the differences between two versions of the repository * @ingroup Git * @{ */ @@ -170,7 +170,7 @@ typedef enum { /** 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_SHOW_BINARY = (1u << 30) } git_diff_option_t; /** @@ -208,6 +208,7 @@ typedef enum { 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_VALID_SIZE = (1u << 4) /**< file size value is known correct */ } git_diff_flag_t; /** @@ -231,7 +232,7 @@ typedef enum { 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_CONFLICTED = 10 /**< entry in the index is conflicted */ } git_delta_t; /** @@ -273,7 +274,7 @@ typedef struct { /** * Represents the known length of the `id` field, when - * converted to a hex string. It is generally `GIT_OID_HEXSZ`, unless this + * converted to a hex string. It is generally `GIT_OID_SHA1_HEXSIZE`, unless this * delta was created from reading a patch file, in which case it may be * abbreviated to something reasonable, like 7 characters. */ @@ -341,6 +342,12 @@ typedef struct { * diff process continues. * - returns 0, the delta is inserted into the diff, and the diff process * continues. + * + * @param diff_so_far the diff structure as it currently exists + * @param delta_to_add the delta that is to be added + * @param matched_pathspec the pathspec + * @param payload the user-specified callback payload + * @return 0 on success, 1 to skip this delta, or an error code */ typedef int GIT_CALLBACK(git_diff_notify_cb)( const git_diff *diff_so_far, @@ -356,7 +363,8 @@ typedef int GIT_CALLBACK(git_diff_notify_cb)( * @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. + * @param payload the user-specified callback payload + * @return 0 or an error code */ typedef int GIT_CALLBACK(git_diff_progress_cb)( const git_diff *diff_so_far, @@ -420,6 +428,22 @@ typedef struct { */ uint32_t interhunk_lines; + /** + * The object ID type to emit in diffs; this is used by functions + * that operate without a repository - namely `git_diff_buffers`, + * or `git_diff_blobs` and `git_diff_blob_to_buffer` when one blob + * is `NULL`. + * + * This may be omitted (set to `0`). If a repository is available, + * the object ID format of the repository will be used. If no + * repository is available then the default is `GIT_OID_SHA`. + * + * If this is specified and a repository is available, then the + * specified `oid_type` must match the repository's object ID + * format. + */ + git_oid_t oid_type; + /** * The abbreviation length to use when formatting object ids. * Defaults to the value of 'core.abbrev' from the config, or 7 if unset. @@ -446,10 +470,10 @@ typedef struct { const char *new_prefix; } git_diff_options; -/* The current version of the diff options structure */ +/** The current version of the diff options structure */ #define GIT_DIFF_OPTIONS_VERSION 1 -/* Stack initializer for diff options. Alternatively use +/** Stack initializer for diff options. Alternatively use * `git_diff_options_init` programmatic initialization. */ #define GIT_DIFF_OPTIONS_INIT \ @@ -475,12 +499,14 @@ GIT_EXTERN(int) git_diff_options_init( * @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 + * @return 0 or an error code */ typedef int GIT_CALLBACK(git_diff_file_cb)( const git_diff_delta *delta, float progress, void *payload); +/** Maximum size of the hunk header */ #define GIT_DIFF_HUNK_HEADER_SIZE 128 /** @@ -497,7 +523,7 @@ typedef enum { GIT_DIFF_BINARY_LITERAL, /** The binary data is the delta from one side to the other. */ - GIT_DIFF_BINARY_DELTA, + GIT_DIFF_BINARY_DELTA } git_diff_binary_t; /** The contents of one of the files in a binary diff. */ @@ -541,6 +567,11 @@ typedef struct { /** * When iterating over a diff, callback that will be made for * binary content within the diff. + * + * @param delta the delta + * @param binary the binary content + * @param payload the user-specified callback payload + * @return 0 or an error code */ typedef int GIT_CALLBACK(git_diff_binary_cb)( const git_diff_delta *delta, @@ -567,6 +598,11 @@ typedef struct { /** * When iterating over a diff, callback that will be made per hunk. + * + * @param delta the delta + * @param hunk the hunk + * @param payload the user-specified callback payload + * @return 0 or an error code */ typedef int GIT_CALLBACK(git_diff_hunk_cb)( const git_diff_delta *delta, @@ -628,6 +664,12 @@ typedef struct { * 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. + * + * @param delta the delta that contains the line + * @param hunk the hunk that contains the line + * @param line the line in the diff + * @param payload the user-specified callback payload + * @return 0 or an error code */ typedef int GIT_CALLBACK(git_diff_line_cb)( const git_diff_delta *delta, /**< delta that contains this data */ @@ -706,7 +748,7 @@ typedef enum { * 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_REMOVE_UNMODIFIED = (1u << 16) } git_diff_find_t; /** @@ -758,7 +800,7 @@ typedef struct { uint16_t copy_threshold; /** - * Treshold below which similar files will be split into a delete/add pair. + * Threshold 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; @@ -768,7 +810,7 @@ typedef struct { * * 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. + * Defaults to 1000. */ size_t rename_limit; @@ -785,7 +827,10 @@ typedef struct { git_diff_similarity_metric *metric; } git_diff_find_options; +/** Current version for the `git_diff_find_options` structure */ #define GIT_DIFF_FIND_OPTIONS_VERSION 1 + +/** Static constructor for `git_diff_find_options` */ #define GIT_DIFF_FIND_OPTIONS_INIT {GIT_DIFF_FIND_OPTIONS_VERSION} /** @@ -831,6 +876,7 @@ GIT_EXTERN(void) git_diff_free(git_diff *diff); * @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. + * @return 0 or an error code. */ GIT_EXTERN(int) git_diff_tree_to_tree( git_diff **diff, @@ -857,6 +903,7 @@ GIT_EXTERN(int) git_diff_tree_to_tree( * @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. + * @return 0 or an error code. */ GIT_EXTERN(int) git_diff_tree_to_index( git_diff **diff, @@ -884,6 +931,7 @@ GIT_EXTERN(int) git_diff_tree_to_index( * @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. + * @return 0 or an error code. */ GIT_EXTERN(int) git_diff_index_to_workdir( git_diff **diff, @@ -913,6 +961,7 @@ GIT_EXTERN(int) git_diff_index_to_workdir( * @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. + * @return 0 or an error code. */ GIT_EXTERN(int) git_diff_tree_to_workdir( git_diff **diff, @@ -932,6 +981,7 @@ GIT_EXTERN(int) git_diff_tree_to_workdir( * @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. + * @return 0 or an error code. */ GIT_EXTERN(int) git_diff_tree_to_workdir_with_index( git_diff **diff, @@ -950,6 +1000,7 @@ GIT_EXTERN(int) git_diff_tree_to_workdir_with_index( * @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. + * @return 0 or an error code. */ GIT_EXTERN(int) git_diff_index_to_index( git_diff **diff, @@ -970,6 +1021,7 @@ GIT_EXTERN(int) git_diff_index_to_index( * * @param onto Diff to merge into. * @param from Diff to merge. + * @return 0 or an error code. */ GIT_EXTERN(int) git_diff_merge( git_diff *onto, @@ -1107,7 +1159,7 @@ typedef enum { 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_PATCH_ID = 6u /**< git diff as used by git patch-id */ } git_diff_format_t; /** @@ -1145,9 +1197,8 @@ GIT_EXTERN(int) git_diff_to_buf( /**@}*/ - /* - * Misc + * Low-level file comparison, invoking callbacks per difference. */ /** @@ -1263,6 +1314,25 @@ GIT_EXTERN(int) git_diff_buffers( git_diff_line_cb line_cb, void *payload); +/* Patch file parsing. */ + +/** + * Options for parsing a diff / patch file. + */ +typedef struct { + unsigned int version; + git_oid_t oid_type; +} git_diff_parse_options; + +/** The current version of the diff parse options structure */ +#define GIT_DIFF_PARSE_OPTIONS_VERSION 1 + +/** Stack initializer for diff parse options. Alternatively use + * `git_diff_parse_options_init` programmatic initialization. + */ +#define GIT_DIFF_PARSE_OPTIONS_INIT \ + { GIT_DIFF_PARSE_OPTIONS_VERSION, GIT_OID_DEFAULT } + /** * Read the contents of a git patch file into a `git_diff` object. * @@ -1285,7 +1355,11 @@ GIT_EXTERN(int) git_diff_buffers( GIT_EXTERN(int) git_diff_from_buffer( git_diff **out, const char *content, - size_t content_len); + size_t content_len +#ifdef GIT_EXPERIMENTAL_SHA256 + , git_diff_parse_options *opts +#endif + ); /** * This is an opaque structure which is allocated by `git_diff_get_stats`. @@ -1311,13 +1385,13 @@ typedef enum { 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_INCLUDE_SUMMARY = (1u << 3) } git_diff_stats_format_t; /** * Accumulate diff statistics for all patches. * - * @param out Structure containg the diff statistics. + * @param out Structure containing the diff statistics. * @param diff A git_diff generated by one of the above functions. * @return 0 on success; non-zero on error */ @@ -1386,7 +1460,10 @@ typedef struct git_diff_patchid_options { unsigned int version; } git_diff_patchid_options; +/** Current version for the `git_diff_patchid_options` structure */ #define GIT_DIFF_PATCHID_OPTIONS_VERSION 1 + +/** Static constructor for `git_diff_patchid_options` */ #define GIT_DIFF_PATCHID_OPTIONS_INIT { GIT_DIFF_PATCHID_OPTIONS_VERSION } /** @@ -1424,8 +1501,7 @@ GIT_EXTERN(int) git_diff_patchid_options_init( */ GIT_EXTERN(int) git_diff_patchid(git_oid *out, git_diff *diff, git_diff_patchid_options *opts); -GIT_END_DECL - /** @} */ +GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/email.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/email.h index b56be5d..ad37e42 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/email.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/email.h @@ -8,10 +8,11 @@ #define INCLUDE_git_email_h__ #include "common.h" +#include "diff.h" /** * @file git2/email.h - * @brief Git email formatting and application routines. + * @brief Produce email-ready patches * @ingroup Git * @{ */ @@ -34,7 +35,7 @@ typedef enum { GIT_EMAIL_CREATE_ALWAYS_NUMBER = (1u << 1), /** Do not perform rename or similarity detection. */ - GIT_EMAIL_CREATE_NO_RENAMES = (1u << 2), + GIT_EMAIL_CREATE_NO_RENAMES = (1u << 2) } git_email_create_flags_t; /** @@ -70,11 +71,14 @@ typedef struct { size_t reroll_number; } git_email_create_options; -/* +/** Current version for the `git_email_create_options` structure */ +#define GIT_EMAIL_CREATE_OPTIONS_VERSION 1 + +/** Static constructor for `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, \ @@ -83,30 +87,6 @@ typedef struct { 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. @@ -114,14 +94,14 @@ GIT_EXTERN(int) git_email_create_from_diff( * @param out buffer to store the e-mail patch in * @param commit commit to create a patch for * @param opts email creation options + * @return 0 or an error code */ GIT_EXTERN(int) git_email_create_from_commit( git_buf *out, git_commit *commit, const git_email_create_options *opts); -GIT_END_DECL - /** @} */ +GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/errors.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/errors.h index de51582..1141390 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/errors.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/errors.h @@ -11,7 +11,7 @@ /** * @file git2/errors.h - * @brief Git error handling routines and variables + * @brief Error handling routines and variables * @ingroup Git * @{ */ @@ -19,25 +19,32 @@ GIT_BEGIN_DECL /** Generic return codes */ typedef enum { - GIT_OK = 0, /**< No error */ + /** + * No error occurred; the call was successful. + */ + GIT_OK = 0, + + /** + * An error occurred; call `git_error_last` for more information. + */ + GIT_ERROR = -1, - 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_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_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_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 */ @@ -58,20 +65,17 @@ typedef enum { 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_EOWNER = -36, /**< The object is not owned by the current user */ + GIT_TIMEOUT = -37, /**< The operation timed out */ + GIT_EUNCHANGED = -38, /**< There were no changes */ + GIT_ENOTSUPPORTED = -39, /**< An option is not supported */ + GIT_EREADONLY = -40 /**< The subject is read-only */ } 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 + * Error classes are the category of error. They reflect the area of the + * code where an error occurred. */ -typedef struct { - char *message; - int klass; -} git_error; - -/** Error classes */ typedef enum { GIT_ERROR_NONE = 0, GIT_ERROR_NOMEMORY, @@ -106,59 +110,45 @@ typedef enum { GIT_ERROR_FILESYSTEM, GIT_ERROR_PATCH, GIT_ERROR_WORKTREE, - GIT_ERROR_SHA1, + GIT_ERROR_SHA, GIT_ERROR_HTTP, - GIT_ERROR_INTERNAL + GIT_ERROR_INTERNAL, + GIT_ERROR_GRAFTS } 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. + * Structure to store extra details of the last error that occurred. * - * @return A git_error object. - */ -GIT_EXTERN(const git_error *) git_error_last(void); - -/** - * Clear the last library error that occurred for this thread. + * 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 */ -GIT_EXTERN(void) git_error_clear(void); +typedef struct { + char *message; /**< The error message for the last error. */ + int klass; /**< The category of the last error. @type git_error_t */ +} git_error; /** - * Set the error message string for this thread. + * Return the last `git_error` object that was generated for the + * current 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 function will never return NULL. * - * This error message is stored in thread-local storage and only applies - * to the particular thread that this libgit2 call is made from. + * Callers should not rely on this to determine whether an error has + * occurred. For error checking, callers should examine the return + * codes of libgit2 functions. * - * @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. + * This call can only reliably report error messages when an error + * has occurred. (It may contain stale information if it is called + * after a different function that succeeds.) + * + * The memory for this object is managed by libgit2. It should not + * be freed. * - * 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. + * @return A pointer to a `git_error` object that describes the error. */ -GIT_EXTERN(void) git_error_set_oom(void); +GIT_EXTERN(const git_error *) git_error_last(void); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/experimental.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/experimental.h new file mode 100644 index 0000000..543f62f --- /dev/null +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/experimental.h @@ -0,0 +1,13 @@ +/* + * 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_experimental_h__ +#define INCLUDE_experimental_h__ + +/* #undef GIT_EXPERIMENTAL_SHA256 */ + +#endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/filter.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/filter.h index 0465e5b..cf6c5f5 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/filter.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/filter.h @@ -14,9 +14,15 @@ /** * @file git2/filter.h - * @brief Git filter APIs - * + * @brief Filters modify files during checkout or commit * @ingroup Git + * + * During checkout, filters update a file from a "canonical" state to + * a format appropriate for the local filesystem; during commit, filters + * produce the canonical state. For example, on Windows, the line ending + * filters _may_ take a canonical state (with Unix-style newlines) in + * the repository, and place the contents on-disk with Windows-style + * `\r\n` line endings. * @{ */ GIT_BEGIN_DECL @@ -32,7 +38,7 @@ 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_CLEAN = GIT_FILTER_TO_ODB } git_filter_mode_t; /** @@ -54,7 +60,7 @@ typedef enum { * 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_ATTRIBUTES_FROM_COMMIT = (1u << 3) } git_filter_flag_t; /** @@ -79,8 +85,11 @@ typedef struct { git_oid attr_commit_id; } git_filter_options; - #define GIT_FILTER_OPTIONS_VERSION 1 - #define GIT_FILTER_OPTIONS_INIT {GIT_FILTER_OPTIONS_VERSION} +/** Current version for the `git_filter_options` structure */ +#define GIT_FILTER_OPTIONS_VERSION 1 + +/** Static constructor for `git_filter_options` */ +#define GIT_FILTER_OPTIONS_INIT {GIT_FILTER_OPTIONS_VERSION} /** * A filter that can transform file data @@ -196,6 +205,7 @@ GIT_EXTERN(int) git_filter_list_apply_to_buffer( * @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 + * @return 0 or an error code. */ GIT_EXTERN(int) git_filter_list_apply_to_file( git_buf *out, @@ -209,6 +219,7 @@ GIT_EXTERN(int) git_filter_list_apply_to_file( * @param out buffer into which to store the filtered file * @param filters the list of filters to apply * @param blob the blob to filter + * @return 0 or an error code. */ GIT_EXTERN(int) git_filter_list_apply_to_blob( git_buf *out, @@ -222,6 +233,7 @@ GIT_EXTERN(int) git_filter_list_apply_to_blob( * @param buffer the buffer to filter * @param len the size of the buffer * @param target the stream into which the data will be written + * @return 0 or an error code. */ GIT_EXTERN(int) git_filter_list_stream_buffer( git_filter_list *filters, @@ -237,6 +249,7 @@ GIT_EXTERN(int) git_filter_list_stream_buffer( * @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 + * @return 0 or an error code. */ GIT_EXTERN(int) git_filter_list_stream_file( git_filter_list *filters, @@ -250,6 +263,7 @@ GIT_EXTERN(int) git_filter_list_stream_file( * @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 + * @return 0 or an error code. */ GIT_EXTERN(int) git_filter_list_stream_blob( git_filter_list *filters, @@ -263,9 +277,7 @@ GIT_EXTERN(int) git_filter_list_stream_blob( */ GIT_EXTERN(void) git_filter_list_free(git_filter_list *filters); - -GIT_END_DECL - /** @} */ +GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/global.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/global.h index 2a87e10..f15eb2d 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/global.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/global.h @@ -9,6 +9,12 @@ #include "common.h" +/** + * @file git2/global.h + * @brief libgit2 library initializer and shutdown functionality + * @ingroup Git + * @{ + */ GIT_BEGIN_DECL /** @@ -32,7 +38,7 @@ GIT_EXTERN(int) git_libgit2_init(void); * 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. */ @@ -40,5 +46,6 @@ GIT_EXTERN(int) git_libgit2_shutdown(void); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/graph.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/graph.h index 712ae47..1792020 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/graph.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/graph.h @@ -13,7 +13,7 @@ /** * @file git2/graph.h - * @brief Git graph traversal routines + * @brief Graph traversal routines * @defgroup git_revwalk Git graph traversal routines * @ingroup Git * @{ @@ -33,6 +33,7 @@ GIT_BEGIN_DECL * @param repo the repository where the commits exist * @param local the commit for local * @param upstream the commit for upstream + * @return 0 or an error code. */ GIT_EXTERN(int) git_graph_ahead_behind(size_t *ahead, size_t *behind, git_repository *repo, const git_oid *local, const git_oid *upstream); @@ -60,8 +61,8 @@ GIT_EXTERN(int) git_graph_descendant_of( * * @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 + * @param length the number of commits in the provided `descendant_array` * @return 1 if the given commit is an ancestor of any of the given potential * descendants, 0 if not, error code otherwise. */ @@ -73,4 +74,5 @@ GIT_EXTERN(int) git_graph_reachable_from_any( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/ignore.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/ignore.h index f5143f3..730f221 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/ignore.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/ignore.h @@ -10,6 +10,15 @@ #include "common.h" #include "types.h" +/** + * @file git2/ignore.h + * @brief Ignore particular untracked files + * @ingroup Git + * @{ + * + * When examining the repository status, git can optionally ignore + * specified untracked files. + */ GIT_BEGIN_DECL /** @@ -29,7 +38,7 @@ GIT_BEGIN_DECL * 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. + * @param rules Text of rules, the contents to add on 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 @@ -73,6 +82,7 @@ GIT_EXTERN(int) git_ignore_path_is_ignored( git_repository *repo, const char *path); +/** @} */ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/index.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/index.h index 532a520..0adff1a 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/index.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/index.h @@ -15,9 +15,14 @@ /** * @file git2/index.h - * @brief Git index parsing and manipulation routines + * @brief Index (aka "cache" aka "staging area") * @defgroup git_index Git index parsing and manipulation routines * @ingroup Git + * + * The index (or "cache", or "staging area") is the contents of the + * next commit. In addition, the index stores other data, such as + * conflicts that occurred during the last merge operation, and + * the "treecache" to speed up various on-disk operations. * @{ */ GIT_BEGIN_DECL @@ -77,8 +82,11 @@ typedef struct git_index_entry { * data in the `flags`. */ +/** Mask for name length */ #define GIT_INDEX_ENTRY_NAMEMASK (0x0fff) +/** Mask for index entry stage */ #define GIT_INDEX_ENTRY_STAGEMASK (0x3000) +/** Shift bits for index entry */ #define GIT_INDEX_ENTRY_STAGESHIFT 12 /** @@ -86,12 +94,20 @@ typedef struct git_index_entry { */ typedef enum { GIT_INDEX_ENTRY_EXTENDED = (0x4000), - GIT_INDEX_ENTRY_VALID = (0x8000), + GIT_INDEX_ENTRY_VALID = (0x8000) } git_index_entry_flag_t; +/** + * Macro to get the stage value (0 for the "main index", or a conflict + * value) from an index entry. + */ #define GIT_INDEX_ENTRY_STAGE(E) \ (((E)->flags & GIT_INDEX_ENTRY_STAGEMASK) >> GIT_INDEX_ENTRY_STAGESHIFT) +/** + * Macro to set the stage value (0 for the "main index", or a conflict + * value) for an index entry. + */ #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) @@ -119,7 +135,7 @@ typedef enum { 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_UPTODATE = (1 << 2) } git_index_entry_extended_flag_t; /** Capabilities of system that affect index actions. */ @@ -127,11 +143,18 @@ 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_FROM_OWNER = -1 } git_index_capability_t; -/** Callback for APIs that add/remove/update files matching pathspec */ +/** + * Callback for APIs that add/remove/update files matching pathspec + * + * @param path the path + * @param matched_pathspec the given pathspec + * @param payload the user-specified payload + * @return 0 to continue with the index operation, positive number to skip this file for the index operation, negative number on failure + */ typedef int GIT_CALLBACK(git_index_matched_path_cb)( const char *path, const char *matched_pathspec, void *payload); @@ -140,7 +163,7 @@ 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_CHECK_PATHSPEC = (1u << 2) } git_index_add_option_t; /** Git index stage states */ @@ -163,9 +186,77 @@ typedef enum { GIT_INDEX_STAGE_OURS = 2, /** The "theirs" side of a conflict. */ - GIT_INDEX_STAGE_THEIRS = 3, + GIT_INDEX_STAGE_THEIRS = 3 } git_index_stage_t; +#ifdef GIT_EXPERIMENTAL_SHA256 + +/** + * The options for opening or creating an index. + * + * Initialize with `GIT_INDEX_OPTIONS_INIT`. Alternatively, you can + * use `git_index_options_init`. + * + * @options[version] GIT_INDEX_OPTIONS_VERSION + * @options[init_macro] GIT_INDEX_OPTIONS_INIT + * @options[init_function] git_index_options_init + */ +typedef struct git_index_options { + unsigned int version; /**< The version */ + + /** + * The object ID type for the object IDs that exist in the index. + * + * If this is not specified, this defaults to `GIT_OID_SHA1`. + */ + git_oid_t oid_type; +} git_index_options; + +/** Current version for the `git_index_options` structure */ +#define GIT_INDEX_OPTIONS_VERSION 1 + +/** Static constructor for `git_index_options` */ +#define GIT_INDEX_OPTIONS_INIT { GIT_INDEX_OPTIONS_VERSION } + +/** + * Initialize git_index_options structure + * + * Initializes a `git_index_options` with default values. Equivalent to creating + * an instance with GIT_INDEX_OPTIONS_INIT. + * + * @param opts The `git_index_options` struct to initialize. + * @param version The struct version; pass `GIT_INDEX_OPTIONS_VERSION`. + * @return Zero on success; -1 on failure. + */ +GIT_EXTERN(int) git_index_options_init( + git_index_options *opts, + unsigned int version); + +/** + * Creates a new bare Git index object, without a repository to back + * it. This index object is capable of storing SHA256 objects. + * + * @param index_out the pointer for the new index + * @param index_path the path to the index file in disk + * @param opts the options for opening the index, or NULL + * @return 0 or an error code + */ +GIT_EXTERN(int) git_index_open( + git_index **index_out, + const char *index_path, + const git_index_options *opts); + +/** + * Create an in-memory index object. + * + * @param index_out the pointer for the new index + * @param opts the options for opening the index, or NULL + * @return 0 or an error code + */ +GIT_EXTERN(int) git_index_new(git_index **index_out, const git_index_options *opts); + +#else + /** * Create a new bare Git index object as a memory representation * of the Git index file in 'index_path', without a repository @@ -180,11 +271,11 @@ typedef enum { * * The index must be freed once it's no longer in use. * - * @param out the pointer for the new index + * @param index_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); +GIT_EXTERN(int) git_index_open(git_index **index_out, const char *index_path); /** * Create an in-memory index object. @@ -194,10 +285,12 @@ GIT_EXTERN(int) git_index_open(git_index **out, const char *index_path); * * The index must be freed once it's no longer in use. * - * @param out the pointer for the new index + * @param index_out the pointer for the new index * @return 0 or an error code */ -GIT_EXTERN(int) git_index_new(git_index **out); +GIT_EXTERN(int) git_index_new(git_index **index_out); + +#endif /** * Free an existing index object. @@ -296,6 +389,7 @@ GIT_EXTERN(int) git_index_write(git_index *index); */ GIT_EXTERN(const char *) git_index_path(const git_index *index); +#ifndef GIT_DEPRECATE_HARD /** * Get the checksum of the index * @@ -303,10 +397,12 @@ GIT_EXTERN(const char *) git_index_path(const git_index *index); * last 20 bytes which are the checksum itself). In cases where the * index does not exist on-disk, it will be zeroed out. * + * @deprecated this function is deprecated with no replacement * @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); +#endif /** * Read a tree into the index file with stats @@ -491,6 +587,7 @@ GIT_EXTERN(int) git_index_entry_is_conflict(const git_index_entry *entry); * * @param iterator_out The newly created iterator * @param index The index to iterate + * @return 0 or an error code. */ GIT_EXTERN(int) git_index_iterator_new( git_index_iterator **iterator_out, @@ -787,6 +884,7 @@ GIT_EXTERN(int) git_index_conflict_cleanup(git_index *index); /** * Determine if the index contains entries representing file conflicts. * + * @param index An existing index object. * @return 1 if at least one conflict is found, 0 otherwise. */ GIT_EXTERN(int) git_index_has_conflicts(const git_index *index); @@ -811,6 +909,7 @@ GIT_EXTERN(int) git_index_conflict_iterator_new( * @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 + * @param iterator The conflict iterator. * @return 0 (no error), GIT_ITEROVER (iteration is done) or an error code * (negative value) */ @@ -830,4 +929,5 @@ GIT_EXTERN(void) git_index_conflict_iterator_free( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/indexer.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/indexer.h index a434d24..9aaedc3 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/indexer.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/indexer.h @@ -4,13 +4,23 @@ * 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__ +#ifndef INCLUDE_git_indexer_h__ +#define INCLUDE_git_indexer_h__ #include "common.h" #include "types.h" #include "oid.h" +/** + * @file git2/indexer.h + * @brief Packfile indexing + * @ingroup Git + * @{ + * + * Indexing is the operation of taking a packfile - which is simply a + * collection of unordered commits - and producing an "index" so that + * one can lookup a commit in the packfile by object ID. + */ GIT_BEGIN_DECL /** A git indexer object */ @@ -53,6 +63,7 @@ typedef struct git_indexer_progress { * * @param stats Structure containing information about the state of the transfer * @param payload Payload provided by caller + * @return 0 on success or an error code */ typedef int GIT_CALLBACK(git_indexer_progress_cb)(const git_indexer_progress *stats, void *payload); @@ -62,6 +73,22 @@ typedef int GIT_CALLBACK(git_indexer_progress_cb)(const git_indexer_progress *st typedef struct git_indexer_options { unsigned int version; +#ifdef GIT_EXPERIMENTAL_SHA256 + /** permissions to use creating packfile or 0 for defaults */ + unsigned int mode; + + /** the type of object ids in the packfile or 0 for SHA1 */ + git_oid_t oid_type; + + /** + * object database from which to read base objects when + * fixing thin packs. This can be NULL if there are no thin + * packs; if a thin pack is encountered, an error will be + * returned if there are bases missing. + */ + git_odb *odb; +#endif + /** progress_cb function to call with progress information */ git_indexer_progress_cb progress_cb; @@ -72,7 +99,10 @@ typedef struct git_indexer_options { unsigned char verify; } git_indexer_options; +/** Current version for the `git_indexer_options` structure */ #define GIT_INDEXER_OPTIONS_VERSION 1 + +/** Static constructor for `git_indexer_options` */ #define GIT_INDEXER_OPTIONS_INIT { GIT_INDEXER_OPTIONS_VERSION } /** @@ -87,6 +117,20 @@ GIT_EXTERN(int) git_indexer_options_init( git_indexer_options *opts, unsigned int version); +#ifdef GIT_EXPERIMENTAL_SHA256 +/** + * 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 opts the options to create the indexer with + * @return 0 or an error code. + */ +GIT_EXTERN(int) git_indexer_new( + git_indexer **out, + const char *path, + git_indexer_options *opts); +#else /** * Create a new indexer instance * @@ -98,6 +142,7 @@ GIT_EXTERN(int) git_indexer_options_init( * will be returned if there are bases missing) * @param opts Optional structure containing additional options. See * `git_indexer_options` above. + * @return 0 or an error code. */ GIT_EXTERN(int) git_indexer_new( git_indexer **out, @@ -105,6 +150,7 @@ GIT_EXTERN(int) git_indexer_new( unsigned int mode, git_odb *odb, git_indexer_options *opts); +#endif /** * Add data to the indexer @@ -113,6 +159,7 @@ GIT_EXTERN(int) git_indexer_new( * @param data the data to add * @param size the size of the data in bytes * @param stats stat storage + * @return 0 or an error code. */ GIT_EXTERN(int) git_indexer_append(git_indexer *idx, const void *data, size_t size, git_indexer_progress *stats); @@ -122,18 +169,35 @@ GIT_EXTERN(int) git_indexer_append(git_indexer *idx, const void *data, size_t si * Resolve any pending deltas and write out the index file * * @param idx the indexer + * @param stats Stat storage. + * @return 0 or an error code. */ GIT_EXTERN(int) git_indexer_commit(git_indexer *idx, git_indexer_progress *stats); +#ifndef GIT_DEPRECATE_HARD /** * 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. * + * @deprecated use git_indexer_name * @param idx the indexer instance + * @return the packfile's hash */ GIT_EXTERN(const git_oid *) git_indexer_hash(const git_indexer *idx); +#endif + +/** + * Get the unique name for the resulting packfile. + * + * The packfile's name is derived from the packfile's content. + * This is only correct after the index has been finalized. + * + * @param idx the indexer instance + * @return a NUL terminated string for the packfile name + */ +GIT_EXTERN(const char *) git_indexer_name(const git_indexer *idx); /** * Free the indexer and its resources @@ -142,6 +206,7 @@ GIT_EXTERN(const git_oid *) git_indexer_hash(const git_indexer *idx); */ GIT_EXTERN(void) git_indexer_free(git_indexer *idx); +/** @} */ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/mailmap.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/mailmap.h index 7c3f60f..fd6ae71 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/mailmap.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/mailmap.h @@ -13,10 +13,15 @@ /** * @file git2/mailmap.h - * @brief Mailmap parsing routines + * @brief Mailmaps provide alternate email addresses for users * @defgroup git_mailmap Git mailmap routines * @ingroup Git * @{ + * + * A mailmap can be used to specify alternate email addresses for + * repository committers or authors. This allows systems to map + * commits made using different email addresses to the same logical + * person. */ GIT_BEGIN_DECL @@ -112,4 +117,5 @@ GIT_EXTERN(int) git_mailmap_resolve_signature( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/merge.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/merge.h index fc27c9d..be3b065 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/merge.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/merge.h @@ -17,9 +17,12 @@ /** * @file git2/merge.h - * @brief Git merge routines + * @brief Merge re-joins diverging branches of history * @defgroup git_merge Git merge routines * @ingroup Git + * + * Merge will take two commits and attempt to produce a commit that + * includes the changes that were made in both branches. * @{ */ GIT_BEGIN_DECL @@ -45,7 +48,10 @@ typedef struct { unsigned int mode; } git_merge_file_input; +/** Current version for the `git_merge_file_input_options` structure */ #define GIT_MERGE_FILE_INPUT_VERSION 1 + +/** Static constructor for `git_merge_file_input_options` */ #define GIT_MERGE_FILE_INPUT_INIT {GIT_MERGE_FILE_INPUT_VERSION} /** @@ -92,6 +98,14 @@ typedef enum { * merge base to `git-merge-resolve`. */ GIT_MERGE_NO_RECURSIVE = (1 << 3), + + /** + * Treat this merge as if it is to produce the virtual base + * of a recursive merge. This will ensure that there are + * no conflicts, any conflicting regions will keep conflict + * markers in the merge result. + */ + GIT_MERGE_VIRTUAL_BASE = (1 << 4) } git_merge_flag_t; /** @@ -127,7 +141,7 @@ typedef enum { * 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_UNION = 3 } git_merge_file_favor_t; /** @@ -160,8 +174,19 @@ typedef enum { /** Take extra time to find minimal diff */ GIT_MERGE_FILE_DIFF_MINIMAL = (1 << 7), + + /** Create zdiff3 ("zealous diff3")-style files */ + GIT_MERGE_FILE_STYLE_ZDIFF3 = (1 << 8), + + /** + * Do not produce file conflicts when common regions have + * changed; keep the conflict markers in the file and accept + * that as the merge result. + */ + GIT_MERGE_FILE_ACCEPT_CONFLICTS = (1 << 9) } git_merge_file_flag_t; +/** Default size for conflict markers */ #define GIT_MERGE_CONFLICT_MARKER_SIZE 7 /** @@ -199,7 +224,10 @@ typedef struct { unsigned short marker_size; } git_merge_file_options; +/** Current version for the `git_merge_file_options` structure */ #define GIT_MERGE_FILE_OPTIONS_VERSION 1 + +/** Static constructor for `git_merge_file_options` */ #define GIT_MERGE_FILE_OPTIONS_INIT {GIT_MERGE_FILE_OPTIONS_VERSION} /** @@ -294,7 +322,10 @@ typedef struct { uint32_t file_flags; } git_merge_options; +/** Current version for the `git_merge_options` structure */ #define GIT_MERGE_OPTIONS_VERSION 1 + +/** Static constructor for `git_merge_options` */ #define GIT_MERGE_OPTIONS_INIT { \ GIT_MERGE_OPTIONS_VERSION, GIT_MERGE_FIND_RENAMES } @@ -341,7 +372,7 @@ typedef enum { * 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_UNBORN = (1 << 3) } git_merge_analysis_t; /** @@ -364,7 +395,7 @@ typedef enum { * 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_FASTFORWARD_ONLY = (1 << 1) } git_merge_preference_t; /** @@ -372,6 +403,7 @@ typedef enum { * merging them into the HEAD of the repository. * * @param analysis_out analysis enumeration that the result is written into + * @param preference_out One of the `git_merge_preference_t` flag. * @param repo the repository to merge * @param their_heads the heads to merge into * @param their_heads_len the number of heads to merge @@ -389,6 +421,7 @@ GIT_EXTERN(int) git_merge_analysis( * merging them into a reference. * * @param analysis_out analysis enumeration that the result is written into + * @param preference_out One of the `git_merge_preference_t` flag. * @param repo the repository to merge * @param our_ref the reference to perform the analysis from * @param their_heads the heads to merge into @@ -451,6 +484,37 @@ GIT_EXTERN(int) git_merge_base_many( /** * Find all merge bases given a list of commits * + * This behaves similar to [`git merge-base`](https://git-scm.com/docs/git-merge-base#_discussion). + * + * Given three commits `a`, `b`, and `c`, `merge_base_many` + * will compute a hypothetical commit `m`, which is a merge between `b` + * and `c`. + + * For example, with the following topology: + * ```text + * o---o---o---o---C + * / + * / o---o---o---B + * / / + * ---2---1---o---o---o---A + * ``` + * + * the result of `merge_base_many` given `a`, `b`, and `c` is 1. This is + * because the equivalent topology with the imaginary merge commit `m` + * between `b` and `c` is: + * ```text + * o---o---o---o---o + * / \ + * / o---o---o---o---M + * / / + * ---2---1---o---o---o---A + * ``` + * + * and the result of `merge_base_many` given `a` and `m` is 1. + * + * If you're looking to recieve the common ancestor between all the + * given commits, use `merge_base_octopus`. + * * @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` @@ -583,7 +647,7 @@ GIT_EXTERN(int) git_merge_commits( * 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), + * state. Once the commit is done (or if the user wishes to abort), * you should clear this state by calling * `git_repository_state_cleanup()`. * @@ -603,4 +667,5 @@ GIT_EXTERN(int) git_merge( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/message.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/message.h index 42ca3e5..874d027 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/message.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/message.h @@ -12,7 +12,7 @@ /** * @file git2/message.h - * @brief Git message management routines + * @brief Commit messages * @ingroup Git * @{ */ @@ -75,10 +75,12 @@ GIT_EXTERN(int) git_message_trailers(git_message_trailer_array *arr, const char /** * Clean's up any allocated memory in the git_message_trailer_array filled by * a call to git_message_trailers. + * + * @param arr The trailer to free. */ GIT_EXTERN(void) git_message_trailer_array_free(git_message_trailer_array *arr); /** @} */ GIT_END_DECL -#endif /* INCLUDE_git_message_h__ */ +#endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/net.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/net.h index 8103eaf..93bdac4 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/net.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/net.h @@ -13,12 +13,13 @@ /** * @file git2/net.h - * @brief Git networking declarations + * @brief Low-level networking functionality * @ingroup Git * @{ */ GIT_BEGIN_DECL +/** Default git protocol port number */ #define GIT_DEFAULT_PORT "9418" /** @@ -51,4 +52,5 @@ struct git_remote_head { /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/notes.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/notes.h index c135881..3784d5f 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/notes.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/notes.h @@ -11,7 +11,7 @@ /** * @file git2/notes.h - * @brief Git notes management routines + * @brief Notes are metadata attached to an object * @defgroup git_note Git notes management routines * @ingroup Git * @{ @@ -21,13 +21,15 @@ 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` + * @param blob_id object id of the blob containing the message + * @param annotated_object_id the id of the object being annotated + * @param payload user-specified data to the foreach function + * @return 0 on success, or a negative number on failure */ typedef int GIT_CALLBACK(git_note_foreach_cb)( - const git_oid *blob_id, const git_oid *annotated_object_id, void *payload); + const git_oid *blob_id, + const git_oid *annotated_object_id, + void *payload); /** * note iterator @@ -303,4 +305,5 @@ GIT_EXTERN(int) git_note_foreach( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/object.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/object.h index 984dbb7..8a50239 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/object.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/object.h @@ -14,13 +14,14 @@ /** * @file git2/object.h - * @brief Git revision object management routines + * @brief Objects are blobs (files), trees (directories), commits, and annotated tags * @defgroup git_object Git revision object management routines * @ingroup Git * @{ */ GIT_BEGIN_DECL +/** Maximum size of a git object */ #define GIT_OBJECT_SIZE_MAX UINT64_MAX /** @@ -53,18 +54,18 @@ GIT_EXTERN(int) git_object_lookup( * * 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. + * (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 + * 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 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 @@ -221,9 +222,58 @@ GIT_EXTERN(int) git_object_peel( * * @param dest Pointer to store the copy of the object * @param source Original object to copy + * @return 0 or an error code */ GIT_EXTERN(int) git_object_dup(git_object **dest, git_object *source); +#ifdef GIT_EXPERIMENTAL_SHA256 +/** + * Analyzes a buffer of raw object content and determines its validity. + * Tree, commit, and tag objects will be parsed and ensured that they + * are valid, parseable content. (Blobs are always valid by definition.) + * An error message will be set with an informative message if the object + * is not valid. + * + * @warning This function is experimental and its signature may change in + * the future. + * + * @param valid Output pointer to set with validity of the object content + * @param buf The contents to validate + * @param len The length of the buffer + * @param object_type The type of the object in the buffer + * @param oid_type The object ID type for the OIDs in the given buffer + * @return 0 on success or an error code + */ +GIT_EXTERN(int) git_object_rawcontent_is_valid( + int *valid, + const char *buf, + size_t len, + git_object_t object_type, + git_oid_t oid_type); +#else +/** + * Analyzes a buffer of raw object content and determines its validity. + * Tree, commit, and tag objects will be parsed and ensured that they + * are valid, parseable content. (Blobs are always valid by definition.) + * An error message will be set with an informative message if the object + * is not valid. + * + * @warning This function is experimental and its signature may change in + * the future. + * + * @param[out] valid Output pointer to set with validity of the object content + * @param buf The contents to validate + * @param len The length of the buffer + * @param object_type The type of the object in the buffer + * @return 0 on success or an error code + */ +GIT_EXTERN(int) git_object_rawcontent_is_valid( + int *valid, + const char *buf, + size_t len, + git_object_t object_type); +#endif + /** @} */ GIT_END_DECL diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/odb.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/odb.h index dd48455..e809c36 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/odb.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/odb.h @@ -15,29 +15,91 @@ /** * @file git2/odb.h - * @brief Git object database routines + * @brief An object database manages the storage of git objects * @defgroup git_odb Git object database routines * @ingroup Git * @{ */ GIT_BEGIN_DECL +/** Flags controlling the behavior of ODB lookup operations */ +typedef enum { + /** + * Don't call `git_odb_refresh` if the lookup fails. Useful when doing + * a batch of lookup operations for objects that may legitimately not + * exist. When using this flag, you may wish to manually call + * `git_odb_refresh` before processing a batch of objects. + */ + GIT_ODB_LOOKUP_NO_REFRESH = (1 << 0) +} git_odb_lookup_flags_t; + /** * Function type for callbacks from git_odb_foreach. + * + * @param id an id of an object in the object database + * @param payload the payload from the initial call to git_odb_foreach + * @return 0 on success, or an error code */ typedef int GIT_CALLBACK(git_odb_foreach_cb)(const git_oid *id, void *payload); +/** Options for configuring a loose object backend. */ +typedef struct { + unsigned int version; /**< version for the struct */ + + /** + * Type of object IDs to use for this object database, or + * 0 for default (currently SHA1). + */ + git_oid_t oid_type; +} git_odb_options; + +/** The current version of the diff options structure */ +#define GIT_ODB_OPTIONS_VERSION 1 + +/** + * Stack initializer for odb options. Alternatively use + * `git_odb_options_init` programmatic initialization. + */ +#define GIT_ODB_OPTIONS_INIT { GIT_ODB_OPTIONS_VERSION } + +#ifdef GIT_EXPERIMENTAL_SHA256 + +/** + * Create a new object database with no backends. + * + * @param[out] odb location to store the database pointer, if opened. + * @param opts the options for this object database or NULL for defaults + * @return 0 or an error code + */ +GIT_EXTERN(int) git_odb_new(git_odb **odb, const git_odb_options *opts); + +/** + * Create a new object database and automatically add loose and packed + * backends. + * + * @param[out] odb_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. + * @param opts the options for this object database or NULL for defaults + * @return 0 or an error code + */ +GIT_EXTERN(int) git_odb_open( + git_odb **odb_out, + const char *objects_dir, + const git_odb_options *opts); + +#else + /** * 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. + * @param[out] odb location to store the database pointer, if opened. * @return 0 or an error code */ -GIT_EXTERN(int) git_odb_new(git_odb **out); +GIT_EXTERN(int) git_odb_new(git_odb **odb); /** * Create a new object database and automatically add @@ -50,12 +112,13 @@ GIT_EXTERN(int) git_odb_new(git_odb **out); * 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. + * @param[out] odb_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); +GIT_EXTERN(int) git_odb_open(git_odb **odb_out, const char *objects_dir); +#endif /** * Add an on-disk alternate to an existing Object DB. @@ -91,13 +154,13 @@ GIT_EXTERN(void) git_odb_free(git_odb *db); * 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[out] obj 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); +GIT_EXTERN(int) git_odb_read(git_odb_object **obj, git_odb *db, const git_oid *id); /** * Read an object from the database, given a prefix @@ -106,7 +169,7 @@ GIT_EXTERN(int) git_odb_read(git_odb_object **out, git_odb *db, const git_oid *i * 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 + * The remaining (GIT_OID_SHA1_HEXSIZE-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 @@ -117,7 +180,7 @@ GIT_EXTERN(int) git_odb_read(git_odb_object **out, git_odb *db, const git_oid *i * 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[out] obj 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 @@ -125,7 +188,7 @@ GIT_EXTERN(int) git_odb_read(git_odb_object **out, git_odb *db, const git_oid *i * 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); +GIT_EXTERN(int) git_odb_read_prefix(git_odb_object **obj, git_odb *db, const git_oid *short_id, size_t len); /** * Read the header of an object from the database, without @@ -137,8 +200,8 @@ GIT_EXTERN(int) git_odb_read_prefix(git_odb_object **out, git_odb *db, const git * 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[out] len_out pointer where to store the length + * @param[out] 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 @@ -155,6 +218,17 @@ GIT_EXTERN(int) git_odb_read_header(size_t *len_out, git_object_t *type_out, git */ GIT_EXTERN(int) git_odb_exists(git_odb *db, const git_oid *id); +/** + * Determine if the given object can be found in the object database, with + * extended options. + * + * @param db database to be searched for the given object. + * @param id the object to search for. + * @param flags flags affecting the lookup (see `git_odb_lookup_flags_t`) + * @return 1 if the object was found, 0 otherwise + */ +GIT_EXTERN(int) git_odb_exists_ext(git_odb *db, const git_oid *id, unsigned int flags); + /** * Determine if an object can be found in the object database by an * abbreviated object ID. @@ -192,12 +266,13 @@ typedef struct 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. + * 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_SHA1_HEXSIZE`) 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 @@ -231,7 +306,7 @@ GIT_EXTERN(int) git_odb_expand_ids( * @param db database to refresh * @return 0 on success, error code otherwise */ -GIT_EXTERN(int) git_odb_refresh(struct git_odb *db); +GIT_EXTERN(int) git_odb_refresh(git_odb *db); /** * List all objects available in the database @@ -246,7 +321,10 @@ GIT_EXTERN(int) git_odb_refresh(struct git_odb *db); * @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); +GIT_EXTERN(int) git_odb_foreach( + git_odb *db, + git_odb_foreach_cb cb, + void *payload); /** * Write an object directly into the ODB @@ -261,7 +339,7 @@ GIT_EXTERN(int) git_odb_foreach(git_odb *db, git_odb_foreach_cb cb, void *payloa * * @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 data @type `const unsigned char *` 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 @@ -323,6 +401,11 @@ GIT_EXTERN(int) git_odb_stream_finalize_write(git_oid *out, git_odb_stream *stre * Read from an odb stream * * Most backends don't implement streaming reads + * + * @param stream the stream + * @param buffer a user-allocated buffer to store the data in. + * @param len the buffer's length + * @return the number of bytes read if succeeded, error code otherwise */ GIT_EXTERN(int) git_odb_stream_read(git_odb_stream *stream, char *buffer, size_t len); @@ -383,6 +466,7 @@ GIT_EXTERN(int) git_odb_open_rstream( * 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 + * @return 0 or an error code. */ GIT_EXTERN(int) git_odb_write_pack( git_odb_writepack **out, @@ -400,23 +484,59 @@ GIT_EXTERN(int) git_odb_write_pack( * exist). * * @param db object database where the `multi-pack-index` file will be written. + * @return 0 or an error code. */ GIT_EXTERN(int) git_odb_write_multi_pack_index( git_odb *db); +#ifdef GIT_EXPERIMENTAL_SHA256 + /** - * Determine the object-ID (sha1 hash) of a data buffer + * Generate the object ID (in SHA1 or SHA256 format) for a given 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] oid the resulting object ID. + * @param data data to hash + * @param len size of the data + * @param object_type of the data to hash + * @param oid_type the oid type to hash to + * @return 0 or an error code + */ +GIT_EXTERN(int) git_odb_hash( + git_oid *oid, + const void *data, + size_t len, + git_object_t object_type, + git_oid_t oid_type); + +/** + * Determine the object ID of a file on disk. + * + * @param[out] oid oid structure the result is written into. + * @param path file to read and determine object id for + * @param object_type of the data to hash + * @param oid_type the oid type to hash to + * @return 0 or an error code + */ +GIT_EXTERN(int) git_odb_hashfile( + git_oid *oid, + const char *path, + git_object_t object_type, + git_oid_t oid_type); +#else + +/** + * Determine the object-ID (sha1 or sha256 hash) of a data buffer + * + * The resulting 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[out] oid the resulting object-ID. * @param data data to hash * @param len size of the data - * @param type of the data to hash + * @param object_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); +GIT_EXTERN(int) git_odb_hash(git_oid *oid, const void *data, size_t len, git_object_t object_type); /** * Read a file from disk and fill a git_oid with the object id @@ -426,12 +546,14 @@ GIT_EXTERN(int) git_odb_hash(git_oid *out, const void *data, size_t len, git_obj * 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[out] oid 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 + * @param object_type of the data to hash * @return 0 or an error code */ -GIT_EXTERN(int) git_odb_hashfile(git_oid *out, const char *path, git_object_t type); +GIT_EXTERN(int) git_odb_hashfile(git_oid *oid, const char *path, git_object_t object_type); + +#endif /** * Create a copy of an odb_object @@ -476,7 +598,7 @@ GIT_EXTERN(const git_oid *) git_odb_object_id(git_odb_object *object); * This pointer is owned by the object and shall not be free'd. * * @param object the object - * @return a pointer to the data + * @return @type `const unsigned char *` a pointer to the data */ GIT_EXTERN(const void *) git_odb_object_data(git_odb_object *object); @@ -556,7 +678,7 @@ GIT_EXTERN(int) git_odb_get_backend(git_odb_backend **out, git_odb *odb, size_t /** * Set the git commit-graph for the ODB. * - * After a successfull call, the ownership of the cgraph parameter will be + * After a successful 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 @@ -570,4 +692,5 @@ GIT_EXTERN(int) git_odb_set_commit_graph(git_odb *odb, git_commit_graph *cgraph) /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/odb_backend.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/odb_backend.h index c593bac..88ca29f 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/odb_backend.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/odb_backend.h @@ -13,46 +13,135 @@ /** * @file git2/backend.h - * @brief Git custom backend functions + * @brief Object database backends manage the storage of git objects * @defgroup git_odb Git object database routines * @ingroup Git * @{ */ GIT_BEGIN_DECL +/** Options for configuring a packfile object backend. */ +typedef struct { + unsigned int version; /**< version for the struct */ + + /** + * Type of object IDs to use for this object database, or + * 0 for default (currently SHA1). + */ + git_oid_t oid_type; +} git_odb_backend_pack_options; + +/** The current version of the diff options structure */ +#define GIT_ODB_BACKEND_PACK_OPTIONS_VERSION 1 + +/** + * Stack initializer for odb pack backend options. Alternatively use + * `git_odb_backend_pack_options_init` programmatic initialization. + */ +#define GIT_ODB_BACKEND_PACK_OPTIONS_INIT \ + { GIT_ODB_BACKEND_PACK_OPTIONS_VERSION } + +typedef enum { + GIT_ODB_BACKEND_LOOSE_FSYNC = (1 << 0) +} git_odb_backend_loose_flag_t; + +/** Options for configuring a loose object backend. */ +typedef struct { + unsigned int version; /**< version for the struct */ + + /** A combination of the `git_odb_backend_loose_flag_t` types. */ + uint32_t flags; + + /** + * zlib compression level to use (0-9), where 1 is the fastest + * at the expense of larger files, and 9 produces the best + * compression at the expense of speed. 0 indicates that no + * compression should be performed. -1 is the default (currently + * optimizing for speed). + */ + int compression_level; + + /** Permissions to use creating a directory or 0 for defaults */ + unsigned int dir_mode; + + /** Permissions to use creating a file or 0 for defaults */ + unsigned int file_mode; + + /** + * Type of object IDs to use for this object database, or + * 0 for default (currently SHA1). + */ + git_oid_t oid_type; +} git_odb_backend_loose_options; + +/** The current version of the diff options structure */ +#define GIT_ODB_BACKEND_LOOSE_OPTIONS_VERSION 1 + +/** + * Stack initializer for odb loose backend options. Alternatively use + * `git_odb_backend_loose_options_init` programmatic initialization. + */ +#define GIT_ODB_BACKEND_LOOSE_OPTIONS_INIT \ + { GIT_ODB_BACKEND_LOOSE_OPTIONS_VERSION, 0, -1 } + /* * Constructors for in-box ODB backends. */ +#ifdef GIT_EXPERIMENTAL_SHA256 + /** - * Create a backend for the packfiles. + * Create a backend for a directory containing packfiles. * - * @param out location to store the odb backend pointer + * @param[out] out location to store the odb backend pointer * @param objects_dir the Git repository's objects directory + * @param opts the options to use when creating the pack backend + * @return 0 or an error code + */ +GIT_EXTERN(int) git_odb_backend_pack( + git_odb_backend **out, + const char *objects_dir, + const git_odb_backend_pack_options *opts); + +/** + * Create a backend for a single packfile. * + * @param[out] out location to store the odb backend pointer + * @param index_file path to the packfile's .idx file + * @param opts the options to use when creating the pack backend * @return 0 or an error code */ -GIT_EXTERN(int) git_odb_backend_pack(git_odb_backend **out, const char *objects_dir); +GIT_EXTERN(int) git_odb_backend_one_pack( + git_odb_backend **out, + const char *index_file, + const git_odb_backend_pack_options *opts); /** * Create a backend for loose objects * - * @param out location to store the odb backend pointer + * @param[out] 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 + * @param opts options for the loose object backend or NULL * * @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); + git_odb_backend_loose_options *opts); + +#else + +/** + * Create a backend for a directory containing packfiles. + * + * @param[out] 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 out of a single packfile @@ -60,18 +149,40 @@ GIT_EXTERN(int) git_odb_backend_loose( * This can be useful for inspecting the contents of a single * packfile. * - * @param out location to store the odb backend pointer + * @param[out] 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); + +/** + * Create a backend for loose objects * + * @param[out] out location to store the odb backend pointer + * @param objects_dir the Git repository's objects directory + * @param compression_level zlib compression level (0-9), or -1 for the default + * @param do_fsync if non-zero, perform an fsync on write + * @param dir_mode permission to use when creating directories, or 0 for default + * @param file_mode permission to use when creating directories, or 0 for default * @return 0 or an error code */ -GIT_EXTERN(int) git_odb_backend_one_pack(git_odb_backend **out, const char *index_file); +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); + +#endif /** Streaming mode */ typedef enum { GIT_STREAM_RDONLY = (1 << 1), GIT_STREAM_WRONLY = (1 << 2), - GIT_STREAM_RW = (GIT_STREAM_RDONLY | GIT_STREAM_WRONLY), + GIT_STREAM_RW = (GIT_STREAM_RDONLY | GIT_STREAM_WRONLY) } git_odb_stream_t; /** @@ -87,6 +198,10 @@ struct git_odb_stream { unsigned int mode; void *hash_ctx; +#ifdef GIT_EXPERIMENTAL_SHA256 + git_oid_t oid_type; +#endif + git_object_size_t declared_size; git_object_size_t received_bytes; @@ -130,6 +245,7 @@ struct git_odb_writepack { void GIT_CALLBACK(free)(git_odb_writepack *writepack); }; +/** @} */ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/oid.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/oid.h index 549df4e..8539b4e 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/oid.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/oid.h @@ -8,22 +8,92 @@ #define INCLUDE_git_oid_h__ #include "common.h" -#include "types.h" +#include "experimental.h" /** * @file git2/oid.h - * @brief Git object id routines + * @brief Object IDs * @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 +/** The type of object id. */ +typedef enum { -/** Size (in bytes) of a hex formatted oid */ -#define GIT_OID_HEXSZ (GIT_OID_RAWSZ * 2) +#ifdef GIT_EXPERIMENTAL_SHA256 + GIT_OID_SHA1 = 1, /**< SHA1 */ + GIT_OID_SHA256 = 2 /**< SHA256 */ +#else + GIT_OID_SHA1 = 1 /**< SHA1 */ +#endif + +} git_oid_t; + +/* + * SHA1 is currently the only supported object ID type. + */ + +/** SHA1 is currently libgit2's default oid type. */ +#define GIT_OID_DEFAULT GIT_OID_SHA1 + +/** Size (in bytes) of a raw/binary sha1 oid */ +#define GIT_OID_SHA1_SIZE 20 +/** Size (in bytes) of a hex formatted sha1 oid */ +#define GIT_OID_SHA1_HEXSIZE (GIT_OID_SHA1_SIZE * 2) + +/** + * The binary representation of the null sha1 object ID. + */ +#ifndef GIT_EXPERIMENTAL_SHA256 +# define GIT_OID_SHA1_ZERO { { 0 } } +#else +# define GIT_OID_SHA1_ZERO { GIT_OID_SHA1, { 0 } } +#endif + +/** + * The string representation of the null sha1 object ID. + */ +#define GIT_OID_SHA1_HEXZERO "0000000000000000000000000000000000000000" + +/* + * Experimental SHA256 support is a breaking change to the API. + * This exists for application compatibility testing. + */ + +#ifdef GIT_EXPERIMENTAL_SHA256 + +/** Size (in bytes) of a raw/binary sha256 oid */ +# define GIT_OID_SHA256_SIZE 32 +/** Size (in bytes) of a hex formatted sha256 oid */ +# define GIT_OID_SHA256_HEXSIZE (GIT_OID_SHA256_SIZE * 2) + +/** + * The binary representation of the null sha256 object ID. + */ +# define GIT_OID_SHA256_ZERO { GIT_OID_SHA256, { 0 } } + +/** + * The string representation of the null sha256 object ID. + */ +# define GIT_OID_SHA256_HEXZERO "0000000000000000000000000000000000000000000000000000000000000000" + +#endif + +/** Maximum possible object ID size in raw format */ +#ifdef GIT_EXPERIMENTAL_SHA256 +# define GIT_OID_MAX_SIZE GIT_OID_SHA256_SIZE +#else +# define GIT_OID_MAX_SIZE GIT_OID_SHA1_SIZE +#endif + +/** Maximum possible object ID size in hex format */ +#ifdef GIT_EXPERIMENTAL_SHA256 +# define GIT_OID_MAX_HEXSIZE GIT_OID_SHA256_HEXSIZE +#else +# define GIT_OID_MAX_HEXSIZE GIT_OID_SHA1_HEXSIZE +#endif /** Minimum length (in number of hex characters, * i.e. packets of 4 bits) of an oid prefix */ @@ -31,23 +101,43 @@ GIT_BEGIN_DECL /** Unique identity of any object (commit, tree, blob, tag). */ typedef struct git_oid { + +#ifdef GIT_EXPERIMENTAL_SHA256 + /** type of object id */ + unsigned char type; +#endif + /** raw binary formatted id */ - unsigned char id[GIT_OID_RAWSZ]; + unsigned char id[GIT_OID_MAX_SIZE]; } git_oid; +#ifdef GIT_EXPERIMENTAL_SHA256 + +GIT_EXTERN(int) git_oid_fromstr(git_oid *out, const char *str, git_oid_t type); +GIT_EXTERN(int) git_oid_fromstrp(git_oid *out, const char *str, git_oid_t type); +GIT_EXTERN(int) git_oid_fromstrn(git_oid *out, const char *str, size_t length, git_oid_t type); +GIT_EXTERN(int) git_oid_fromraw(git_oid *out, const unsigned char *raw, git_oid_t type); + +#else + /** * Parse a hex formatted object id into a git_oid. * + * The appropriate number of bytes for the given object ID type will + * be read from the string - 40 bytes for SHA1, 64 bytes for SHA256. + * The given string need not be NUL terminated. + * * @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). + * needed for an oid encoded in hex (40 bytes for sha1, + * 256 bytes for sha256). * @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. + * Parse a hex formatted NUL-terminated string into a git_oid. * * @param out oid structure the result is written into. * @param str input hex string; must be null-terminated. @@ -77,14 +167,17 @@ GIT_EXTERN(int) git_oid_fromstrn(git_oid *out, const char *str, size_t length); */ GIT_EXTERN(int) git_oid_fromraw(git_oid *out, const unsigned char *raw); +#endif + /** * 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. + * needed for an oid encoded in hex (40 bytes for SHA1, + * 64 bytes for SHA256). 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 */ @@ -94,7 +187,7 @@ 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 + * If the number of bytes is > GIT_OID_SHA1_HEXSIZE, 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. @@ -110,9 +203,10 @@ GIT_EXTERN(int) git_oid_nfmt(char *out, size_t n, const git_oid *id); * * @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. + * needed for an oid encoded in hex (41 bytes for SHA1, + * 65 bytes for SHA256). 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 */ @@ -127,14 +221,16 @@ GIT_EXTERN(int) git_oid_pathfmt(char *out, const git_oid *id); * concurrent calls of the function. * * @param oid The oid structure to format - * @return the c-string + * @return the c-string or NULL on failure */ 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 + * If the buffer is smaller than the size of a hex-formatted oid string + * plus an additional byte (GIT_OID_SHA_HEXSIZE + 1 for SHA1 or + * GIT_OID_SHA256_HEXSIZE + 1 for SHA256), then the resulting * oid c-string will be truncated to n-1 characters (but will still be * NUL-byte terminated). * @@ -210,6 +306,7 @@ GIT_EXTERN(int) git_oid_strcmp(const git_oid *id, const char *str); /** * Check is an oid is all zeros. * + * @param id the object ID to check * @return 1 if all zeros, 0 otherwise. */ GIT_EXTERN(int) git_oid_is_zero(const git_oid *id); @@ -270,4 +367,5 @@ GIT_EXTERN(void) git_oid_shorten_free(git_oid_shorten *os); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/oidarray.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/oidarray.h index 94fc58d..e79a559 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/oidarray.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/oidarray.h @@ -10,6 +10,13 @@ #include "common.h" #include "oid.h" +/** + * @file git2/oidarray.h + * @brief An array of object IDs + * @defgroup git_oidarray Arrays of object IDs + * @ingroup Git + * @{ + */ GIT_BEGIN_DECL /** Array of object ids */ @@ -34,4 +41,3 @@ GIT_EXTERN(void) git_oidarray_dispose(git_oidarray *array); GIT_END_DECL #endif - diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/pack.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/pack.h index 3b9beb6..3837e04 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/pack.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/pack.h @@ -51,7 +51,7 @@ GIT_BEGIN_DECL */ typedef enum { GIT_PACKBUILDER_ADDING_OBJECTS = 0, - GIT_PACKBUILDER_DELTAFICATION = 1, + GIT_PACKBUILDER_DELTAFICATION = 1 } git_packbuilder_stage_t; /** @@ -148,6 +148,7 @@ GIT_EXTERN(int) git_packbuilder_insert_recur(git_packbuilder *pb, const git_oid * * @param buf Buffer where to write the packfile * @param pb The packbuilder + * @return 0 or an error code */ GIT_EXTERN(int) git_packbuilder_write_buf(git_buf *buf, git_packbuilder *pb); @@ -169,15 +170,30 @@ GIT_EXTERN(int) git_packbuilder_write( git_indexer_progress_cb progress_cb, void *progress_cb_payload); +#ifndef GIT_DEPRECATE_HARD /** -* 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 -*/ + * 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. + * + * @deprecated use git_packbuilder_name + * @param pb The packbuilder object + * @return 0 or an error code + */ GIT_EXTERN(const git_oid *) git_packbuilder_hash(git_packbuilder *pb); +#endif + +/** + * Get the unique name for the resulting packfile. + * + * The packfile's name is derived from the packfile's content. + * This is only correct after the packfile has been written. + * + * @param pb the packbuilder instance + * @return a NUL terminated string for the packfile name + */ +GIT_EXTERN(const char *) git_packbuilder_name(git_packbuilder *pb); /** * Callback used to iterate over packed objects @@ -217,7 +233,15 @@ GIT_EXTERN(size_t) git_packbuilder_object_count(git_packbuilder *pb); */ GIT_EXTERN(size_t) git_packbuilder_written(git_packbuilder *pb); -/** Packbuilder progress notification function */ +/** + * Packbuilder progress notification function. + * + * @param stage the stage of the packbuilder + * @param current the current object + * @param total the total number of objects + * @param payload the callback payload + * @return 0 on success or an error code + */ typedef int GIT_CALLBACK(git_packbuilder_progress)( int stage, uint32_t current, @@ -231,6 +255,9 @@ typedef int GIT_CALLBACK(git_packbuilder_progress)( * @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. + * When progress_cb returns an error, the pack building process will be + * aborted and the error will be returned from the invoked function. + * `pb` must then be freed. * @param progress_cb_payload Payload for progress callback. * @return 0 or an error code */ @@ -248,4 +275,5 @@ GIT_EXTERN(void) git_packbuilder_free(git_packbuilder *pb); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/patch.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/patch.h index fde9659..7824821 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/patch.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/patch.h @@ -14,7 +14,7 @@ /** * @file git2/patch.h - * @brief Patch handling routines. + * @brief Patches store the textual diffs in a delta * @ingroup Git * @{ */ @@ -139,17 +139,25 @@ GIT_EXTERN(int) git_patch_from_buffers( /** * Free a git_patch object. + * + * @param patch The patch to free. */ 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. + * + * @param patch The patch in which to get the delta. + * @return The delta associated with the patch. */ GIT_EXTERN(const git_diff_delta *) git_patch_get_delta(const git_patch *patch); /** * Get the number of hunks in a patch + * + * @param patch The patch in which to get the number of hunks. + * @return The number of hunks of the patch. */ GIT_EXTERN(size_t) git_patch_num_hunks(const git_patch *patch); @@ -275,8 +283,7 @@ GIT_EXTERN(int) git_patch_to_buf( git_buf *out, git_patch *patch); -GIT_END_DECL - /**@}*/ +GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/pathspec.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/pathspec.h index 3299657..6f6918c 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/pathspec.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/pathspec.h @@ -12,6 +12,13 @@ #include "strarray.h" #include "diff.h" +/** + * @file git2/pathspec.h + * @brief Specifiers for path matching + * @defgroup git_pathspec Specifiers for path matching + * @ingroup Git + * @{ + */ GIT_BEGIN_DECL /** @@ -69,7 +76,7 @@ typedef enum { * 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_FAILURES_ONLY = (1u << 5) } git_pathspec_flag_t; /** @@ -276,5 +283,7 @@ GIT_EXTERN(size_t) git_pathspec_match_list_failed_entrycount( 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/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/proxy.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/proxy.h index 653425d..195ab75 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/proxy.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/proxy.h @@ -12,6 +12,12 @@ #include "cert.h" #include "credential.h" +/** + * @file git2/proxy.h + * @brief TLS proxies + * @ingroup Git + * @{ + */ GIT_BEGIN_DECL /** @@ -32,7 +38,7 @@ typedef enum { /** * Connect via the URL given in the options */ - GIT_PROXY_SPECIFIED, + GIT_PROXY_SPECIFIED } git_proxy_t; /** @@ -78,7 +84,10 @@ typedef struct { void *payload; } git_proxy_options; +/** Current version for the `git_proxy_options` structure */ #define GIT_PROXY_OPTIONS_VERSION 1 + +/** Static constructor for `git_proxy_options` */ #define GIT_PROXY_OPTIONS_INIT {GIT_PROXY_OPTIONS_VERSION} /** @@ -93,6 +102,7 @@ typedef struct { */ GIT_EXTERN(int) git_proxy_options_init(git_proxy_options *opts, unsigned int version); +/** @} */ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/rebase.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/rebase.h index 11e452c..3fb3e57 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/rebase.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/rebase.h @@ -17,8 +17,8 @@ /** * @file git2/rebase.h - * @brief Git rebase routines - * @defgroup git_rebase Git merge routines + * @brief Rebase manipulates commits, placing them on a new parent + * @defgroup git_rebase Rebase manipulates commits, placing them on a new parent * @ingroup Git * @{ */ @@ -67,10 +67,9 @@ typedef struct { /** * 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_rebase_next` and `git_rebase_abort`. Note that during + * `abort`, these options will add an implied `GIT_CHECKOUT_FORCE` + * to match git semantics. */ git_checkout_options checkout_options; @@ -152,10 +151,13 @@ typedef enum { * No commit will be cherry-picked. The client should run the given * command and (if successful) continue. */ - GIT_REBASE_OPERATION_EXEC, + GIT_REBASE_OPERATION_EXEC } git_rebase_operation_t; +/** Current version for the `git_rebase_options` structure */ #define GIT_REBASE_OPTIONS_VERSION 1 + +/** Static constructor for `git_rebase_options` */ #define GIT_REBASE_OPTIONS_INIT \ { GIT_REBASE_OPTIONS_VERSION, 0, 0, NULL, GIT_MERGE_OPTIONS_INIT, \ GIT_CHECKOUT_OPTIONS_INIT, NULL, NULL } @@ -242,6 +244,7 @@ GIT_EXTERN(int) git_rebase_open( /** * Gets the original `HEAD` ref name for merge rebases. * + * @param rebase The in-progress rebase. * @return The original `HEAD` ref name */ GIT_EXTERN(const char *) git_rebase_orig_head_name(git_rebase *rebase); @@ -249,6 +252,7 @@ GIT_EXTERN(const char *) git_rebase_orig_head_name(git_rebase *rebase); /** * Gets the original `HEAD` id for merge rebases. * + * @param rebase The in-progress rebase. * @return The original `HEAD` id */ GIT_EXTERN(const git_oid *) git_rebase_orig_head_id(git_rebase *rebase); @@ -256,6 +260,7 @@ GIT_EXTERN(const git_oid *) git_rebase_orig_head_id(git_rebase *rebase); /** * Gets the `onto` ref name for merge rebases. * + * @param rebase The in-progress rebase. * @return The `onto` ref name */ GIT_EXTERN(const char *) git_rebase_onto_name(git_rebase *rebase); @@ -263,6 +268,7 @@ GIT_EXTERN(const char *) git_rebase_onto_name(git_rebase *rebase); /** * Gets the `onto` id for merge rebases. * + * @param rebase The in-progress rebase. * @return The `onto` id */ GIT_EXTERN(const git_oid *) git_rebase_onto_id(git_rebase *rebase); @@ -322,6 +328,10 @@ GIT_EXTERN(int) git_rebase_next( * This is only applicable for in-memory rebases; for rebases within * a working directory, the changes were applied to the repository's * index. + * + * @param index The result index of the last operation. + * @param rebase The in-progress rebase. + * @return 0 or an error code */ GIT_EXTERN(int) git_rebase_inmemory_index( git_index **index, @@ -388,4 +398,5 @@ GIT_EXTERN(void) git_rebase_free(git_rebase *rebase); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/refdb.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/refdb.h index a315876..536ef10 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/refdb.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/refdb.h @@ -14,8 +14,8 @@ /** * @file git2/refdb.h - * @brief Git custom refs backend functions - * @defgroup git_refdb Git custom refs backend API + * @brief A database for references (branches and tags) + * @defgroup git_refdb A database for references (branches and tags) * @ingroup Git * @{ */ @@ -52,6 +52,9 @@ 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. + * + * @param refdb The reference database to optimize. + * @return 0 or an error code. */ GIT_EXTERN(int) git_refdb_compress(git_refdb *refdb); diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/reflog.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/reflog.h index c949a28..a0956c6 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/reflog.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/reflog.h @@ -13,8 +13,8 @@ /** * @file git2/reflog.h - * @brief Git reflog management routines - * @defgroup git_reflog Git reflog management routines + * @brief Reference logs store how references change + * @defgroup git_reflog Reference logs store how references change * @ingroup Git * @{ */ @@ -31,7 +31,7 @@ GIT_BEGIN_DECL * git_reflog_free(). * * @param out pointer to reflog - * @param repo the repostiory + * @param repo the repository * @param name reference to look up * @return 0 or an error code */ @@ -167,4 +167,5 @@ GIT_EXTERN(void) git_reflog_free(git_reflog *reflog); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/refs.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/refs.h index 7ebb209..d820f2a 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/refs.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/refs.h @@ -14,8 +14,8 @@ /** * @file git2/refs.h - * @brief Git reference management routines - * @defgroup git_reference Git reference management routines + * @brief References point to a commit; generally these are branches and tags + * @defgroup git_reference References point to a commit; generally these are branches and tags * @ingroup Git * @{ */ @@ -29,7 +29,7 @@ GIT_BEGIN_DECL * 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[out] 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. @@ -57,7 +57,7 @@ GIT_EXTERN(int) git_reference_name_to_id( /** * Lookup a reference by DWIMing its short name * - * Apply the git precendence rules to the given shorthand to determine + * Apply the git precedence rules to the given shorthand to determine * which reference the user is referring to. * * @param out pointer in which to store the reference @@ -371,6 +371,7 @@ GIT_EXTERN(int) git_reference_set_target( * reflog is enabled for the repository. We only rename * the reflog if it exists. * + * @param[out] new_ref The new reference * @param ref The reference to rename * @param new_name The new name for the reference * @param force Overwrite an existing reference @@ -406,6 +407,7 @@ GIT_EXTERN(int) git_reference_delete(git_reference *ref); * This method removes the named reference from the repository without * looking at its old value. * + * @param repo The repository to remove the reference from * @param name The reference to remove * @return 0 or an error code */ @@ -518,7 +520,7 @@ GIT_EXTERN(int) git_reference_cmp( /** * Create an iterator for the repo's references * - * @param out pointer in which to store the iterator + * @param[out] out pointer in which to store the iterator * @param repo the repository * @return 0 or an error code */ @@ -543,7 +545,7 @@ GIT_EXTERN(int) git_reference_iterator_glob_new( /** * Get the next reference * - * @param out pointer in which to store the reference + * @param[out] 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 */ @@ -686,7 +688,7 @@ typedef enum { * so the `ONELEVEL` naming rules aren't enforced and 'master' * becomes a valid name. */ - GIT_REFERENCE_FORMAT_REFSPEC_SHORTHAND = (1u << 2), + GIT_REFERENCE_FORMAT_REFSPEC_SHORTHAND = (1u << 2) } git_reference_format_t; /** @@ -724,7 +726,7 @@ GIT_EXTERN(int) git_reference_normalize_name( * 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[out] 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). @@ -768,4 +770,5 @@ GIT_EXTERN(const char *) git_reference_shorthand(const git_reference *ref); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/refspec.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/refspec.h index eaf7747..49d5f89 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/refspec.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/refspec.h @@ -14,8 +14,8 @@ /** * @file git2/refspec.h - * @brief Git refspec attributes - * @defgroup git_refspec Git refspec attributes + * @brief Refspecs map local references to remote references + * @defgroup git_refspec Refspecs map local references to remote references * @ingroup Git * @{ */ @@ -58,7 +58,7 @@ 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 + * @return the refspec's original string */ GIT_EXTERN(const char *) git_refspec_string(const git_refspec *refspec); @@ -79,7 +79,16 @@ GIT_EXTERN(int) git_refspec_force(const git_refspec *refspec); GIT_EXTERN(git_direction) git_refspec_direction(const git_refspec *spec); /** - * Check if a refspec's source descriptor matches a reference + * Check if a refspec's source descriptor matches a negative 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_negative(const git_refspec *refspec, const char *refname); + +/** + * Check if a refspec's source descriptor matches a reference * * @param refspec the refspec * @param refname the name of the reference to check @@ -116,6 +125,7 @@ GIT_EXTERN(int) git_refspec_transform(git_buf *out, const git_refspec *spec, con */ GIT_EXTERN(int) git_refspec_rtransform(git_buf *out, const git_refspec *spec, const char *name); +/** @} */ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/remote.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/remote.h index 4d57eaa..2472ded 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/remote.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/remote.h @@ -19,8 +19,8 @@ /** * @file git2/remote.h - * @brief Git remote management functions - * @defgroup git_remote remote management functions + * @brief Remotes are where local repositories fetch from and push to + * @defgroup git_remote Remotes are where local repositories fetch from and push to * @ingroup Git * @{ */ @@ -41,6 +41,30 @@ GIT_EXTERN(int) git_remote_create( const char *name, const char *url); +/** + * Remote redirection settings; whether redirects to another host + * are permitted. By default, git will follow a redirect on the + * initial request (`/info/refs`), but not subsequent requests. + */ +typedef enum { + /** + * Do not follow any off-site redirects at any stage of + * the fetch or push. + */ + GIT_REMOTE_REDIRECT_NONE = (1 << 0), + + /** + * Allow off-site redirects only upon the initial request. + * This is the default. + */ + GIT_REMOTE_REDIRECT_INITIAL = (1 << 1), + + /** + * Allow redirects at any stage in the fetch or push. + */ + GIT_REMOTE_REDIRECT_ALL = (1 << 2) +} git_remote_redirect_t; + /** * Remote creation options flags */ @@ -49,9 +73,20 @@ typedef enum { 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_SKIP_DEFAULT_FETCHSPEC = (1 << 1) } git_remote_create_flags; +/** + * How to handle reference updates. + */ +typedef enum { + /* Write the fetch results to FETCH_HEAD. */ + GIT_REMOTE_UPDATE_FETCHHEAD = (1 << 0), + + /* Report unchanged tips in the update_refs callback. */ + GIT_REMOTE_UPDATE_REPORT_UNCHANGED = (1 << 1) +} git_remote_update_flags; + /** * Remote creation options structure * @@ -81,7 +116,10 @@ typedef struct git_remote_create_options { unsigned int flags; } git_remote_create_options; +/** Current version for the `git_remote_create_options` structure */ #define GIT_REMOTE_CREATE_OPTIONS_VERSION 1 + +/** Static constructor for `git_remote_create_options` */ #define GIT_REMOTE_CREATE_OPTIONS_INIT {GIT_REMOTE_CREATE_OPTIONS_VERSION} /** @@ -211,9 +249,9 @@ 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. + * If url.*.insteadOf has been configured for this URL, it will return + * the modified URL. This function does not consider if a push url has + * been configured for this remote (use `git_remote_pushurl` if needed). * * @param remote the remote * @return a pointer to the url @@ -300,6 +338,7 @@ GIT_EXTERN(int) git_remote_add_fetch(git_repository *repo, const char *remote, c * * @param array pointer to the array in which to store the strings * @param remote the remote to query + * @return 0 or an error code. */ GIT_EXTERN(int) git_remote_get_fetch_refspecs(git_strarray *array, const git_remote *remote); @@ -324,6 +363,7 @@ GIT_EXTERN(int) git_remote_add_push(git_repository *repo, const char *remote, co * * @param array pointer to the array in which to store the strings * @param remote the remote to query + * @return 0 or an error code. */ GIT_EXTERN(int) git_remote_get_push_refspecs(git_strarray *array, const git_remote *remote); @@ -344,23 +384,6 @@ GIT_EXTERN(size_t) git_remote_refspec_count(const git_remote *remote); */ 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 * @@ -443,10 +466,18 @@ GIT_EXTERN(int) git_remote_list(git_strarray *out, git_repository *repo); typedef enum git_remote_completion_t { GIT_REMOTE_COMPLETION_DOWNLOAD, GIT_REMOTE_COMPLETION_INDEXING, - GIT_REMOTE_COMPLETION_ERROR, + GIT_REMOTE_COMPLETION_ERROR } git_remote_completion_t; -/** Push network progress notification function */ +/** + * Push network progress notification callback. + * + * @param current The number of objects pushed so far + * @param total The total number of objects to push + * @param bytes The number of bytes pushed + * @param payload The user-specified payload callback + * @return 0 or an error code to stop the transfer + */ typedef int GIT_CALLBACK(git_push_transfer_progress_cb)( unsigned int current, unsigned int total, @@ -482,8 +513,12 @@ typedef struct { * as commands to the destination. * @param len number of elements in `updates` * @param payload Payload provided by the caller + * @return 0 or an error code to stop the push */ -typedef int GIT_CALLBACK(git_push_negotiation)(const git_push_update **updates, size_t len, void *payload); +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. @@ -548,7 +583,8 @@ struct git_remote_callbacks { * 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); + int GIT_CALLBACK(completion)(git_remote_completion_t type, + void *data); /** * This will be called if the remote host requires @@ -574,11 +610,22 @@ struct git_remote_callbacks { */ git_indexer_progress_cb transfer_progress; +#ifdef GIT_DEPRECATE_HARD + void *reserved_update_tips; +#else /** - * Each time a reference is updated locally, this function - * will be called with information about it. + * Deprecated callback for reference updates, callers should + * set `update_refs` instead. This is retained for backward + * compatibility; if you specify both `update_refs` and + * `update_tips`, then only the `update_refs` function will + * be called. + * + * @deprecated the `update_refs` callback in this structure + * should be preferred */ - int GIT_CALLBACK(update_tips)(const char *refname, const git_oid *a, const git_oid *b, void *data); + int GIT_CALLBACK(update_tips)(const char *refname, + const git_oid *a, const git_oid *b, void *data); +#endif /** * Function to call with progress information during pack @@ -635,9 +682,25 @@ struct git_remote_callbacks { */ git_url_resolve_cb resolve_url; #endif + + /** + * Each time a reference is updated locally, this function + * will be called with information about it. This should be + * preferred over the `update_tips` callback in this + * structure. + */ + int GIT_CALLBACK(update_refs)( + const char *refname, + const git_oid *a, + const git_oid *b, + git_refspec *spec, + void *data); }; +/** Current version for the `git_remote_callbacks_options` structure */ #define GIT_REMOTE_CALLBACKS_VERSION 1 + +/** Static constructor for `git_remote_callbacks_options` */ #define GIT_REMOTE_CALLBACKS_INIT {GIT_REMOTE_CALLBACKS_VERSION} /** @@ -665,7 +728,7 @@ typedef enum { /** * Force pruning off */ - GIT_FETCH_NO_PRUNE, + GIT_FETCH_NO_PRUNE } git_fetch_prune_t; /** @@ -690,9 +753,18 @@ typedef enum { /** * Ask for the all the tags. */ - GIT_REMOTE_DOWNLOAD_TAGS_ALL, + GIT_REMOTE_DOWNLOAD_TAGS_ALL } git_remote_autotag_option_t; +/** Constants for fetch depth (shallowness of fetch). */ +typedef enum { + /** The fetch is "full" (not shallow). This is the default. */ + GIT_FETCH_DEPTH_FULL = 0, + + /** The fetch should "unshallow" and fetch missing data. */ + GIT_FETCH_DEPTH_UNSHALLOW = 2147483647 +} git_fetch_depth_t; + /** * Fetch options structure. * @@ -715,10 +787,9 @@ typedef struct { 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. + * How to handle reference updates; see `git_remote_update_flags`. */ - int update_fetchhead; + unsigned int update_fetchhead; /** * Determines how to behave regarding tags on the remote, such @@ -734,15 +805,39 @@ typedef struct { */ git_proxy_options proxy_opts; + /** + * Depth of the fetch to perform, or `GIT_FETCH_DEPTH_FULL` + * (or `0`) for full history, or `GIT_FETCH_DEPTH_UNSHALLOW` + * to "unshallow" a shallow repository. + * + * The default is full (`GIT_FETCH_DEPTH_FULL` or `0`). + */ + int depth; + + /** + * Whether to allow off-site redirects. If this is not + * specified, the `http.followRedirects` configuration setting + * will be consulted. + */ + git_remote_redirect_t follow_redirects; + /** * Extra headers for this fetch operation */ git_strarray custom_headers; } git_fetch_options; +/** Current version for the `git_fetch_options` structure */ #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 } + +/** Static constructor for `git_fetch_options` */ +#define GIT_FETCH_OPTIONS_INIT { \ + GIT_FETCH_OPTIONS_VERSION, \ + GIT_REMOTE_CALLBACKS_INIT, \ + GIT_FETCH_PRUNE_UNSPECIFIED, \ + GIT_REMOTE_UPDATE_FETCHHEAD, \ + GIT_REMOTE_DOWNLOAD_TAGS_UNSPECIFIED, \ + GIT_PROXY_OPTIONS_INIT } /** * Initialize git_fetch_options structure @@ -785,13 +880,28 @@ typedef struct { */ git_proxy_options proxy_opts; + /** + * Whether to allow off-site redirects. If this is not + * specified, the `http.followRedirects` configuration setting + * will be consulted. + */ + git_remote_redirect_t follow_redirects; + /** * Extra headers for this push operation */ git_strarray custom_headers; + + /** + * "Push options" to deliver to the remote. + */ + git_strarray remote_push_options; } git_push_options; +/** Current version for the `git_push_options` structure */ #define GIT_PUSH_OPTIONS_VERSION 1 + +/** Static constructor for `git_push_options` */ #define GIT_PUSH_OPTIONS_INIT { GIT_PUSH_OPTIONS_VERSION, 1, GIT_REMOTE_CALLBACKS_INIT, GIT_PROXY_OPTIONS_INIT } /** @@ -809,7 +919,103 @@ GIT_EXTERN(int) git_push_options_init( unsigned int version); /** - * Download and index the packfile + * Remote creation options structure + * + * Initialize with `GIT_REMOTE_CREATE_OPTIONS_INIT`. Alternatively, you can + * use `git_remote_create_options_init`. + * + */ +typedef struct { + unsigned int version; + + /** Callbacks to use for this connection */ + git_remote_callbacks callbacks; + + /** HTTP Proxy settings */ + git_proxy_options proxy_opts; + + /** + * Whether to allow off-site redirects. If this is not + * specified, the `http.followRedirects` configuration setting + * will be consulted. + */ + git_remote_redirect_t follow_redirects; + + /** Extra HTTP headers to use in this connection */ + git_strarray custom_headers; +} git_remote_connect_options; + +/** Current version for the `git_remote_connect_options` structure */ +#define GIT_REMOTE_CONNECT_OPTIONS_VERSION 1 + +/** Static constructor for `git_remote_connect_options` */ +#define GIT_REMOTE_CONNECT_OPTIONS_INIT { \ + GIT_REMOTE_CONNECT_OPTIONS_VERSION, \ + GIT_REMOTE_CALLBACKS_INIT, \ + GIT_PROXY_OPTIONS_INIT } + +/** + * Initialize git_remote_connect_options structure. + * + * Initializes a `git_remote_connect_options` with default values. + * Equivalent to creating an instance with + * `GIT_REMOTE_CONNECT_OPTIONS_INIT`. + * + * @param opts The `git_remote_connect_options` struct to initialize. + * @param version The struct version; pass `GIT_REMOTE_CONNECT_OPTIONS_VERSION`. + * @return Zero on success; -1 on failure. + */ +GIT_EXTERN(int) git_remote_connect_options_init( + git_remote_connect_options *opts, + unsigned int version); + +/** + * 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 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); + +/** + * Open a connection to a remote with extended options. + * + * The transport is selected based on the URL; the direction argument + * is due to a limitation of the git protocol which starts up a + * specific binary which can only do the one or the other. + * + * The given options structure will form the defaults for connection + * options and callback setup. Callers may override these defaults + * by specifying `git_fetch_options` or `git_push_options` in + * subsequent calls. + * + * @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 opts the remote connection options + * @return 0 or an error code + */ +GIT_EXTERN(int) git_remote_connect_ext( + git_remote *remote, + git_direction direction, + const git_remote_connect_options *opts); + +/** + * 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 @@ -818,19 +1024,31 @@ GIT_EXTERN(int) git_push_options_init( * The .idx file will be created and both it and the packfile with be * renamed to their final name. * + * If options are specified and this remote is already connected then + * the existing remote connection options will be discarded and the + * remote will now use the new options. + * * @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 + * @param opts the options to use for this fetch or NULL * @return 0 or an error code */ - GIT_EXTERN(int) git_remote_download(git_remote *remote, const git_strarray *refspecs, const git_fetch_options *opts); + 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. + * the remote git which objects are missing, create a packfile with + * the missing objects and send it. + * + * If options are specified and this remote is already connected then + * the existing remote connection options will be discarded and the + * remote will now use the new options. * * @param remote the remote * @param refspecs the refspecs to use for this negotiation and @@ -838,39 +1056,49 @@ GIT_EXTERN(int) git_push_options_init( * @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); +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 + * Update the tips to the new state. + * + * If callbacks are not specified then the callbacks specified to + * `git_remote_connect` will be used (if it was called). * * @param remote the remote to update + * @param callbacks pointer to the callback structure to use or NULL + * @param update_flags the git_remote_update_flags for these tips. + * @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()`. * @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, + unsigned int update_flags, git_remote_autotag_option_t download_tags, const char *reflog_message); /** - * Download new data and update tips + * Download new data and update tips. * * Convenience function to connect to a remote, download the data, * disconnect and update the remote-tracking branches. * + * If options are specified and this remote is already connected then + * the existing remote connection options will be discarded and the + * remote will now use the new options. + * * @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 opts options to use for this fetch or NULL * @param reflog_message The message to insert into the reflogs. If NULL, the * default is "fetch" * @return 0 or an error code @@ -882,30 +1110,42 @@ GIT_EXTERN(int) git_remote_fetch( const char *reflog_message); /** - * Prune tracking refs that are no longer present on remote + * Prune tracking refs that are no longer present on remote. + * + * If callbacks are not specified then the callbacks specified to + * `git_remote_connect` will be used (if it was called). * * @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); +GIT_EXTERN(int) git_remote_prune( + git_remote *remote, + const git_remote_callbacks *callbacks); /** - * Perform a push + * Perform a push. * - * Peform all the steps from a push. + * If options are specified and this remote is already connected then + * the existing remote connection options will be discarded and the + * remote will now use the new options. * * @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 + * @return 0 or an error code. */ -GIT_EXTERN(int) git_remote_push(git_remote *remote, - const git_strarray *refspecs, - const git_push_options *opts); +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. + * + * @param remote the remote to get statistics for + * @return the git_indexer_progress for the remote */ GIT_EXTERN(const git_indexer_progress *) git_remote_stats(git_remote *remote); @@ -1005,4 +1245,5 @@ GIT_EXTERN(int) git_remote_default_branch(git_buf *out, git_remote *remote); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/repository.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/repository.h index 8d1cffc..b203576 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/repository.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/repository.h @@ -10,12 +10,14 @@ #include "common.h" #include "types.h" #include "oid.h" +#include "odb.h" #include "buffer.h" +#include "commit.h" /** * @file git2/repository.h - * @brief Git repository management routines - * @defgroup git_repository Git repository management routines + * @brief The repository stores revisions for a source tree + * @defgroup git_repository The repository stores revisions for a source tree * @ingroup Git * @{ */ @@ -30,7 +32,11 @@ GIT_BEGIN_DECL * 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 + * Note that the libgit2 library _must_ be initialized using + * `git_libgit2_init` before any APIs can be called, including + * this one. + * + * @param[out] out pointer to the repo which will be opened * @param path the path to the repository * @return 0 or an error code */ @@ -58,7 +64,9 @@ GIT_EXTERN(int) git_repository_open_from_worktree(git_repository **out, git_work * @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); +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. @@ -70,6 +78,10 @@ GIT_EXTERN(int) git_repository_wrap_odb(git_repository **out, git_odb *odb); * The method will automatically detect if the repository is bare * (if there is a repository). * + * Note that the libgit2 library _must_ be initialized using + * `git_libgit2_init` before any APIs can be called, including + * this one. + * * @param out A pointer to a user-allocated git_buf which will contain * the found path. * @@ -141,13 +153,17 @@ typedef enum { * `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_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 + * Note that the libgit2 library _must_ be initialized using + * `git_libgit2_init` before any APIs can be called, including + * this one. + * + * @param[out] 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 @@ -175,7 +191,11 @@ GIT_EXTERN(int) git_repository_open_ext( * if you're e.g. hosting git repositories and need to access them * efficiently * - * @param out Pointer to the repo which will be opened. + * Note that the libgit2 library _must_ be initialized using + * `git_libgit2_init` before any APIs can be called, including + * this one. + * + * @param[out] 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 */ @@ -200,7 +220,11 @@ GIT_EXTERN(void) git_repository_free(git_repository *repo); * TODO: * - Reinit the repository * - * @param out pointer to the repo which will be created or reinitialized + * Note that the libgit2 library _must_ be initialized using + * `git_libgit2_init` before any APIs can be called, including + * this one. + * + * @param[out] 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 @@ -267,7 +291,7 @@ typedef enum { * 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_RELATIVE_GITLINK = (1u << 6) } git_repository_init_flag_t; /** @@ -292,7 +316,7 @@ typedef enum { /** * Use "--shared=all" behavior, adding world readability. */ - GIT_REPOSITORY_INIT_SHARED_ALL = 0002777, + GIT_REPOSITORY_INIT_SHARED_ALL = 0002777 } git_repository_init_mode_t; /** @@ -351,9 +375,21 @@ typedef struct { * pointing to this URL. */ const char *origin_url; + +#ifdef GIT_EXPERIMENTAL_SHA256 + /** + * + * Type of object IDs to use for this repository, or 0 for + * default (currently SHA1). + */ + git_oid_t oid_type; +#endif } git_repository_init_options; +/** Current version for the `git_repository_init_options` structure */ #define GIT_REPOSITORY_INIT_OPTIONS_VERSION 1 + +/** Static constructor for `git_repository_init_options` */ #define GIT_REPOSITORY_INIT_OPTIONS_INIT {GIT_REPOSITORY_INIT_OPTIONS_VERSION} /** @@ -378,6 +414,10 @@ GIT_EXTERN(int) git_repository_init_options_init( * auto-detect the case sensitivity of the file system and if the * file system supports file mode bits correctly. * + * Note that the libgit2 library _must_ be initialized using + * `git_libgit2_init` before any APIs can be called, including + * this one. + * * @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. @@ -395,7 +435,7 @@ GIT_EXTERN(int) git_repository_init_ext( * `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[out] 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 @@ -456,7 +496,9 @@ 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. + * apart from HEAD, which must be pointing to the unborn master branch, + * or the branch specified for the repository in the `init.defaultBranch` + * configuration variable. * * @param repo Repo to test * @return 1 if the repository is empty, 0 if it isn't, error code @@ -482,6 +524,7 @@ typedef enum { GIT_REPOSITORY_ITEM_LOGS, GIT_REPOSITORY_ITEM_MODULES, GIT_REPOSITORY_ITEM_WORKTREES, + GIT_REPOSITORY_ITEM_WORKTREE_CONFIG, GIT_REPOSITORY_ITEM__LAST } git_repository_item_t; @@ -525,7 +568,7 @@ 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. @@ -613,7 +656,7 @@ GIT_EXTERN(int) git_repository_config_snapshot(git_config **out, git_repository * The ODB must be freed once it's no longer being used by * the user. * - * @param out Pointer to store the loaded ODB + * @param[out] out Pointer to store the loaded ODB * @param repo A repository object * @return 0, or an error code */ @@ -629,7 +672,7 @@ GIT_EXTERN(int) git_repository_odb(git_odb **out, git_repository *repo); * The refdb must be freed once it's no longer being used by * the user. * - * @param out Pointer to store the loaded refdb + * @param[out] out Pointer to store the loaded refdb * @param repo A repository object * @return 0, or an error code */ @@ -645,7 +688,7 @@ GIT_EXTERN(int) git_repository_refdb(git_refdb **out, git_repository *repo); * The index must be freed once it's no longer being used by * the user. * - * @param out Pointer to store the loaded index + * @param[out] out Pointer to store the loaded index * @param repo A repository object * @return 0, or an error code */ @@ -673,6 +716,9 @@ 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. + * + * @param repo Repository to remove prepared message from. + * @return 0 or an error code. */ GIT_EXTERN(int) git_repository_message_remove(git_repository *repo); @@ -808,19 +854,19 @@ GIT_EXTERN(int) git_repository_set_head( * 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 + * If the provided committish 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 + * @param committish 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); + const git_oid *committish); /** * Make the repository HEAD directly point to the Commit. @@ -832,11 +878,13 @@ GIT_EXTERN(int) git_repository_set_head_detached( * * See the documentation for `git_repository_set_head_detached()`. * - * @see git_repository_set_head_detached + * @param repo Repository pointer + * @param committish annotated commit to point HEAD to + * @return 0 on success, or an error code */ GIT_EXTERN(int) git_repository_set_head_detached_from_annotated( git_repository *repo, - const git_annotated_commit *commitish); + const git_annotated_commit *committish); /** * Detach the HEAD. @@ -846,7 +894,7 @@ GIT_EXTERN(int) git_repository_set_head_detached_from_annotated( * 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 + * If the HEAD is already detached and points to a non committish, the HEAD is * unaltered, and -1 is returned. * * Otherwise, the HEAD will be detached and point to the peeled Commit. @@ -876,7 +924,7 @@ typedef enum { 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_APPLY_MAILBOX_OR_REBASE } git_repository_state_t; /** @@ -925,9 +973,10 @@ GIT_EXTERN(int) git_repository_is_shallow(git_repository *repo); * 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[out] name where to store the pointer to the name + * @param[out] email where to store the pointer to the email * @param repo the repository + * @return 0 or an error code */ GIT_EXTERN(int) git_repository_ident(const char **name, const char **email, const git_repository *repo); @@ -941,9 +990,30 @@ GIT_EXTERN(int) git_repository_ident(const char **name, const char **email, cons * @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 + * @return 0 or an error code. */ GIT_EXTERN(int) git_repository_set_ident(git_repository *repo, const char *name, const char *email); +/** + * Gets the object type used by this repository. + * + * @param repo the repository + * @return the object id type + */ +GIT_EXTERN(git_oid_t) git_repository_oid_type(git_repository *repo); + +/** + * Gets the parents of the next commit, given the current repository state. + * Generally, this is the HEAD commit, except when performing a merge, in + * which case it is two or more commits. + * + * @param commits a `git_commitarray` that will contain the commit parents + * @param repo the repository + * @return 0 or an error code + */ +GIT_EXTERN(int) git_repository_commit_parents(git_commitarray *commits, git_repository *repo); + /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/reset.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/reset.h index be25414..0123f7c 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/reset.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/reset.h @@ -14,7 +14,7 @@ /** * @file git2/reset.h - * @brief Git reset management routines + * @brief Reset will update the local repository to a prior state * @ingroup Git * @{ */ @@ -26,7 +26,7 @@ GIT_BEGIN_DECL 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_HARD = 3 /**< MIXED plus changes in working tree discarded */ } git_reset_t; /** @@ -48,7 +48,7 @@ typedef enum { * * @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 + * git_tag. When a git_tag is being passed, it should be dereferenceable * to a git_commit which oid will be used as the target of the branch. * * @param reset_type Kind of reset operation to perform. @@ -75,11 +75,23 @@ GIT_EXTERN(int) git_reset( * * See the documentation for `git_reset()`. * - * @see git_reset + * @param repo Repository where to perform the reset operation. + * + * @param target Annotated commit to which the Head should be moved to. + * This object must belong to the given `repo`, it will be dereferenced + * 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_from_annotated( git_repository *repo, - const git_annotated_commit *commit, + const git_annotated_commit *target, git_reset_t reset_type, const git_checkout_options *checkout_opts); @@ -108,4 +120,5 @@ GIT_EXTERN(int) git_reset_default( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/revert.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/revert.h index 331e90d..ec51eca 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/revert.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/revert.h @@ -13,8 +13,8 @@ /** * @file git2/revert.h - * @brief Git revert routines - * @defgroup git_revert Git revert routines + * @brief Cherry-pick the inverse of a change to "undo" its effects + * @defgroup git_revert Cherry-pick the inverse of a change to "undo" its effects * @ingroup Git * @{ */ @@ -33,8 +33,13 @@ typedef struct { git_checkout_options checkout_opts; /**< Options for the checkout */ } git_revert_options; +/** Current version for the `git_revert_options` structure */ #define GIT_REVERT_OPTIONS_VERSION 1 -#define GIT_REVERT_OPTIONS_INIT {GIT_REVERT_OPTIONS_VERSION, 0, GIT_MERGE_OPTIONS_INIT, GIT_CHECKOUT_OPTIONS_INIT} + +/** Static constructor for `git_revert_options` */ +#define GIT_REVERT_OPTIONS_INIT { \ + GIT_REVERT_OPTIONS_VERSION, 0, \ + GIT_MERGE_OPTIONS_INIT, GIT_CHECKOUT_OPTIONS_INIT } /** * Initialize git_revert_options structure @@ -87,5 +92,5 @@ GIT_EXTERN(int) git_revert( /** @} */ GIT_END_DECL -#endif +#endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/revparse.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/revparse.h index e14ddee..c14fe3d 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/revparse.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/revparse.h @@ -12,8 +12,8 @@ /** * @file git2/revparse.h - * @brief Git revision parsing routines - * @defgroup git_revparse Git revision parsing routines + * @brief Parse the textual revision information + * @defgroup git_revparse Parse the textual revision information * @ingroup Git * @{ */ @@ -74,7 +74,7 @@ typedef enum { /** 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_MERGE_BASE = 1 << 2 } git_revspec_t; /** @@ -107,7 +107,7 @@ GIT_EXTERN(int) git_revparse( git_repository *repo, const char *spec); - /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/revwalk.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/revwalk.h index 98dcbf8..7c4ac54 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/revwalk.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/revwalk.h @@ -13,8 +13,8 @@ /** * @file git2/revwalk.h - * @brief Git revision traversal routines - * @defgroup git_revwalk Git revision traversal routines + * @brief Traverse (walk) the commit graph (revision history) + * @defgroup git_revwalk Traverse (walk) the commit graph (revision history) * @ingroup Git * @{ */ @@ -49,7 +49,7 @@ typedef enum { * order; this sorting mode can be combined with * any of the above. */ - GIT_SORT_REVERSE = 1 << 2, + GIT_SORT_REVERSE = 1 << 2 } git_sort_t; /** @@ -249,6 +249,7 @@ GIT_EXTERN(int) git_revwalk_push_range(git_revwalk *walk, const char *range); * * No parents other than the first for each commit will be enqueued. * + * @param walk The revision walker. * @return 0 or an error code */ GIT_EXTERN(int) git_revwalk_simplify_first_parent(git_revwalk *walk); @@ -277,6 +278,7 @@ GIT_EXTERN(git_repository *) git_revwalk_repository(git_revwalk *walk); * * @param commit_id oid of Commit * @param payload User-specified pointer to data to be passed as data payload + * @return non-zero to hide the commmit and it parent. */ typedef int GIT_CALLBACK(git_revwalk_hide_cb)( const git_oid *commit_id, @@ -288,6 +290,7 @@ typedef int GIT_CALLBACK(git_revwalk_hide_cb)( * @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 + * @return 0 or an error code. */ GIT_EXTERN(int) git_revwalk_add_hide_cb( git_revwalk *walk, @@ -296,4 +299,5 @@ GIT_EXTERN(int) git_revwalk_add_hide_cb( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/signature.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/signature.h index b14f3ea..20ec24b 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/signature.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/signature.h @@ -12,9 +12,13 @@ /** * @file git2/signature.h - * @brief Git signature creation + * @brief Signatures are the actor in a repository and when they acted * @defgroup git_signature Git signature creation * @ingroup Git + * + * Signatures contain the information about the actor (committer or + * author) in a repository, and the time that they performed the + * commit, or authoring. * @{ */ GIT_BEGIN_DECL @@ -48,6 +52,42 @@ GIT_EXTERN(int) git_signature_new(git_signature **out, const char *name, const c */ GIT_EXTERN(int) git_signature_now(git_signature **out, const char *name, const char *email); +/** + * Create a new author and/or committer signatures with default + * information based on the configuration and environment variables. + * + * If `author_out` is set, it will be populated with the author + * information. The `GIT_AUTHOR_NAME` and `GIT_AUTHOR_EMAIL` + * environment variables will be honored, and `user.name` and + * `user.email` configuration options will be honored if the + * environment variables are unset. For timestamps, `GIT_AUTHOR_DATE` + * will be used, otherwise the current time will be used. + * + * If `committer_out` is set, it will be populated with the + * committer information. The `GIT_COMMITTER_NAME` and + * `GIT_COMMITTER_EMAIL` environment variables will be honored, + * and `user.name` and `user.email` configuration options will + * be honored if the environment variables are unset. For timestamps, + * `GIT_COMMITTER_DATE` will be used, otherwise the current time will + * be used. + * + * If neither `GIT_AUTHOR_DATE` nor `GIT_COMMITTER_DATE` are set, + * both timestamps will be set to the same time. + * + * It will return `GIT_ENOTFOUND` if either the `user.name` or + * `user.email` are not set and there is no fallback from an environment + * variable. One of `author_out` or `committer_out` must be set. + * + * @param author_out pointer to set the author signature, or NULL + * @param committer_out pointer to set the committer signature, or NULL + * @param repo repository pointer + * @return 0 on success, GIT_ENOTFOUND if config is missing, or error code + */ +GIT_EXTERN(int) git_signature_default_from_env( + git_signature **author_out, + git_signature **committer_out, + git_repository *repo); + /** * Create a new action signature with default user and now timestamp. * @@ -56,6 +96,10 @@ GIT_EXTERN(int) git_signature_now(git_signature **out, const char *name, const c * based on that information. It will return GIT_ENOTFOUND if either the * user.name or user.email are not set. * + * Note that these do not examine environment variables, only the + * configuration files. Use `git_signature_default_from_env` to + * consider the environment variables. + * * @param out new signature * @param repo repository pointer * @return 0 on success, GIT_ENOTFOUND if config is missing, or error code @@ -71,7 +115,7 @@ GIT_EXTERN(int) git_signature_default(git_signature **out, git_repository *repo) * * @param out new signature * @param buf signature string - * @return 0 on success, or an error code + * @return 0 on success, GIT_EINVALID if the signature is not parseable, or an error code */ GIT_EXTERN(int) git_signature_from_buffer(git_signature **out, const char *buf); @@ -100,4 +144,5 @@ GIT_EXTERN(void) git_signature_free(git_signature *sig); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/stash.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/stash.h index 795920e..ad28c32 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/stash.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/stash.h @@ -13,8 +13,13 @@ /** * @file git2/stash.h - * @brief Git stash management routines + * @brief Stashes stores some uncommitted state in the repository * @ingroup Git + * + * Stashes stores some uncommitted state in the repository; generally + * this allows a user to stash some changes so that they can restore + * the working directory to an unmodified state. This can allow a + * developer to work on two different changes in parallel. * @{ */ GIT_BEGIN_DECL @@ -45,6 +50,11 @@ typedef enum { * the working directory */ GIT_STASH_INCLUDE_IGNORED = (1 << 2), + + /** + * All changes in the index and working directory are left intact + */ + GIT_STASH_KEEP_ALL = (1 << 3) } git_stash_flags; /** @@ -52,15 +62,10 @@ typedef enum { * * @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. */ @@ -71,6 +76,63 @@ GIT_EXTERN(int) git_stash_save( const char *message, uint32_t flags); +/** + * Stash save options structure + * + * Initialize with `GIT_STASH_SAVE_OPTIONS_INIT`. Alternatively, you can + * use `git_stash_save_options_init`. + * + */ +typedef struct git_stash_save_options { + unsigned int version; + + /** Flags to control the stashing process. (see GIT_STASH_* above) */ + uint32_t flags; + + /** The identity of the person performing the stashing. */ + const git_signature *stasher; + + /** Optional description along with the stashed state. */ + const char *message; + + /** Optional paths that control which files are stashed. */ + git_strarray paths; +} git_stash_save_options; + +/** Current version for the `git_stash_save_options` structure */ +#define GIT_STASH_SAVE_OPTIONS_VERSION 1 + +/** Static constructor for `git_stash_save_options` */ +#define GIT_STASH_SAVE_OPTIONS_INIT { GIT_STASH_SAVE_OPTIONS_VERSION } + +/** + * Initialize git_stash_save_options structure + * + * Initializes a `git_stash_save_options` with default values. Equivalent to + * creating an instance with `GIT_STASH_SAVE_OPTIONS_INIT`. + * + * @param opts The `git_stash_save_options` struct to initialize. + * @param version The struct version; pass `GIT_STASH_SAVE_OPTIONS_VERSION`. + * @return Zero on success; -1 on failure. + */ +GIT_EXTERN(int) git_stash_save_options_init( + git_stash_save_options *opts, unsigned int version); + +/** + * Save the local modifications to a new stash, with options. + * + * @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 opts The stash options. + * @return 0 on success, GIT_ENOTFOUND where there's nothing to stash, + * or error code. + */ +GIT_EXTERN(int) git_stash_save_with_opts( + git_oid *out, + git_repository *repo, + const git_stash_save_options *opts); + /** Stash application flags. */ typedef enum { GIT_STASH_APPLY_DEFAULT = 0, @@ -78,7 +140,7 @@ typedef enum { /* 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_REINSTATE_INDEX = (1 << 0) } git_stash_apply_flags; /** Stash apply progression states */ @@ -104,13 +166,17 @@ typedef enum { GIT_STASH_APPLY_PROGRESS_CHECKOUT_MODIFIED, /** The stash was applied successfully. */ - GIT_STASH_APPLY_PROGRESS_DONE, + 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. + * + * @param progress the progress information + * @param payload the user-specified payload to the apply function + * @return 0 on success, -1 on error */ typedef int GIT_CALLBACK(git_stash_apply_progress_cb)( git_stash_apply_progress_t progress, @@ -137,7 +203,10 @@ typedef struct git_stash_apply_options { void *progress_payload; } git_stash_apply_options; +/** Current version for the `git_stash_apply_options` structure */ #define GIT_STASH_APPLY_OPTIONS_VERSION 1 + +/** Static constructor for `git_stash_apply_options` */ #define GIT_STASH_APPLY_OPTIONS_INIT { \ GIT_STASH_APPLY_OPTIONS_VERSION, \ GIT_STASH_APPLY_DEFAULT, \ @@ -171,8 +240,6 @@ GIT_EXTERN(int) git_stash_apply_options_init( * 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. @@ -257,4 +324,5 @@ GIT_EXTERN(int) git_stash_pop( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/status.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/status.h index 543e3fa..e13783b 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/status.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/status.h @@ -14,7 +14,7 @@ /** * @file git2/status.h - * @brief Git file status routines + * @brief Status indicates how a user has changed the working directory and index * @defgroup git_status Git file status routines * @ingroup Git * @{ @@ -48,17 +48,16 @@ typedef enum { GIT_STATUS_WT_UNREADABLE = (1u << 12), GIT_STATUS_IGNORED = (1u << 14), - GIT_STATUS_CONFLICTED = (1u << 15), + 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. + * @param path is the path to the file + * @param status_flags the `git_status_t` values for file's status + * @param payload the user-specified payload to the foreach function + * @return 0 on success, or a negative number on failure */ typedef int GIT_CALLBACK(git_status_cb)( const char *path, unsigned int status_flags, void *payload); @@ -87,7 +86,7 @@ typedef enum { * 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_WORKDIR_ONLY = 2 } git_status_show_t; /** @@ -204,9 +203,10 @@ typedef enum { * 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_INCLUDE_UNREADABLE_AS_UNTRACKED = (1u << 15) } git_status_opt_t; +/** Default `git_status_opt_t` values */ #define GIT_STATUS_OPT_DEFAULTS \ (GIT_STATUS_OPT_INCLUDE_IGNORED | \ GIT_STATUS_OPT_INCLUDE_UNTRACKED | \ @@ -227,13 +227,16 @@ typedef struct { /** * The `show` value is one of the `git_status_show_t` constants that - * control which files to scan and in what order. + * control which files to scan and in what order. The default is + * `GIT_STATUS_SHOW_INDEX_AND_WORKDIR`. */ git_status_show_t show; /** * The `flags` value is an OR'ed combination of the - * `git_status_opt_t` values above. + * `git_status_opt_t` values above. The default is + * `GIT_STATUS_OPT_DEFAULTS`, which matches git's default + * behavior. */ unsigned int flags; @@ -250,9 +253,18 @@ typedef struct { * working directory and index; defaults to HEAD. */ git_tree *baseline; + + /** + * Threshold above which similar files will be considered renames. + * This is equivalent to the -M option. Defaults to 50. + */ + uint16_t rename_threshold; } git_status_options; +/** Current version for the `git_status_options` structure */ #define GIT_STATUS_OPTIONS_VERSION 1 + +/** Static constructor for `git_status_options` */ #define GIT_STATUS_OPTIONS_INIT {GIT_STATUS_OPTIONS_VERSION} /** @@ -440,4 +452,5 @@ GIT_EXTERN(int) git_status_should_ignore( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/stdint.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/stdint.h index 6950427..4f532e1 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/stdint.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/stdint.h @@ -1,37 +1,37 @@ -// 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_ // [ +/* 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 @@ -40,10 +40,11 @@ #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 +/* 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 @@ -52,7 +53,7 @@ extern "C" { } #endif -// Define _W64 macros to mark types changing their size, like intptr_t. +/* 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 @@ -62,13 +63,14 @@ extern "C" { #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. +/* 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; @@ -88,7 +90,7 @@ typedef signed __int64 int64_t; typedef unsigned __int64 uint64_t; -// 7.18.1.2 Minimum-width integer types +/* 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; @@ -98,7 +100,7 @@ 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 +/* 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; @@ -108,25 +110,25 @@ 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 // [ +/* 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 ][ +#else /* _WIN64 ][ */ typedef _W64 signed int intptr_t; typedef _W64 unsigned int uintptr_t; -#endif // _WIN64 ] +#endif /* _WIN64 ] */ -// 7.18.1.5 Greatest-width integer types +/* 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 +/* 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 +#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 +/* 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) @@ -140,7 +142,7 @@ typedef uint64_t uintmax_t; #define UINT32_MAX _UI32_MAX #define UINT64_MAX _UI64_MAX -// 7.18.2.2 Limits of minimum-width integer types +/* 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 @@ -154,7 +156,7 @@ typedef uint64_t uintmax_t; #define UINT_LEAST32_MAX UINT32_MAX #define UINT_LEAST64_MAX UINT64_MAX -// 7.18.2.3 Limits of fastest minimum-width integer types +/* 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 @@ -168,62 +170,62 @@ typedef uint64_t uintmax_t; #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 // [ +/* 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 ][ +#else /* _WIN64 ][ */ # define INTPTR_MIN INT32_MIN # define INTPTR_MAX INT32_MAX # define UINTPTR_MAX UINT32_MAX -#endif // _WIN64 ] +#endif /* _WIN64 ] */ -// 7.18.2.5 Limits of greatest-width integer types +/* 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 +/* 7.18.3 Limits of other integer types */ -#ifdef _WIN64 // [ +#ifdef _WIN64 /* [ */ # define PTRDIFF_MIN _I64_MIN # define PTRDIFF_MAX _I64_MAX -#else // _WIN64 ][ +#else /* _WIN64 ][ */ # define PTRDIFF_MIN _I32_MIN # define PTRDIFF_MAX _I32_MAX -#endif // _WIN64 ] +#endif /* _WIN64 ] */ #define SIG_ATOMIC_MIN INT_MIN #define SIG_ATOMIC_MAX INT_MAX -#ifndef SIZE_MAX // [ -# ifdef _WIN64 // [ +#ifndef SIZE_MAX /* [ */ +# ifdef _WIN64 /* [ */ # define SIZE_MAX _UI64_MAX -# else // _WIN64 ][ +# else /* _WIN64 ][ */ # define SIZE_MAX _UI32_MAX -# endif // _WIN64 ] -#endif // SIZE_MAX ] +# endif /* _WIN64 ] */ +#endif /* SIZE_MAX ] */ -// WCHAR_MIN and WCHAR_MAX are also defined in -#ifndef WCHAR_MIN // [ +/* WCHAR_MIN and WCHAR_MAX are also defined in */ +#ifndef WCHAR_MIN /* [ */ # define WCHAR_MIN 0 -#endif // WCHAR_MIN ] -#ifndef WCHAR_MAX // [ +#endif /* WCHAR_MIN ] */ +#ifndef WCHAR_MAX /* [ */ # define WCHAR_MAX _UI16_MAX -#endif // WCHAR_MAX ] +#endif /* WCHAR_MAX ] */ #define WINT_MIN 0 #define WINT_MAX _UI16_MAX -#endif // __STDC_LIMIT_MACROS ] +#endif /* __STDC_LIMIT_MACROS ] */ -// 7.18.4 Limits of other integer types +/* 7.18.4 Limits of other integer types */ -#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [ See footnote 224 at page 260 +#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) /* [ See footnote 224 at page 260 */ -// 7.18.4.1 Macros for minimum-width integer constants +/* 7.18.4.1 Macros for minimum-width integer constants */ #define INT8_C(val) val##i8 #define INT16_C(val) val##i16 @@ -235,13 +237,13 @@ typedef uint64_t uintmax_t; #define UINT32_C(val) val##ui32 #define UINT64_C(val) val##ui64 -// 7.18.4.2 Macros for greatest-width integer constants +/* 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 /* __STDC_CONSTANT_MACROS ] */ -#endif // _MSC_STDINT_H_ ] +#endif /* _MSC_STDINT_H_ ] */ -#endif // _MSC_VER ] \ No newline at end of file +#endif /* _MSC_VER ] */ diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/strarray.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/strarray.h index 0f657e6..dcb628a 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/strarray.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/strarray.h @@ -11,8 +11,8 @@ /** * @file git2/strarray.h - * @brief Git string array routines - * @defgroup git_strarray Git string array routines + * @brief An array of strings for the user to free + * @defgroup git_strarray An array of strings for the user to free * @ingroup Git * @{ */ @@ -36,21 +36,7 @@ typedef struct git_strarray { */ 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/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/submodule.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/submodule.h index 29d8bc1..911b3ce 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/submodule.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/submodule.h @@ -15,7 +15,7 @@ /** * @file git2/submodule.h - * @brief Git submodule management utilities + * @brief Submodules place another repository's contents within this one * * 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 @@ -85,23 +85,30 @@ typedef enum { 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_WD_UNTRACKED = (1u << 13) } git_submodule_status_t; +/** Submodule source bits */ #define GIT_SUBMODULE_STATUS__IN_FLAGS 0x000Fu +/** Submodule index status */ #define GIT_SUBMODULE_STATUS__INDEX_FLAGS 0x0070u +/** Submodule working directory status */ #define GIT_SUBMODULE_STATUS__WD_FLAGS 0x3F80u +/** Whether the submodule is modified */ #define GIT_SUBMODULE_STATUS_IS_UNMODIFIED(S) \ (((S) & ~GIT_SUBMODULE_STATUS__IN_FLAGS) == 0) +/** Whether the submodule is modified (in the index) */ #define GIT_SUBMODULE_STATUS_IS_INDEX_UNMODIFIED(S) \ (((S) & GIT_SUBMODULE_STATUS__INDEX_FLAGS) == 0) +/** Whether the submodule is modified (in the working directory) */ #define GIT_SUBMODULE_STATUS_IS_WD_UNMODIFIED(S) \ (((S) & (GIT_SUBMODULE_STATUS__WD_FLAGS & \ ~GIT_SUBMODULE_STATUS_WD_UNINITIALIZED)) == 0) +/** Whether the submodule working directory is dirty */ #define GIT_SUBMODULE_STATUS_IS_WD_DIRTY(S) \ (((S) & (GIT_SUBMODULE_STATUS_WD_INDEX_MODIFIED | \ GIT_SUBMODULE_STATUS_WD_WD_MODIFIED | \ @@ -130,10 +137,8 @@ typedef struct git_submodule_update_options { /** * 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. + * checkout, set the `checkout_strategy` to `GIT_CHECKOUT_NONE` + * or `GIT_CHECKOUT_DRY_RUN`. */ git_checkout_options checkout_opts; @@ -152,11 +157,15 @@ typedef struct git_submodule_update_options { int allow_fetch; } git_submodule_update_options; +/** Current version for the `git_submodule_update_options` structure */ #define GIT_SUBMODULE_UPDATE_OPTIONS_VERSION 1 + +/** Static constructor for `git_submodule_update_options` */ #define GIT_SUBMODULE_UPDATE_OPTIONS_INIT \ { GIT_SUBMODULE_UPDATE_OPTIONS_VERSION, \ - { GIT_CHECKOUT_OPTIONS_VERSION, GIT_CHECKOUT_SAFE }, \ - GIT_FETCH_OPTIONS_INIT, 1 } + GIT_CHECKOUT_OPTIONS_INIT, \ + GIT_FETCH_OPTIONS_INIT, \ + 1 } /** * Initialize git_submodule_update_options structure @@ -181,7 +190,7 @@ GIT_EXTERN(int) git_submodule_update_options_init( * @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. + * return an error if attempting to update an uninitialized 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. @@ -229,6 +238,7 @@ GIT_EXTERN(int) git_submodule_lookup( * * @param out Pointer to store the copy of the submodule. * @param source Original submodule to copy. + * @return 0 */ GIT_EXTERN(int) git_submodule_dup(git_submodule **out, git_submodule *source); @@ -320,6 +330,7 @@ GIT_EXTERN(int) git_submodule_clone( * (but doesn't actually do the commit). * * @param submodule The submodule to finish adding. + * @return 0 or an error code. */ GIT_EXTERN(int) git_submodule_add_finalize(git_submodule *submodule); @@ -529,7 +540,8 @@ GIT_EXTERN(int) git_submodule_set_update( * 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 + * @param submodule the submodule to examine + * @return the submodule recursion configuration */ GIT_EXTERN(git_submodule_recurse_t) git_submodule_fetch_recurse_submodules( git_submodule *submodule); @@ -541,7 +553,7 @@ GIT_EXTERN(git_submodule_recurse_t) git_submodule_fetch_recurse_submodules( * * @param repo the repository to affect * @param name the submodule to configure - * @param fetch_recurse_submodules Boolean value + * @param fetch_recurse_submodules the submodule recursion configuration * @return old value for fetchRecurseSubmodules */ GIT_EXTERN(int) git_submodule_set_fetch_recurse_submodules( @@ -589,6 +601,9 @@ GIT_EXTERN(int) git_submodule_repo_init( * 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. + * + * @param submodule The submodule to copy. + * @return 0 or an error code. */ GIT_EXTERN(int) git_submodule_sync(git_submodule *submodule); @@ -660,4 +675,5 @@ GIT_EXTERN(int) git_submodule_location( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/alloc.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/alloc.h index c295807..67506f2 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/alloc.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/alloc.h @@ -10,6 +10,17 @@ #include "git2/common.h" +/** + * @file git2/sys/alloc.h + * @brief Custom memory allocators + * @defgroup git_merge Git merge routines + * @ingroup Git + * + * Users can configure custom allocators; this is particularly + * interesting when running in constrained environments, when calling + * from another language, or during testing. + * @{ + */ GIT_BEGIN_DECL /** @@ -24,28 +35,6 @@ 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 @@ -53,18 +42,6 @@ typedef struct { */ 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. @@ -96,6 +73,7 @@ int git_stdalloc_init_allocator(git_allocator *allocator); */ int git_win32_crtdbg_init_allocator(git_allocator *allocator); +/** @} */ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/commit.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/commit.h index ba67106..a8253c0 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/commit.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/commit.h @@ -14,7 +14,7 @@ /** * @file git2/sys/commit.h * @brief Low-level Git commit creation - * @defgroup git_backend Git custom backend APIs + * @defgroup git_commit Low-level Git commit creation * @ingroup Git * @{ */ @@ -29,7 +29,43 @@ GIT_BEGIN_DECL * the `tree`, neither the `parents` list of `git_oid`s are checked for * validity. * - * @see git_commit_create + * @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_from_ids( git_oid *id, @@ -49,6 +85,10 @@ GIT_EXTERN(int) git_commit_create_from_ids( * 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. + * + * @param idx the index of the parent + * @param payload the user-specified payload + * @return the object id of the parent, or NULL if there are no further parents */ typedef const git_oid * GIT_CALLBACK(git_commit_parent_callback)(size_t idx, void *payload); @@ -61,7 +101,40 @@ typedef const git_oid * GIT_CALLBACK(git_commit_parent_callback)(size_t idx, voi * with `parent_payload` and should return `git_oid` values or NULL to * indicate that all parents are accounted for. * - * @see git_commit_create + * @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_cb Callback to invoke to obtain parent information + * + * @param parent_payload User-specified payload to provide to the callback + * + * @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_from_callback( git_oid *id, @@ -77,4 +150,5 @@ GIT_EXTERN(int) git_commit_create_from_callback( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/commit_graph.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/commit_graph.h index f6c0fc4..ff547ef 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/commit_graph.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/commit_graph.h @@ -12,13 +12,52 @@ /** * @file git2/sys/commit_graph.h - * @brief Git commit-graph - * @defgroup git_commit_graph Git commit-graph APIs + * @brief Commit graphs store information about commit relationships + * @defgroup git_commit_graph Commit graphs * @ingroup Git * @{ */ GIT_BEGIN_DECL +/** + * Options structure for `git_commit_graph_open_new`. + * + * Initialize with `GIT_COMMIT_GRAPH_OPEN_OPTIONS_INIT`. Alternatively, + * you can use `git_commit_graph_open_options_init`. + */ +typedef struct { + unsigned int version; + +#ifdef GIT_EXPERIMENTAL_SHA256 + /** The object ID type that this commit graph contains. */ + git_oid_t oid_type; +#endif +} git_commit_graph_open_options; + +/** Current version for the `git_commit_graph_open_options` structure */ +#define GIT_COMMIT_GRAPH_OPEN_OPTIONS_VERSION 1 + +/** Static constructor for `git_commit_graph_open_options` */ +#define GIT_COMMIT_GRAPH_OPEN_OPTIONS_INIT { \ + GIT_COMMIT_GRAPH_OPEN_OPTIONS_VERSION \ + } + +/** + * Initialize git_commit_graph_open_options structure + * + * Initializes a `git_commit_graph_open_options` with default values. + * Equivalent to creating an instance with + * `GIT_COMMIT_GRAPH_OPEN_OPTIONS_INIT`. + * + * @param opts The `git_commit_graph_open_options` struct to initialize. + * @param version The struct version; pass `GIT_COMMIT_GRAPH_OPEN_OPTIONS_VERSION`. + * @return Zero on success; -1 on failure. + */ +GIT_EXTERN(int) git_commit_graph_open_options_init( + git_commit_graph_open_options *opts, + unsigned int version); + + /** * Opens a `git_commit_graph` from a path to an objects directory. * @@ -28,7 +67,13 @@ GIT_BEGIN_DECL * @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); +GIT_EXTERN(int) git_commit_graph_open( + git_commit_graph **cgraph_out, + const char *objects_dir +#ifdef GIT_EXPERIMENTAL_SHA256 + , const git_commit_graph_open_options *options +#endif + ); /** * Frees commit-graph data. This should only be called when memory allocated @@ -40,50 +85,6 @@ GIT_EXTERN(int) git_commit_graph_open(git_commit_graph **cgraph_out, const char */ 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 @@ -94,19 +95,23 @@ 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_SINGLE_FILE = 0 } git_commit_graph_split_strategy_t; /** - * Options structure for - * `git_commit_graph_writer_commit`/`git_commit_graph_writer_dump`. + * Options structure for `git_commit_graph_writer_new`. * - * Initialize with `GIT_COMMIT_GRAPH_WRITER_OPTIONS_INIT`. Alternatively, you - * can use `git_commit_graph_writer_options_init`. + * Initialize with `GIT_COMMIT_GRAPH_WRITER_OPTIONS_INIT`. Alternatively, + * you can use `git_commit_graph_writer_options_init`. */ typedef struct { unsigned int version; +#ifdef GIT_EXPERIMENTAL_SHA256 + /** The object ID type that this commit graph contains. */ + git_oid_t oid_type; +#endif + /** * The strategy to use when adding new commits to a pre-existing commit-graph * chain. @@ -126,7 +131,10 @@ typedef struct { size_t max_commits; } git_commit_graph_writer_options; +/** Current version for the `git_commit_graph_writer_options` structure */ #define GIT_COMMIT_GRAPH_WRITER_OPTIONS_VERSION 1 + +/** Static constructor for `git_commit_graph_writer_options` */ #define GIT_COMMIT_GRAPH_WRITER_OPTIONS_INIT { \ GIT_COMMIT_GRAPH_WRITER_OPTIONS_VERSION \ } @@ -145,30 +153,73 @@ GIT_EXTERN(int) git_commit_graph_writer_options_init( git_commit_graph_writer_options *opts, unsigned int version); +/** + * 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. + * @param options The options for the commit graph writer. + * @return 0 or an error code + */ +GIT_EXTERN(int) git_commit_graph_writer_new( + git_commit_graph_writer **out, + const char *objects_info_dir, + const git_commit_graph_writer_options *options); + +/** + * 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); + /** * 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); + git_commit_graph_writer *w); /** * 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[out] 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_commit_graph_writer *w); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/config.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/config.h index 0a9005e..cc4a399 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/config.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/config.h @@ -13,13 +13,28 @@ /** * @file git2/sys/config.h - * @brief Git config backend routines - * @defgroup git_backend Git custom backend APIs + * @brief Custom configuration database backends + * @defgroup git_backend Custom configuration database backends * @ingroup Git * @{ */ GIT_BEGIN_DECL +/** + * An entry in a configuration backend. This is provided so that + * backend implementors can have a mechanism to free their data. + */ +typedef struct git_config_backend_entry { + /** The base configuration entry */ + struct git_config_entry entry; + + /** + * Free function for this entry; for internal purposes. Callers + * should call `git_config_entry_free` to free data. + */ + void GIT_CALLBACK(free)(struct git_config_backend_entry *entry); +} git_config_backend_entry; + /** * Every iterator must have this struct as its first element, so the * API can talk to it. You'd define your iterator as @@ -39,7 +54,7 @@ struct git_config_iterator { * 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); + int GIT_CALLBACK(next)(git_config_backend_entry **entry, git_config_iterator *iter); /** * Free the iterator @@ -59,7 +74,7 @@ struct git_config_backend { /* 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(get)(struct git_config_backend *, const char *key, git_config_backend_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); @@ -83,7 +98,11 @@ struct git_config_backend { int GIT_CALLBACK(unlock)(struct git_config_backend *, int success); void GIT_CALLBACK(free)(struct git_config_backend *); }; + +/** Current version for the `git_config_backend_options` structure */ #define GIT_CONFIG_BACKEND_VERSION 1 + +/** Static constructor for `git_config_backend_options` */ #define GIT_CONFIG_BACKEND_INIT {GIT_CONFIG_BACKEND_VERSION} /** @@ -125,6 +144,63 @@ GIT_EXTERN(int) git_config_add_backend( const git_repository *repo, int force); +/** Options for in-memory configuration backends. */ +typedef struct { + unsigned int version; + + /** + * The type of this backend (eg, "command line"). If this is + * NULL, then this will be "in-memory". + */ + const char *backend_type; + + /** + * The path to the origin; if this is NULL then it will be + * left unset in the resulting configuration entries. + */ + const char *origin_path; +} git_config_backend_memory_options; + +/** Current version for the `git_config_backend_memory_options` structure */ +#define GIT_CONFIG_BACKEND_MEMORY_OPTIONS_VERSION 1 + +/** Static constructor for `git_config_backend_memory_options` */ +#define GIT_CONFIG_BACKEND_MEMORY_OPTIONS_INIT { GIT_CONFIG_BACKEND_MEMORY_OPTIONS_VERSION } + + +/** + * Create an in-memory configuration backend from a string in standard + * git configuration file format. + * + * @param out the new backend + * @param cfg the configuration that is to be parsed + * @param len the length of the string pointed to by `cfg` + * @param opts the options to initialize this backend with, or NULL + * @return 0 on success or an error code + */ +extern int git_config_backend_from_string( + git_config_backend **out, + const char *cfg, + size_t len, + git_config_backend_memory_options *opts); + +/** + * Create an in-memory configuration backend from a list of name/value + * pairs. + * + * @param out the new backend + * @param values the configuration values to set (in "key=value" format) + * @param len the length of the values array + * @param opts the options to initialize this backend with, or NULL + * @return 0 on success or an error code + */ +extern int git_config_backend_from_values( + git_config_backend **out, + const char **values, + size_t len, + git_config_backend_memory_options *opts); + /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/credential.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/credential.h index bb4c9f9..0d573a3 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/credential.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/credential.h @@ -11,9 +11,9 @@ #include "git2/credential.h" /** - * @file git2/sys/cred.h - * @brief Git credentials low-level implementation - * @defgroup git_credential Git credentials low-level implementation + * @file git2/sys/credential.h + * @brief Low-level credentials implementation + * @defgroup git_credential Low-level credentials implementation * @ingroup Git * @{ */ @@ -85,6 +85,7 @@ struct git_credential_ssh_custom { void *payload; /**< Payload passed to prompt_callback */ }; +/** @} */ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/diff.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/diff.h index aefd7b9..a398f54 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/diff.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/diff.h @@ -15,7 +15,7 @@ /** * @file git2/sys/diff.h - * @brief Low-level Git diff utilities + * @brief Low-level diff utilities * @ingroup Git * @{ */ @@ -33,6 +33,12 @@ GIT_BEGIN_DECL * 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). + * + * @param delta the delta being processed + * @param hunk the hunk being processed + * @param line the line being processed + * @param payload the payload provided by the diff generator + * @return 0 on success or an error code */ GIT_EXTERN(int) git_diff_print_callback__to_buf( const git_diff_delta *delta, @@ -53,6 +59,12 @@ GIT_EXTERN(int) git_diff_print_callback__to_buf( * 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`. + * + * @param delta the delta being processed + * @param hunk the hunk being processed + * @param line the line being processed + * @param payload the payload provided by the diff generator + * @return 0 on success or an error code */ GIT_EXTERN(int) git_diff_print_callback__to_file_handle( const git_diff_delta *delta, @@ -70,7 +82,10 @@ typedef struct { size_t oid_calculations; /**< Number of ID calculations */ } git_diff_perfdata; +/** Current version for the `git_diff_perfdata_options` structure */ #define GIT_DIFF_PERFDATA_VERSION 1 + +/** Static constructor for `git_diff_perfdata_options` */ #define GIT_DIFF_PERFDATA_INIT {GIT_DIFF_PERFDATA_VERSION,0,0} /** @@ -85,10 +100,15 @@ GIT_EXTERN(int) git_diff_get_perfdata( /** * Get performance data for diffs from a git_status_list + * + * @param out Structure to be filled with diff performance data + * @param status Diff to read performance data from + * @return 0 for success, <0 for error */ GIT_EXTERN(int) git_status_list_get_perfdata( git_diff_perfdata *out, const git_status_list *status); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/email.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/email.h index 6f4a286..26e792a 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/email.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/email.h @@ -7,6 +7,11 @@ #ifndef INCLUDE_sys_git_email_h__ #define INCLUDE_sys_git_email_h__ +#include "git2/common.h" +#include "git2/diff.h" +#include "git2/email.h" +#include "git2/types.h" + /** * @file git2/sys/email.h * @brief Advanced git email creation routines @@ -28,6 +33,7 @@ GIT_BEGIN_DECL * @param body optional text to include above the diffstat * @param author the person who authored this commit * @param opts email creation options + * @return 0 on success or an error code */ GIT_EXTERN(int) git_email_create_from_diff( git_buf *out, @@ -42,4 +48,5 @@ GIT_EXTERN(int) git_email_create_from_diff( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/errors.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/errors.h new file mode 100644 index 0000000..44e8ecb --- /dev/null +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/errors.h @@ -0,0 +1,76 @@ +/* + * 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_errors_h__ +#define INCLUDE_sys_git_errors_h__ + +#include "git2/common.h" + +/** + * @file git2/sys/errors.h + * @brief Advanced error handling + * @ingroup Git + * + * Error handling for advanced consumers; those who use callbacks + * or those who create custom databases. + * @{ + */ +GIT_BEGIN_DECL + +/** + * 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, using `printf`-style + * formatting. + * + * 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 fmt The `printf`-style format string; subsequent arguments must + * be the arguments for the format string. + */ +GIT_EXTERN(void) git_error_set(int error_class, const char *fmt, ...) + GIT_FORMAT_PRINTF(2, 3); + +/** + * Set the error message string for this thread. This function is like + * `git_error_set` but takes a static string instead of a `printf`-style + * format. + * + * @param error_class One of the `git_error_t` enum above describing the + * general subsystem that is responsible for the error. + * @param string The 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/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/filter.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/filter.h index b375941..60466d1 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/filter.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/filter.h @@ -11,8 +11,8 @@ /** * @file git2/sys/filter.h - * @brief Git filter backend and plugin routines - * @defgroup git_backend Git custom backend APIs + * @brief Custom filter backends and plugins + * @defgroup git_backend Custom filter backends and plugins * @ingroup Git * @{ */ @@ -26,7 +26,10 @@ GIT_BEGIN_DECL */ GIT_EXTERN(git_filter *) git_filter_lookup(const char *name); +/** The "crlf" filter */ #define GIT_FILTER_CRLF "crlf" + +/** The "ident" filter */ #define GIT_FILTER_IDENT "ident" /** @@ -53,6 +56,12 @@ GIT_EXTERN(git_filter *) git_filter_lookup(const char *name); * 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. + * + * @param out the filter list + * @param repo the repository to use for configuration + * @param mode the filter mode (direction) + * @param options the options + * @return 0 on success or an error code */ GIT_EXTERN(int) git_filter_list_new( git_filter_list **out, @@ -72,6 +81,11 @@ GIT_EXTERN(int) git_filter_list_new( * 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! + * + * @param fl the filter list + * @param filter the filter to push + * @param payload the payload for the filter + * @return 0 on success or an error code */ GIT_EXTERN(int) git_filter_list_push( git_filter_list *fl, git_filter *filter, void *payload); @@ -96,17 +110,26 @@ typedef struct git_filter_source git_filter_source; /** * Get the repository that the source data is coming from. + * + * @param src the filter source + * @return the repository for the filter information */ GIT_EXTERN(git_repository *) git_filter_source_repo(const git_filter_source *src); /** * Get the path that the source data is coming from. + * + * @param src the filter source + * @return the path that is being filtered */ 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 + * + * @param src the filter source + * @return the file mode for the file being filtered */ GIT_EXTERN(uint16_t) git_filter_source_filemode(const git_filter_source *src); @@ -114,16 +137,25 @@ 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. + * + * @param src the filter source + * @return the object id of the file being filtered */ GIT_EXTERN(const git_oid *) git_filter_source_id(const git_filter_source *src); /** * Get the git_filter_mode_t to be used + * + * @param src the filter source + * @return the mode (direction) of the filter */ 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 + * + * @param src the filter source + * @return the flags of the filter */ GIT_EXTERN(uint32_t) git_filter_source_flags(const git_filter_source *src); @@ -137,6 +169,9 @@ GIT_EXTERN(uint32_t) git_filter_source_flags(const git_filter_source *src); * 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). + * + * @param self the filter to initialize + * @return 0 on success, negative number on failure */ typedef int GIT_CALLBACK(git_filter_init_fn)(git_filter *self); @@ -149,6 +184,8 @@ typedef int GIT_CALLBACK(git_filter_init_fn)(git_filter *self); * This may be called even if the `initialize` callback was not made. * * Typically this function will free the `git_filter` object itself. + * + * @param self the filter to shutdown */ typedef void GIT_CALLBACK(git_filter_shutdown_fn)(git_filter *self); @@ -171,6 +208,12 @@ typedef void GIT_CALLBACK(git_filter_shutdown_fn)(git_filter *self); * 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. + * + * @param self the filter check + * @param payload a data for future filter functions + * @param src the filter source + * @param attr_values the attribute values + * @return 0 on success or a negative value on error */ typedef int GIT_CALLBACK(git_filter_check_fn)( git_filter *self, @@ -191,6 +234,12 @@ typedef int GIT_CALLBACK(git_filter_check_fn)( * 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. * + * @param self the filter check + * @param payload a data for future filter functions + * @param to the input buffer + * @param from the output buffer + * @param src the filter source + * @return 0 on success or a negative value on error * @deprecated use git_filter_stream_fn */ typedef int GIT_CALLBACK(git_filter_apply_fn)( @@ -209,6 +258,13 @@ typedef int GIT_CALLBACK(git_filter_apply_fn)( * `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. + * + * @param out the write stream + * @param self the filter + * @param payload a data for future filter functions + * @param src the filter source + * @param next the output stream + * @return 0 on success or a negative value on error */ typedef int GIT_CALLBACK(git_filter_stream_fn)( git_writestream **out, @@ -225,6 +281,9 @@ typedef int GIT_CALLBACK(git_filter_stream_fn)( * `stream` callbacks allocated a `payload` to keep per-source filter * state, use this callback to free that payload and release resources * as required. + * + * @param self the filter + * @param payload a data for future filter functions */ typedef void GIT_CALLBACK(git_filter_cleanup_fn)( git_filter *self, @@ -291,7 +350,10 @@ struct git_filter { git_filter_cleanup_fn cleanup; }; +/** Current version for the `git_filter_options` structure */ #define GIT_FILTER_VERSION 1 + +/** Static constructor for `git_filter_options` */ #define GIT_FILTER_INIT {GIT_FILTER_VERSION} /** @@ -300,7 +362,7 @@ struct git_filter { * * @param filter the `git_filter` struct to initialize. * @param version Version the struct; pass `GIT_FILTER_VERSION` - * @return Zero on success; -1 on failure. + * @return 0 on success; -1 on failure. */ GIT_EXTERN(int) git_filter_init(git_filter *filter, unsigned int version); @@ -350,4 +412,5 @@ GIT_EXTERN(int) git_filter_unregister(const char *name); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/hashsig.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/hashsig.h index 09c19ae..0d7be53 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/hashsig.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/hashsig.h @@ -9,6 +9,16 @@ #include "git2/common.h" +/** + * @file git2/sys/hashsig.h + * @brief Signatures for file similarity comparison + * @defgroup git_hashsig Git merge routines + * @ingroup Git + * + * Hash signatures are used for file similary comparison; this is + * used for git's rename handling. + * @{ + */ GIT_BEGIN_DECL /** @@ -101,6 +111,7 @@ GIT_EXTERN(int) git_hashsig_compare( const git_hashsig *a, const git_hashsig *b); +/** @} */ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/index.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/index.h index 1f6d93f..b3b86a0 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/index.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/index.h @@ -12,8 +12,8 @@ /** * @file git2/sys/index.h - * @brief Low-level Git index manipulation routines - * @defgroup git_backend Git custom backend APIs + * @brief Low-level index manipulation routines + * @defgroup git_index Low-level index manipulation routines * @ingroup Git * @{ */ @@ -67,6 +67,7 @@ GIT_EXTERN(const git_index_name_entry *) git_index_name_get_byindex( * @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 + * @return 0 on success, or an error code */ GIT_EXTERN(int) git_index_name_add(git_index *index, const char *ancestor, const char *ours, const char *theirs); diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/mempack.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/mempack.h index 17da590..be902be 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/mempack.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/mempack.h @@ -15,8 +15,8 @@ /** * @file git2/sys/mempack.h - * @brief Custom ODB backend that permits packing objects in-memory - * @defgroup git_backend Git custom backend APIs + * @brief A custom object database backend for storing objects in-memory + * @defgroup git_mempack A custom object database backend for storing objects in-memory * @ingroup Git * @{ */ @@ -44,6 +44,26 @@ GIT_BEGIN_DECL */ GIT_EXTERN(int) git_mempack_new(git_odb_backend **out); +/** + * Write a thin packfile with the objects in the memory store. + * + * A thin packfile is a packfile that does not contain its transitive closure of + * references. This is useful for efficiently distributing additions to a + * repository over the network, but also finds use in the efficient bulk + * addition of objects to a repository, locally. + * + * This operation performs the (shallow) insert operations into the + * `git_packbuilder`, but does not write the packfile to disk; + * see `git_packbuilder_write_buf`. + * + * It also does not reset the in-memory object database; see `git_mempack_reset`. + * + * @param backend The mempack backend + * @param pb The packbuilder to use to write the packfile + * @return 0 on success or an error code + */ +GIT_EXTERN(int) git_mempack_write_thin_pack(git_odb_backend *backend, git_packbuilder *pb); + /** * Dump all the queued in-memory writes to a packfile. * @@ -82,6 +102,16 @@ GIT_EXTERN(int) git_mempack_dump(git_buf *pack, git_repository *repo, git_odb_ba */ GIT_EXTERN(int) git_mempack_reset(git_odb_backend *backend); +/** + * Get the total number of objects in mempack + * + * @param count The count of objects in the mempack + * @param backend The mempack backend + * @return 0 on success, or -1 on error + */ +GIT_EXTERN(int) git_mempack_object_count(size_t *count, git_odb_backend *backend); + +/** @} */ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/merge.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/merge.h index ef4bc5a..a9f5220 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/merge.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/merge.h @@ -14,13 +14,18 @@ /** * @file git2/sys/merge.h - * @brief Git merge driver backend and plugin routines - * @defgroup git_merge Git merge driver APIs + * @brief Custom merge drivers + * @defgroup git_merge Custom merge drivers * @ingroup Git * @{ */ GIT_BEGIN_DECL +/** + * A "merge driver" is a mechanism that can be configured to handle + * conflict resolution for files changed in both the "ours" and "theirs" + * side of a merge. + */ typedef struct git_merge_driver git_merge_driver; /** @@ -31,8 +36,11 @@ typedef struct git_merge_driver git_merge_driver; */ GIT_EXTERN(git_merge_driver *) git_merge_driver_lookup(const char *name); +/** The "text" merge driver */ #define GIT_MERGE_DRIVER_TEXT "text" +/** The "binary" merge driver */ #define GIT_MERGE_DRIVER_BINARY "binary" +/** The "union" merge driver */ #define GIT_MERGE_DRIVER_UNION "union" /** @@ -40,23 +48,48 @@ GIT_EXTERN(git_merge_driver *) git_merge_driver_lookup(const char *name); */ typedef struct git_merge_driver_source git_merge_driver_source; -/** Get the repository that the source data is coming from. */ +/** + * Get the repository that the source data is coming from. + * + * @param src the merge driver source + * @return the repository + */ GIT_EXTERN(git_repository *) git_merge_driver_source_repo( const git_merge_driver_source *src); -/** Gets the ancestor of the file to merge. */ +/** + * Gets the ancestor of the file to merge. + * + * @param src the merge driver source + * @return the ancestor or NULL if there was no ancestor + */ 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. */ +/** + * Gets the ours side of the file to merge. + * + * @param src the merge driver source + * @return the ours side or NULL if there was no ours side + */ 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. */ +/** + * Gets the theirs side of the file to merge. + * + * @param src the merge driver source + * @return the theirs side or NULL if there was no theirs side + */ 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 */ +/** + * Gets the merge file options that the merge was invoked with. + * + * @param src the merge driver source + * @return the options + */ GIT_EXTERN(const git_merge_file_options *) git_merge_driver_source_file_options( const git_merge_driver_source *src); @@ -72,6 +105,9 @@ GIT_EXTERN(const git_merge_file_options *) git_merge_driver_source_file_options( * 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). + * + * @param self the merge driver to initialize + * @return 0 on success, or a negative number on failure */ typedef int GIT_CALLBACK(git_merge_driver_init_fn)(git_merge_driver *self); @@ -84,6 +120,8 @@ typedef int GIT_CALLBACK(git_merge_driver_init_fn)(git_merge_driver *self); * This may be called even if the `initialize` callback was not made. * * Typically this function will free the `git_merge_driver` object itself. + * + * @param self the merge driver to shutdown */ typedef void GIT_CALLBACK(git_merge_driver_shutdown_fn)(git_merge_driver *self); @@ -104,6 +142,14 @@ typedef void GIT_CALLBACK(git_merge_driver_shutdown_fn)(git_merge_driver *self); * specified by the file's attributes. * * The `src` contains the data about the file to be merged. + * + * @param self the merge driver + * @param path_out the resolved path + * @param mode_out the resolved mode + * @param merged_out the merged output contents + * @param filter_name the filter that was invoked + * @param src the data about the unmerged file + * @return 0 on success, or an error code */ typedef int GIT_CALLBACK(git_merge_driver_apply_fn)( git_merge_driver *self, @@ -139,6 +185,7 @@ struct git_merge_driver { git_merge_driver_apply_fn apply; }; +/** The version for the `git_merge_driver` */ #define GIT_MERGE_DRIVER_VERSION 1 /** @@ -179,4 +226,5 @@ GIT_EXTERN(int) git_merge_driver_unregister(const char *name); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/midx.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/midx.h index e3d7498..b3a68af 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/midx.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/midx.h @@ -11,14 +11,52 @@ #include "git2/types.h" /** - * @file git2/midx.h - * @brief Git multi-pack-index routines - * @defgroup git_midx Git multi-pack-index routines + * @file git2/sys/midx.h + * @brief Incremental multi-pack indexes + * @defgroup git_midx Incremental multi-pack indexes * @ingroup Git * @{ */ GIT_BEGIN_DECL +/** + * Options structure for `git_midx_writer_options`. + * + * Initialize with `GIT_MIDX_WRITER_OPTIONS_INIT`. Alternatively, + * you can use `git_midx_writer_options_init`. + */ +typedef struct { + unsigned int version; + +#ifdef GIT_EXPERIMENTAL_SHA256 + /** The object ID type that this commit graph contains. */ + git_oid_t oid_type; +#endif +} git_midx_writer_options; + +/** Current version for the `git_midx_writer_options` structure */ +#define GIT_MIDX_WRITER_OPTIONS_VERSION 1 + +/** Static constructor for `git_midx_writer_options` */ +#define GIT_MIDX_WRITER_OPTIONS_INIT { \ + GIT_MIDX_WRITER_OPTIONS_VERSION \ + } + +/** + * Initialize git_midx_writer_options structure + * + * Initializes a `git_midx_writer_options` with default values. + * Equivalent to creating an instance with + * `GIT_MIDX_WRITER_OPTIONS_INIT`. + * + * @param opts The `git_midx_writer_options` struct to initialize. + * @param version The struct version; pass `GIT_MIDX_WRITER_OPTIONS_VERSION`. + * @return Zero on success; -1 on failure. + */ +GIT_EXTERN(int) git_midx_writer_options_init( + git_midx_writer_options *opts, + unsigned int version); + /** * Create a new writer for `multi-pack-index` files. * @@ -29,7 +67,11 @@ GIT_BEGIN_DECL */ GIT_EXTERN(int) git_midx_writer_new( git_midx_writer **out, - const char *pack_dir); + const char *pack_dir +#ifdef GIT_EXPERIMENTAL_SHA256 + , git_midx_writer_options *options +#endif + ); /** * Free the multi-pack-index writer and its resources. @@ -71,4 +113,5 @@ GIT_EXTERN(int) git_midx_writer_dump( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/odb_backend.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/odb_backend.h index 9ae0ed9..53d8d06 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/odb_backend.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/odb_backend.h @@ -13,9 +13,9 @@ #include "git2/odb.h" /** - * @file git2/sys/backend.h - * @brief Git custom backend implementors functions - * @defgroup git_backend Git custom backend APIs + * @file git2/sys/odb_backend.h + * @brief Object database backends for custom object storage + * @defgroup git_backend Object database backends for custom object storage * @ingroup Git * @{ */ @@ -36,7 +36,7 @@ struct git_odb_backend { 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. + * must be so that the remaining (GIT_OID_SHA1_HEXSIZE - len)*4 bits are 0s. */ int GIT_CALLBACK(read_prefix)( git_oid *, void **, size_t *, git_object_t *, @@ -69,11 +69,8 @@ struct git_odb_backend { * 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()`). + * The odb layer will automatically call this when needed on failed + * lookups (ie. `exists()`, `read()`, `read_header()`). */ int GIT_CALLBACK(refresh)(git_odb_backend *); @@ -109,7 +106,10 @@ struct git_odb_backend { void GIT_CALLBACK(free)(git_odb_backend *); }; +/** Current version for the `git_odb_backend_options` structure */ #define GIT_ODB_BACKEND_VERSION 1 + +/** Static constructor for `git_odb_backend_options` */ #define GIT_ODB_BACKEND_INIT {GIT_ODB_BACKEND_VERSION} /** @@ -170,6 +170,7 @@ GIT_EXTERN(void *) git_odb_backend_malloc(git_odb_backend *backend, size_t len); #endif +/** @} */ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/openssl.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/openssl.h index b41c55c..8b74a98 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/openssl.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/openssl.h @@ -9,6 +9,12 @@ #include "git2/common.h" +/** + * @file git2/sys/openssl.h + * @brief Custom OpenSSL functionality + * @defgroup git_openssl Custom OpenSSL functionality + * @{ + */ GIT_BEGIN_DECL /** @@ -33,6 +39,7 @@ GIT_BEGIN_DECL */ GIT_EXTERN(int) git_openssl_set_locking(void); +/** @} */ GIT_END_DECL -#endif +#endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/path.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/path.h index 2a0c7e0..2963bca 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/path.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/path.h @@ -10,6 +10,16 @@ #include "git2/common.h" +/** + * @file git2/sys/path.h + * @brief Custom path handling + * @defgroup git_path Custom path handling + * @ingroup Git + * + * Merge will take two commits and attempt to produce a commit that + * includes the changes that were made in both branches. + * @{ + */ GIT_BEGIN_DECL /** @@ -59,6 +69,7 @@ typedef enum { */ 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 */ +#endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/refdb_backend.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/refdb_backend.h index c31e26d..813822a 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/refdb_backend.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/refdb_backend.h @@ -12,9 +12,9 @@ #include "git2/oid.h" /** - * @file git2/refdb_backend.h - * @brief Git custom refs backend functions - * @defgroup git_refdb_backend Git custom refs backend API + * @file git2/sys/refdb_backend.h + * @brief Custom reference database backends for refs storage + * @defgroup git_refdb_backend Custom reference database backends for refs storage * @ingroup Git * @{ */ @@ -65,9 +65,9 @@ struct git_refdb_backend { * * A refdb implementation must provide this function. * - * @arg exists The implementation shall set this to `0` if a ref does + * @param 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 + * @param ref_name The reference's name that should be checked for * existence. * @return `0` on success, a negative error value code. */ @@ -81,9 +81,9 @@ struct git_refdb_backend { * * A refdb implementation must provide this function. * - * @arg out The implementation shall set this to the allocated + * @param 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 + * @param 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. @@ -98,12 +98,12 @@ struct git_refdb_backend { * * A refdb implementation must provide this function. * - * @arg out The implementation shall set this to the allocated + * @param 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 + * @param 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. @@ -118,20 +118,20 @@ struct git_refdb_backend { * * A refdb implementation must provide this function. * - * @arg ref The reference to persist. May either be a symbolic or + * @param 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 + * @param 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 + * @param 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 + * @param 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 + * @param 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 + * @param 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 @@ -149,15 +149,15 @@ struct git_refdb_backend { * * A refdb implementation must provide this function. * - * @arg out The implementation shall set this to the newly created + * @param 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 + * @param old_name The current name of the reference that is to be renamed. + * @param new_name The new name that the old reference shall be renamed to. + * @param 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 + * @param 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 + * @param 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. */ @@ -173,11 +173,11 @@ struct git_refdb_backend { * * 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 + * @param ref_name The name of the reference name that shall be deleted. + * @param 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 + * @param 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. @@ -243,7 +243,7 @@ struct git_refdb_backend { * * A refdb implementation must provide this function. * - * @arg reflog The complete reference log for a given reference. Note + * @param 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 @@ -255,8 +255,8 @@ struct git_refdb_backend { * * 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. + * @param old_name The name of old reference whose reflog shall be renamed from. + * @param 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); @@ -266,7 +266,7 @@ struct git_refdb_backend { * * A refdb implementation must provide this function. * - * @arg name The name of the reference whose reflog shall be deleted. + * @param 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); @@ -277,9 +277,9 @@ struct git_refdb_backend { * 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 + * @param payload_out Opaque parameter that will be passed verbosely to * `unlock`. - * @arg refname Reference that shall be locked. + * @param 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); @@ -294,16 +294,16 @@ struct git_refdb_backend { * 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 + * @param payload The payload returned by `lock`. + * @param 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` + * @param 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 + * @param ref The reference which should be unlocked. + * @param 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 + * @param 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 @@ -312,7 +312,10 @@ struct git_refdb_backend { const git_reference *ref, const git_signature *sig, const char *message); }; +/** Current version for the `git_refdb_backend_options` structure */ #define GIT_REFDB_BACKEND_VERSION 1 + +/** Static constructor for `git_refdb_backend_options` */ #define GIT_REFDB_BACKEND_INIT {GIT_REFDB_BACKEND_VERSION} /** @@ -356,6 +359,7 @@ GIT_EXTERN(int) git_refdb_set_backend( git_refdb *refdb, git_refdb_backend *backend); +/** @} */ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/reflog.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/reflog.h deleted file mode 100644 index c9d0041..0000000 --- a/Clibgit2.xcframework/macos-arm64_x86_64/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/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/refs.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/refs.h index d2ce2e0..e434e67 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/refs.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/refs.h @@ -13,8 +13,8 @@ /** * @file git2/sys/refs.h - * @brief Low-level Git ref creation - * @defgroup git_backend Git custom backend APIs + * @brief Low-level git reference creation + * @defgroup git_backend Low-level git reference creation * @ingroup Git * @{ */ @@ -46,4 +46,5 @@ GIT_EXTERN(git_reference *) git_reference__alloc_symbolic( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/remote.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/remote.h new file mode 100644 index 0000000..476965d --- /dev/null +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/remote.h @@ -0,0 +1,53 @@ +/* + * 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_remote_h +#define INCLUDE_sys_git_remote_h + +#include "git2/remote.h" + +/** + * @file git2/sys/remote.h + * @brief Low-level remote functionality for custom transports + * @defgroup git_remote Low-level remote functionality for custom transports + * @ingroup Git + * @{ +*/ + +GIT_BEGIN_DECL + +/** + * A remote's capabilities. + */ +typedef enum { + /** Remote supports fetching an advertised object by ID. */ + GIT_REMOTE_CAPABILITY_TIP_OID = (1 << 0), + + /** Remote supports fetching an individual reachable object. */ + GIT_REMOTE_CAPABILITY_REACHABLE_OID = (1 << 1), + + /** Remote supports push options. */ + GIT_REMOTE_CAPABILITY_PUSH_OPTIONS = (1 << 2), +} git_remote_capability_t; + +/** + * Disposes libgit2-initialized fields from a git_remote_connect_options. + * This should only be used for git_remote_connect_options returned by + * git_transport_remote_connect_options. + * + * Note that this does not free the `git_remote_connect_options` itself, just + * the memory pointed to by it. + * + * @param opts The `git_remote_connect_options` struct to dispose. + */ +GIT_EXTERN(void) git_remote_connect_options_dispose( + git_remote_connect_options *opts); + +/** @} */ +GIT_END_DECL + +#endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/repository.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/repository.h index 892be66..026ac8a 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/repository.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/repository.h @@ -9,16 +9,71 @@ #include "git2/common.h" #include "git2/types.h" +#include "git2/oid.h" /** * @file git2/sys/repository.h - * @brief Git repository custom implementation routines - * @defgroup git_backend Git custom backend APIs + * @brief Custom repository handling + * @defgroup git_repository Custom repository handling * @ingroup Git * @{ */ GIT_BEGIN_DECL +#ifdef GIT_EXPERIMENTAL_SHA256 + +/** + * The options for creating an repository from scratch. + * + * Initialize with `GIT_REPOSITORY_NEW_OPTIONS_INIT`. Alternatively, + * you can use `git_repository_new_options_init`. + * + * @options[version] GIT_REPOSITORY_NEW_OPTIONS_VERSION + * @options[init_macro] GIT_REPOSITORY_NEW_OPTIONS_INIT + * @options[init_function] git_repository_new_options_init + */ +typedef struct git_repository_new_options { + unsigned int version; /**< The version */ + + /** + * The object ID type for the object IDs that exist in the index. + * + * If this is not specified, this defaults to `GIT_OID_SHA1`. + */ + git_oid_t oid_type; +} git_repository_new_options; + +/** Current version for the `git_repository_new_options` structure */ +#define GIT_REPOSITORY_NEW_OPTIONS_VERSION 1 + +/** Static constructor for `git_repository_new_options` */ +#define GIT_REPOSITORY_NEW_OPTIONS_INIT { GIT_REPOSITORY_NEW_OPTIONS_VERSION } + +/** + * Initialize git_repository_new_options structure + * + * Initializes a `git_repository_new_options` with default values. + * Equivalent to creating an instance with + * `GIT_REPOSITORY_NEW_OPTIONS_INIT`. + * + * @param opts The `git_repository_new_options` struct to initialize. + * @param version The struct version; pass `GIT_REPOSITORY_NEW_OPTIONS_VERSION`. + * @return Zero on success; -1 on failure. + */ +GIT_EXTERN(int) git_repository_new_options_init( + git_repository_new_options *opts, + unsigned int version); + +/** + * Create a new repository with no backends. + * + * @param[out] out The blank repository + * @param opts the options for repository creation, or NULL for defaults + * @return 0 on success, or an error code + */ +GIT_EXTERN(int) git_repository_new(git_repository **out, git_repository_new_options *opts); +#else + /** * Create a new repository with neither backends nor config object * @@ -29,11 +84,13 @@ GIT_BEGIN_DECL * can fail to function properly: locations under $GIT_DIR, $GIT_COMMON_DIR, * or $GIT_INFO_DIR are impacted. * - * @param out The blank repository + * @param[out] out The blank repository * @return 0 on success, or an error code */ GIT_EXTERN(int) git_repository_new(git_repository **out); +#endif + /** * Reset all the internal state in a repository. * @@ -156,6 +213,7 @@ GIT_EXTERN(int) git_repository_set_bare(git_repository *repo); * and caches them so that subsequent calls to `git_submodule_lookup` are O(1). * * @param repo the repository whose submodules will be cached. + * @return 0 on success, or an error code */ GIT_EXTERN(int) git_repository_submodule_cache_all( git_repository *repo); @@ -171,10 +229,12 @@ GIT_EXTERN(int) git_repository_submodule_cache_all( * of these has changed, the cache might become invalid. * * @param repo the repository whose submodule cache will be cleared + * @return 0 on success, or an error code */ GIT_EXTERN(int) git_repository_submodule_cache_clear( git_repository *repo); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/stream.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/stream.h index 6f93cc4..eabff68 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/stream.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/stream.h @@ -11,8 +11,16 @@ #include "git2/types.h" #include "git2/proxy.h" +/** + * @file git2/sys/stream.h + * @brief Streaming file I/O functionality + * @defgroup git_stream Streaming file I/O functionality + * @ingroup Git + * @{ + */ GIT_BEGIN_DECL +/** Current version for the `git_stream` structures */ #define GIT_STREAM_VERSION 1 /** @@ -29,8 +37,22 @@ GIT_BEGIN_DECL typedef struct git_stream { int version; - int encrypted; - int proxy_support; + unsigned int encrypted : 1, + proxy_support : 1; + + /** + * Timeout for read and write operations; can be set to `0` to + * block indefinitely. + */ + int timeout; + + /** + * Timeout to connect to the remote server; can be set to `0` + * to use the system defaults. This can be shorter than the + * system default - often 75 seconds - but cannot be longer. + */ + int connect_timeout; + 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); @@ -79,7 +101,7 @@ typedef enum { GIT_STREAM_STANDARD = 1, /** A TLS-encrypted socket. */ - GIT_STREAM_TLS = 2, + GIT_STREAM_TLS = 2 } git_stream_t; /** @@ -133,6 +155,7 @@ GIT_EXTERN(int) git_stream_register_tls(git_stream_cb ctor); #endif +/**@}*/ GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/transport.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/transport.h index fee3454..ad6765c 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/transport.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/sys/transport.h @@ -9,46 +9,40 @@ #define INCLUDE_sys_git_transport_h #include "git2/net.h" +#include "git2/oidarray.h" +#include "git2/proxy.h" +#include "git2/remote.h" +#include "git2/strarray.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 + * @brief Custom transport registration interfaces and functions + * @defgroup git_transport Custom transport registration * @ingroup Git + * + * Callers can override the default HTTPS or SSH implementation by + * specifying a custom transport. * @{ */ GIT_BEGIN_DECL /** - * Flags to pass to transport - * - * Currently unused. + * The negotiation state during a fetch smart transport negotiation. */ -typedef enum { - GIT_TRANSPORTFLAGS_NONE = 0, -} git_transport_flags_t; +typedef struct { + const git_remote_head * const *refs; + size_t refs_len; + git_oid *shallow_roots; + size_t shallow_roots_len; + int depth; +} git_fetch_negotiation; 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. @@ -56,11 +50,39 @@ struct git_transport { 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); + const git_remote_connect_options *connect_opts); + + /** + * Resets the connect options for the given transport. This + * is useful for updating settings or callbacks for an already + * connected transport. + */ + int GIT_CALLBACK(set_connect_opts)( + git_transport *transport, + const git_remote_connect_options *connect_opts); + + /** + * Gets the capabilities for this remote repository. + * + * This function may be called after a successful call to + * `connect()`. + */ + int GIT_CALLBACK(capabilities)( + unsigned int *capabilities, + git_transport *transport); + +#ifdef GIT_EXPERIMENTAL_SHA256 + /** + * Gets the object type for the remote repository. + * + * This function may be called after a successful call to + * `connect()`. + */ + int GIT_CALLBACK(oid_type)( + git_oid_t *object_type, + git_transport *transport); +#endif /** * Get the list of available references in the remote repository. @@ -75,7 +97,9 @@ struct git_transport { 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); + int GIT_CALLBACK(push)( + git_transport *transport, + git_push *push); /** * Negotiate a fetch with the remote repository. @@ -87,8 +111,17 @@ struct git_transport { int GIT_CALLBACK(negotiate_fetch)( git_transport *transport, git_repository *repo, - const git_remote_head * const *refs, - size_t count); + const git_fetch_negotiation *fetch_data); + + /** + * Return the shallow roots of the remote. + * + * This function may be called after a successful call to + * `negotiate_fetch`. + */ + int GIT_CALLBACK(shallow_roots)( + git_oidarray *out, + git_transport *transport); /** * Start downloading the packfile from the remote repository. @@ -99,16 +132,11 @@ struct git_transport { int GIT_CALLBACK(download_pack)( git_transport *transport, git_repository *repo, - git_indexer_progress *stats, - git_indexer_progress_cb progress_cb, - void *progress_payload); + git_indexer_progress *stats); /** 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); @@ -124,7 +152,10 @@ struct git_transport { void GIT_CALLBACK(free)(git_transport *transport); }; +/** Current version for the `git_transport` structure */ #define GIT_TRANSPORT_VERSION 1 + +/** Static constructor for `git_transport` */ #define GIT_TRANSPORT_INIT {GIT_TRANSPORT_VERSION} /** @@ -270,14 +301,18 @@ GIT_EXTERN(int) git_transport_smart_certificate_check(git_transport *transport, 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 + * Get a copy of the remote connect options * - * The url is copied and must be freed by the caller. + * All data is copied and must be freed by the caller by calling + * `git_remote_connect_options_dispose`. * * @param out options struct to fill * @param transport the transport to extract the data from. + * @return 0 on success, or an error code */ -GIT_EXTERN(int) git_transport_smart_proxy_options(git_proxy_options *out, git_transport *transport); +GIT_EXTERN(int) git_transport_remote_connect_options( + git_remote_connect_options *out, + git_transport *transport); /* *** End of base transport interface *** @@ -289,7 +324,7 @@ typedef enum { GIT_SERVICE_UPLOADPACK_LS = 1, GIT_SERVICE_UPLOADPACK = 2, GIT_SERVICE_RECEIVEPACK_LS = 3, - GIT_SERVICE_RECEIVEPACK = 4, + GIT_SERVICE_RECEIVEPACK = 4 } git_smart_service_t; typedef struct git_smart_subtransport git_smart_subtransport; @@ -361,7 +396,14 @@ struct git_smart_subtransport { void GIT_CALLBACK(free)(git_smart_subtransport *transport); }; -/** A function which creates a new subtransport for the smart transport */ +/** + * A function that creates a new subtransport for the smart transport + * + * @param out the smart subtransport + * @param owner the transport owner + * @param param the input parameter + * @return 0 on success, or an error code + */ typedef int GIT_CALLBACK(git_smart_subtransport_cb)( git_smart_subtransport **out, git_transport *owner, @@ -404,6 +446,7 @@ typedef struct git_smart_subtransport_definition { * * @param out The newly created subtransport * @param owner The smart transport to own this subtransport + * @param param custom parameters for the subtransport * @return 0 or an error code */ GIT_EXTERN(int) git_smart_subtransport_http( @@ -416,6 +459,7 @@ GIT_EXTERN(int) git_smart_subtransport_http( * * @param out The newly created subtransport * @param owner The smart transport to own this subtransport + * @param param custom parameters for the subtransport * @return 0 or an error code */ GIT_EXTERN(int) git_smart_subtransport_git( @@ -428,6 +472,7 @@ GIT_EXTERN(int) git_smart_subtransport_git( * * @param out The newly created subtransport * @param owner The smart transport to own this subtransport + * @param param custom parameters for the subtransport * @return 0 or an error code */ GIT_EXTERN(int) git_smart_subtransport_ssh( @@ -437,4 +482,5 @@ GIT_EXTERN(int) git_smart_subtransport_ssh( /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/tag.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/tag.h index a392136..3b0c12e 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/tag.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/tag.h @@ -15,7 +15,7 @@ /** * @file git2/tag.h - * @brief Git tag parsing routines + * @brief A (nearly) immutable pointer to a commit; useful for versioning * @defgroup git_tag Git tag management * @ingroup Git * @{ @@ -335,6 +335,7 @@ typedef int GIT_CALLBACK(git_tag_foreach_cb)(const char *name, git_oid *oid, voi * @param repo Repository * @param callback Callback function * @param payload Pointer to callback data (optional) + * @return 0 on success or an error code */ GIT_EXTERN(int) git_tag_foreach( git_repository *repo, @@ -362,6 +363,7 @@ GIT_EXTERN(int) git_tag_peel( * * @param out Pointer to store the copy of the tag * @param source Original tag to copy + * @return 0 */ GIT_EXTERN(int) git_tag_dup(git_tag **out, git_tag *source); @@ -379,4 +381,5 @@ GIT_EXTERN(int) git_tag_name_is_valid(int *valid, const char *name); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/trace.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/trace.h index 8cee3a9..62cb87c 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/trace.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/trace.h @@ -12,8 +12,8 @@ /** * @file git2/trace.h - * @brief Git tracing configuration routines - * @defgroup git_trace Git tracing configuration routines + * @brief Tracing functionality to introspect libgit2 in your application + * @defgroup git_trace Tracing functionality to introspect libgit2 in your application * @ingroup Git * @{ */ @@ -48,8 +48,13 @@ typedef enum { /** * An instance for a tracing function + * + * @param level the trace level + * @param msg the trace message */ -typedef void GIT_CALLBACK(git_trace_cb)(git_trace_level_t level, const char *msg); +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 @@ -64,4 +69,5 @@ GIT_EXTERN(int) git_trace_set(git_trace_level_t level, git_trace_cb cb); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/transaction.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/transaction.h index 4938570..212d329 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/transaction.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/transaction.h @@ -12,8 +12,8 @@ /** * @file git2/transaction.h - * @brief Git transactional reference routines - * @defgroup git_transaction Git transactional reference routines + * @brief Transactional reference handling + * @defgroup git_transaction Transactional reference handling * @ingroup Git * @{ */ @@ -118,4 +118,5 @@ GIT_EXTERN(void) git_transaction_free(git_transaction *tx); /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/transport.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/transport.h index 5a27de9..04a7390 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/transport.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/transport.h @@ -15,8 +15,8 @@ /** * @file git2/transport.h - * @brief Git transport interfaces and functions - * @defgroup git_transport interfaces and functions + * @brief Transports are the low-level mechanism to connect to a remote server + * @defgroup git_transport Transports are the low-level mechanism to connect to a remote server * @ingroup Git * @{ */ @@ -30,10 +30,18 @@ GIT_BEGIN_DECL * @param str The message from the transport * @param len The length of the message * @param payload Payload provided by the caller + * @return 0 on success or an error code */ typedef int GIT_CALLBACK(git_transport_message_cb)(const char *str, int len, void *payload); -/** Signature of a function which creates a transport */ +/** + * Signature of a function which creates a transport. + * + * @param out the transport generate + * @param owner the owner for the transport + * @param param the param to the transport creation + * @return 0 on success or an error code + */ typedef int GIT_CALLBACK(git_transport_cb)(git_transport **out, git_remote *owner, void *param); /** @} */ diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/tree.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/tree.h index f2289fc..b8e2de2 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/tree.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/tree.h @@ -14,8 +14,8 @@ /** * @file git2/tree.h - * @brief Git tree parsing, loading routines - * @defgroup git_tree Git tree parsing, loading routines + * @brief Trees are collections of files and folders to make up the repository hierarchy + * @defgroup git_tree Trees are collections of files and folders to make up the repository hierarchy * @ingroup Git * @{ */ @@ -24,7 +24,7 @@ GIT_BEGIN_DECL /** * Lookup a tree object from the repository. * - * @param out Pointer to the looked up tree + * @param[out] 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 @@ -255,7 +255,7 @@ GIT_EXTERN(int) git_treebuilder_new( git_treebuilder **out, git_repository *repo, const git_tree *source); /** - * Clear all the entires in the builder + * Clear all the entries in the builder * * @param bld Builder to clear * @return 0 on success; error code otherwise @@ -345,6 +345,10 @@ GIT_EXTERN(int) git_treebuilder_remove( * 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). + * + * @param entry the tree entry for the callback to examine + * @param payload the payload from the caller + * @return 0 to do nothing, non-zero to remove the entry */ typedef int GIT_CALLBACK(git_treebuilder_filter_cb)( const git_tree_entry *entry, void *payload); @@ -379,14 +383,21 @@ GIT_EXTERN(int) git_treebuilder_filter( GIT_EXTERN(int) git_treebuilder_write( git_oid *id, git_treebuilder *bld); -/** Callback for the tree traversal method */ +/** + * Callback for the tree traversal method. + * + * @param root the current (relative) root to the entry + * @param entry the tree entry + * @param payload the caller-provided callback payload + * @return a positive value to skip the entry, a negative value to stop the walk + */ 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_POST = 1 /* Post-order */ } git_treewalk_mode; /** @@ -418,6 +429,7 @@ GIT_EXTERN(int) git_tree_walk( * * @param out Pointer to store the copy of the tree * @param source Original tree to copy + * @return 0 */ GIT_EXTERN(int) git_tree_dup(git_tree **out, git_tree *source); @@ -428,7 +440,7 @@ 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_REMOVE } git_tree_update_t; /** @@ -469,6 +481,6 @@ typedef struct { 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/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/types.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/types.h index aac8e42..a4afd18 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/types.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/types.h @@ -78,16 +78,21 @@ typedef enum { 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_REF_DELTA = 7 /**< A delta, base is given by object id. */ } git_object_t; -/** An open object database handle. */ +/** + * An object database stores the objects (commit, trees, blobs, tags, + * etc) for a repository. + */ 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 */ +/** + * A "raw" object read from the object database. + */ typedef struct git_odb_object git_odb_object; /** A stream to read/write from the ODB */ @@ -194,7 +199,18 @@ 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. */ +/** + * Annotated commits are commits with additional metadata about how the + * commit was resolved, which can be used for maintaining the user's + * "intent" through commands like merge and rebase. + * + * For example, if a user wants to conceptually "merge `HEAD`", then the + * commit portion of an annotated commit will point to the `HEAD` commit, + * but the _annotation_ will denote the ref `HEAD`. This allows git to + * perform the internal bookkeeping so that the system knows both the + * content of what is being merged but also how the content was looked up + * so that it can be recorded in the reflog appropriately. + */ typedef struct git_annotated_commit git_annotated_commit; /** Representation of a status collection */ @@ -208,14 +224,14 @@ 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_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_ALL = GIT_BRANCH_LOCAL|GIT_BRANCH_REMOTE } git_branch_t; /** Valid modes for index and tree entries. */ @@ -225,7 +241,7 @@ typedef enum { GIT_FILEMODE_BLOB = 0100644, GIT_FILEMODE_BLOB_EXECUTABLE = 0100755, GIT_FILEMODE_LINK = 0120000, - GIT_FILEMODE_COMMIT = 0160000, + GIT_FILEMODE_COMMIT = 0160000 } git_filemode_t; /** @@ -236,7 +252,7 @@ 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). + * which case it does not have backing configuration entries). */ typedef struct git_remote git_remote; @@ -334,7 +350,7 @@ typedef enum { 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_ALL = 4 /**< never dirty */ } git_submodule_ignore_t; /** @@ -350,7 +366,7 @@ typedef enum { typedef enum { GIT_SUBMODULE_RECURSE_NO = 0, GIT_SUBMODULE_RECURSE_YES = 1, - GIT_SUBMODULE_RECURSE_ONDEMAND = 2, + GIT_SUBMODULE_RECURSE_ONDEMAND = 2 } git_submodule_recurse_t; typedef struct git_writestream git_writestream; diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/version.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/version.h index 3503a62..587a101 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/version.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/version.h @@ -7,12 +7,71 @@ #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 +#include "common.h" -#define LIBGIT2_SOVERSION "1.3" +/** + * @file git2/version.h + * @brief The version of libgit2 + * @ingroup Git + * @{ + */ +GIT_BEGIN_DECL + +/** + * The version string for libgit2. This string follows semantic + * versioning (v2) guidelines. + */ +#define LIBGIT2_VERSION "1.9.1" + +/** The major version number for this version of libgit2. */ +#define LIBGIT2_VERSION_MAJOR 1 + +/** The minor version number for this version of libgit2. */ +#define LIBGIT2_VERSION_MINOR 9 + +/** The revision ("teeny") version number for this version of libgit2. */ +#define LIBGIT2_VERSION_REVISION 1 + +/** The Windows DLL patch number for this version of libgit2. */ +#define LIBGIT2_VERSION_PATCH 0 + +/** + * The prerelease string for this version of libgit2. For development + * (nightly) builds, this will be "alpha". For prereleases, this will be + * a prerelease name like "beta" or "rc1". For final releases, this will + * be `NULL`. + */ +#define LIBGIT2_VERSION_PRERELEASE NULL + +/** + * The library ABI soversion for this version of libgit2. This should + * only be changed when the library has a breaking ABI change, and so + * may not reflect the library's API version number. + */ +#define LIBGIT2_SOVERSION "1.9" + +/** + * An integer value representing the libgit2 version number. For example, + * libgit2 1.6.3 is 1060300. + */ +#define LIBGIT2_VERSION_NUMBER ( \ + (LIBGIT2_VERSION_MAJOR * 1000000) + \ + (LIBGIT2_VERSION_MINOR * 10000) + \ + (LIBGIT2_VERSION_REVISION * 100)) + +/** + * Compare the libgit2 version against a given version. Evaluates to true + * if the given major, minor, and revision values are greater than or equal + * to the currently running libgit2 version. For example: + * + * #if LIBGIT2_VERSION_CHECK(1, 6, 3) + * # error libgit2 version is >= 1.6.3 + * #endif + */ +#define LIBGIT2_VERSION_CHECK(major, minor, revision) \ + (LIBGIT2_VERSION_NUMBER >= ((major)*1000000)+((minor)*10000)+((revision)*100)) + +/** @} */ +GIT_END_DECL #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/worktree.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/worktree.h index 23084d8..fd37517 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/worktree.h +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/git2/worktree.h @@ -11,11 +11,12 @@ #include "buffer.h" #include "types.h" #include "strarray.h" +#include "checkout.h" /** - * @file git2/worktrees.h - * @brief Git worktree related functions - * @defgroup git_commit Git worktree related functions + * @file git2/worktree.h + * @brief Additional working directories for a repository + * @defgroup git_commit Additional working directories for a repository * @ingroup Git * @{ */ @@ -52,6 +53,7 @@ GIT_EXTERN(int) git_worktree_lookup(git_worktree **out, git_repository *repo, co * * @param out Out-pointer for the newly allocated worktree * @param repo Repository to look up worktree for + * @return 0 or an error code */ GIT_EXTERN(int) git_worktree_open_from_repository(git_worktree **out, git_repository *repo); @@ -84,12 +86,22 @@ GIT_EXTERN(int) git_worktree_validate(const git_worktree *wt); 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 */ + int lock; /**< lock newly created worktree */ + int checkout_existing; /**< allow checkout of existing branch matching worktree name */ + git_reference *ref; /**< reference to use for the new worktree HEAD */ + + /** + * Options for the checkout. + */ + git_checkout_options checkout_options; } git_worktree_add_options; +/** Current version for the `git_worktree_add_options` structure */ #define GIT_WORKTREE_ADD_OPTIONS_VERSION 1 -#define GIT_WORKTREE_ADD_OPTIONS_INIT {GIT_WORKTREE_ADD_OPTIONS_VERSION,0,NULL} + +/** Static constructor for `git_worktree_add_options` */ +#define GIT_WORKTREE_ADD_OPTIONS_INIT { GIT_WORKTREE_ADD_OPTIONS_VERSION, \ + 0, 0, NULL, GIT_CHECKOUT_OPTIONS_INIT } /** * Initialize git_worktree_add_options structure @@ -185,7 +197,7 @@ typedef enum { /* 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_WORKING_TREE = 1u << 2 } git_worktree_prune_t; /** @@ -202,7 +214,10 @@ typedef struct git_worktree_prune_options { uint32_t flags; } git_worktree_prune_options; +/** Current version for the `git_worktree_prune_options` structure */ #define GIT_WORKTREE_PRUNE_OPTIONS_VERSION 1 + +/** Static constructor for `git_worktree_prune_options` */ #define GIT_WORKTREE_PRUNE_OPTIONS_INIT {GIT_WORKTREE_PRUNE_OPTIONS_VERSION,0} /** @@ -231,7 +246,13 @@ GIT_EXTERN(int) git_worktree_prune_options_init( * * 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. + * positive value. If the worktree is not prunable, an error + * message will be set (visible in `giterr_last`) with details about + * why. + * + * @param wt Worktree to check. + * @param opts The prunable options. + * @return 1 if the worktree is prunable, 0 otherwise, or an error code. */ GIT_EXTERN(int) git_worktree_is_prunable(git_worktree *wt, git_worktree_prune_options *opts); @@ -253,4 +274,5 @@ GIT_EXTERN(int) git_worktree_prune(git_worktree *wt, /** @} */ GIT_END_DECL + #endif diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/libssh2.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/libssh2.h new file mode 100644 index 0000000..f47858a --- /dev/null +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/libssh2.h @@ -0,0 +1,1516 @@ +/* Copyright (C) Sara Golemon + * Copyright (C) Daniel Stenberg + * Copyright (C) Simon Josefsson + * All rights reserved. + * + * Redistribution and use in source and binary forms, + * with or without modification, are permitted provided + * that the following conditions are met: + * + * Redistributions of source code must retain the above + * copyright notice, this list of conditions and the + * following disclaimer. + * + * 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. + * + * Neither the name of the copyright holder nor the names + * of any other contributors may be used to endorse or + * promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + * CONTRIBUTORS "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 COPYRIGHT OWNER OR + * CONTRIBUTORS 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. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef LIBSSH2_H +#define LIBSSH2_H 1 + +#define LIBSSH2_COPYRIGHT "The libssh2 project and its contributors." + +/* We use underscore instead of dash when appending DEV in dev versions just + to make the BANNER define (used by src/session.c) be a valid SSH + banner. Release versions have no appended strings and may of course not + have dashes either. */ +#define LIBSSH2_VERSION "1.11.1" + +/* The numeric version number is also available "in parts" by using these + defines: */ +#define LIBSSH2_VERSION_MAJOR 1 +#define LIBSSH2_VERSION_MINOR 11 +#define LIBSSH2_VERSION_PATCH 1 + +/* This is the numeric version of the libssh2 version number, meant for easier + parsing and comparisons by programs. The LIBSSH2_VERSION_NUM define will + always follow this syntax: + + 0xXXYYZZ + + Where XX, YY and ZZ are the main version, release and patch numbers in + hexadecimal (using 8 bits each). All three numbers are always represented + using two digits. 1.2 would appear as "0x010200" while version 9.11.7 + appears as "0x090b07". + + This 6-digit (24 bits) hexadecimal number does not show pre-release number, + and it is always a greater number in a more recent release. It makes + comparisons with greater than and less than work. +*/ +#define LIBSSH2_VERSION_NUM 0x010b01 + +/* + * This is the date and time when the full source package was created. The + * timestamp is not stored in the source code repo, as the timestamp is + * properly set in the tarballs by the maketgz script. + * + * The format of the date should follow this template: + * + * "Mon Feb 12 11:35:33 UTC 2007" + */ +#define LIBSSH2_TIMESTAMP "Wed Oct 16 08:03:21 UTC 2024" + +#ifndef RC_INVOKED + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef _WIN32 +# include +# include +#endif + +#include +#include +#include +#include + +/* Allow alternate API prefix from CFLAGS or calling app */ +#ifndef LIBSSH2_API +# ifdef _WIN32 +# if defined(LIBSSH2_EXPORTS) || defined(_WINDLL) +# ifdef LIBSSH2_LIBRARY +# define LIBSSH2_API __declspec(dllexport) +# else +# define LIBSSH2_API __declspec(dllimport) +# endif /* LIBSSH2_LIBRARY */ +# else +# define LIBSSH2_API +# endif +# else /* !_WIN32 */ +# define LIBSSH2_API +# endif /* _WIN32 */ +#endif /* LIBSSH2_API */ + +#ifdef HAVE_SYS_UIO_H +# include +#endif + +#ifdef _MSC_VER +typedef unsigned char uint8_t; +typedef unsigned short int uint16_t; +typedef unsigned int uint32_t; +typedef __int32 int32_t; +typedef __int64 int64_t; +typedef unsigned __int64 uint64_t; +typedef unsigned __int64 libssh2_uint64_t; +typedef __int64 libssh2_int64_t; +#if (!defined(HAVE_SSIZE_T) && !defined(ssize_t)) +typedef SSIZE_T ssize_t; +#define HAVE_SSIZE_T +#endif +#else +#include +typedef unsigned long long libssh2_uint64_t; +typedef long long libssh2_int64_t; +#endif + +#ifdef _WIN32 +typedef SOCKET libssh2_socket_t; +#define LIBSSH2_INVALID_SOCKET INVALID_SOCKET +#define LIBSSH2_SOCKET_CLOSE(s) closesocket(s) +#else /* !_WIN32 */ +typedef int libssh2_socket_t; +#define LIBSSH2_INVALID_SOCKET -1 +#define LIBSSH2_SOCKET_CLOSE(s) close(s) +#endif /* _WIN32 */ + +/* Compile-time deprecation macros */ +#if !defined(LIBSSH2_DISABLE_DEPRECATION) && !defined(LIBSSH2_LIBRARY) +# if defined(_MSC_VER) +# if _MSC_VER >= 1400 +# define LIBSSH2_DEPRECATED(version, message) \ + __declspec(deprecated("since libssh2 " # version ". " message)) +# elif _MSC_VER >= 1310 +# define LIBSSH2_DEPRECATED(version, message) \ + __declspec(deprecated) +# endif +# elif defined(__GNUC__) && !defined(__INTEL_COMPILER) +# if (defined(__clang__) && __clang_major__ >= 3) || \ + (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)) +# define LIBSSH2_DEPRECATED(version, message) \ + __attribute__((deprecated("since libssh2 " # version ". " message))) +# elif __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 0) +# define LIBSSH2_DEPRECATED(version, message) \ + __attribute__((deprecated)) +# endif +# elif defined(__SUNPRO_C) && __SUNPRO_C >= 0x5130 +# define LIBSSH2_DEPRECATED(version, message) \ + __attribute__((deprecated)) +# endif +#endif + +#ifndef LIBSSH2_DEPRECATED +#define LIBSSH2_DEPRECATED(version, message) +#endif + +/* + * Determine whether there is small or large file support on windows. + */ + +#if defined(_MSC_VER) && !defined(_WIN32_WCE) +# if (_MSC_VER >= 900) && (_INTEGRAL_MAX_BITS >= 64) +# define LIBSSH2_USE_WIN32_LARGE_FILES +# else +# define LIBSSH2_USE_WIN32_SMALL_FILES +# endif +#endif + +#if defined(__MINGW32__) && !defined(LIBSSH2_USE_WIN32_LARGE_FILES) +# define LIBSSH2_USE_WIN32_LARGE_FILES +#endif + +#if defined(__WATCOMC__) && !defined(LIBSSH2_USE_WIN32_LARGE_FILES) +# define LIBSSH2_USE_WIN32_LARGE_FILES +#endif + +#if defined(__POCC__) +# undef LIBSSH2_USE_WIN32_LARGE_FILES +#endif + +#if defined(_WIN32) && !defined(LIBSSH2_USE_WIN32_LARGE_FILES) && \ + !defined(LIBSSH2_USE_WIN32_SMALL_FILES) +# define LIBSSH2_USE_WIN32_SMALL_FILES +#endif + +/* + * Large file (>2Gb) support using WIN32 functions. + */ + +#ifdef LIBSSH2_USE_WIN32_LARGE_FILES +# include +# define LIBSSH2_STRUCT_STAT_SIZE_FORMAT "%I64d" +typedef struct _stati64 libssh2_struct_stat; +typedef __int64 libssh2_struct_stat_size; +#endif + +/* + * Small file (<2Gb) support using WIN32 functions. + */ + +#ifdef LIBSSH2_USE_WIN32_SMALL_FILES +# ifndef _WIN32_WCE +# define LIBSSH2_STRUCT_STAT_SIZE_FORMAT "%d" +typedef struct _stat libssh2_struct_stat; +typedef off_t libssh2_struct_stat_size; +# endif +#endif + +#ifndef LIBSSH2_STRUCT_STAT_SIZE_FORMAT +# ifdef __VMS +/* We have to roll our own format here because %z is a C99-ism we don't + have. */ +# if __USE_OFF64_T || __USING_STD_STAT +# define LIBSSH2_STRUCT_STAT_SIZE_FORMAT "%Ld" +# else +# define LIBSSH2_STRUCT_STAT_SIZE_FORMAT "%d" +# endif +# else +# define LIBSSH2_STRUCT_STAT_SIZE_FORMAT "%zd" +# endif +typedef struct stat libssh2_struct_stat; +typedef off_t libssh2_struct_stat_size; +#endif + +/* Part of every banner, user specified or not */ +#define LIBSSH2_SSH_BANNER "SSH-2.0-libssh2_" LIBSSH2_VERSION + +#define LIBSSH2_SSH_DEFAULT_BANNER LIBSSH2_SSH_BANNER +#define LIBSSH2_SSH_DEFAULT_BANNER_WITH_CRLF LIBSSH2_SSH_DEFAULT_BANNER "\r\n" + +/* Defaults for pty requests */ +#define LIBSSH2_TERM_WIDTH 80 +#define LIBSSH2_TERM_HEIGHT 24 +#define LIBSSH2_TERM_WIDTH_PX 0 +#define LIBSSH2_TERM_HEIGHT_PX 0 + +/* 1/4 second */ +#define LIBSSH2_SOCKET_POLL_UDELAY 250000 +/* 0.25 * 120 == 30 seconds */ +#define LIBSSH2_SOCKET_POLL_MAXLOOPS 120 + +/* Maximum size to allow a payload to compress to, plays it safe by falling + short of spec limits */ +#define LIBSSH2_PACKET_MAXCOMP 32000 + +/* Maximum size to allow a payload to deccompress to, plays it safe by + allowing more than spec requires */ +#define LIBSSH2_PACKET_MAXDECOMP 40000 + +/* Maximum size for an inbound compressed payload, plays it safe by + overshooting spec limits */ +#define LIBSSH2_PACKET_MAXPAYLOAD 40000 + +/* Malloc callbacks */ +#define LIBSSH2_ALLOC_FUNC(name) void *name(size_t count, void **abstract) +#define LIBSSH2_REALLOC_FUNC(name) void *name(void *ptr, size_t count, \ + void **abstract) +#define LIBSSH2_FREE_FUNC(name) void name(void *ptr, void **abstract) + +typedef struct _LIBSSH2_USERAUTH_KBDINT_PROMPT +{ + unsigned char *text; + size_t length; + unsigned char echo; +} LIBSSH2_USERAUTH_KBDINT_PROMPT; + +typedef struct _LIBSSH2_USERAUTH_KBDINT_RESPONSE +{ + char *text; + unsigned int length; /* FIXME: change type to size_t */ +} LIBSSH2_USERAUTH_KBDINT_RESPONSE; + +typedef struct _LIBSSH2_SK_SIG_INFO { + uint8_t flags; + uint32_t counter; + unsigned char *sig_r; + size_t sig_r_len; + unsigned char *sig_s; + size_t sig_s_len; +} LIBSSH2_SK_SIG_INFO; + +/* 'publickey' authentication callback */ +#define LIBSSH2_USERAUTH_PUBLICKEY_SIGN_FUNC(name) \ + int name(LIBSSH2_SESSION *session, unsigned char **sig, size_t *sig_len, \ + const unsigned char *data, size_t data_len, void **abstract) + +/* 'keyboard-interactive' authentication callback */ +/* FIXME: name_len, instruction_len -> size_t, num_prompts -> unsigned int? */ +#define LIBSSH2_USERAUTH_KBDINT_RESPONSE_FUNC(name_) \ + void name_(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) + +/* SK authentication callback */ +#define LIBSSH2_USERAUTH_SK_SIGN_FUNC(name) \ + int name(LIBSSH2_SESSION *session, LIBSSH2_SK_SIG_INFO *sig_info, \ + const unsigned char *data, size_t data_len, \ + int algorithm, uint8_t flags, \ + const char *application, const unsigned char *key_handle, \ + size_t handle_len, \ + void **abstract) + +/* Flags for SK authentication */ +#define LIBSSH2_SK_PRESENCE_REQUIRED 0x01 +#define LIBSSH2_SK_VERIFICATION_REQUIRED 0x04 + +/* FIXME: update lengths to size_t (or ssize_t): */ + +/* Callbacks for special SSH packets */ +#define LIBSSH2_IGNORE_FUNC(name) \ + void name(LIBSSH2_SESSION *session, const char *message, int message_len, \ + void **abstract) + +#define LIBSSH2_DEBUG_FUNC(name) \ + void name(LIBSSH2_SESSION *session, int always_display, \ + const char *message, int message_len, \ + const char *language, int language_len, \ + void **abstract) + +#define LIBSSH2_DISCONNECT_FUNC(name) \ + void name(LIBSSH2_SESSION *session, int reason, \ + const char *message, int message_len, \ + const char *language, int language_len, \ + void **abstract) + +#define LIBSSH2_PASSWD_CHANGEREQ_FUNC(name) \ + void name(LIBSSH2_SESSION *session, char **newpw, int *newpw_len, \ + void **abstract) + +#define LIBSSH2_MACERROR_FUNC(name) \ + int name(LIBSSH2_SESSION *session, const char *packet, int packet_len, \ + void **abstract) + +#define LIBSSH2_X11_OPEN_FUNC(name) \ + void name(LIBSSH2_SESSION *session, LIBSSH2_CHANNEL *channel, \ + const char *shost, int sport, void **abstract) + +#define LIBSSH2_AUTHAGENT_FUNC(name) \ + void name(LIBSSH2_SESSION *session, LIBSSH2_CHANNEL *channel, \ + void **abstract) + +#define LIBSSH2_ADD_IDENTITIES_FUNC(name) \ + void name(LIBSSH2_SESSION *session, void *buffer, \ + const char *agent_path, void **abstract) + +#define LIBSSH2_AUTHAGENT_SIGN_FUNC(name) \ + int name(LIBSSH2_SESSION* session, \ + unsigned char *blob, unsigned int blen, \ + const unsigned char *data, unsigned int dlen, \ + unsigned char **signature, unsigned int *sigLen, \ + const char *agentPath, \ + void **abstract) + +#define LIBSSH2_CHANNEL_CLOSE_FUNC(name) \ + void name(LIBSSH2_SESSION *session, void **session_abstract, \ + LIBSSH2_CHANNEL *channel, void **channel_abstract) + +/* I/O callbacks */ +#define LIBSSH2_RECV_FUNC(name) \ + ssize_t name(libssh2_socket_t socket, \ + void *buffer, size_t length, \ + int flags, void **abstract) +#define LIBSSH2_SEND_FUNC(name) \ + ssize_t name(libssh2_socket_t socket, \ + const void *buffer, size_t length, \ + int flags, void **abstract) + +/* libssh2_session_callback_set() constants */ +#define LIBSSH2_CALLBACK_IGNORE 0 +#define LIBSSH2_CALLBACK_DEBUG 1 +#define LIBSSH2_CALLBACK_DISCONNECT 2 +#define LIBSSH2_CALLBACK_MACERROR 3 +#define LIBSSH2_CALLBACK_X11 4 +#define LIBSSH2_CALLBACK_SEND 5 +#define LIBSSH2_CALLBACK_RECV 6 +#define LIBSSH2_CALLBACK_AUTHAGENT 7 +#define LIBSSH2_CALLBACK_AUTHAGENT_IDENTITIES 8 +#define LIBSSH2_CALLBACK_AUTHAGENT_SIGN 9 + +/* libssh2_session_method_pref() constants */ +#define LIBSSH2_METHOD_KEX 0 +#define LIBSSH2_METHOD_HOSTKEY 1 +#define LIBSSH2_METHOD_CRYPT_CS 2 +#define LIBSSH2_METHOD_CRYPT_SC 3 +#define LIBSSH2_METHOD_MAC_CS 4 +#define LIBSSH2_METHOD_MAC_SC 5 +#define LIBSSH2_METHOD_COMP_CS 6 +#define LIBSSH2_METHOD_COMP_SC 7 +#define LIBSSH2_METHOD_LANG_CS 8 +#define LIBSSH2_METHOD_LANG_SC 9 +#define LIBSSH2_METHOD_SIGN_ALGO 10 + +/* flags */ +#define LIBSSH2_FLAG_SIGPIPE 1 +#define LIBSSH2_FLAG_COMPRESS 2 +#define LIBSSH2_FLAG_QUOTE_PATHS 3 + +typedef struct _LIBSSH2_SESSION LIBSSH2_SESSION; +typedef struct _LIBSSH2_CHANNEL LIBSSH2_CHANNEL; +typedef struct _LIBSSH2_LISTENER LIBSSH2_LISTENER; +typedef struct _LIBSSH2_KNOWNHOSTS LIBSSH2_KNOWNHOSTS; +typedef struct _LIBSSH2_AGENT LIBSSH2_AGENT; + +/* SK signature callback */ +typedef struct _LIBSSH2_PRIVKEY_SK { + int algorithm; + uint8_t flags; + const char *application; + const unsigned char *key_handle; + size_t handle_len; + LIBSSH2_USERAUTH_SK_SIGN_FUNC((*sign_callback)); + void **orig_abstract; +} LIBSSH2_PRIVKEY_SK; + +int +libssh2_sign_sk(LIBSSH2_SESSION *session, + unsigned char **sig, + size_t *sig_len, + const unsigned char *data, + size_t data_len, + void **abstract); + +typedef struct _LIBSSH2_POLLFD { + unsigned char type; /* LIBSSH2_POLLFD_* below */ + + union { + libssh2_socket_t socket; /* File descriptors -- examined with + system select() call */ + LIBSSH2_CHANNEL *channel; /* Examined by checking internal state */ + LIBSSH2_LISTENER *listener; /* Read polls only -- are inbound + connections waiting to be accepted? */ + } fd; + + unsigned long events; /* Requested Events */ + unsigned long revents; /* Returned Events */ +} LIBSSH2_POLLFD; + +/* Poll FD Descriptor Types */ +#define LIBSSH2_POLLFD_SOCKET 1 +#define LIBSSH2_POLLFD_CHANNEL 2 +#define LIBSSH2_POLLFD_LISTENER 3 + +/* Note: Win32 Doesn't actually have a poll() implementation, so some of these + values are faked with select() data */ +/* Poll FD events/revents -- Match sys/poll.h where possible */ +#define LIBSSH2_POLLFD_POLLIN 0x0001 /* Data available to be read or + connection available -- + All */ +#define LIBSSH2_POLLFD_POLLPRI 0x0002 /* Priority data available to + be read -- Socket only */ +#define LIBSSH2_POLLFD_POLLEXT 0x0002 /* Extended data available to + be read -- Channel only */ +#define LIBSSH2_POLLFD_POLLOUT 0x0004 /* Can may be written -- + Socket/Channel */ +/* revents only */ +#define LIBSSH2_POLLFD_POLLERR 0x0008 /* Error Condition -- Socket */ +#define LIBSSH2_POLLFD_POLLHUP 0x0010 /* HangUp/EOF -- Socket */ +#define LIBSSH2_POLLFD_SESSION_CLOSED 0x0010 /* Session Disconnect */ +#define LIBSSH2_POLLFD_POLLNVAL 0x0020 /* Invalid request -- Socket + Only */ +#define LIBSSH2_POLLFD_POLLEX 0x0040 /* Exception Condition -- + Socket/Win32 */ +#define LIBSSH2_POLLFD_CHANNEL_CLOSED 0x0080 /* Channel Disconnect */ +#define LIBSSH2_POLLFD_LISTENER_CLOSED 0x0080 /* Listener Disconnect */ + +#define HAVE_LIBSSH2_SESSION_BLOCK_DIRECTION +/* Block Direction Types */ +#define LIBSSH2_SESSION_BLOCK_INBOUND 0x0001 +#define LIBSSH2_SESSION_BLOCK_OUTBOUND 0x0002 + +/* Hash Types */ +#define LIBSSH2_HOSTKEY_HASH_MD5 1 +#define LIBSSH2_HOSTKEY_HASH_SHA1 2 +#define LIBSSH2_HOSTKEY_HASH_SHA256 3 + +/* Hostkey Types */ +#define LIBSSH2_HOSTKEY_TYPE_UNKNOWN 0 +#define LIBSSH2_HOSTKEY_TYPE_RSA 1 +#define LIBSSH2_HOSTKEY_TYPE_DSS 2 /* deprecated */ +#define LIBSSH2_HOSTKEY_TYPE_ECDSA_256 3 +#define LIBSSH2_HOSTKEY_TYPE_ECDSA_384 4 +#define LIBSSH2_HOSTKEY_TYPE_ECDSA_521 5 +#define LIBSSH2_HOSTKEY_TYPE_ED25519 6 + +/* Disconnect Codes (defined by SSH protocol) */ +#define SSH_DISCONNECT_HOST_NOT_ALLOWED_TO_CONNECT 1 +#define SSH_DISCONNECT_PROTOCOL_ERROR 2 +#define SSH_DISCONNECT_KEY_EXCHANGE_FAILED 3 +#define SSH_DISCONNECT_RESERVED 4 +#define SSH_DISCONNECT_MAC_ERROR 5 +#define SSH_DISCONNECT_COMPRESSION_ERROR 6 +#define SSH_DISCONNECT_SERVICE_NOT_AVAILABLE 7 +#define SSH_DISCONNECT_PROTOCOL_VERSION_NOT_SUPPORTED 8 +#define SSH_DISCONNECT_HOST_KEY_NOT_VERIFIABLE 9 +#define SSH_DISCONNECT_CONNECTION_LOST 10 +#define SSH_DISCONNECT_BY_APPLICATION 11 +#define SSH_DISCONNECT_TOO_MANY_CONNECTIONS 12 +#define SSH_DISCONNECT_AUTH_CANCELLED_BY_USER 13 +#define SSH_DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE 14 +#define SSH_DISCONNECT_ILLEGAL_USER_NAME 15 + +/* Error Codes (defined by libssh2) */ +#define LIBSSH2_ERROR_NONE 0 + +/* The library once used -1 as a generic error return value on numerous places + through the code, which subsequently was converted to + LIBSSH2_ERROR_SOCKET_NONE uses over time. As this is a generic error code, + the goal is to never ever return this code but instead make sure that a + more accurate and descriptive error code is used. */ +#define LIBSSH2_ERROR_SOCKET_NONE -1 + +#define LIBSSH2_ERROR_BANNER_RECV -2 +#define LIBSSH2_ERROR_BANNER_SEND -3 +#define LIBSSH2_ERROR_INVALID_MAC -4 +#define LIBSSH2_ERROR_KEX_FAILURE -5 +#define LIBSSH2_ERROR_ALLOC -6 +#define LIBSSH2_ERROR_SOCKET_SEND -7 +#define LIBSSH2_ERROR_KEY_EXCHANGE_FAILURE -8 +#define LIBSSH2_ERROR_TIMEOUT -9 +#define LIBSSH2_ERROR_HOSTKEY_INIT -10 +#define LIBSSH2_ERROR_HOSTKEY_SIGN -11 +#define LIBSSH2_ERROR_DECRYPT -12 +#define LIBSSH2_ERROR_SOCKET_DISCONNECT -13 +#define LIBSSH2_ERROR_PROTO -14 +#define LIBSSH2_ERROR_PASSWORD_EXPIRED -15 +#define LIBSSH2_ERROR_FILE -16 +#define LIBSSH2_ERROR_METHOD_NONE -17 +#define LIBSSH2_ERROR_AUTHENTICATION_FAILED -18 +#define LIBSSH2_ERROR_PUBLICKEY_UNRECOGNIZED \ + LIBSSH2_ERROR_AUTHENTICATION_FAILED +#define LIBSSH2_ERROR_PUBLICKEY_UNVERIFIED -19 +#define LIBSSH2_ERROR_CHANNEL_OUTOFORDER -20 +#define LIBSSH2_ERROR_CHANNEL_FAILURE -21 +#define LIBSSH2_ERROR_CHANNEL_REQUEST_DENIED -22 +#define LIBSSH2_ERROR_CHANNEL_UNKNOWN -23 +#define LIBSSH2_ERROR_CHANNEL_WINDOW_EXCEEDED -24 +#define LIBSSH2_ERROR_CHANNEL_PACKET_EXCEEDED -25 +#define LIBSSH2_ERROR_CHANNEL_CLOSED -26 +#define LIBSSH2_ERROR_CHANNEL_EOF_SENT -27 +#define LIBSSH2_ERROR_SCP_PROTOCOL -28 +#define LIBSSH2_ERROR_ZLIB -29 +#define LIBSSH2_ERROR_SOCKET_TIMEOUT -30 +#define LIBSSH2_ERROR_SFTP_PROTOCOL -31 +#define LIBSSH2_ERROR_REQUEST_DENIED -32 +#define LIBSSH2_ERROR_METHOD_NOT_SUPPORTED -33 +#define LIBSSH2_ERROR_INVAL -34 +#define LIBSSH2_ERROR_INVALID_POLL_TYPE -35 +#define LIBSSH2_ERROR_PUBLICKEY_PROTOCOL -36 +#define LIBSSH2_ERROR_EAGAIN -37 +#define LIBSSH2_ERROR_BUFFER_TOO_SMALL -38 +#define LIBSSH2_ERROR_BAD_USE -39 +#define LIBSSH2_ERROR_COMPRESS -40 +#define LIBSSH2_ERROR_OUT_OF_BOUNDARY -41 +#define LIBSSH2_ERROR_AGENT_PROTOCOL -42 +#define LIBSSH2_ERROR_SOCKET_RECV -43 +#define LIBSSH2_ERROR_ENCRYPT -44 +#define LIBSSH2_ERROR_BAD_SOCKET -45 +#define LIBSSH2_ERROR_KNOWN_HOSTS -46 +#define LIBSSH2_ERROR_CHANNEL_WINDOW_FULL -47 +#define LIBSSH2_ERROR_KEYFILE_AUTH_FAILED -48 +#define LIBSSH2_ERROR_RANDGEN -49 +#define LIBSSH2_ERROR_MISSING_USERAUTH_BANNER -50 +#define LIBSSH2_ERROR_ALGO_UNSUPPORTED -51 +#define LIBSSH2_ERROR_MAC_FAILURE -52 +#define LIBSSH2_ERROR_HASH_INIT -53 +#define LIBSSH2_ERROR_HASH_CALC -54 + +/* this is a define to provide the old (<= 1.2.7) name */ +#define LIBSSH2_ERROR_BANNER_NONE LIBSSH2_ERROR_BANNER_RECV + +/* Global API */ +#define LIBSSH2_INIT_NO_CRYPTO 0x0001 + +/* + * libssh2_init() + * + * Initialize the libssh2 functions. This typically initialize the + * crypto library. It uses a global state, and is not thread safe -- + * you must make sure this function is not called concurrently. + * + * Flags can be: + * 0: Normal initialize + * LIBSSH2_INIT_NO_CRYPTO: Do not initialize the crypto library (ie. + * OPENSSL_add_cipher_algoritms() for OpenSSL + * + * Returns 0 if succeeded, or a negative value for error. + */ +LIBSSH2_API int libssh2_init(int flags); + +/* + * libssh2_exit() + * + * Exit the libssh2 functions and free's all memory used internal. + */ +LIBSSH2_API void libssh2_exit(void); + +/* + * libssh2_free() + * + * Deallocate memory allocated by earlier call to libssh2 functions. + */ +LIBSSH2_API void libssh2_free(LIBSSH2_SESSION *session, void *ptr); + +/* + * libssh2_session_supported_algs() + * + * Fills algs with a list of supported acryptographic algorithms. Returns a + * non-negative number (number of supported algorithms) on success or a + * negative number (an error code) on failure. + * + * NOTE: on success, algs must be deallocated (by calling libssh2_free) when + * not needed anymore + */ +LIBSSH2_API int libssh2_session_supported_algs(LIBSSH2_SESSION* session, + int method_type, + const char ***algs); + +/* Session API */ +LIBSSH2_API LIBSSH2_SESSION * +libssh2_session_init_ex(LIBSSH2_ALLOC_FUNC((*my_alloc)), + LIBSSH2_FREE_FUNC((*my_free)), + LIBSSH2_REALLOC_FUNC((*my_realloc)), void *abstract); +#define libssh2_session_init() libssh2_session_init_ex(NULL, NULL, NULL, NULL) + +LIBSSH2_API void **libssh2_session_abstract(LIBSSH2_SESSION *session); + +typedef void (libssh2_cb_generic)(void); + +LIBSSH2_API libssh2_cb_generic * +libssh2_session_callback_set2(LIBSSH2_SESSION *session, int cbtype, + libssh2_cb_generic *callback); + +LIBSSH2_DEPRECATED(1.11.1, "Use libssh2_session_callback_set2()") +LIBSSH2_API void *libssh2_session_callback_set(LIBSSH2_SESSION *session, + int cbtype, void *callback); +LIBSSH2_API int libssh2_session_banner_set(LIBSSH2_SESSION *session, + const char *banner); +#ifndef LIBSSH2_NO_DEPRECATED +LIBSSH2_DEPRECATED(1.4.0, "Use libssh2_session_banner_set()") +LIBSSH2_API int libssh2_banner_set(LIBSSH2_SESSION *session, + const char *banner); + +LIBSSH2_DEPRECATED(1.2.8, "Use libssh2_session_handshake()") +LIBSSH2_API int libssh2_session_startup(LIBSSH2_SESSION *session, int sock); +#endif +LIBSSH2_API int libssh2_session_handshake(LIBSSH2_SESSION *session, + libssh2_socket_t sock); +LIBSSH2_API int libssh2_session_disconnect_ex(LIBSSH2_SESSION *session, + int reason, + const char *description, + const char *lang); +#define libssh2_session_disconnect(session, description) \ + libssh2_session_disconnect_ex((session), SSH_DISCONNECT_BY_APPLICATION, \ + (description), "") + +LIBSSH2_API int libssh2_session_free(LIBSSH2_SESSION *session); + +LIBSSH2_API const char *libssh2_hostkey_hash(LIBSSH2_SESSION *session, + int hash_type); + +LIBSSH2_API const char *libssh2_session_hostkey(LIBSSH2_SESSION *session, + size_t *len, int *type); + +LIBSSH2_API int libssh2_session_method_pref(LIBSSH2_SESSION *session, + int method_type, + const char *prefs); +LIBSSH2_API const char *libssh2_session_methods(LIBSSH2_SESSION *session, + int method_type); +LIBSSH2_API int libssh2_session_last_error(LIBSSH2_SESSION *session, + char **errmsg, + int *errmsg_len, int want_buf); +LIBSSH2_API int libssh2_session_last_errno(LIBSSH2_SESSION *session); +LIBSSH2_API int libssh2_session_set_last_error(LIBSSH2_SESSION* session, + int errcode, + const char *errmsg); +LIBSSH2_API int libssh2_session_block_directions(LIBSSH2_SESSION *session); + +LIBSSH2_API int libssh2_session_flag(LIBSSH2_SESSION *session, int flag, + int value); +LIBSSH2_API const char *libssh2_session_banner_get(LIBSSH2_SESSION *session); + +/* Userauth API */ +LIBSSH2_API char *libssh2_userauth_list(LIBSSH2_SESSION *session, + const char *username, + unsigned int username_len); +LIBSSH2_API int libssh2_userauth_banner(LIBSSH2_SESSION *session, + char **banner); +LIBSSH2_API int libssh2_userauth_authenticated(LIBSSH2_SESSION *session); + +LIBSSH2_API int +libssh2_userauth_password_ex(LIBSSH2_SESSION *session, + const char *username, + unsigned int username_len, + const char *password, + unsigned int password_len, + LIBSSH2_PASSWD_CHANGEREQ_FUNC + ((*passwd_change_cb))); + +#define libssh2_userauth_password(session, username, password) \ + libssh2_userauth_password_ex((session), (username), \ + (unsigned int)strlen(username), \ + (password), (unsigned int)strlen(password), \ + NULL) + +LIBSSH2_API int +libssh2_userauth_publickey_fromfile_ex(LIBSSH2_SESSION *session, + const char *username, + unsigned int username_len, + const char *publickey, + const char *privatekey, + const char *passphrase); + +#define libssh2_userauth_publickey_fromfile(session, username, publickey, \ + privatekey, passphrase) \ + libssh2_userauth_publickey_fromfile_ex((session), (username), \ + (unsigned int)strlen(username), \ + (publickey), \ + (privatekey), (passphrase)) + +LIBSSH2_API int +libssh2_userauth_publickey(LIBSSH2_SESSION *session, + const char *username, + const unsigned char *pubkeydata, + size_t pubkeydata_len, + LIBSSH2_USERAUTH_PUBLICKEY_SIGN_FUNC + ((*sign_callback)), + void **abstract); + +LIBSSH2_API int +libssh2_userauth_hostbased_fromfile_ex(LIBSSH2_SESSION *session, + const char *username, + unsigned int username_len, + const char *publickey, + const char *privatekey, + const char *passphrase, + const char *hostname, + unsigned int hostname_len, + const char *local_username, + unsigned int local_username_len); + +#define libssh2_userauth_hostbased_fromfile(session, username, publickey, \ + privatekey, passphrase, hostname) \ + libssh2_userauth_hostbased_fromfile_ex((session), (username), \ + (unsigned int)strlen(username), \ + (publickey), \ + (privatekey), (passphrase), \ + (hostname), \ + (unsigned int)strlen(hostname), \ + (username), \ + (unsigned int)strlen(username)) + +LIBSSH2_API int +libssh2_userauth_publickey_frommemory(LIBSSH2_SESSION *session, + const char *username, + size_t username_len, + const char *publickeyfiledata, + size_t publickeyfiledata_len, + const char *privatekeyfiledata, + size_t privatekeyfiledata_len, + const char *passphrase); + +/* + * response_callback is provided with filled by library prompts array, + * but client must allocate and fill individual responses. Responses + * array is already allocated. Responses data will be freed by libssh2 + * after callback return, but before subsequent callback invocation. + */ +LIBSSH2_API int +libssh2_userauth_keyboard_interactive_ex(LIBSSH2_SESSION* session, + const char *username, + unsigned int username_len, + LIBSSH2_USERAUTH_KBDINT_RESPONSE_FUNC + ((*response_callback))); + +#define libssh2_userauth_keyboard_interactive(session, username, \ + response_callback) \ + libssh2_userauth_keyboard_interactive_ex((session), (username), \ + (unsigned int)strlen(username), \ + (response_callback)) + +LIBSSH2_API int +libssh2_userauth_publickey_sk(LIBSSH2_SESSION *session, + const char *username, + size_t username_len, + const unsigned char *pubkeydata, + size_t pubkeydata_len, + const char *privatekeydata, + size_t privatekeydata_len, + const char *passphrase, + LIBSSH2_USERAUTH_SK_SIGN_FUNC + ((*sign_callback)), + void **abstract); + +LIBSSH2_API int libssh2_poll(LIBSSH2_POLLFD *fds, unsigned int nfds, + long timeout); + +/* Channel API */ +#define LIBSSH2_CHANNEL_WINDOW_DEFAULT (2*1024*1024) +#define LIBSSH2_CHANNEL_PACKET_DEFAULT 32768 +#define LIBSSH2_CHANNEL_MINADJUST 1024 + +/* Extended Data Handling */ +#define LIBSSH2_CHANNEL_EXTENDED_DATA_NORMAL 0 +#define LIBSSH2_CHANNEL_EXTENDED_DATA_IGNORE 1 +#define LIBSSH2_CHANNEL_EXTENDED_DATA_MERGE 2 + +#define SSH_EXTENDED_DATA_STDERR 1 + +/* Returned by any function that would block during a read/write operation */ +#define LIBSSH2CHANNEL_EAGAIN LIBSSH2_ERROR_EAGAIN + +LIBSSH2_API LIBSSH2_CHANNEL * +libssh2_channel_open_ex(LIBSSH2_SESSION *session, const char *channel_type, + unsigned int channel_type_len, + unsigned int window_size, unsigned int packet_size, + const char *message, unsigned int message_len); + +#define libssh2_channel_open_session(session) \ + libssh2_channel_open_ex((session), "session", sizeof("session") - 1, \ + LIBSSH2_CHANNEL_WINDOW_DEFAULT, \ + LIBSSH2_CHANNEL_PACKET_DEFAULT, NULL, 0) + +LIBSSH2_API LIBSSH2_CHANNEL * +libssh2_channel_direct_tcpip_ex(LIBSSH2_SESSION *session, const char *host, + int port, const char *shost, int sport); +#define libssh2_channel_direct_tcpip(session, host, port) \ + libssh2_channel_direct_tcpip_ex((session), (host), (port), "127.0.0.1", 22) + +LIBSSH2_API LIBSSH2_CHANNEL * +libssh2_channel_direct_streamlocal_ex(LIBSSH2_SESSION * session, + const char *socket_path, + const char *shost, int sport); + +LIBSSH2_API LIBSSH2_LISTENER * +libssh2_channel_forward_listen_ex(LIBSSH2_SESSION *session, const char *host, + int port, int *bound_port, + int queue_maxsize); +#define libssh2_channel_forward_listen(session, port) \ + libssh2_channel_forward_listen_ex((session), NULL, (port), NULL, 16) + +LIBSSH2_API int libssh2_channel_forward_cancel(LIBSSH2_LISTENER *listener); + +LIBSSH2_API LIBSSH2_CHANNEL * +libssh2_channel_forward_accept(LIBSSH2_LISTENER *listener); + +LIBSSH2_API int libssh2_channel_setenv_ex(LIBSSH2_CHANNEL *channel, + const char *varname, + unsigned int varname_len, + const char *value, + unsigned int value_len); + +#define libssh2_channel_setenv(channel, varname, value) \ + libssh2_channel_setenv_ex((channel), (varname), \ + (unsigned int)strlen(varname), (value), \ + (unsigned int)strlen(value)) + +LIBSSH2_API int libssh2_channel_request_auth_agent(LIBSSH2_CHANNEL *channel); + +LIBSSH2_API int libssh2_channel_request_pty_ex(LIBSSH2_CHANNEL *channel, + const char *term, + unsigned int term_len, + const char *modes, + unsigned int modes_len, + int width, int height, + int width_px, int height_px); +#define libssh2_channel_request_pty(channel, term) \ + libssh2_channel_request_pty_ex((channel), (term), \ + (unsigned int)strlen(term), \ + NULL, 0, \ + LIBSSH2_TERM_WIDTH, \ + LIBSSH2_TERM_HEIGHT, \ + LIBSSH2_TERM_WIDTH_PX, \ + LIBSSH2_TERM_HEIGHT_PX) + +LIBSSH2_API int libssh2_channel_request_pty_size_ex(LIBSSH2_CHANNEL *channel, + int width, int height, + int width_px, + int height_px); +#define libssh2_channel_request_pty_size(channel, width, height) \ + libssh2_channel_request_pty_size_ex((channel), (width), (height), 0, 0) + +LIBSSH2_API int libssh2_channel_x11_req_ex(LIBSSH2_CHANNEL *channel, + int single_connection, + const char *auth_proto, + const char *auth_cookie, + int screen_number); +#define libssh2_channel_x11_req(channel, screen_number) \ + libssh2_channel_x11_req_ex((channel), 0, NULL, NULL, (screen_number)) + +LIBSSH2_API int libssh2_channel_signal_ex(LIBSSH2_CHANNEL *channel, + const char *signame, + size_t signame_len); +#define libssh2_channel_signal(channel, signame) \ + libssh2_channel_signal_ex((channel), signame, strlen(signame)) + +LIBSSH2_API int libssh2_channel_process_startup(LIBSSH2_CHANNEL *channel, + const char *request, + unsigned int request_len, + const char *message, + unsigned int message_len); +#define libssh2_channel_shell(channel) \ + libssh2_channel_process_startup((channel), "shell", sizeof("shell") - 1, \ + NULL, 0) +#define libssh2_channel_exec(channel, command) \ + libssh2_channel_process_startup((channel), "exec", sizeof("exec") - 1, \ + (command), (unsigned int)strlen(command)) +#define libssh2_channel_subsystem(channel, subsystem) \ + libssh2_channel_process_startup((channel), "subsystem", \ + sizeof("subsystem") - 1, (subsystem), \ + (unsigned int)strlen(subsystem)) + +LIBSSH2_API ssize_t libssh2_channel_read_ex(LIBSSH2_CHANNEL *channel, + int stream_id, char *buf, + size_t buflen); +#define libssh2_channel_read(channel, buf, buflen) \ + libssh2_channel_read_ex((channel), 0, \ + (buf), (buflen)) +#define libssh2_channel_read_stderr(channel, buf, buflen) \ + libssh2_channel_read_ex((channel), SSH_EXTENDED_DATA_STDERR, \ + (buf), (buflen)) + +LIBSSH2_API int libssh2_poll_channel_read(LIBSSH2_CHANNEL *channel, + int extended); + +LIBSSH2_API unsigned long +libssh2_channel_window_read_ex(LIBSSH2_CHANNEL *channel, + unsigned long *read_avail, + unsigned long *window_size_initial); +#define libssh2_channel_window_read(channel) \ + libssh2_channel_window_read_ex((channel), NULL, NULL) + +#ifndef LIBSSH2_NO_DEPRECATED +LIBSSH2_DEPRECATED(1.1.0, "Use libssh2_channel_receive_window_adjust2()") +LIBSSH2_API unsigned long +libssh2_channel_receive_window_adjust(LIBSSH2_CHANNEL *channel, + unsigned long adjustment, + unsigned char force); +#endif +LIBSSH2_API int +libssh2_channel_receive_window_adjust2(LIBSSH2_CHANNEL *channel, + unsigned long adjustment, + unsigned char force, + unsigned int *storewindow); + +LIBSSH2_API ssize_t libssh2_channel_write_ex(LIBSSH2_CHANNEL *channel, + int stream_id, const char *buf, + size_t buflen); + +#define libssh2_channel_write(channel, buf, buflen) \ + libssh2_channel_write_ex((channel), 0, \ + (buf), (buflen)) +#define libssh2_channel_write_stderr(channel, buf, buflen) \ + libssh2_channel_write_ex((channel), SSH_EXTENDED_DATA_STDERR, \ + (buf), (buflen)) + +LIBSSH2_API unsigned long +libssh2_channel_window_write_ex(LIBSSH2_CHANNEL *channel, + unsigned long *window_size_initial); +#define libssh2_channel_window_write(channel) \ + libssh2_channel_window_write_ex((channel), NULL) + +LIBSSH2_API void libssh2_session_set_blocking(LIBSSH2_SESSION* session, + int blocking); +LIBSSH2_API int libssh2_session_get_blocking(LIBSSH2_SESSION* session); + +LIBSSH2_API void libssh2_channel_set_blocking(LIBSSH2_CHANNEL *channel, + int blocking); + +LIBSSH2_API void libssh2_session_set_timeout(LIBSSH2_SESSION* session, + long timeout); +LIBSSH2_API long libssh2_session_get_timeout(LIBSSH2_SESSION* session); + +LIBSSH2_API void libssh2_session_set_read_timeout(LIBSSH2_SESSION* session, + long timeout); +LIBSSH2_API long libssh2_session_get_read_timeout(LIBSSH2_SESSION* session); + +#ifndef LIBSSH2_NO_DEPRECATED +LIBSSH2_DEPRECATED(1.1.0, "libssh2_channel_handle_extended_data2()") +LIBSSH2_API void libssh2_channel_handle_extended_data(LIBSSH2_CHANNEL *channel, + int ignore_mode); +#endif +LIBSSH2_API int libssh2_channel_handle_extended_data2(LIBSSH2_CHANNEL *channel, + int ignore_mode); + +#ifndef LIBSSH2_NO_DEPRECATED +/* libssh2_channel_ignore_extended_data() is defined below for BC with version + * 0.1 + * + * Future uses should use libssh2_channel_handle_extended_data() directly if + * LIBSSH2_CHANNEL_EXTENDED_DATA_MERGE is passed, extended data will be read + * (FIFO) from the standard data channel + */ +/* DEPRECATED since 0.3.0. Use libssh2_channel_handle_extended_data2(). */ +#define libssh2_channel_ignore_extended_data(channel, ignore) \ + libssh2_channel_handle_extended_data((channel), (ignore) ? \ + LIBSSH2_CHANNEL_EXTENDED_DATA_IGNORE : \ + LIBSSH2_CHANNEL_EXTENDED_DATA_NORMAL) +#endif + +#define LIBSSH2_CHANNEL_FLUSH_EXTENDED_DATA -1 +#define LIBSSH2_CHANNEL_FLUSH_ALL -2 +LIBSSH2_API int libssh2_channel_flush_ex(LIBSSH2_CHANNEL *channel, + int streamid); +#define libssh2_channel_flush(channel) libssh2_channel_flush_ex((channel), 0) +#define libssh2_channel_flush_stderr(channel) \ + libssh2_channel_flush_ex((channel), SSH_EXTENDED_DATA_STDERR) + +LIBSSH2_API int libssh2_channel_get_exit_status(LIBSSH2_CHANNEL* channel); +LIBSSH2_API int libssh2_channel_get_exit_signal(LIBSSH2_CHANNEL* channel, + char **exitsignal, + size_t *exitsignal_len, + char **errmsg, + size_t *errmsg_len, + char **langtag, + size_t *langtag_len); +LIBSSH2_API int libssh2_channel_send_eof(LIBSSH2_CHANNEL *channel); +LIBSSH2_API int libssh2_channel_eof(LIBSSH2_CHANNEL *channel); +LIBSSH2_API int libssh2_channel_wait_eof(LIBSSH2_CHANNEL *channel); +LIBSSH2_API int libssh2_channel_close(LIBSSH2_CHANNEL *channel); +LIBSSH2_API int libssh2_channel_wait_closed(LIBSSH2_CHANNEL *channel); +LIBSSH2_API int libssh2_channel_free(LIBSSH2_CHANNEL *channel); + +#ifndef LIBSSH2_NO_DEPRECATED +LIBSSH2_DEPRECATED(1.7.0, "Use libssh2_scp_recv2()") +LIBSSH2_API LIBSSH2_CHANNEL *libssh2_scp_recv(LIBSSH2_SESSION *session, + const char *path, + struct stat *sb); +#endif +/* Use libssh2_scp_recv2() for large (> 2GB) file support on windows */ +LIBSSH2_API LIBSSH2_CHANNEL *libssh2_scp_recv2(LIBSSH2_SESSION *session, + const char *path, + libssh2_struct_stat *sb); +LIBSSH2_API LIBSSH2_CHANNEL *libssh2_scp_send_ex(LIBSSH2_SESSION *session, + const char *path, int mode, + size_t size, long mtime, + long atime); +LIBSSH2_API LIBSSH2_CHANNEL * +libssh2_scp_send64(LIBSSH2_SESSION *session, const char *path, int mode, + libssh2_int64_t size, time_t mtime, time_t atime); + +#define libssh2_scp_send(session, path, mode, size) \ + libssh2_scp_send_ex((session), (path), (mode), (size), 0, 0) + +/* DEPRECATED */ +LIBSSH2_API int libssh2_base64_decode(LIBSSH2_SESSION *session, char **dest, + unsigned int *dest_len, + const char *src, unsigned int src_len); + +LIBSSH2_API +const char *libssh2_version(int req_version_num); + +typedef enum { + libssh2_no_crypto = 0, + libssh2_openssl, + libssh2_gcrypt, + libssh2_mbedtls, + libssh2_wincng, + libssh2_os400qc3 +} libssh2_crypto_engine_t; + +LIBSSH2_API +libssh2_crypto_engine_t libssh2_crypto_engine(void); + +#define HAVE_LIBSSH2_KNOWNHOST_API 0x010101 /* since 1.1.1 */ +#define HAVE_LIBSSH2_VERSION_API 0x010100 /* libssh2_version since 1.1 */ +#define HAVE_LIBSSH2_CRYPTOENGINE_API 0x011100 /* libssh2_crypto_engine + since 1.11 */ + +struct libssh2_knownhost { + unsigned int magic; /* magic stored by the library */ + void *node; /* handle to the internal representation of this host */ + char *name; /* this is NULL if no plain text host name exists */ + char *key; /* key in base64/printable format */ + int typemask; +}; + +/* + * libssh2_knownhost_init() + * + * Init a collection of known hosts. Returns the pointer to a collection. + * + */ +LIBSSH2_API LIBSSH2_KNOWNHOSTS * +libssh2_knownhost_init(LIBSSH2_SESSION *session); + +/* + * libssh2_knownhost_add() + * + * Add a host and its associated key to the collection of known hosts. + * + * The 'type' argument specifies on what format the given host and keys are: + * + * plain - ascii "hostname.domain.tld" + * sha1 - SHA1( ) base64-encoded! + * custom - another hash + * + * If 'sha1' is selected as type, the salt must be provided to the salt + * argument. This too base64 encoded. + * + * The SHA-1 hash is what OpenSSH can be told to use in known_hosts files. If + * a custom type is used, salt is ignored and you must provide the host + * pre-hashed when checking for it in the libssh2_knownhost_check() function. + * + * The keylen parameter may be omitted (zero) if the key is provided as a + * NULL-terminated base64-encoded string. + */ + +/* host format (2 bits) */ +#define LIBSSH2_KNOWNHOST_TYPE_MASK 0xffff +#define LIBSSH2_KNOWNHOST_TYPE_PLAIN 1 +#define LIBSSH2_KNOWNHOST_TYPE_SHA1 2 /* always base64 encoded */ +#define LIBSSH2_KNOWNHOST_TYPE_CUSTOM 3 + +/* key format (2 bits) */ +#define LIBSSH2_KNOWNHOST_KEYENC_MASK (3<<16) +#define LIBSSH2_KNOWNHOST_KEYENC_RAW (1<<16) +#define LIBSSH2_KNOWNHOST_KEYENC_BASE64 (2<<16) + +/* type of key (4 bits) */ +#define LIBSSH2_KNOWNHOST_KEY_MASK (15<<18) +#define LIBSSH2_KNOWNHOST_KEY_SHIFT 18 +#define LIBSSH2_KNOWNHOST_KEY_RSA1 (1<<18) +#define LIBSSH2_KNOWNHOST_KEY_SSHRSA (2<<18) +#define LIBSSH2_KNOWNHOST_KEY_SSHDSS (3<<18) /* deprecated */ +#define LIBSSH2_KNOWNHOST_KEY_ECDSA_256 (4<<18) +#define LIBSSH2_KNOWNHOST_KEY_ECDSA_384 (5<<18) +#define LIBSSH2_KNOWNHOST_KEY_ECDSA_521 (6<<18) +#define LIBSSH2_KNOWNHOST_KEY_ED25519 (7<<18) +#define LIBSSH2_KNOWNHOST_KEY_UNKNOWN (15<<18) + +LIBSSH2_API int +libssh2_knownhost_add(LIBSSH2_KNOWNHOSTS *hosts, + const char *host, + const char *salt, + const char *key, size_t keylen, int typemask, + struct libssh2_knownhost **store); + +/* + * libssh2_knownhost_addc() + * + * Add a host and its associated key to the collection of known hosts. + * + * Takes a comment argument that may be NULL. A NULL comment indicates + * there is no comment and the entry will end directly after the key + * when written out to a file. An empty string "" comment will indicate an + * empty comment which will cause a single space to be written after the key. + * + * The 'type' argument specifies on what format the given host and keys are: + * + * plain - ascii "hostname.domain.tld" + * sha1 - SHA1( ) base64-encoded! + * custom - another hash + * + * If 'sha1' is selected as type, the salt must be provided to the salt + * argument. This too base64 encoded. + * + * The SHA-1 hash is what OpenSSH can be told to use in known_hosts files. + * If a custom type is used, salt is ignored and you must provide the host + * pre-hashed when checking for it in the libssh2_knownhost_check() function. + * + * The keylen parameter may be omitted (zero) if the key is provided as a + * NULL-terminated base64-encoded string. + */ + +LIBSSH2_API int +libssh2_knownhost_addc(LIBSSH2_KNOWNHOSTS *hosts, + const char *host, + const char *salt, + const char *key, size_t keylen, + const char *comment, size_t commentlen, int typemask, + struct libssh2_knownhost **store); + +/* + * libssh2_knownhost_check() + * + * Check a host and its associated key against the collection of known hosts. + * + * The type is the type/format of the given host name. + * + * plain - ascii "hostname.domain.tld" + * custom - prehashed base64 encoded. Note that this cannot use any salts. + * + * + * 'knownhost' may be set to NULL if you don't care about that info. + * + * Returns: + * + * LIBSSH2_KNOWNHOST_CHECK_* values, see below + * + */ + +#define LIBSSH2_KNOWNHOST_CHECK_MATCH 0 +#define LIBSSH2_KNOWNHOST_CHECK_MISMATCH 1 +#define LIBSSH2_KNOWNHOST_CHECK_NOTFOUND 2 +#define LIBSSH2_KNOWNHOST_CHECK_FAILURE 3 + +LIBSSH2_API int +libssh2_knownhost_check(LIBSSH2_KNOWNHOSTS *hosts, + const char *host, const char *key, size_t keylen, + int typemask, + struct libssh2_knownhost **knownhost); + +/* this function is identital to the above one, but also takes a port + argument that allows libssh2 to do a better check */ +LIBSSH2_API int +libssh2_knownhost_checkp(LIBSSH2_KNOWNHOSTS *hosts, + const char *host, int port, + const char *key, size_t keylen, + int typemask, + struct libssh2_knownhost **knownhost); + +/* + * libssh2_knownhost_del() + * + * Remove a host from the collection of known hosts. The 'entry' struct is + * retrieved by a call to libssh2_knownhost_check(). + * + */ +LIBSSH2_API int +libssh2_knownhost_del(LIBSSH2_KNOWNHOSTS *hosts, + struct libssh2_knownhost *entry); + +/* + * libssh2_knownhost_free() + * + * Free an entire collection of known hosts. + * + */ +LIBSSH2_API void +libssh2_knownhost_free(LIBSSH2_KNOWNHOSTS *hosts); + +/* + * libssh2_knownhost_readline() + * + * Pass in a line of a file of 'type'. It makes libssh2 read this line. + * + * LIBSSH2_KNOWNHOST_FILE_OPENSSH is the only supported type. + * + */ +LIBSSH2_API int +libssh2_knownhost_readline(LIBSSH2_KNOWNHOSTS *hosts, + const char *line, size_t len, int type); + +/* + * libssh2_knownhost_readfile() + * + * Add hosts+key pairs from a given file. + * + * Returns a negative value for error or number of successfully added hosts. + * + * This implementation currently only knows one 'type' (openssh), all others + * are reserved for future use. + */ + +#define LIBSSH2_KNOWNHOST_FILE_OPENSSH 1 + +LIBSSH2_API int +libssh2_knownhost_readfile(LIBSSH2_KNOWNHOSTS *hosts, + const char *filename, int type); + +/* + * libssh2_knownhost_writeline() + * + * Ask libssh2 to convert a known host to an output line for storage. + * + * Note that this function returns LIBSSH2_ERROR_BUFFER_TOO_SMALL if the given + * output buffer is too small to hold the desired output. + * + * This implementation currently only knows one 'type' (openssh), all others + * are reserved for future use. + * + */ +LIBSSH2_API int +libssh2_knownhost_writeline(LIBSSH2_KNOWNHOSTS *hosts, + struct libssh2_knownhost *known, + char *buffer, size_t buflen, + size_t *outlen, /* the amount of written data */ + int type); + +/* + * libssh2_knownhost_writefile() + * + * Write hosts+key pairs to a given file. + * + * This implementation currently only knows one 'type' (openssh), all others + * are reserved for future use. + */ + +LIBSSH2_API int +libssh2_knownhost_writefile(LIBSSH2_KNOWNHOSTS *hosts, + const char *filename, int type); + +/* + * libssh2_knownhost_get() + * + * Traverse the internal list of known hosts. Pass NULL to 'prev' to get + * the first one. Or pass a pointer to the previously returned one to get the + * next. + * + * Returns: + * 0 if a fine host was stored in 'store' + * 1 if end of hosts + * [negative] on errors + */ +LIBSSH2_API int +libssh2_knownhost_get(LIBSSH2_KNOWNHOSTS *hosts, + struct libssh2_knownhost **store, + struct libssh2_knownhost *prev); + +#define HAVE_LIBSSH2_AGENT_API 0x010202 /* since 1.2.2 */ + +struct libssh2_agent_publickey { + unsigned int magic; /* magic stored by the library */ + void *node; /* handle to the internal representation of key */ + unsigned char *blob; /* public key blob */ + size_t blob_len; /* length of the public key blob */ + char *comment; /* comment in printable format */ +}; + +/* + * libssh2_agent_init() + * + * Init an ssh-agent handle. Returns the pointer to the handle. + * + */ +LIBSSH2_API LIBSSH2_AGENT * +libssh2_agent_init(LIBSSH2_SESSION *session); + +/* + * libssh2_agent_connect() + * + * Connect to an ssh-agent. + * + * Returns 0 if succeeded, or a negative value for error. + */ +LIBSSH2_API int +libssh2_agent_connect(LIBSSH2_AGENT *agent); + +/* + * libssh2_agent_list_identities() + * + * Request an ssh-agent to list identities. + * + * Returns 0 if succeeded, or a negative value for error. + */ +LIBSSH2_API int +libssh2_agent_list_identities(LIBSSH2_AGENT *agent); + +/* + * libssh2_agent_get_identity() + * + * Traverse the internal list of public keys. Pass NULL to 'prev' to get + * the first one. Or pass a pointer to the previously returned one to get the + * next. + * + * Returns: + * 0 if a fine public key was stored in 'store' + * 1 if end of public keys + * [negative] on errors + */ +LIBSSH2_API int +libssh2_agent_get_identity(LIBSSH2_AGENT *agent, + struct libssh2_agent_publickey **store, + struct libssh2_agent_publickey *prev); + +/* + * libssh2_agent_userauth() + * + * Do publickey user authentication with the help of ssh-agent. + * + * Returns 0 if succeeded, or a negative value for error. + */ +LIBSSH2_API int +libssh2_agent_userauth(LIBSSH2_AGENT *agent, + const char *username, + struct libssh2_agent_publickey *identity); + +/* + * libssh2_agent_sign() + * + * Sign a payload using a system-installed ssh-agent. + * + * Returns 0 if succeeded, or a negative value for error. + */ +LIBSSH2_API int +libssh2_agent_sign(LIBSSH2_AGENT *agent, + struct libssh2_agent_publickey *identity, + unsigned char **sig, + size_t *s_len, + const unsigned char *data, + size_t d_len, + const char *method, + unsigned int method_len); + +/* + * libssh2_agent_disconnect() + * + * Close a connection to an ssh-agent. + * + * Returns 0 if succeeded, or a negative value for error. + */ +LIBSSH2_API int +libssh2_agent_disconnect(LIBSSH2_AGENT *agent); + +/* + * libssh2_agent_free() + * + * Free an ssh-agent handle. This function also frees the internal + * collection of public keys. + */ +LIBSSH2_API void +libssh2_agent_free(LIBSSH2_AGENT *agent); + +/* + * libssh2_agent_set_identity_path() + * + * Allows a custom agent identity socket path beyond SSH_AUTH_SOCK env + * + */ +LIBSSH2_API void +libssh2_agent_set_identity_path(LIBSSH2_AGENT *agent, + const char *path); + +/* + * libssh2_agent_get_identity_path() + * + * Returns the custom agent identity socket path if set + * + */ +LIBSSH2_API const char * +libssh2_agent_get_identity_path(LIBSSH2_AGENT *agent); + +/* + * libssh2_keepalive_config() + * + * Set how often keepalive messages should be sent. WANT_REPLY + * indicates whether the keepalive messages should request a response + * from the server. INTERVAL is number of seconds that can pass + * without any I/O, use 0 (the default) to disable keepalives. To + * avoid some busy-loop corner-cases, if you specify an interval of 1 + * it will be treated as 2. + * + * Note that non-blocking applications are responsible for sending the + * keepalive messages using libssh2_keepalive_send(). + */ +LIBSSH2_API void libssh2_keepalive_config(LIBSSH2_SESSION *session, + int want_reply, + unsigned int interval); + +/* + * libssh2_keepalive_send() + * + * Send a keepalive message if needed. SECONDS_TO_NEXT indicates how + * many seconds you can sleep after this call before you need to call + * it again. Returns 0 on success, or LIBSSH2_ERROR_SOCKET_SEND on + * I/O errors. + */ +LIBSSH2_API int libssh2_keepalive_send(LIBSSH2_SESSION *session, + int *seconds_to_next); + +/* NOTE NOTE NOTE + libssh2_trace() has no function in builds that aren't built with debug + enabled + */ +LIBSSH2_API int libssh2_trace(LIBSSH2_SESSION *session, int bitmask); +#define LIBSSH2_TRACE_TRANS (1<<1) +#define LIBSSH2_TRACE_KEX (1<<2) +#define LIBSSH2_TRACE_AUTH (1<<3) +#define LIBSSH2_TRACE_CONN (1<<4) +#define LIBSSH2_TRACE_SCP (1<<5) +#define LIBSSH2_TRACE_SFTP (1<<6) +#define LIBSSH2_TRACE_ERROR (1<<7) +#define LIBSSH2_TRACE_PUBLICKEY (1<<8) +#define LIBSSH2_TRACE_SOCKET (1<<9) + +typedef void (*libssh2_trace_handler_func)(LIBSSH2_SESSION*, + void *, + const char *, + size_t); +LIBSSH2_API int libssh2_trace_sethandler(LIBSSH2_SESSION *session, + void *context, + libssh2_trace_handler_func callback); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* !RC_INVOKED */ + +#endif /* LIBSSH2_H */ diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/libssh2_publickey.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/libssh2_publickey.h new file mode 100644 index 0000000..566acd6 --- /dev/null +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/libssh2_publickey.h @@ -0,0 +1,128 @@ +/* Copyright (C) Sara Golemon + * All rights reserved. + * + * Redistribution and use in source and binary forms, + * with or without modification, are permitted provided + * that the following conditions are met: + * + * Redistributions of source code must retain the above + * copyright notice, this list of conditions and the + * following disclaimer. + * + * 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. + * + * Neither the name of the copyright holder nor the names + * of any other contributors may be used to endorse or + * promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + * CONTRIBUTORS "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 COPYRIGHT OWNER OR + * CONTRIBUTORS 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. + */ + +/* Note: This include file is only needed for using the + * publickey SUBSYSTEM which is not the same as publickey + * authentication. For authentication you only need libssh2.h + * + * For more information on the publickey subsystem, + * refer to IETF draft: secsh-publickey + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef LIBSSH2_PUBLICKEY_H +#define LIBSSH2_PUBLICKEY_H 1 + +#include "libssh2.h" + +typedef struct _LIBSSH2_PUBLICKEY LIBSSH2_PUBLICKEY; + +typedef struct _libssh2_publickey_attribute { + const char *name; + unsigned long name_len; + const char *value; + unsigned long value_len; + char mandatory; +} libssh2_publickey_attribute; + +typedef struct _libssh2_publickey_list { + unsigned char *packet; /* For freeing */ + + const unsigned char *name; + unsigned long name_len; + const unsigned char *blob; + unsigned long blob_len; + unsigned long num_attrs; + libssh2_publickey_attribute *attrs; /* free me */ +} libssh2_publickey_list; + +/* Generally use the first macro here, but if both name and value are string + literals, you can use _fast() to take advantage of preprocessing */ +#define libssh2_publickey_attribute(name, value, mandatory) \ + { (name), strlen(name), (value), strlen(value), (mandatory) }, +#define libssh2_publickey_attribute_fast(name, value, mandatory) \ + { (name), sizeof(name) - 1, (value), sizeof(value) - 1, (mandatory) }, + +#ifdef __cplusplus +extern "C" { +#endif + +/* Publickey Subsystem */ +LIBSSH2_API LIBSSH2_PUBLICKEY * +libssh2_publickey_init(LIBSSH2_SESSION *session); + +LIBSSH2_API int +libssh2_publickey_add_ex(LIBSSH2_PUBLICKEY *pkey, + const unsigned char *name, + unsigned long name_len, + const unsigned char *blob, + unsigned long blob_len, char overwrite, + unsigned long num_attrs, + const libssh2_publickey_attribute attrs[]); +#define libssh2_publickey_add(pkey, name, blob, blob_len, overwrite, \ + num_attrs, attrs) \ + libssh2_publickey_add_ex((pkey), \ + (name), strlen(name), \ + (blob), (blob_len), \ + (overwrite), (num_attrs), (attrs)) + +LIBSSH2_API int libssh2_publickey_remove_ex(LIBSSH2_PUBLICKEY *pkey, + const unsigned char *name, + unsigned long name_len, + const unsigned char *blob, + unsigned long blob_len); +#define libssh2_publickey_remove(pkey, name, blob, blob_len) \ + libssh2_publickey_remove_ex((pkey), \ + (name), strlen(name), \ + (blob), (blob_len)) + +LIBSSH2_API int +libssh2_publickey_list_fetch(LIBSSH2_PUBLICKEY *pkey, + unsigned long *num_keys, + libssh2_publickey_list **pkey_list); +LIBSSH2_API void +libssh2_publickey_list_free(LIBSSH2_PUBLICKEY *pkey, + libssh2_publickey_list *pkey_list); + +LIBSSH2_API int libssh2_publickey_shutdown(LIBSSH2_PUBLICKEY *pkey); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* LIBSSH2_PUBLICKEY_H */ diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/libssh2_sftp.h b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/libssh2_sftp.h new file mode 100644 index 0000000..ab7b0af --- /dev/null +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/libssh2_sftp.h @@ -0,0 +1,382 @@ +/* Copyright (C) Sara Golemon + * All rights reserved. + * + * Redistribution and use in source and binary forms, + * with or without modification, are permitted provided + * that the following conditions are met: + * + * Redistributions of source code must retain the above + * copyright notice, this list of conditions and the + * following disclaimer. + * + * 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. + * + * Neither the name of the copyright holder nor the names + * of any other contributors may be used to endorse or + * promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + * CONTRIBUTORS "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 COPYRIGHT OWNER OR + * CONTRIBUTORS 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. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef LIBSSH2_SFTP_H +#define LIBSSH2_SFTP_H 1 + +#include "libssh2.h" + +#ifndef _WIN32 +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Note: Version 6 was documented at the time of writing + * However it was marked as "DO NOT IMPLEMENT" due to pending changes + * + * Let's start with Version 3 (The version found in OpenSSH) and go from there + */ +#define LIBSSH2_SFTP_VERSION 3 + +typedef struct _LIBSSH2_SFTP LIBSSH2_SFTP; +typedef struct _LIBSSH2_SFTP_HANDLE LIBSSH2_SFTP_HANDLE; +typedef struct _LIBSSH2_SFTP_ATTRIBUTES LIBSSH2_SFTP_ATTRIBUTES; +typedef struct _LIBSSH2_SFTP_STATVFS LIBSSH2_SFTP_STATVFS; + +/* Flags for open_ex() */ +#define LIBSSH2_SFTP_OPENFILE 0 +#define LIBSSH2_SFTP_OPENDIR 1 + +/* Flags for rename_ex() */ +#define LIBSSH2_SFTP_RENAME_OVERWRITE 0x00000001 +#define LIBSSH2_SFTP_RENAME_ATOMIC 0x00000002 +#define LIBSSH2_SFTP_RENAME_NATIVE 0x00000004 + +/* Flags for stat_ex() */ +#define LIBSSH2_SFTP_STAT 0 +#define LIBSSH2_SFTP_LSTAT 1 +#define LIBSSH2_SFTP_SETSTAT 2 + +/* Flags for symlink_ex() */ +#define LIBSSH2_SFTP_SYMLINK 0 +#define LIBSSH2_SFTP_READLINK 1 +#define LIBSSH2_SFTP_REALPATH 2 + +/* Flags for sftp_mkdir() */ +#define LIBSSH2_SFTP_DEFAULT_MODE -1 + +/* SFTP attribute flag bits */ +#define LIBSSH2_SFTP_ATTR_SIZE 0x00000001 +#define LIBSSH2_SFTP_ATTR_UIDGID 0x00000002 +#define LIBSSH2_SFTP_ATTR_PERMISSIONS 0x00000004 +#define LIBSSH2_SFTP_ATTR_ACMODTIME 0x00000008 +#define LIBSSH2_SFTP_ATTR_EXTENDED 0x80000000 + +/* SFTP statvfs flag bits */ +#define LIBSSH2_SFTP_ST_RDONLY 0x00000001 +#define LIBSSH2_SFTP_ST_NOSUID 0x00000002 + +struct _LIBSSH2_SFTP_ATTRIBUTES { + /* If flags & ATTR_* bit is set, then the value in this struct will be + * meaningful Otherwise it should be ignored + */ + unsigned long flags; + + libssh2_uint64_t filesize; + unsigned long uid, gid; + unsigned long permissions; + unsigned long atime, mtime; +}; + +struct _LIBSSH2_SFTP_STATVFS { + libssh2_uint64_t f_bsize; /* file system block size */ + libssh2_uint64_t f_frsize; /* fragment size */ + libssh2_uint64_t f_blocks; /* size of fs in f_frsize units */ + libssh2_uint64_t f_bfree; /* # free blocks */ + libssh2_uint64_t f_bavail; /* # free blocks for non-root */ + libssh2_uint64_t f_files; /* # inodes */ + libssh2_uint64_t f_ffree; /* # free inodes */ + libssh2_uint64_t f_favail; /* # free inodes for non-root */ + libssh2_uint64_t f_fsid; /* file system ID */ + libssh2_uint64_t f_flag; /* mount flags */ + libssh2_uint64_t f_namemax; /* maximum filename length */ +}; + +/* SFTP filetypes */ +#define LIBSSH2_SFTP_TYPE_REGULAR 1 +#define LIBSSH2_SFTP_TYPE_DIRECTORY 2 +#define LIBSSH2_SFTP_TYPE_SYMLINK 3 +#define LIBSSH2_SFTP_TYPE_SPECIAL 4 +#define LIBSSH2_SFTP_TYPE_UNKNOWN 5 +#define LIBSSH2_SFTP_TYPE_SOCKET 6 +#define LIBSSH2_SFTP_TYPE_CHAR_DEVICE 7 +#define LIBSSH2_SFTP_TYPE_BLOCK_DEVICE 8 +#define LIBSSH2_SFTP_TYPE_FIFO 9 + +/* + * Reproduce the POSIX file modes here for systems that are not POSIX + * compliant. + * + * These is used in "permissions" of "struct _LIBSSH2_SFTP_ATTRIBUTES" + */ +/* File type */ +#define LIBSSH2_SFTP_S_IFMT 0170000 /* type of file mask */ +#define LIBSSH2_SFTP_S_IFIFO 0010000 /* named pipe (fifo) */ +#define LIBSSH2_SFTP_S_IFCHR 0020000 /* character special */ +#define LIBSSH2_SFTP_S_IFDIR 0040000 /* directory */ +#define LIBSSH2_SFTP_S_IFBLK 0060000 /* block special */ +#define LIBSSH2_SFTP_S_IFREG 0100000 /* regular */ +#define LIBSSH2_SFTP_S_IFLNK 0120000 /* symbolic link */ +#define LIBSSH2_SFTP_S_IFSOCK 0140000 /* socket */ + +/* File mode */ +/* Read, write, execute/search by owner */ +#define LIBSSH2_SFTP_S_IRWXU 0000700 /* RWX mask for owner */ +#define LIBSSH2_SFTP_S_IRUSR 0000400 /* R for owner */ +#define LIBSSH2_SFTP_S_IWUSR 0000200 /* W for owner */ +#define LIBSSH2_SFTP_S_IXUSR 0000100 /* X for owner */ +/* Read, write, execute/search by group */ +#define LIBSSH2_SFTP_S_IRWXG 0000070 /* RWX mask for group */ +#define LIBSSH2_SFTP_S_IRGRP 0000040 /* R for group */ +#define LIBSSH2_SFTP_S_IWGRP 0000020 /* W for group */ +#define LIBSSH2_SFTP_S_IXGRP 0000010 /* X for group */ +/* Read, write, execute/search by others */ +#define LIBSSH2_SFTP_S_IRWXO 0000007 /* RWX mask for other */ +#define LIBSSH2_SFTP_S_IROTH 0000004 /* R for other */ +#define LIBSSH2_SFTP_S_IWOTH 0000002 /* W for other */ +#define LIBSSH2_SFTP_S_IXOTH 0000001 /* X for other */ + +/* macros to check for specific file types, added in 1.2.5 */ +#define LIBSSH2_SFTP_S_ISLNK(m) \ + (((m) & LIBSSH2_SFTP_S_IFMT) == LIBSSH2_SFTP_S_IFLNK) +#define LIBSSH2_SFTP_S_ISREG(m) \ + (((m) & LIBSSH2_SFTP_S_IFMT) == LIBSSH2_SFTP_S_IFREG) +#define LIBSSH2_SFTP_S_ISDIR(m) \ + (((m) & LIBSSH2_SFTP_S_IFMT) == LIBSSH2_SFTP_S_IFDIR) +#define LIBSSH2_SFTP_S_ISCHR(m) \ + (((m) & LIBSSH2_SFTP_S_IFMT) == LIBSSH2_SFTP_S_IFCHR) +#define LIBSSH2_SFTP_S_ISBLK(m) \ + (((m) & LIBSSH2_SFTP_S_IFMT) == LIBSSH2_SFTP_S_IFBLK) +#define LIBSSH2_SFTP_S_ISFIFO(m) \ + (((m) & LIBSSH2_SFTP_S_IFMT) == LIBSSH2_SFTP_S_IFIFO) +#define LIBSSH2_SFTP_S_ISSOCK(m) \ + (((m) & LIBSSH2_SFTP_S_IFMT) == LIBSSH2_SFTP_S_IFSOCK) + +/* SFTP File Transfer Flags -- (e.g. flags parameter to sftp_open()) + * Danger will robinson... APPEND doesn't have any effect on OpenSSH servers */ +#define LIBSSH2_FXF_READ 0x00000001 +#define LIBSSH2_FXF_WRITE 0x00000002 +#define LIBSSH2_FXF_APPEND 0x00000004 +#define LIBSSH2_FXF_CREAT 0x00000008 +#define LIBSSH2_FXF_TRUNC 0x00000010 +#define LIBSSH2_FXF_EXCL 0x00000020 + +/* SFTP Status Codes (returned by libssh2_sftp_last_error() ) */ +#define LIBSSH2_FX_OK 0UL +#define LIBSSH2_FX_EOF 1UL +#define LIBSSH2_FX_NO_SUCH_FILE 2UL +#define LIBSSH2_FX_PERMISSION_DENIED 3UL +#define LIBSSH2_FX_FAILURE 4UL +#define LIBSSH2_FX_BAD_MESSAGE 5UL +#define LIBSSH2_FX_NO_CONNECTION 6UL +#define LIBSSH2_FX_CONNECTION_LOST 7UL +#define LIBSSH2_FX_OP_UNSUPPORTED 8UL +#define LIBSSH2_FX_INVALID_HANDLE 9UL +#define LIBSSH2_FX_NO_SUCH_PATH 10UL +#define LIBSSH2_FX_FILE_ALREADY_EXISTS 11UL +#define LIBSSH2_FX_WRITE_PROTECT 12UL +#define LIBSSH2_FX_NO_MEDIA 13UL +#define LIBSSH2_FX_NO_SPACE_ON_FILESYSTEM 14UL +#define LIBSSH2_FX_QUOTA_EXCEEDED 15UL +#define LIBSSH2_FX_UNKNOWN_PRINCIPLE 16UL /* Initial mis-spelling */ +#define LIBSSH2_FX_UNKNOWN_PRINCIPAL 16UL +#define LIBSSH2_FX_LOCK_CONFlICT 17UL /* Initial mis-spelling */ +#define LIBSSH2_FX_LOCK_CONFLICT 17UL +#define LIBSSH2_FX_DIR_NOT_EMPTY 18UL +#define LIBSSH2_FX_NOT_A_DIRECTORY 19UL +#define LIBSSH2_FX_INVALID_FILENAME 20UL +#define LIBSSH2_FX_LINK_LOOP 21UL + +/* Returned by any function that would block during a read/write operation */ +#define LIBSSH2SFTP_EAGAIN LIBSSH2_ERROR_EAGAIN + +/* SFTP API */ +LIBSSH2_API LIBSSH2_SFTP *libssh2_sftp_init(LIBSSH2_SESSION *session); +LIBSSH2_API int libssh2_sftp_shutdown(LIBSSH2_SFTP *sftp); +LIBSSH2_API unsigned long libssh2_sftp_last_error(LIBSSH2_SFTP *sftp); +LIBSSH2_API LIBSSH2_CHANNEL *libssh2_sftp_get_channel(LIBSSH2_SFTP *sftp); + +/* File / Directory Ops */ +LIBSSH2_API LIBSSH2_SFTP_HANDLE * +libssh2_sftp_open_ex(LIBSSH2_SFTP *sftp, + const char *filename, + unsigned int filename_len, + unsigned long flags, + long mode, int open_type); +#define libssh2_sftp_open(sftp, filename, flags, mode) \ + libssh2_sftp_open_ex((sftp), \ + (filename), (unsigned int)strlen(filename), \ + (flags), (mode), LIBSSH2_SFTP_OPENFILE) +#define libssh2_sftp_opendir(sftp, path) \ + libssh2_sftp_open_ex((sftp), \ + (path), (unsigned int)strlen(path), \ + 0, 0, LIBSSH2_SFTP_OPENDIR) +LIBSSH2_API LIBSSH2_SFTP_HANDLE * +libssh2_sftp_open_ex_r(LIBSSH2_SFTP *sftp, + const char *filename, + size_t filename_len, + unsigned long flags, + long mode, int open_type, + LIBSSH2_SFTP_ATTRIBUTES *attrs); +#define libssh2_sftp_open_r(sftp, filename, flags, mode, attrs) \ + libssh2_sftp_open_ex_r((sftp), (filename), strlen(filename), \ + (flags), (mode), LIBSSH2_SFTP_OPENFILE, \ + (attrs)) + +LIBSSH2_API ssize_t libssh2_sftp_read(LIBSSH2_SFTP_HANDLE *handle, + char *buffer, size_t buffer_maxlen); + +LIBSSH2_API int libssh2_sftp_readdir_ex(LIBSSH2_SFTP_HANDLE *handle, \ + char *buffer, size_t buffer_maxlen, + char *longentry, + size_t longentry_maxlen, + LIBSSH2_SFTP_ATTRIBUTES *attrs); +#define libssh2_sftp_readdir(handle, buffer, buffer_maxlen, attrs) \ + libssh2_sftp_readdir_ex((handle), (buffer), (buffer_maxlen), NULL, 0, \ + (attrs)) + +LIBSSH2_API ssize_t libssh2_sftp_write(LIBSSH2_SFTP_HANDLE *handle, + const char *buffer, size_t count); +LIBSSH2_API int libssh2_sftp_fsync(LIBSSH2_SFTP_HANDLE *handle); + +LIBSSH2_API int libssh2_sftp_close_handle(LIBSSH2_SFTP_HANDLE *handle); +#define libssh2_sftp_close(handle) libssh2_sftp_close_handle(handle) +#define libssh2_sftp_closedir(handle) libssh2_sftp_close_handle(handle) + +LIBSSH2_API void libssh2_sftp_seek(LIBSSH2_SFTP_HANDLE *handle, size_t offset); +LIBSSH2_API void libssh2_sftp_seek64(LIBSSH2_SFTP_HANDLE *handle, + libssh2_uint64_t offset); +#define libssh2_sftp_rewind(handle) libssh2_sftp_seek64((handle), 0) + +LIBSSH2_API size_t libssh2_sftp_tell(LIBSSH2_SFTP_HANDLE *handle); +LIBSSH2_API libssh2_uint64_t libssh2_sftp_tell64(LIBSSH2_SFTP_HANDLE *handle); + +LIBSSH2_API int libssh2_sftp_fstat_ex(LIBSSH2_SFTP_HANDLE *handle, + LIBSSH2_SFTP_ATTRIBUTES *attrs, + int setstat); +#define libssh2_sftp_fstat(handle, attrs) \ + libssh2_sftp_fstat_ex((handle), (attrs), 0) +#define libssh2_sftp_fsetstat(handle, attrs) \ + libssh2_sftp_fstat_ex((handle), (attrs), 1) + +/* Miscellaneous Ops */ +LIBSSH2_API int libssh2_sftp_rename_ex(LIBSSH2_SFTP *sftp, + const char *source_filename, + unsigned int srouce_filename_len, + const char *dest_filename, + unsigned int dest_filename_len, + long flags); +#define libssh2_sftp_rename(sftp, sourcefile, destfile) \ + libssh2_sftp_rename_ex((sftp), \ + (sourcefile), (unsigned int)strlen(sourcefile), \ + (destfile), (unsigned int)strlen(destfile), \ + LIBSSH2_SFTP_RENAME_OVERWRITE | \ + LIBSSH2_SFTP_RENAME_ATOMIC | \ + LIBSSH2_SFTP_RENAME_NATIVE) + +LIBSSH2_API int libssh2_sftp_posix_rename_ex(LIBSSH2_SFTP *sftp, + const char *source_filename, + size_t srouce_filename_len, + const char *dest_filename, + size_t dest_filename_len); +#define libssh2_sftp_posix_rename(sftp, sourcefile, destfile) \ + libssh2_sftp_posix_rename_ex((sftp), (sourcefile), strlen(sourcefile), \ + (destfile), strlen(destfile)) + +LIBSSH2_API int libssh2_sftp_unlink_ex(LIBSSH2_SFTP *sftp, + const char *filename, + unsigned int filename_len); +#define libssh2_sftp_unlink(sftp, filename) \ + libssh2_sftp_unlink_ex((sftp), (filename), (unsigned int)strlen(filename)) + +LIBSSH2_API int libssh2_sftp_fstatvfs(LIBSSH2_SFTP_HANDLE *handle, + LIBSSH2_SFTP_STATVFS *st); + +LIBSSH2_API int libssh2_sftp_statvfs(LIBSSH2_SFTP *sftp, + const char *path, + size_t path_len, + LIBSSH2_SFTP_STATVFS *st); + +LIBSSH2_API int libssh2_sftp_mkdir_ex(LIBSSH2_SFTP *sftp, + const char *path, + unsigned int path_len, long mode); +#define libssh2_sftp_mkdir(sftp, path, mode) \ + libssh2_sftp_mkdir_ex((sftp), (path), (unsigned int)strlen(path), (mode)) + +LIBSSH2_API int libssh2_sftp_rmdir_ex(LIBSSH2_SFTP *sftp, + const char *path, + unsigned int path_len); +#define libssh2_sftp_rmdir(sftp, path) \ + libssh2_sftp_rmdir_ex((sftp), (path), (unsigned int)strlen(path)) + +LIBSSH2_API int libssh2_sftp_stat_ex(LIBSSH2_SFTP *sftp, + const char *path, + unsigned int path_len, + int stat_type, + LIBSSH2_SFTP_ATTRIBUTES *attrs); +#define libssh2_sftp_stat(sftp, path, attrs) \ + libssh2_sftp_stat_ex((sftp), (path), (unsigned int)strlen(path), \ + LIBSSH2_SFTP_STAT, (attrs)) +#define libssh2_sftp_lstat(sftp, path, attrs) \ + libssh2_sftp_stat_ex((sftp), (path), (unsigned int)strlen(path), \ + LIBSSH2_SFTP_LSTAT, (attrs)) +#define libssh2_sftp_setstat(sftp, path, attrs) \ + libssh2_sftp_stat_ex((sftp), (path), (unsigned int)strlen(path), \ + LIBSSH2_SFTP_SETSTAT, (attrs)) + +LIBSSH2_API int libssh2_sftp_symlink_ex(LIBSSH2_SFTP *sftp, + const char *path, + unsigned int path_len, + char *target, + unsigned int target_len, + int link_type); +#define libssh2_sftp_symlink(sftp, orig, linkpath) \ + libssh2_sftp_symlink_ex((sftp), \ + (orig), (unsigned int)strlen(orig), \ + (linkpath), (unsigned int)strlen(linkpath), \ + LIBSSH2_SFTP_SYMLINK) +#define libssh2_sftp_readlink(sftp, path, target, maxlen) \ + libssh2_sftp_symlink_ex((sftp), \ + (path), (unsigned int)strlen(path), \ + (target), (maxlen), \ + LIBSSH2_SFTP_READLINK) +#define libssh2_sftp_realpath(sftp, path, target, maxlen) \ + libssh2_sftp_symlink_ex((sftp), \ + (path), (unsigned int)strlen(path), \ + (target), (maxlen), \ + LIBSSH2_SFTP_REALPATH) + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* LIBSSH2_SFTP_H */ diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/module.modulemap b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/module.modulemap index fe5729d..3a9a9ba 100644 --- a/Clibgit2.xcframework/macos-arm64_x86_64/Headers/module.modulemap +++ b/Clibgit2.xcframework/macos-arm64_x86_64/Headers/module.modulemap @@ -28,4 +28,13 @@ module Clibgit2 { export * module * { export * } } + + // Expose libssh2 headers + explicit module libssh2 { + header "libssh2.h" + header "libssh2_sftp.h" + header "libssh2_publickey.h" + + export * + } } diff --git a/Clibgit2.xcframework/macos-arm64_x86_64/libgit2_all.a b/Clibgit2.xcframework/macos-arm64_x86_64/libgit2_all.a index d56ba37..f9bbf88 100644 Binary files a/Clibgit2.xcframework/macos-arm64_x86_64/libgit2_all.a and b/Clibgit2.xcframework/macos-arm64_x86_64/libgit2_all.a differ diff --git a/Clibgit2_modulemap b/Clibgit2_modulemap index fe5729d..3a9a9ba 100644 --- a/Clibgit2_modulemap +++ b/Clibgit2_modulemap @@ -28,4 +28,13 @@ module Clibgit2 { export * module * { export * } } + + // Expose libssh2 headers + explicit module libssh2 { + header "libssh2.h" + header "libssh2_sftp.h" + header "libssh2_publickey.h" + + export * + } } diff --git a/README.md b/README.md index 69f3591..07b97d3 100644 --- a/README.md +++ b/README.md @@ -36,9 +36,9 @@ If you want to use `static-libgit2` in another package (say, to expose some cool | Library | Version | | ------- | ------- | -| libgit2 | 1.3.0 | -| openssl | 3.0.0 | -| libssh2 | 1.10.0 | +| libgit2 | 1.9.1 | +| openssl | 3.6.0 | +| libssh2 | 1.11.1 | This build recipe and the original version of the build script comes from the insightful project https://github.com/light-tech/LibGit2-On-iOS. diff --git a/build-libgit2-framework.sh b/build-libgit2-framework.sh index d54e08f..0ee287a 100755 --- a/build-libgit2-framework.sh +++ b/build-libgit2-framework.sh @@ -100,10 +100,10 @@ function build_openssl() { setup_variables $1 install-openssl # It is better to remove and redownload the source since building make the source code directory dirty! - rm -rf openssl-3.0.0 - test -f openssl-3.0.0.tar.gz || wget -q https://www.openssl.org/source/openssl-3.0.0.tar.gz - tar xzf openssl-3.0.0.tar.gz - cd openssl-3.0.0 + rm -rf openssl-3.6.0 + test -f openssl-3.6.0.tar.gz || wget -q https://www.openssl.org/source/openssl-3.6.0.tar.gz + tar xzf openssl-3.6.0.tar.gz + cd openssl-3.6.0 case $PLATFORM in "iphoneos") @@ -142,10 +142,10 @@ function build_openssl() { function build_libssh2() { setup_variables $1 install-libssh2 - rm -rf libssh2-1.10.0 - test -f libssh2-1.10.0.tar.gz || wget -q https://www.libssh2.org/download/libssh2-1.10.0.tar.gz - tar xzf libssh2-1.10.0.tar.gz - cd libssh2-1.10.0 + rm -rf libssh2-1.11.1 + test -f libssh2-1.11.1.tar.gz || wget -q https://www.libssh2.org/download/libssh2-1.11.1.tar.gz + tar xzf libssh2-1.11.1.tar.gz + cd libssh2-1.11.1 rm -rf build && mkdir build && cd build @@ -165,16 +165,14 @@ function build_libssh2() { function build_libgit2() { setup_variables $1 install - rm -rf libgit2-1.3.0 - test -f v1.3.0.zip || wget -q https://github.com/libgit2/libgit2/archive/refs/tags/v1.3.0.zip - ditto -x -k --sequesterRsrc --rsrc v1.3.0.zip ./ - cd libgit2-1.3.0 + rm -rf libgit2-1.9.1 + test -f v1.9.1.zip || wget -q https://github.com/libgit2/libgit2/archive/refs/tags/v1.9.1.zip + ditto -x -k --sequesterRsrc --rsrc v1.9.1.zip ./ + cd libgit2-1.9.1 rm -rf build && mkdir build && cd build - # The CMake function that determines if `libssh2_userauth_publickey_frommemory` is defined doesn't - # work when everything is statically linked. Manually override GIT_SSH_MEMORY_CREDENTIALS. - CMAKE_ARGS+=(-DBUILD_CLAR=NO -DGIT_SSH_MEMORY_CREDENTIALS=1 -DCMAKE_PREFIX_PATH="$REPO_ROOT/install-libssh2/$PLATFORM;$REPO_ROOT/install-openssl/$PLATFORM") + CMAKE_ARGS+=(-DBUILD_TESTS=OFF -DUSE_SSH=libssh2 -DCMAKE_PREFIX_PATH="$REPO_ROOT/install-libssh2/$PLATFORM;$REPO_ROOT/install-openssl/$PLATFORM") echo "cmake ${CMAKE_ARGS[@]} .." cmake "${CMAKE_ARGS[@]}" .. @@ -221,6 +219,25 @@ function copy_modulemap() { done } +### Copy libssh2 headers into Clibgit2.xcframework so Swift can access libssh2 API +function copy_libssh2_headers() { + local FWDIRS=$(find Clibgit2.xcframework -mindepth 1 -maxdepth 1 -type d) + for d in ${FWDIRS[@]}; do + # Determine source platform from xcframework directory name + case $d in + *ios-arm64) + cp install-libssh2/iphoneos/include/*.h $d/Headers/;; + *ios-arm64-simulator) + cp install-libssh2/iphonesimulator/include/*.h $d/Headers/;; + *ios-arm64_x86_64-maccatalyst) + cp install-libssh2/maccatalyst/include/*.h $d/Headers/;; + *macos-arm64_x86_64) + cp install-libssh2/macosx/include/*.h $d/Headers/;; + esac + echo "Copied libssh2 headers to $d/Headers/" + done +} + ### Build libgit2 and Clibgit2 frameworks for all available platforms for p in ${AVAILABLE_PLATFORMS[@]}; do @@ -241,3 +258,4 @@ done build_xcframework libgit2_all install Clibgit2 cd $REPO_ROOT copy_modulemap +copy_libssh2_headers