rugged 1.5.1 → 1.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/rugged/extconf.rb +2 -2
- data/ext/rugged/rugged_blame.c +2 -0
- data/ext/rugged/rugged_blob.c +3 -0
- data/ext/rugged/rugged_commit.c +1 -0
- data/ext/rugged/rugged_config.c +2 -0
- data/ext/rugged/rugged_diff.c +1 -0
- data/ext/rugged/rugged_index.c +2 -0
- data/ext/rugged/rugged_patch.c +1 -0
- data/ext/rugged/rugged_rebase.c +1 -0
- data/ext/rugged/rugged_reference.c +1 -0
- data/ext/rugged/rugged_remote.c +1 -0
- data/ext/rugged/rugged_repo.c +5 -2
- data/ext/rugged/rugged_revwalk.c +5 -1
- data/ext/rugged/rugged_submodule.c +1 -0
- data/ext/rugged/rugged_tag.c +1 -0
- data/ext/rugged/rugged_tree.c +4 -0
- data/lib/rugged/index.rb +1 -1
- data/lib/rugged/tree.rb +1 -1
- data/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/CMakeLists.txt +5 -1
- data/vendor/libgit2/COPYING +30 -0
- data/vendor/libgit2/cmake/ExperimentalFeatures.cmake +23 -0
- data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +2 -0
- data/vendor/libgit2/include/git2/common.h +13 -6
- data/vendor/libgit2/include/git2/deprecated.h +6 -0
- data/vendor/libgit2/include/git2/diff.h +1 -1
- data/vendor/libgit2/include/git2/experimental.h +20 -0
- data/vendor/libgit2/include/git2/indexer.h +29 -0
- data/vendor/libgit2/include/git2/object.h +28 -2
- data/vendor/libgit2/include/git2/odb.h +58 -7
- data/vendor/libgit2/include/git2/odb_backend.h +106 -18
- data/vendor/libgit2/include/git2/oid.h +115 -15
- data/vendor/libgit2/include/git2/repository.h +20 -1
- data/vendor/libgit2/include/git2/stash.h +60 -6
- data/vendor/libgit2/include/git2/strarray.h +0 -13
- data/vendor/libgit2/include/git2/sys/odb_backend.h +1 -1
- data/vendor/libgit2/include/git2/sys/transport.h +12 -0
- data/vendor/libgit2/include/git2/version.h +4 -4
- data/vendor/libgit2/include/git2.h +1 -0
- data/vendor/libgit2/src/CMakeLists.txt +0 -6
- data/vendor/libgit2/src/cli/CMakeLists.txt +6 -2
- data/vendor/libgit2/src/cli/cmd_hash_object.c +27 -8
- data/vendor/libgit2/src/cli/opt.c +1 -1
- data/vendor/libgit2/src/libgit2/CMakeLists.txt +25 -15
- data/vendor/libgit2/src/libgit2/annotated_commit.c +1 -1
- data/vendor/libgit2/src/libgit2/annotated_commit.h +1 -1
- data/vendor/libgit2/src/libgit2/attr_file.c +1 -1
- data/vendor/libgit2/src/libgit2/attrcache.c +1 -1
- data/vendor/libgit2/src/libgit2/blame.c +2 -0
- data/vendor/libgit2/src/libgit2/blob.c +4 -2
- data/vendor/libgit2/src/libgit2/blob.h +2 -2
- data/vendor/libgit2/src/libgit2/branch.c +2 -2
- data/vendor/libgit2/src/libgit2/cherrypick.c +3 -3
- data/vendor/libgit2/src/libgit2/clone.c +31 -2
- data/vendor/libgit2/src/libgit2/commit.c +52 -17
- data/vendor/libgit2/src/libgit2/commit.h +25 -7
- data/vendor/libgit2/src/libgit2/commit_graph.c +47 -32
- data/vendor/libgit2/src/libgit2/commit_graph.h +3 -0
- data/vendor/libgit2/src/libgit2/commit_list.c +6 -2
- data/vendor/libgit2/src/libgit2/config.c +1 -1
- data/vendor/libgit2/src/libgit2/config_file.c +2 -2
- data/vendor/libgit2/src/libgit2/describe.c +8 -8
- data/vendor/libgit2/src/libgit2/diff.c +5 -1
- data/vendor/libgit2/src/libgit2/diff_file.c +15 -6
- data/vendor/libgit2/src/libgit2/diff_generate.c +17 -12
- data/vendor/libgit2/src/libgit2/diff_print.c +5 -5
- data/vendor/libgit2/src/libgit2/diff_tform.c +4 -0
- data/vendor/libgit2/src/libgit2/email.c +2 -2
- data/vendor/libgit2/src/libgit2/experimental.h.in +13 -0
- data/vendor/libgit2/src/libgit2/fetch.c +3 -6
- data/vendor/libgit2/src/libgit2/fetchhead.c +4 -4
- data/vendor/libgit2/src/libgit2/ident.c +3 -3
- data/vendor/libgit2/src/libgit2/index.c +11 -9
- data/vendor/libgit2/src/libgit2/indexer.c +107 -44
- data/vendor/libgit2/src/libgit2/iterator.c +4 -2
- data/vendor/libgit2/src/libgit2/libgit2.c +19 -0
- data/vendor/libgit2/src/libgit2/merge.c +3 -3
- data/vendor/libgit2/src/libgit2/midx.c +16 -15
- data/vendor/libgit2/src/libgit2/mwindow.c +5 -2
- data/vendor/libgit2/src/libgit2/mwindow.h +4 -1
- data/vendor/libgit2/src/libgit2/notes.c +5 -5
- data/vendor/libgit2/src/libgit2/object.c +89 -25
- data/vendor/libgit2/src/libgit2/object.h +12 -3
- data/vendor/libgit2/src/libgit2/odb.c +194 -50
- data/vendor/libgit2/src/libgit2/odb.h +43 -4
- data/vendor/libgit2/src/libgit2/odb_loose.c +128 -70
- data/vendor/libgit2/src/libgit2/odb_pack.c +96 -44
- data/vendor/libgit2/src/libgit2/oid.c +134 -76
- data/vendor/libgit2/src/libgit2/oid.h +183 -9
- data/vendor/libgit2/src/libgit2/pack-objects.c +15 -4
- data/vendor/libgit2/src/libgit2/pack.c +90 -66
- data/vendor/libgit2/src/libgit2/pack.h +29 -15
- data/vendor/libgit2/src/libgit2/parse.c +4 -3
- data/vendor/libgit2/src/libgit2/patch_parse.c +5 -5
- data/vendor/libgit2/src/libgit2/push.c +13 -3
- data/vendor/libgit2/src/libgit2/reader.c +1 -1
- data/vendor/libgit2/src/libgit2/rebase.c +19 -18
- data/vendor/libgit2/src/libgit2/refdb_fs.c +70 -39
- data/vendor/libgit2/src/libgit2/reflog.c +7 -5
- data/vendor/libgit2/src/libgit2/reflog.h +1 -2
- data/vendor/libgit2/src/libgit2/refs.c +2 -0
- data/vendor/libgit2/src/libgit2/remote.c +38 -37
- data/vendor/libgit2/src/libgit2/remote.h +40 -0
- data/vendor/libgit2/src/libgit2/repository.c +212 -36
- data/vendor/libgit2/src/libgit2/repository.h +9 -0
- data/vendor/libgit2/src/libgit2/reset.c +2 -2
- data/vendor/libgit2/src/libgit2/revert.c +4 -4
- data/vendor/libgit2/src/libgit2/revparse.c +23 -7
- data/vendor/libgit2/src/libgit2/revwalk.c +5 -1
- data/vendor/libgit2/src/libgit2/stash.c +201 -26
- data/vendor/libgit2/src/libgit2/strarray.c +1 -0
- data/vendor/libgit2/src/libgit2/strarray.h +25 -0
- data/vendor/libgit2/src/libgit2/streams/openssl.c +1 -1
- data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.c +7 -3
- data/vendor/libgit2/src/libgit2/streams/socket.c +4 -1
- data/vendor/libgit2/src/libgit2/submodule.c +6 -2
- data/vendor/libgit2/src/libgit2/sysdir.c +294 -7
- data/vendor/libgit2/src/libgit2/sysdir.h +39 -9
- data/vendor/libgit2/src/libgit2/tag.c +29 -10
- data/vendor/libgit2/src/libgit2/tag.h +2 -2
- data/vendor/libgit2/src/libgit2/threadstate.h +1 -1
- data/vendor/libgit2/src/libgit2/transports/http.c +8 -7
- data/vendor/libgit2/src/libgit2/transports/httpclient.c +9 -0
- data/vendor/libgit2/src/libgit2/transports/httpclient.h +10 -0
- data/vendor/libgit2/src/libgit2/transports/local.c +14 -0
- data/vendor/libgit2/src/libgit2/transports/smart.c +35 -0
- data/vendor/libgit2/src/libgit2/transports/smart.h +10 -1
- data/vendor/libgit2/src/libgit2/transports/smart_pkt.c +153 -41
- data/vendor/libgit2/src/libgit2/transports/smart_protocol.c +42 -12
- data/vendor/libgit2/src/libgit2/transports/ssh.c +62 -65
- data/vendor/libgit2/src/libgit2/transports/winhttp.c +9 -4
- data/vendor/libgit2/src/libgit2/tree-cache.c +4 -4
- data/vendor/libgit2/src/libgit2/tree.c +22 -16
- data/vendor/libgit2/src/libgit2/tree.h +2 -2
- data/vendor/libgit2/src/libgit2/worktree.c +5 -0
- data/vendor/libgit2/src/util/CMakeLists.txt +7 -1
- data/vendor/libgit2/src/util/fs_path.c +1 -1
- data/vendor/libgit2/src/util/futils.c +0 -3
- data/vendor/libgit2/src/util/git2_util.h +2 -2
- data/vendor/libgit2/src/util/hash/openssl.c +4 -3
- data/vendor/libgit2/src/util/hash/rfc6234/sha.h +0 -112
- data/vendor/libgit2/src/util/hash.h +13 -0
- data/vendor/libgit2/src/util/net.c +338 -84
- data/vendor/libgit2/src/util/net.h +7 -0
- data/vendor/libgit2/src/util/posix.h +2 -0
- data/vendor/libgit2/src/util/rand.c +4 -0
- data/vendor/libgit2/src/util/regexp.c +3 -3
- data/vendor/libgit2/src/util/thread.h +20 -19
- data/vendor/libgit2/src/util/util.h +1 -0
- metadata +7 -5
- data/vendor/libgit2/src/util/win32/findfile.c +0 -286
- data/vendor/libgit2/src/util/win32/findfile.h +0 -22
- /data/vendor/libgit2/src/{features.h.in → util/git2_features.h.in} +0 -0
@@ -38,6 +38,25 @@ typedef enum {
|
|
38
38
|
*/
|
39
39
|
typedef int GIT_CALLBACK(git_odb_foreach_cb)(const git_oid *id, void *payload);
|
40
40
|
|
41
|
+
/** Options for configuring a loose object backend. */
|
42
|
+
typedef struct {
|
43
|
+
unsigned int version; /**< version for the struct */
|
44
|
+
|
45
|
+
/**
|
46
|
+
* Type of object IDs to use for this object database, or
|
47
|
+
* 0 for default (currently SHA1).
|
48
|
+
*/
|
49
|
+
git_oid_t oid_type;
|
50
|
+
} git_odb_options;
|
51
|
+
|
52
|
+
/* The current version of the diff options structure */
|
53
|
+
#define GIT_ODB_OPTIONS_VERSION 1
|
54
|
+
|
55
|
+
/* Stack initializer for odb options. Alternatively use
|
56
|
+
* `git_odb_options_init` programmatic initialization.
|
57
|
+
*/
|
58
|
+
#define GIT_ODB_OPTIONS_INIT { GIT_ODB_OPTIONS_VERSION }
|
59
|
+
|
41
60
|
/**
|
42
61
|
* Create a new object database with no backends.
|
43
62
|
*
|
@@ -46,9 +65,14 @@ typedef int GIT_CALLBACK(git_odb_foreach_cb)(const git_oid *id, void *payload);
|
|
46
65
|
*
|
47
66
|
* @param out location to store the database pointer, if opened.
|
48
67
|
* Set to NULL if the open failed.
|
68
|
+
* @param opts the options for this object database or NULL for defaults
|
49
69
|
* @return 0 or an error code
|
50
70
|
*/
|
71
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
72
|
+
GIT_EXTERN(int) git_odb_new(git_odb **out, const git_odb_options *opts);
|
73
|
+
#else
|
51
74
|
GIT_EXTERN(int) git_odb_new(git_odb **out);
|
75
|
+
#endif
|
52
76
|
|
53
77
|
/**
|
54
78
|
* Create a new object database and automatically add
|
@@ -64,9 +88,17 @@ GIT_EXTERN(int) git_odb_new(git_odb **out);
|
|
64
88
|
* @param out location to store the database pointer, if opened.
|
65
89
|
* Set to NULL if the open failed.
|
66
90
|
* @param objects_dir path of the backends' "objects" directory.
|
91
|
+
* @param opts the options for this object database or NULL for defaults
|
67
92
|
* @return 0 or an error code
|
68
93
|
*/
|
94
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
95
|
+
GIT_EXTERN(int) git_odb_open(
|
96
|
+
git_odb **out,
|
97
|
+
const char *objects_dir,
|
98
|
+
const git_odb_options *opts);
|
99
|
+
#else
|
69
100
|
GIT_EXTERN(int) git_odb_open(git_odb **out, const char *objects_dir);
|
101
|
+
#endif
|
70
102
|
|
71
103
|
/**
|
72
104
|
* Add an on-disk alternate to an existing Object DB.
|
@@ -117,7 +149,7 @@ GIT_EXTERN(int) git_odb_read(git_odb_object **out, git_odb *db, const git_oid *i
|
|
117
149
|
* This method queries all available ODB backends
|
118
150
|
* trying to match the 'len' first hexadecimal
|
119
151
|
* characters of the 'short_id'.
|
120
|
-
* The remaining (
|
152
|
+
* The remaining (GIT_OID_SHA1_HEXSIZE-len)*4 bits of
|
121
153
|
* 'short_id' must be 0s.
|
122
154
|
* 'len' must be at least GIT_OID_MINPREFIXLEN,
|
123
155
|
* and the prefix must be long enough to identify
|
@@ -218,7 +250,7 @@ typedef struct git_odb_expand_id {
|
|
218
250
|
*
|
219
251
|
* The given array will be updated in place: for each abbreviated ID that is
|
220
252
|
* unique in the database, and of the given type (if specified),
|
221
|
-
* the full object ID, object ID length (`
|
253
|
+
* the full object ID, object ID length (`GIT_OID_SHA1_HEXSIZE`) and type will be
|
222
254
|
* written back to the array. For IDs that are not found (or are ambiguous),
|
223
255
|
* the array entry will be zeroed.
|
224
256
|
*
|
@@ -435,18 +467,28 @@ GIT_EXTERN(int) git_odb_write_multi_pack_index(
|
|
435
467
|
git_odb *db);
|
436
468
|
|
437
469
|
/**
|
438
|
-
* Determine the object-ID (sha1 hash) of a data buffer
|
470
|
+
* Determine the object-ID (sha1 or sha256 hash) of a data buffer
|
439
471
|
*
|
440
|
-
* The resulting
|
441
|
-
*
|
472
|
+
* The resulting OID will be the identifier for the data buffer as if
|
473
|
+
* the data buffer it were to written to the ODB.
|
442
474
|
*
|
443
475
|
* @param out the resulting object-ID.
|
444
476
|
* @param data data to hash
|
445
477
|
* @param len size of the data
|
446
|
-
* @param
|
478
|
+
* @param object_type of the data to hash
|
479
|
+
* @param oid_type the oid type to hash to
|
447
480
|
* @return 0 or an error code
|
448
481
|
*/
|
482
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
483
|
+
GIT_EXTERN(int) git_odb_hash(
|
484
|
+
git_oid *out,
|
485
|
+
const void *data,
|
486
|
+
size_t len,
|
487
|
+
git_object_t object_type,
|
488
|
+
git_oid_t oid_type);
|
489
|
+
#else
|
449
490
|
GIT_EXTERN(int) git_odb_hash(git_oid *out, const void *data, size_t len, git_object_t type);
|
491
|
+
#endif
|
450
492
|
|
451
493
|
/**
|
452
494
|
* Read a file from disk and fill a git_oid with the object id
|
@@ -458,10 +500,19 @@ GIT_EXTERN(int) git_odb_hash(git_oid *out, const void *data, size_t len, git_obj
|
|
458
500
|
*
|
459
501
|
* @param out oid structure the result is written into.
|
460
502
|
* @param path file to read and determine object id for
|
461
|
-
* @param
|
503
|
+
* @param object_type of the data to hash
|
504
|
+
* @param oid_type the oid type to hash to
|
462
505
|
* @return 0 or an error code
|
463
506
|
*/
|
507
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
508
|
+
GIT_EXTERN(int) git_odb_hashfile(
|
509
|
+
git_oid *out,
|
510
|
+
const char *path,
|
511
|
+
git_object_t object_type,
|
512
|
+
git_oid_t oid_type);
|
513
|
+
#else
|
464
514
|
GIT_EXTERN(int) git_odb_hashfile(git_oid *out, const char *path, git_object_t type);
|
515
|
+
#endif
|
465
516
|
|
466
517
|
/**
|
467
518
|
* Create a copy of an odb_object
|
@@ -24,6 +24,26 @@ GIT_BEGIN_DECL
|
|
24
24
|
* Constructors for in-box ODB backends.
|
25
25
|
*/
|
26
26
|
|
27
|
+
/** Options for configuring a packfile object backend. */
|
28
|
+
typedef struct {
|
29
|
+
unsigned int version; /**< version for the struct */
|
30
|
+
|
31
|
+
/**
|
32
|
+
* Type of object IDs to use for this object database, or
|
33
|
+
* 0 for default (currently SHA1).
|
34
|
+
*/
|
35
|
+
git_oid_t oid_type;
|
36
|
+
} git_odb_backend_pack_options;
|
37
|
+
|
38
|
+
/* The current version of the diff options structure */
|
39
|
+
#define GIT_ODB_BACKEND_PACK_OPTIONS_VERSION 1
|
40
|
+
|
41
|
+
/* Stack initializer for odb pack backend options. Alternatively use
|
42
|
+
* `git_odb_backend_pack_options_init` programmatic initialization.
|
43
|
+
*/
|
44
|
+
#define GIT_ODB_BACKEND_PACK_OPTIONS_INIT \
|
45
|
+
{ GIT_ODB_BACKEND_PACK_OPTIONS_VERSION }
|
46
|
+
|
27
47
|
/**
|
28
48
|
* Create a backend for the packfiles.
|
29
49
|
*
|
@@ -32,20 +52,96 @@ GIT_BEGIN_DECL
|
|
32
52
|
*
|
33
53
|
* @return 0 or an error code
|
34
54
|
*/
|
35
|
-
|
55
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
56
|
+
GIT_EXTERN(int) git_odb_backend_pack(
|
57
|
+
git_odb_backend **out,
|
58
|
+
const char *objects_dir,
|
59
|
+
const git_odb_backend_pack_options *opts);
|
60
|
+
#else
|
61
|
+
GIT_EXTERN(int) git_odb_backend_pack(
|
62
|
+
git_odb_backend **out,
|
63
|
+
const char *objects_dir);
|
64
|
+
#endif
|
65
|
+
|
66
|
+
/**
|
67
|
+
* Create a backend out of a single packfile
|
68
|
+
*
|
69
|
+
* This can be useful for inspecting the contents of a single
|
70
|
+
* packfile.
|
71
|
+
*
|
72
|
+
* @param out location to store the odb backend pointer
|
73
|
+
* @param index_file path to the packfile's .idx file
|
74
|
+
*
|
75
|
+
* @return 0 or an error code
|
76
|
+
*/
|
77
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
78
|
+
GIT_EXTERN(int) git_odb_backend_one_pack(
|
79
|
+
git_odb_backend **out,
|
80
|
+
const char *index_file,
|
81
|
+
const git_odb_backend_pack_options *opts);
|
82
|
+
#else
|
83
|
+
GIT_EXTERN(int) git_odb_backend_one_pack(
|
84
|
+
git_odb_backend **out,
|
85
|
+
const char *index_file);
|
86
|
+
#endif
|
87
|
+
|
88
|
+
typedef enum {
|
89
|
+
GIT_ODB_BACKEND_LOOSE_FSYNC = (1 << 0)
|
90
|
+
} git_odb_backend_loose_flag_t;
|
91
|
+
|
92
|
+
/** Options for configuring a loose object backend. */
|
93
|
+
typedef struct {
|
94
|
+
unsigned int version; /**< version for the struct */
|
95
|
+
|
96
|
+
/** A combination of the `git_odb_backend_loose_flag_t` types. */
|
97
|
+
uint32_t flags;
|
98
|
+
|
99
|
+
/**
|
100
|
+
* zlib compression level to use (0-9), where 1 is the fastest
|
101
|
+
* at the expense of larger files, and 9 produces the best
|
102
|
+
* compression at the expense of speed. 0 indicates that no
|
103
|
+
* compression should be performed. -1 is the default (currently
|
104
|
+
* optimizing for speed).
|
105
|
+
*/
|
106
|
+
int compression_level;
|
107
|
+
|
108
|
+
/** Permissions to use creating a directory or 0 for defaults */
|
109
|
+
unsigned int dir_mode;
|
110
|
+
|
111
|
+
/** Permissions to use creating a file or 0 for defaults */
|
112
|
+
unsigned int file_mode;
|
113
|
+
|
114
|
+
/**
|
115
|
+
* Type of object IDs to use for this object database, or
|
116
|
+
* 0 for default (currently SHA1).
|
117
|
+
*/
|
118
|
+
git_oid_t oid_type;
|
119
|
+
} git_odb_backend_loose_options;
|
120
|
+
|
121
|
+
/* The current version of the diff options structure */
|
122
|
+
#define GIT_ODB_BACKEND_LOOSE_OPTIONS_VERSION 1
|
123
|
+
|
124
|
+
/* Stack initializer for odb loose backend options. Alternatively use
|
125
|
+
* `git_odb_backend_loose_options_init` programmatic initialization.
|
126
|
+
*/
|
127
|
+
#define GIT_ODB_BACKEND_LOOSE_OPTIONS_INIT \
|
128
|
+
{ GIT_ODB_BACKEND_LOOSE_OPTIONS_VERSION, 0, -1 }
|
36
129
|
|
37
130
|
/**
|
38
131
|
* Create a backend for loose objects
|
39
132
|
*
|
40
133
|
* @param out location to store the odb backend pointer
|
41
134
|
* @param objects_dir the Git repository's objects directory
|
42
|
-
* @param
|
43
|
-
* @param do_fsync whether to do an fsync() after writing
|
44
|
-
* @param dir_mode permissions to use creating a directory or 0 for defaults
|
45
|
-
* @param file_mode permissions to use creating a file or 0 for defaults
|
135
|
+
* @param opts options for the loose object backend or NULL
|
46
136
|
*
|
47
137
|
* @return 0 or an error code
|
48
138
|
*/
|
139
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
140
|
+
GIT_EXTERN(int) git_odb_backend_loose(
|
141
|
+
git_odb_backend **out,
|
142
|
+
const char *objects_dir,
|
143
|
+
git_odb_backend_loose_options *opts);
|
144
|
+
#else
|
49
145
|
GIT_EXTERN(int) git_odb_backend_loose(
|
50
146
|
git_odb_backend **out,
|
51
147
|
const char *objects_dir,
|
@@ -53,19 +149,7 @@ GIT_EXTERN(int) git_odb_backend_loose(
|
|
53
149
|
int do_fsync,
|
54
150
|
unsigned int dir_mode,
|
55
151
|
unsigned int file_mode);
|
56
|
-
|
57
|
-
/**
|
58
|
-
* Create a backend out of a single packfile
|
59
|
-
*
|
60
|
-
* This can be useful for inspecting the contents of a single
|
61
|
-
* packfile.
|
62
|
-
*
|
63
|
-
* @param out location to store the odb backend pointer
|
64
|
-
* @param index_file path to the packfile's .idx file
|
65
|
-
*
|
66
|
-
* @return 0 or an error code
|
67
|
-
*/
|
68
|
-
GIT_EXTERN(int) git_odb_backend_one_pack(git_odb_backend **out, const char *index_file);
|
152
|
+
#endif
|
69
153
|
|
70
154
|
/** Streaming mode */
|
71
155
|
typedef enum {
|
@@ -87,6 +171,10 @@ struct git_odb_stream {
|
|
87
171
|
unsigned int mode;
|
88
172
|
void *hash_ctx;
|
89
173
|
|
174
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
175
|
+
git_oid_t oid_type;
|
176
|
+
#endif
|
177
|
+
|
90
178
|
git_object_size_t declared_size;
|
91
179
|
git_object_size_t received_bytes;
|
92
180
|
|
@@ -9,6 +9,7 @@
|
|
9
9
|
|
10
10
|
#include "common.h"
|
11
11
|
#include "types.h"
|
12
|
+
#include "experimental.h"
|
12
13
|
|
13
14
|
/**
|
14
15
|
* @file git2/oid.h
|
@@ -19,11 +20,76 @@
|
|
19
20
|
*/
|
20
21
|
GIT_BEGIN_DECL
|
21
22
|
|
22
|
-
/**
|
23
|
-
|
23
|
+
/** The type of object id. */
|
24
|
+
typedef enum {
|
24
25
|
|
25
|
-
|
26
|
-
|
26
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
27
|
+
GIT_OID_SHA1 = 1, /**< SHA1 */
|
28
|
+
GIT_OID_SHA256 = 2 /**< SHA256 */
|
29
|
+
#else
|
30
|
+
GIT_OID_SHA1 = 1 /**< SHA1 */
|
31
|
+
#endif
|
32
|
+
|
33
|
+
} git_oid_t;
|
34
|
+
|
35
|
+
/*
|
36
|
+
* SHA1 is currently the only supported object ID type.
|
37
|
+
*/
|
38
|
+
|
39
|
+
/** SHA1 is currently libgit2's default oid type. */
|
40
|
+
#define GIT_OID_DEFAULT GIT_OID_SHA1
|
41
|
+
|
42
|
+
/** Size (in bytes) of a raw/binary sha1 oid */
|
43
|
+
#define GIT_OID_SHA1_SIZE 20
|
44
|
+
/** Size (in bytes) of a hex formatted sha1 oid */
|
45
|
+
#define GIT_OID_SHA1_HEXSIZE (GIT_OID_SHA1_SIZE * 2)
|
46
|
+
|
47
|
+
/**
|
48
|
+
* The binary representation of the null sha1 object ID.
|
49
|
+
*/
|
50
|
+
#ifndef GIT_EXPERIMENTAL_SHA256
|
51
|
+
# define GIT_OID_SHA1_ZERO { { 0 } }
|
52
|
+
#else
|
53
|
+
# define GIT_OID_SHA1_ZERO { GIT_OID_SHA1, { 0 } }
|
54
|
+
#endif
|
55
|
+
|
56
|
+
/**
|
57
|
+
* The string representation of the null sha1 object ID.
|
58
|
+
*/
|
59
|
+
#define GIT_OID_SHA1_HEXZERO "0000000000000000000000000000000000000000"
|
60
|
+
|
61
|
+
/*
|
62
|
+
* Experimental SHA256 support is a breaking change to the API.
|
63
|
+
* This exists for application compatibility testing.
|
64
|
+
*/
|
65
|
+
|
66
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
67
|
+
|
68
|
+
/** Size (in bytes) of a raw/binary sha256 oid */
|
69
|
+
# define GIT_OID_SHA256_SIZE 32
|
70
|
+
/** Size (in bytes) of a hex formatted sha256 oid */
|
71
|
+
# define GIT_OID_SHA256_HEXSIZE (GIT_OID_SHA256_SIZE * 2)
|
72
|
+
|
73
|
+
/**
|
74
|
+
* The binary representation of the null sha256 object ID.
|
75
|
+
*/
|
76
|
+
# define GIT_OID_SHA256_ZERO { GIT_OID_SHA256, { 0 } }
|
77
|
+
|
78
|
+
/**
|
79
|
+
* The string representation of the null sha256 object ID.
|
80
|
+
*/
|
81
|
+
# define GIT_OID_SHA256_HEXZERO "0000000000000000000000000000000000000000000000000000000000000000"
|
82
|
+
|
83
|
+
#endif
|
84
|
+
|
85
|
+
/* Maximum possible object ID size in raw / hex string format. */
|
86
|
+
#ifndef GIT_EXPERIMENTAL_SHA256
|
87
|
+
# define GIT_OID_MAX_SIZE GIT_OID_SHA1_SIZE
|
88
|
+
# define GIT_OID_MAX_HEXSIZE GIT_OID_SHA1_HEXSIZE
|
89
|
+
#else
|
90
|
+
# define GIT_OID_MAX_SIZE GIT_OID_SHA256_SIZE
|
91
|
+
# define GIT_OID_MAX_HEXSIZE GIT_OID_SHA256_HEXSIZE
|
92
|
+
#endif
|
27
93
|
|
28
94
|
/** Minimum length (in number of hex characters,
|
29
95
|
* i.e. packets of 4 bits) of an oid prefix */
|
@@ -31,29 +97,50 @@ GIT_BEGIN_DECL
|
|
31
97
|
|
32
98
|
/** Unique identity of any object (commit, tree, blob, tag). */
|
33
99
|
typedef struct git_oid {
|
100
|
+
|
101
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
102
|
+
/** type of object id */
|
103
|
+
unsigned char type;
|
104
|
+
#endif
|
105
|
+
|
34
106
|
/** raw binary formatted id */
|
35
|
-
unsigned char id[
|
107
|
+
unsigned char id[GIT_OID_MAX_SIZE];
|
36
108
|
} git_oid;
|
37
109
|
|
38
110
|
/**
|
39
111
|
* Parse a hex formatted object id into a git_oid.
|
40
112
|
*
|
113
|
+
* The appropriate number of bytes for the given object ID type will
|
114
|
+
* be read from the string - 40 bytes for SHA1, 64 bytes for SHA256.
|
115
|
+
* The given string need not be NUL terminated.
|
116
|
+
*
|
41
117
|
* @param out oid structure the result is written into.
|
42
118
|
* @param str input hex string; must be pointing at the start of
|
43
119
|
* the hex sequence and have at least the number of bytes
|
44
|
-
* needed for an oid encoded in hex (40 bytes
|
120
|
+
* needed for an oid encoded in hex (40 bytes for sha1,
|
121
|
+
* 256 bytes for sha256).
|
122
|
+
* @param type the type of object id
|
45
123
|
* @return 0 or an error code
|
46
124
|
*/
|
125
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
126
|
+
GIT_EXTERN(int) git_oid_fromstr(git_oid *out, const char *str, git_oid_t type);
|
127
|
+
#else
|
47
128
|
GIT_EXTERN(int) git_oid_fromstr(git_oid *out, const char *str);
|
129
|
+
#endif
|
48
130
|
|
49
131
|
/**
|
50
|
-
* Parse a hex formatted
|
132
|
+
* Parse a hex formatted NUL-terminated string into a git_oid.
|
51
133
|
*
|
52
134
|
* @param out oid structure the result is written into.
|
53
135
|
* @param str input hex string; must be null-terminated.
|
136
|
+
* @param type the type of object id
|
54
137
|
* @return 0 or an error code
|
55
138
|
*/
|
139
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
140
|
+
GIT_EXTERN(int) git_oid_fromstrp(git_oid *out, const char *str, git_oid_t type);
|
141
|
+
#else
|
56
142
|
GIT_EXTERN(int) git_oid_fromstrp(git_oid *out, const char *str);
|
143
|
+
#endif
|
57
144
|
|
58
145
|
/**
|
59
146
|
* Parse N characters of a hex formatted object id into a git_oid.
|
@@ -64,9 +151,14 @@ GIT_EXTERN(int) git_oid_fromstrp(git_oid *out, const char *str);
|
|
64
151
|
* @param out oid structure the result is written into.
|
65
152
|
* @param str input hex string of at least size `length`
|
66
153
|
* @param length length of the input string
|
154
|
+
* @param type the type of object id
|
67
155
|
* @return 0 or an error code
|
68
156
|
*/
|
157
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
158
|
+
GIT_EXTERN(int) git_oid_fromstrn(git_oid *out, const char *str, size_t length, git_oid_t type);
|
159
|
+
#else
|
69
160
|
GIT_EXTERN(int) git_oid_fromstrn(git_oid *out, const char *str, size_t length);
|
161
|
+
#endif
|
70
162
|
|
71
163
|
/**
|
72
164
|
* Copy an already raw oid into a git_oid structure.
|
@@ -75,16 +167,21 @@ GIT_EXTERN(int) git_oid_fromstrn(git_oid *out, const char *str, size_t length);
|
|
75
167
|
* @param raw the raw input bytes to be copied.
|
76
168
|
* @return 0 on success or error code
|
77
169
|
*/
|
170
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
171
|
+
GIT_EXTERN(int) git_oid_fromraw(git_oid *out, const unsigned char *raw, git_oid_t type);
|
172
|
+
#else
|
78
173
|
GIT_EXTERN(int) git_oid_fromraw(git_oid *out, const unsigned char *raw);
|
174
|
+
#endif
|
79
175
|
|
80
176
|
/**
|
81
177
|
* Format a git_oid into a hex string.
|
82
178
|
*
|
83
179
|
* @param out output hex string; must be pointing at the start of
|
84
180
|
* the hex sequence and have at least the number of bytes
|
85
|
-
* needed for an oid encoded in hex (40 bytes
|
86
|
-
*
|
87
|
-
* by the caller if it is
|
181
|
+
* needed for an oid encoded in hex (40 bytes for SHA1,
|
182
|
+
* 64 bytes for SHA256). Only the oid digits are written;
|
183
|
+
* a '\\0' terminator must be added by the caller if it is
|
184
|
+
* required.
|
88
185
|
* @param id oid structure to format.
|
89
186
|
* @return 0 on success or error code
|
90
187
|
*/
|
@@ -94,7 +191,7 @@ GIT_EXTERN(int) git_oid_fmt(char *out, const git_oid *id);
|
|
94
191
|
* Format a git_oid into a partial hex string.
|
95
192
|
*
|
96
193
|
* @param out output hex string; you say how many bytes to write.
|
97
|
-
* If the number of bytes is >
|
194
|
+
* If the number of bytes is > GIT_OID_SHA1_HEXSIZE, extra bytes
|
98
195
|
* will be zeroed; if not, a '\0' terminator is NOT added.
|
99
196
|
* @param n number of characters to write into out string
|
100
197
|
* @param id oid structure to format.
|
@@ -110,9 +207,10 @@ GIT_EXTERN(int) git_oid_nfmt(char *out, size_t n, const git_oid *id);
|
|
110
207
|
*
|
111
208
|
* @param out output hex string; must be pointing at the start of
|
112
209
|
* the hex sequence and have at least the number of bytes
|
113
|
-
* needed for an oid encoded in hex (41 bytes
|
114
|
-
*
|
115
|
-
* by the caller if it
|
210
|
+
* needed for an oid encoded in hex (41 bytes for SHA1,
|
211
|
+
* 65 bytes for SHA256). Only the oid digits are written;
|
212
|
+
* a '\\0' terminator must be added by the caller if it
|
213
|
+
* is required.
|
116
214
|
* @param id oid structure to format.
|
117
215
|
* @return 0 on success, non-zero callback return value, or error code
|
118
216
|
*/
|
@@ -134,7 +232,9 @@ GIT_EXTERN(char *) git_oid_tostr_s(const git_oid *oid);
|
|
134
232
|
/**
|
135
233
|
* Format a git_oid into a buffer as a hex format c-string.
|
136
234
|
*
|
137
|
-
* If the buffer is smaller than
|
235
|
+
* If the buffer is smaller than the size of a hex-formatted oid string
|
236
|
+
* plus an additional byte (GIT_OID_SHA_HEXSIZE + 1 for SHA1 or
|
237
|
+
* GIT_OID_SHA256_HEXSIZE + 1 for SHA256), then the resulting
|
138
238
|
* oid c-string will be truncated to n-1 characters (but will still be
|
139
239
|
* NUL-byte terminated).
|
140
240
|
*
|
@@ -351,6 +351,15 @@ typedef struct {
|
|
351
351
|
* pointing to this URL.
|
352
352
|
*/
|
353
353
|
const char *origin_url;
|
354
|
+
|
355
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
356
|
+
/**
|
357
|
+
*
|
358
|
+
* Type of object IDs to use for this repository, or 0 for
|
359
|
+
* default (currently SHA1).
|
360
|
+
*/
|
361
|
+
git_oid_t oid_type;
|
362
|
+
#endif
|
354
363
|
} git_repository_init_options;
|
355
364
|
|
356
365
|
#define GIT_REPOSITORY_INIT_OPTIONS_VERSION 1
|
@@ -456,7 +465,9 @@ GIT_EXTERN(int) git_repository_head_unborn(git_repository *repo);
|
|
456
465
|
* Check if a repository is empty
|
457
466
|
*
|
458
467
|
* An empty repository has just been initialized and contains no references
|
459
|
-
* apart from HEAD, which must be pointing to the unborn master branch
|
468
|
+
* apart from HEAD, which must be pointing to the unborn master branch,
|
469
|
+
* or the branch specified for the repository in the `init.defaultBranch`
|
470
|
+
* configuration variable.
|
460
471
|
*
|
461
472
|
* @param repo Repo to test
|
462
473
|
* @return 1 if the repository is empty, 0 if it isn't, error code
|
@@ -949,6 +960,14 @@ GIT_EXTERN(int) git_repository_ident(const char **name, const char **email, cons
|
|
949
960
|
*/
|
950
961
|
GIT_EXTERN(int) git_repository_set_ident(git_repository *repo, const char *name, const char *email);
|
951
962
|
|
963
|
+
/**
|
964
|
+
* Gets the object type used by this repository.
|
965
|
+
*
|
966
|
+
* @param repo the repository
|
967
|
+
* @return the object id type
|
968
|
+
*/
|
969
|
+
GIT_EXTERN(git_oid_t) git_repository_oid_type(git_repository *repo);
|
970
|
+
|
952
971
|
/** @} */
|
953
972
|
GIT_END_DECL
|
954
973
|
#endif
|
@@ -44,7 +44,12 @@ typedef enum {
|
|
44
44
|
* All ignored files are also stashed and then cleaned up from
|
45
45
|
* the working directory
|
46
46
|
*/
|
47
|
-
GIT_STASH_INCLUDE_IGNORED = (1 << 2)
|
47
|
+
GIT_STASH_INCLUDE_IGNORED = (1 << 2),
|
48
|
+
|
49
|
+
/**
|
50
|
+
* All changes in the index and working directory are left intact
|
51
|
+
*/
|
52
|
+
GIT_STASH_KEEP_ALL = (1 << 3)
|
48
53
|
} git_stash_flags;
|
49
54
|
|
50
55
|
/**
|
@@ -52,15 +57,10 @@ typedef enum {
|
|
52
57
|
*
|
53
58
|
* @param out Object id of the commit containing the stashed state.
|
54
59
|
* This commit is also the target of the direct reference refs/stash.
|
55
|
-
*
|
56
60
|
* @param repo The owning repository.
|
57
|
-
*
|
58
61
|
* @param stasher The identity of the person performing the stashing.
|
59
|
-
*
|
60
62
|
* @param message Optional description along with the stashed state.
|
61
|
-
*
|
62
63
|
* @param flags Flags to control the stashing process. (see GIT_STASH_* above)
|
63
|
-
*
|
64
64
|
* @return 0 on success, GIT_ENOTFOUND where there's nothing to stash,
|
65
65
|
* or error code.
|
66
66
|
*/
|
@@ -71,6 +71,60 @@ GIT_EXTERN(int) git_stash_save(
|
|
71
71
|
const char *message,
|
72
72
|
uint32_t flags);
|
73
73
|
|
74
|
+
/**
|
75
|
+
* Stash save options structure
|
76
|
+
*
|
77
|
+
* Initialize with `GIT_STASH_SAVE_OPTIONS_INIT`. Alternatively, you can
|
78
|
+
* use `git_stash_save_options_init`.
|
79
|
+
*
|
80
|
+
*/
|
81
|
+
typedef struct git_stash_save_options {
|
82
|
+
unsigned int version;
|
83
|
+
|
84
|
+
/** Flags to control the stashing process. (see GIT_STASH_* above) */
|
85
|
+
uint32_t flags;
|
86
|
+
|
87
|
+
/** The identity of the person performing the stashing. */
|
88
|
+
const git_signature *stasher;
|
89
|
+
|
90
|
+
/** Optional description along with the stashed state. */
|
91
|
+
const char *message;
|
92
|
+
|
93
|
+
/** Optional paths that control which files are stashed. */
|
94
|
+
git_strarray paths;
|
95
|
+
} git_stash_save_options;
|
96
|
+
|
97
|
+
#define GIT_STASH_SAVE_OPTIONS_VERSION 1
|
98
|
+
#define GIT_STASH_SAVE_OPTIONS_INIT { GIT_STASH_SAVE_OPTIONS_VERSION }
|
99
|
+
|
100
|
+
/**
|
101
|
+
* Initialize git_stash_save_options structure
|
102
|
+
*
|
103
|
+
* Initializes a `git_stash_save_options` with default values. Equivalent to
|
104
|
+
* creating an instance with `GIT_STASH_SAVE_OPTIONS_INIT`.
|
105
|
+
*
|
106
|
+
* @param opts The `git_stash_save_options` struct to initialize.
|
107
|
+
* @param version The struct version; pass `GIT_STASH_SAVE_OPTIONS_VERSION`.
|
108
|
+
* @return Zero on success; -1 on failure.
|
109
|
+
*/
|
110
|
+
GIT_EXTERN(int) git_stash_save_options_init(
|
111
|
+
git_stash_save_options *opts, unsigned int version);
|
112
|
+
|
113
|
+
/**
|
114
|
+
* Save the local modifications to a new stash, with options.
|
115
|
+
*
|
116
|
+
* @param out Object id of the commit containing the stashed state.
|
117
|
+
* This commit is also the target of the direct reference refs/stash.
|
118
|
+
* @param repo The owning repository.
|
119
|
+
* @param opts The stash options.
|
120
|
+
* @return 0 on success, GIT_ENOTFOUND where there's nothing to stash,
|
121
|
+
* or error code.
|
122
|
+
*/
|
123
|
+
GIT_EXTERN(int) git_stash_save_with_opts(
|
124
|
+
git_oid *out,
|
125
|
+
git_repository *repo,
|
126
|
+
const git_stash_save_options *opts);
|
127
|
+
|
74
128
|
/** Stash application flags. */
|
75
129
|
typedef enum {
|
76
130
|
GIT_STASH_APPLY_DEFAULT = 0,
|
@@ -36,19 +36,6 @@ typedef struct git_strarray {
|
|
36
36
|
*/
|
37
37
|
GIT_EXTERN(void) git_strarray_dispose(git_strarray *array);
|
38
38
|
|
39
|
-
/**
|
40
|
-
* Copy a string array object from source to target.
|
41
|
-
*
|
42
|
-
* Note: target is overwritten and hence should be empty, otherwise its
|
43
|
-
* contents are leaked. Call git_strarray_free() if necessary.
|
44
|
-
*
|
45
|
-
* @param tgt target
|
46
|
-
* @param src source
|
47
|
-
* @return 0 on success, < 0 on allocation failure
|
48
|
-
*/
|
49
|
-
GIT_EXTERN(int) git_strarray_copy(git_strarray *tgt, const git_strarray *src);
|
50
|
-
|
51
|
-
|
52
39
|
/** @} */
|
53
40
|
GIT_END_DECL
|
54
41
|
|
@@ -36,7 +36,7 @@ struct git_odb_backend {
|
|
36
36
|
void **, size_t *, git_object_t *, git_odb_backend *, const git_oid *);
|
37
37
|
|
38
38
|
/* To find a unique object given a prefix of its oid. The oid given
|
39
|
-
* must be so that the remaining (
|
39
|
+
* must be so that the remaining (GIT_OID_SHA1_HEXSIZE - len)*4 bits are 0s.
|
40
40
|
*/
|
41
41
|
int GIT_CALLBACK(read_prefix)(
|
42
42
|
git_oid *, void **, size_t *, git_object_t *,
|
@@ -57,6 +57,18 @@ struct git_transport {
|
|
57
57
|
unsigned int *capabilities,
|
58
58
|
git_transport *transport);
|
59
59
|
|
60
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
61
|
+
/**
|
62
|
+
* Gets the object type for the remote repository.
|
63
|
+
*
|
64
|
+
* This function may be called after a successful call to
|
65
|
+
* `connect()`.
|
66
|
+
*/
|
67
|
+
int GIT_CALLBACK(oid_type)(
|
68
|
+
git_oid_t *object_type,
|
69
|
+
git_transport *transport);
|
70
|
+
#endif
|
71
|
+
|
60
72
|
/**
|
61
73
|
* Get the list of available references in the remote repository.
|
62
74
|
*
|