rugged 0.24.6.1 → 0.25.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE +1 -1
- data/ext/rugged/extconf.rb +9 -2
- data/ext/rugged/rugged.c +85 -21
- data/ext/rugged/rugged.h +7 -21
- data/ext/rugged/rugged_backend.c +3 -20
- data/ext/rugged/rugged_blame.c +7 -24
- data/ext/rugged/rugged_blob.c +136 -59
- data/ext/rugged/rugged_branch.c +3 -20
- data/ext/rugged/rugged_branch_collection.c +3 -20
- data/ext/rugged/rugged_commit.c +251 -101
- data/ext/rugged/rugged_config.c +3 -20
- data/ext/rugged/rugged_cred.c +3 -20
- data/ext/rugged/rugged_diff.c +3 -20
- data/ext/rugged/rugged_diff_delta.c +3 -20
- data/ext/rugged/rugged_diff_hunk.c +3 -20
- data/ext/rugged/rugged_diff_line.c +3 -20
- data/ext/rugged/rugged_index.c +46 -229
- data/ext/rugged/rugged_note.c +3 -20
- data/ext/rugged/rugged_object.c +3 -20
- data/ext/rugged/rugged_patch.c +192 -34
- data/ext/rugged/rugged_rebase.c +90 -48
- data/ext/rugged/rugged_reference.c +4 -21
- data/ext/rugged/rugged_reference_collection.c +3 -20
- data/ext/rugged/rugged_remote.c +70 -42
- data/ext/rugged/rugged_remote_collection.c +3 -20
- data/ext/rugged/rugged_repo.c +50 -59
- data/ext/rugged/rugged_revwalk.c +4 -21
- data/ext/rugged/rugged_settings.c +3 -20
- data/ext/rugged/rugged_signature.c +3 -20
- data/ext/rugged/rugged_submodule.c +4 -21
- data/ext/rugged/rugged_submodule_collection.c +3 -20
- data/ext/rugged/rugged_tag.c +3 -20
- data/ext/rugged/rugged_tag_collection.c +3 -20
- data/ext/rugged/rugged_tree.c +189 -184
- data/lib/rugged/attributes.rb +5 -0
- data/lib/rugged/blob.rb +5 -0
- data/lib/rugged/branch.rb +6 -1
- data/lib/rugged/commit.rb +5 -0
- data/lib/rugged/console.rb +5 -0
- data/lib/rugged/credentials.rb +5 -0
- data/lib/rugged/diff/delta.rb +5 -0
- data/lib/rugged/diff/hunk.rb +5 -0
- data/lib/rugged/diff/line.rb +5 -0
- data/lib/rugged/diff.rb +5 -0
- data/lib/rugged/index.rb +120 -0
- data/lib/rugged/object.rb +5 -0
- data/lib/rugged/patch.rb +5 -0
- data/lib/rugged/reference.rb +5 -0
- data/lib/rugged/remote.rb +5 -0
- data/lib/rugged/repository.rb +9 -4
- data/lib/rugged/submodule_collection.rb +5 -0
- data/lib/rugged/tag.rb +5 -0
- data/lib/rugged/tree.rb +156 -1
- data/lib/rugged/version.rb +6 -1
- data/lib/rugged/walker.rb +5 -0
- data/lib/rugged.rb +5 -0
- data/vendor/libgit2/CMakeLists.txt +12 -2
- data/vendor/libgit2/include/git2/blob.h +39 -28
- data/vendor/libgit2/include/git2/commit.h +76 -0
- data/vendor/libgit2/include/git2/common.h +21 -1
- data/vendor/libgit2/include/git2/describe.h +5 -2
- data/vendor/libgit2/include/git2/diff.h +62 -7
- data/vendor/libgit2/include/git2/errors.h +2 -1
- data/vendor/libgit2/include/git2/index.h +25 -0
- data/vendor/libgit2/include/git2/merge.h +10 -1
- data/vendor/libgit2/include/git2/odb.h +47 -1
- data/vendor/libgit2/include/git2/pack.h +4 -4
- data/vendor/libgit2/include/git2/patch.h +1 -1
- data/vendor/libgit2/include/git2/proxy.h +92 -0
- data/vendor/libgit2/include/git2/refs.h +11 -0
- data/vendor/libgit2/include/git2/remote.h +21 -8
- data/vendor/libgit2/include/git2/repository.h +20 -1
- data/vendor/libgit2/include/git2/revwalk.h +4 -6
- data/vendor/libgit2/include/git2/signature.h +13 -0
- data/vendor/libgit2/include/git2/submodule.h +11 -3
- data/vendor/libgit2/include/git2/sys/merge.h +177 -0
- data/vendor/libgit2/include/git2/sys/odb_backend.h +11 -0
- data/vendor/libgit2/include/git2/sys/remote.h +16 -0
- data/vendor/libgit2/include/git2/sys/stream.h +2 -1
- data/vendor/libgit2/include/git2/sys/time.h +31 -0
- data/vendor/libgit2/include/git2/sys/transport.h +3 -1
- data/vendor/libgit2/include/git2/tag.h +9 -0
- data/vendor/libgit2/include/git2/transaction.h +9 -0
- data/vendor/libgit2/include/git2/tree.h +55 -0
- data/vendor/libgit2/include/git2/version.h +4 -4
- data/vendor/libgit2/include/git2.h +1 -0
- data/vendor/libgit2/src/annotated_commit.c +99 -80
- data/vendor/libgit2/src/annotated_commit.h +5 -2
- data/vendor/libgit2/src/apply.c +377 -0
- data/vendor/libgit2/src/apply.h +21 -0
- data/vendor/libgit2/src/array.h +0 -1
- data/vendor/libgit2/src/blob.c +71 -39
- data/vendor/libgit2/src/branch.c +7 -5
- data/vendor/libgit2/src/buffer.c +252 -20
- data/vendor/libgit2/src/buffer.h +8 -0
- data/vendor/libgit2/src/checkout.c +69 -42
- data/vendor/libgit2/src/clone.c +0 -8
- data/vendor/libgit2/src/commit.c +193 -49
- data/vendor/libgit2/src/commit_list.c +8 -3
- data/vendor/libgit2/src/commit_list.h +1 -0
- data/vendor/libgit2/src/common.h +2 -1
- data/vendor/libgit2/src/config.c +3 -3
- data/vendor/libgit2/src/config_file.c +20 -10
- data/vendor/libgit2/src/crlf.c +1 -0
- data/vendor/libgit2/src/curl_stream.c +106 -6
- data/vendor/libgit2/src/delta.c +238 -62
- data/vendor/libgit2/src/delta.h +79 -58
- data/vendor/libgit2/src/describe.c +1 -1
- data/vendor/libgit2/src/diff.c +32 -1554
- data/vendor/libgit2/src/diff.h +14 -122
- data/vendor/libgit2/src/diff_driver.c +4 -6
- data/vendor/libgit2/src/diff_file.c +3 -0
- data/vendor/libgit2/src/diff_generate.c +1613 -0
- data/vendor/libgit2/src/diff_generate.h +123 -0
- data/vendor/libgit2/src/diff_parse.c +101 -0
- data/vendor/libgit2/src/diff_parse.h +18 -0
- data/vendor/libgit2/src/diff_print.c +263 -144
- data/vendor/libgit2/src/diff_stats.c +21 -12
- data/vendor/libgit2/src/diff_tform.c +1 -0
- data/vendor/libgit2/src/diff_tform.h +22 -0
- data/vendor/libgit2/src/diff_xdiff.c +9 -9
- data/vendor/libgit2/src/diff_xdiff.h +5 -5
- data/vendor/libgit2/src/fetchhead.c +8 -8
- data/vendor/libgit2/src/filebuf.c +6 -1
- data/vendor/libgit2/src/filebuf.h +1 -0
- data/vendor/libgit2/src/fileops.c +22 -1
- data/vendor/libgit2/src/fileops.h +8 -2
- data/vendor/libgit2/src/fnmatch.c +18 -5
- data/vendor/libgit2/src/global.c +21 -4
- data/vendor/libgit2/src/global.h +6 -0
- data/vendor/libgit2/src/graph.c +1 -1
- data/vendor/libgit2/src/index.c +159 -46
- data/vendor/libgit2/src/index.h +2 -0
- data/vendor/libgit2/src/iterator.c +1573 -1468
- data/vendor/libgit2/src/iterator.h +52 -69
- data/vendor/libgit2/src/merge.c +163 -64
- data/vendor/libgit2/src/merge.h +61 -2
- data/vendor/libgit2/src/merge_driver.c +397 -0
- data/vendor/libgit2/src/merge_driver.h +60 -0
- data/vendor/libgit2/src/merge_file.c +11 -49
- data/vendor/libgit2/src/netops.c +12 -10
- data/vendor/libgit2/src/object_api.c +19 -1
- data/vendor/libgit2/src/odb.c +228 -52
- data/vendor/libgit2/src/odb_loose.c +19 -1
- data/vendor/libgit2/src/odb_mempack.c +1 -1
- data/vendor/libgit2/src/odb_pack.c +27 -1
- data/vendor/libgit2/src/openssl_stream.c +4 -5
- data/vendor/libgit2/src/pack-objects.c +105 -76
- data/vendor/libgit2/src/pack-objects.h +13 -12
- data/vendor/libgit2/src/pack.c +16 -10
- data/vendor/libgit2/src/pack.h +2 -0
- data/vendor/libgit2/src/patch.c +216 -0
- data/vendor/libgit2/src/patch.h +66 -0
- data/vendor/libgit2/src/{diff_patch.c → patch_generate.c} +203 -376
- data/vendor/libgit2/src/patch_generate.h +68 -0
- data/vendor/libgit2/src/patch_parse.c +1159 -0
- data/vendor/libgit2/src/patch_parse.h +56 -0
- data/vendor/libgit2/src/path.c +38 -2
- data/vendor/libgit2/src/path.h +18 -0
- data/vendor/libgit2/src/pathspec.c +1 -1
- data/vendor/libgit2/src/pool.h +5 -0
- data/vendor/libgit2/src/pqueue.c +12 -5
- data/vendor/libgit2/src/pqueue.h +1 -0
- data/vendor/libgit2/src/proxy.c +32 -0
- data/vendor/libgit2/src/proxy.h +14 -0
- data/vendor/libgit2/src/push.c +1 -1
- data/vendor/libgit2/src/rebase.c +63 -36
- data/vendor/libgit2/src/refdb.c +4 -2
- data/vendor/libgit2/src/refdb_fs.c +82 -54
- data/vendor/libgit2/src/refs.c +13 -1
- data/vendor/libgit2/src/remote.c +20 -81
- data/vendor/libgit2/src/repository.c +212 -29
- data/vendor/libgit2/src/reset.c +1 -1
- data/vendor/libgit2/src/revparse.c +1 -1
- data/vendor/libgit2/src/revwalk.c +260 -184
- data/vendor/libgit2/src/settings.c +11 -3
- data/vendor/libgit2/src/signature.c +27 -2
- data/vendor/libgit2/src/sortedcache.c +14 -5
- data/vendor/libgit2/src/stash.c +1 -0
- data/vendor/libgit2/src/status.c +1 -0
- data/vendor/libgit2/src/stransport_stream.c +4 -2
- data/vendor/libgit2/src/stream.h +2 -2
- data/vendor/libgit2/src/submodule.c +16 -4
- data/vendor/libgit2/src/sysdir.c +1 -1
- data/vendor/libgit2/src/transport.c +3 -5
- data/vendor/libgit2/src/transports/http.c +38 -13
- data/vendor/libgit2/src/transports/local.c +4 -1
- data/vendor/libgit2/src/transports/smart.c +6 -0
- data/vendor/libgit2/src/transports/smart.h +1 -0
- data/vendor/libgit2/src/transports/smart_pkt.c +5 -13
- data/vendor/libgit2/src/transports/smart_protocol.c +22 -7
- data/vendor/libgit2/src/transports/winhttp.c +144 -11
- data/vendor/libgit2/src/tree.c +267 -2
- data/vendor/libgit2/src/unix/posix.h +10 -0
- data/vendor/libgit2/src/unix/pthread.h +2 -0
- data/vendor/libgit2/src/util.c +25 -2
- data/vendor/libgit2/src/util.h +10 -0
- data/vendor/libgit2/src/varint.c +44 -0
- data/vendor/libgit2/src/varint.h +15 -0
- data/vendor/libgit2/src/vector.c +58 -0
- data/vendor/libgit2/src/vector.h +8 -0
- data/vendor/libgit2/src/win32/posix.h +3 -0
- data/vendor/libgit2/src/win32/thread.c +18 -0
- data/vendor/libgit2/src/win32/thread.h +2 -0
- data/vendor/libgit2/src/win32/w32_util.h +1 -1
- data/vendor/libgit2/src/zstream.c +37 -8
- data/vendor/libgit2/src/zstream.h +8 -1
- metadata +100 -82
- data/vendor/libgit2/Makefile.embed +0 -60
- data/vendor/libgit2/src/delta-apply.c +0 -166
- data/vendor/libgit2/src/delta-apply.h +0 -62
- data/vendor/libgit2/src/diff_patch.h +0 -83
@@ -83,6 +83,17 @@ struct git_odb_backend {
|
|
83
83
|
git_odb_writepack **, git_odb_backend *, git_odb *odb,
|
84
84
|
git_transfer_progress_cb progress_cb, void *progress_payload);
|
85
85
|
|
86
|
+
/**
|
87
|
+
* "Freshens" an already existing object, updating its last-used
|
88
|
+
* time. This occurs when `git_odb_write` was called, but the
|
89
|
+
* object already existed (and will not be re-written). The
|
90
|
+
* underlying implementation may want to update last-used timestamps.
|
91
|
+
*
|
92
|
+
* If callers implement this, they should return `0` if the object
|
93
|
+
* exists and was freshened, and non-zero otherwise.
|
94
|
+
*/
|
95
|
+
int (* freshen)(git_odb_backend *, const git_oid *);
|
96
|
+
|
86
97
|
/**
|
87
98
|
* Frees any resources held by the odb (including the `git_odb_backend`
|
88
99
|
* itself). An odb backend implementation must provide this function.
|
@@ -0,0 +1,16 @@
|
|
1
|
+
/*
|
2
|
+
* Copyright (C) the libgit2 contributors. All rights reserved.
|
3
|
+
*
|
4
|
+
* This file is part of libgit2, distributed under the GNU GPL v2 with
|
5
|
+
* a Linking Exception. For full terms see the included COPYING file.
|
6
|
+
*/
|
7
|
+
|
8
|
+
#ifndef INCLUDE_sys_git_transport_h
|
9
|
+
#define INCLUDE_sys_git_transport_h
|
10
|
+
|
11
|
+
#include "git2/net.h"
|
12
|
+
#include "git2/types.h"
|
13
|
+
|
14
|
+
GIT_BEGIN_DECL
|
15
|
+
|
16
|
+
GIT_END_DECL
|
@@ -9,6 +9,7 @@
|
|
9
9
|
|
10
10
|
#include "git2/common.h"
|
11
11
|
#include "git2/types.h"
|
12
|
+
#include "git2/proxy.h"
|
12
13
|
|
13
14
|
GIT_BEGIN_DECL
|
14
15
|
|
@@ -32,7 +33,7 @@ typedef struct git_stream {
|
|
32
33
|
int proxy_support;
|
33
34
|
int (*connect)(struct git_stream *);
|
34
35
|
int (*certificate)(git_cert **, struct git_stream *);
|
35
|
-
int (*set_proxy)(struct git_stream *, const
|
36
|
+
int (*set_proxy)(struct git_stream *, const git_proxy_options *proxy_opts);
|
36
37
|
ssize_t (*read)(struct git_stream *, void *, size_t);
|
37
38
|
ssize_t (*write)(struct git_stream *, const char *, size_t, int);
|
38
39
|
int (*close)(struct git_stream *);
|
@@ -0,0 +1,31 @@
|
|
1
|
+
/*
|
2
|
+
* Copyright (C) the libgit2 contributors. All rights reserved.
|
3
|
+
*
|
4
|
+
* This file is part of libgit2, distributed under the GNU GPL v2 with
|
5
|
+
* a Linking Exception. For full terms see the included COPYING file.
|
6
|
+
*/
|
7
|
+
#ifndef INCLUDE_git_time_h__
|
8
|
+
#define INCLUDE_git_time_h__
|
9
|
+
|
10
|
+
#include "git2/common.h"
|
11
|
+
|
12
|
+
GIT_BEGIN_DECL
|
13
|
+
|
14
|
+
/**
|
15
|
+
* Return a monotonic time value, useful for measuring running time
|
16
|
+
* and setting up timeouts.
|
17
|
+
*
|
18
|
+
* The returned value is an arbitrary point in time -- it can only be
|
19
|
+
* used when comparing it to another `git_time_monotonic` call.
|
20
|
+
*
|
21
|
+
* The time is returned in seconds, with a decimal fraction that differs
|
22
|
+
* on accuracy based on the underlying system, but should be least
|
23
|
+
* accurate to Nanoseconds.
|
24
|
+
*
|
25
|
+
* This function cannot fail.
|
26
|
+
*/
|
27
|
+
GIT_EXTERN(double) git_time_monotonic(void);
|
28
|
+
|
29
|
+
GIT_END_DECL
|
30
|
+
#endif
|
31
|
+
|
@@ -11,6 +11,7 @@
|
|
11
11
|
#include "git2/net.h"
|
12
12
|
#include "git2/types.h"
|
13
13
|
#include "git2/strarray.h"
|
14
|
+
#include "git2/proxy.h"
|
14
15
|
|
15
16
|
/**
|
16
17
|
* @file git2/sys/transport.h
|
@@ -53,6 +54,7 @@ struct git_transport {
|
|
53
54
|
const char *url,
|
54
55
|
git_cred_acquire_cb cred_acquire_cb,
|
55
56
|
void *cred_acquire_payload,
|
57
|
+
const git_proxy_options *proxy_opts,
|
56
58
|
int direction,
|
57
59
|
int flags);
|
58
60
|
|
@@ -65,7 +67,7 @@ struct git_transport {
|
|
65
67
|
git_transport *transport);
|
66
68
|
|
67
69
|
/* Executes the push whose context is in the git_push object. */
|
68
|
-
int
|
70
|
+
int(*push)(git_transport *transport, git_push *push, const git_remote_callbacks *callbacks);
|
69
71
|
|
70
72
|
/* This function may be called after a successful call to connect(), when
|
71
73
|
* the direction is FETCH. The function performs a negotiation to calculate
|
@@ -347,6 +347,15 @@ GIT_EXTERN(int) git_tag_peel(
|
|
347
347
|
git_object **tag_target_out,
|
348
348
|
const git_tag *tag);
|
349
349
|
|
350
|
+
/**
|
351
|
+
* Create an in-memory copy of a tag. The copy must be explicitly
|
352
|
+
* free'd or it will leak.
|
353
|
+
*
|
354
|
+
* @param out Pointer to store the copy of the tag
|
355
|
+
* @param source Original tag to copy
|
356
|
+
*/
|
357
|
+
GIT_EXTERN(int) git_tag_dup(git_tag **out, git_tag *source);
|
358
|
+
|
350
359
|
/** @} */
|
351
360
|
GIT_END_DECL
|
352
361
|
#endif
|
@@ -8,6 +8,14 @@
|
|
8
8
|
#define INCLUDE_git_transaction_h__
|
9
9
|
|
10
10
|
#include "common.h"
|
11
|
+
|
12
|
+
/**
|
13
|
+
* @file git2/transaction.h
|
14
|
+
* @brief Git transactional reference routines
|
15
|
+
* @defgroup git_transaction Git transactional reference routines
|
16
|
+
* @ingroup Git
|
17
|
+
* @{
|
18
|
+
*/
|
11
19
|
GIT_BEGIN_DECL
|
12
20
|
|
13
21
|
/**
|
@@ -107,5 +115,6 @@ GIT_EXTERN(int) git_transaction_commit(git_transaction *tx);
|
|
107
115
|
*/
|
108
116
|
GIT_EXTERN(void) git_transaction_free(git_transaction *tx);
|
109
117
|
|
118
|
+
/** @} */
|
110
119
|
GIT_END_DECL
|
111
120
|
#endif
|
@@ -409,6 +409,61 @@ GIT_EXTERN(int) git_tree_walk(
|
|
409
409
|
git_treewalk_cb callback,
|
410
410
|
void *payload);
|
411
411
|
|
412
|
+
/**
|
413
|
+
* Create an in-memory copy of a tree. The copy must be explicitly
|
414
|
+
* free'd or it will leak.
|
415
|
+
*
|
416
|
+
* @param out Pointer to store the copy of the tree
|
417
|
+
* @param source Original tree to copy
|
418
|
+
*/
|
419
|
+
GIT_EXTERN(int) git_tree_dup(git_tree **out, git_tree *source);
|
420
|
+
|
421
|
+
/**
|
422
|
+
* The kind of update to perform
|
423
|
+
*/
|
424
|
+
typedef enum {
|
425
|
+
/** Update or insert an entry at the specified path */
|
426
|
+
GIT_TREE_UPDATE_UPSERT,
|
427
|
+
/** Remove an entry from the specified path */
|
428
|
+
GIT_TREE_UPDATE_REMOVE,
|
429
|
+
} git_tree_update_t;
|
430
|
+
|
431
|
+
/**
|
432
|
+
* An action to perform during the update of a tree
|
433
|
+
*/
|
434
|
+
typedef struct {
|
435
|
+
/** Update action. If it's an removal, only the path is looked at */
|
436
|
+
git_tree_update_t action;
|
437
|
+
/** The entry's id */
|
438
|
+
git_oid id;
|
439
|
+
/** The filemode/kind of object */
|
440
|
+
git_filemode_t filemode;
|
441
|
+
/** The full path from the root tree */
|
442
|
+
const char *path;
|
443
|
+
} git_tree_update;
|
444
|
+
|
445
|
+
/**
|
446
|
+
* Create a tree based on another one with the specified modifications
|
447
|
+
*
|
448
|
+
* Given the `baseline` perform the changes described in the list of
|
449
|
+
* `updates` and create a new tree.
|
450
|
+
*
|
451
|
+
* This function is optimized for common file/directory addition, removal and
|
452
|
+
* replacement in trees. It is much more efficient than reading the tree into a
|
453
|
+
* `git_index` and modifying that, but in exchange it is not as flexible.
|
454
|
+
*
|
455
|
+
* Deleting and adding the same entry is undefined behaviour, changing
|
456
|
+
* a tree to a blob or viceversa is not supported.
|
457
|
+
*
|
458
|
+
* @param out id of the new tree
|
459
|
+
* @param repo the repository in which to create the tree, must be the
|
460
|
+
* same as for `baseline`
|
461
|
+
* @param baseline the tree to base these changes on
|
462
|
+
* @param nupdates the number of elements in the update list
|
463
|
+
* @param updates the list of updates to perform
|
464
|
+
*/
|
465
|
+
GIT_EXTERN(int) git_tree_create_updated(git_oid *out, git_repository *repo, git_tree *baseline, size_t nupdates, const git_tree_update *updates);
|
466
|
+
|
412
467
|
/** @} */
|
413
468
|
|
414
469
|
GIT_END_DECL
|
@@ -7,12 +7,12 @@
|
|
7
7
|
#ifndef INCLUDE_git_version_h__
|
8
8
|
#define INCLUDE_git_version_h__
|
9
9
|
|
10
|
-
#define LIBGIT2_VERSION "0.
|
10
|
+
#define LIBGIT2_VERSION "0.25.0"
|
11
11
|
#define LIBGIT2_VER_MAJOR 0
|
12
|
-
#define LIBGIT2_VER_MINOR
|
13
|
-
#define LIBGIT2_VER_REVISION
|
12
|
+
#define LIBGIT2_VER_MINOR 25
|
13
|
+
#define LIBGIT2_VER_REVISION 0
|
14
14
|
#define LIBGIT2_VER_PATCH 0
|
15
15
|
|
16
|
-
#define LIBGIT2_SOVERSION
|
16
|
+
#define LIBGIT2_SOVERSION 25
|
17
17
|
|
18
18
|
#endif
|
@@ -19,39 +19,102 @@
|
|
19
19
|
#include "git2/index.h"
|
20
20
|
|
21
21
|
static int annotated_commit_init(
|
22
|
+
git_annotated_commit **out,
|
23
|
+
git_commit *commit,
|
24
|
+
const char *description)
|
25
|
+
{
|
26
|
+
git_annotated_commit *annotated_commit;
|
27
|
+
int error = 0;
|
28
|
+
|
29
|
+
assert(out && commit);
|
30
|
+
|
31
|
+
*out = NULL;
|
32
|
+
|
33
|
+
annotated_commit = git__calloc(1, sizeof(git_annotated_commit));
|
34
|
+
GITERR_CHECK_ALLOC(annotated_commit);
|
35
|
+
|
36
|
+
annotated_commit->type = GIT_ANNOTATED_COMMIT_REAL;
|
37
|
+
|
38
|
+
if ((error = git_commit_dup(&annotated_commit->commit, commit)) < 0)
|
39
|
+
goto done;
|
40
|
+
|
41
|
+
git_oid_fmt(annotated_commit->id_str, git_commit_id(commit));
|
42
|
+
annotated_commit->id_str[GIT_OID_HEXSZ] = '\0';
|
43
|
+
|
44
|
+
if (!description)
|
45
|
+
description = annotated_commit->id_str;
|
46
|
+
|
47
|
+
annotated_commit->description = git__strdup(description);
|
48
|
+
GITERR_CHECK_ALLOC(annotated_commit->description);
|
49
|
+
|
50
|
+
done:
|
51
|
+
if (!error)
|
52
|
+
*out = annotated_commit;
|
53
|
+
|
54
|
+
return error;
|
55
|
+
}
|
56
|
+
|
57
|
+
static int annotated_commit_init_from_id(
|
22
58
|
git_annotated_commit **out,
|
23
59
|
git_repository *repo,
|
24
60
|
const git_oid *id,
|
25
|
-
const char *
|
26
|
-
const char *remote_url)
|
61
|
+
const char *description)
|
27
62
|
{
|
28
|
-
git_annotated_commit *annotated_commit;
|
29
63
|
git_commit *commit = NULL;
|
30
64
|
int error = 0;
|
31
65
|
|
32
|
-
assert(out && id);
|
66
|
+
assert(out && repo && id);
|
33
67
|
|
34
68
|
*out = NULL;
|
35
69
|
|
36
|
-
if ((error = git_commit_lookup(&commit, repo, id)) < 0
|
37
|
-
(error = git_annotated_commit_from_commit(&annotated_commit,
|
38
|
-
commit)) < 0)
|
70
|
+
if ((error = git_commit_lookup(&commit, repo, id)) < 0)
|
39
71
|
goto done;
|
40
72
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
73
|
+
error = annotated_commit_init(out, commit, description);
|
74
|
+
|
75
|
+
done:
|
76
|
+
git_commit_free(commit);
|
77
|
+
return error;
|
78
|
+
}
|
79
|
+
|
80
|
+
int git_annotated_commit_lookup(
|
81
|
+
git_annotated_commit **out,
|
82
|
+
git_repository *repo,
|
83
|
+
const git_oid *id)
|
84
|
+
{
|
85
|
+
return annotated_commit_init_from_id(out, repo, id, NULL);
|
86
|
+
}
|
87
|
+
|
88
|
+
int git_annotated_commit_from_commit(
|
89
|
+
git_annotated_commit **out,
|
90
|
+
git_commit *commit)
|
91
|
+
{
|
92
|
+
return annotated_commit_init(out, commit, NULL);
|
93
|
+
}
|
45
94
|
|
46
|
-
|
47
|
-
|
48
|
-
|
95
|
+
int git_annotated_commit_from_revspec(
|
96
|
+
git_annotated_commit **out,
|
97
|
+
git_repository *repo,
|
98
|
+
const char *revspec)
|
99
|
+
{
|
100
|
+
git_object *obj, *commit;
|
101
|
+
int error;
|
102
|
+
|
103
|
+
assert(out && repo && revspec);
|
104
|
+
|
105
|
+
if ((error = git_revparse_single(&obj, repo, revspec)) < 0)
|
106
|
+
return error;
|
107
|
+
|
108
|
+
if ((error = git_object_peel(&commit, obj, GIT_OBJ_COMMIT))) {
|
109
|
+
git_object_free(obj);
|
110
|
+
return error;
|
49
111
|
}
|
50
112
|
|
51
|
-
|
113
|
+
error = annotated_commit_init(out, (git_commit *)commit, revspec);
|
114
|
+
|
115
|
+
git_object_free(obj);
|
116
|
+
git_object_free(commit);
|
52
117
|
|
53
|
-
done:
|
54
|
-
git_commit_free(commit);
|
55
118
|
return error;
|
56
119
|
}
|
57
120
|
|
@@ -70,8 +133,15 @@ int git_annotated_commit_from_ref(
|
|
70
133
|
if ((error = git_reference_resolve(&resolved, ref)) < 0)
|
71
134
|
return error;
|
72
135
|
|
73
|
-
error =
|
74
|
-
|
136
|
+
error = annotated_commit_init_from_id(out,
|
137
|
+
repo,
|
138
|
+
git_reference_target(resolved),
|
139
|
+
git_reference_name(ref));
|
140
|
+
|
141
|
+
if (!error) {
|
142
|
+
(*out)->ref_name = git__strdup(git_reference_name(ref));
|
143
|
+
GITERR_CHECK_ALLOC((*out)->ref_name);
|
144
|
+
}
|
75
145
|
|
76
146
|
git_reference_free(resolved);
|
77
147
|
return error;
|
@@ -97,41 +167,6 @@ int git_annotated_commit_from_head(
|
|
97
167
|
return error;
|
98
168
|
}
|
99
169
|
|
100
|
-
int git_annotated_commit_from_commit(
|
101
|
-
git_annotated_commit **out,
|
102
|
-
git_commit *commit)
|
103
|
-
{
|
104
|
-
git_annotated_commit *annotated_commit;
|
105
|
-
|
106
|
-
assert(out && commit);
|
107
|
-
|
108
|
-
*out = NULL;
|
109
|
-
|
110
|
-
annotated_commit = git__calloc(1, sizeof(git_annotated_commit));
|
111
|
-
GITERR_CHECK_ALLOC(annotated_commit);
|
112
|
-
|
113
|
-
annotated_commit->type = GIT_ANNOTATED_COMMIT_REAL;
|
114
|
-
|
115
|
-
git_cached_obj_incref(commit);
|
116
|
-
annotated_commit->commit = commit;
|
117
|
-
|
118
|
-
git_oid_fmt(annotated_commit->id_str, git_commit_id(commit));
|
119
|
-
annotated_commit->id_str[GIT_OID_HEXSZ] = '\0';
|
120
|
-
|
121
|
-
*out = annotated_commit;
|
122
|
-
return 0;
|
123
|
-
}
|
124
|
-
|
125
|
-
int git_annotated_commit_lookup(
|
126
|
-
git_annotated_commit **out,
|
127
|
-
git_repository *repo,
|
128
|
-
const git_oid *id)
|
129
|
-
{
|
130
|
-
assert(out && repo && id);
|
131
|
-
|
132
|
-
return annotated_commit_init(out, repo, id, NULL, NULL);
|
133
|
-
}
|
134
|
-
|
135
170
|
int git_annotated_commit_from_fetchhead(
|
136
171
|
git_annotated_commit **out,
|
137
172
|
git_repository *repo,
|
@@ -141,33 +176,16 @@ int git_annotated_commit_from_fetchhead(
|
|
141
176
|
{
|
142
177
|
assert(repo && id && branch_name && remote_url);
|
143
178
|
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
int git_annotated_commit_from_revspec(
|
148
|
-
git_annotated_commit **out,
|
149
|
-
git_repository *repo,
|
150
|
-
const char *revspec)
|
151
|
-
{
|
152
|
-
git_object *obj, *commit;
|
153
|
-
int error;
|
154
|
-
|
155
|
-
assert(out && repo && revspec);
|
156
|
-
|
157
|
-
if ((error = git_revparse_single(&obj, repo, revspec)) < 0)
|
158
|
-
return error;
|
159
|
-
|
160
|
-
if ((error = git_object_peel(&commit, obj, GIT_OBJ_COMMIT))) {
|
161
|
-
git_object_free(obj);
|
162
|
-
return error;
|
163
|
-
}
|
179
|
+
if (annotated_commit_init_from_id(out, repo, id, branch_name) < 0)
|
180
|
+
return -1;
|
164
181
|
|
165
|
-
|
182
|
+
(*out)->ref_name = git__strdup(branch_name);
|
183
|
+
GITERR_CHECK_ALLOC((*out)->ref_name);
|
166
184
|
|
167
|
-
|
168
|
-
|
185
|
+
(*out)->remote_url = git__strdup(remote_url);
|
186
|
+
GITERR_CHECK_ALLOC((*out)->remote_url);
|
169
187
|
|
170
|
-
return
|
188
|
+
return 0;
|
171
189
|
}
|
172
190
|
|
173
191
|
|
@@ -187,8 +205,9 @@ void git_annotated_commit_free(git_annotated_commit *annotated_commit)
|
|
187
205
|
case GIT_ANNOTATED_COMMIT_REAL:
|
188
206
|
git_commit_free(annotated_commit->commit);
|
189
207
|
git_tree_free(annotated_commit->tree);
|
190
|
-
git__free(annotated_commit->
|
191
|
-
git__free(annotated_commit->
|
208
|
+
git__free((char *)annotated_commit->description);
|
209
|
+
git__free((char *)annotated_commit->ref_name);
|
210
|
+
git__free((char *)annotated_commit->remote_url);
|
192
211
|
break;
|
193
212
|
case GIT_ANNOTATED_COMMIT_VIRTUAL:
|
194
213
|
git_index_free(annotated_commit->index);
|
@@ -33,8 +33,11 @@ struct git_annotated_commit {
|
|
33
33
|
git_index *index;
|
34
34
|
git_array_oid_t parents;
|
35
35
|
|
36
|
-
|
37
|
-
char *
|
36
|
+
/* how this commit was looked up */
|
37
|
+
const char *description;
|
38
|
+
|
39
|
+
const char *ref_name;
|
40
|
+
const char *remote_url;
|
38
41
|
|
39
42
|
char id_str[GIT_OID_HEXSZ+1];
|
40
43
|
};
|