rugged 1.0.1 → 1.1.0
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/rugged_commit.c +1 -1
- data/lib/rugged/commit.rb +16 -2
- data/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/CMakeLists.txt +31 -69
- data/vendor/libgit2/cmake/{Modules/AddCFlagIfSupported.cmake → AddCFlagIfSupported.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/EnableWarnings.cmake → EnableWarnings.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindCoreFoundation.cmake → FindCoreFoundation.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindGSSAPI.cmake → FindGSSAPI.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindGSSFramework.cmake → FindGSSFramework.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindHTTP_Parser.cmake → FindHTTP_Parser.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindIconv.cmake → FindIconv.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindPCRE.cmake → FindPCRE.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindPCRE2.cmake → FindPCRE2.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindPkgLibraries.cmake → FindPkgLibraries.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindSecurity.cmake → FindSecurity.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindStatNsec.cmake → FindStatNsec.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindmbedTLS.cmake → FindmbedTLS.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/IdeSplitSources.cmake → IdeSplitSources.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/PkgBuildConfig.cmake → PkgBuildConfig.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/SanitizeBool.cmake → SanitizeBool.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/SelectGSSAPI.cmake → SelectGSSAPI.cmake} +18 -26
- data/vendor/libgit2/cmake/{Modules/SelectHTTPSBackend.cmake → SelectHTTPSBackend.cmake} +25 -32
- data/vendor/libgit2/cmake/{Modules/SelectHashes.cmake → SelectHashes.cmake} +20 -28
- data/vendor/libgit2/deps/http-parser/CMakeLists.txt +4 -3
- data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +6 -5
- data/vendor/libgit2/deps/ntlmclient/compat.h +8 -1
- data/vendor/libgit2/deps/ntlmclient/ntlm.c +8 -11
- data/vendor/libgit2/deps/pcre/LICENCE +93 -0
- data/vendor/libgit2/deps/pcre/pcre.h +2 -2
- data/vendor/libgit2/deps/pcre/pcre_compile.c +29 -17
- data/vendor/libgit2/deps/pcre/pcre_jit_compile.c +4 -4
- data/vendor/libgit2/deps/pcre/pcreposix.c +2 -3
- data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -5
- data/vendor/libgit2/deps/zlib/deflate.c +1 -0
- data/vendor/libgit2/include/git2/annotated_commit.h +1 -1
- data/vendor/libgit2/include/git2/blame.h +2 -0
- data/vendor/libgit2/include/git2/common.h +15 -3
- data/vendor/libgit2/include/git2/deprecated.h +42 -2
- data/vendor/libgit2/include/git2/errors.h +2 -1
- data/vendor/libgit2/include/git2/index.h +1 -2
- data/vendor/libgit2/include/git2/pack.h +1 -1
- data/vendor/libgit2/include/git2/strarray.h +6 -10
- data/vendor/libgit2/include/git2/version.h +4 -4
- data/vendor/libgit2/src/CMakeLists.txt +53 -41
- data/vendor/libgit2/src/apply.c +5 -1
- data/vendor/libgit2/src/assert_safe.h +58 -0
- data/vendor/libgit2/src/attr_file.c +8 -3
- data/vendor/libgit2/src/attrcache.c +2 -3
- data/vendor/libgit2/src/blame.c +2 -0
- data/vendor/libgit2/src/blame_git.c +6 -3
- data/vendor/libgit2/src/blob.c +2 -0
- data/vendor/libgit2/src/branch.c +19 -21
- data/vendor/libgit2/src/buffer.c +6 -3
- data/vendor/libgit2/src/cache.c +1 -22
- data/vendor/libgit2/src/checkout.c +49 -72
- data/vendor/libgit2/src/cherrypick.c +2 -0
- data/vendor/libgit2/src/clone.c +78 -18
- data/vendor/libgit2/src/common.h +1 -0
- data/vendor/libgit2/src/config.c +3 -7
- data/vendor/libgit2/src/config_entries.c +35 -27
- data/vendor/libgit2/src/config_parse.c +1 -1
- data/vendor/libgit2/src/config_snapshot.c +2 -1
- data/vendor/libgit2/src/describe.c +5 -1
- data/vendor/libgit2/src/diff.c +12 -11
- data/vendor/libgit2/src/diff_file.c +3 -1
- data/vendor/libgit2/src/diff_generate.c +10 -11
- data/vendor/libgit2/src/diff_parse.c +2 -3
- data/vendor/libgit2/src/diff_print.c +63 -60
- data/vendor/libgit2/src/diff_stats.c +12 -11
- data/vendor/libgit2/src/diff_tform.c +2 -3
- data/vendor/libgit2/src/errors.c +2 -0
- data/vendor/libgit2/src/fetch.c +2 -0
- data/vendor/libgit2/src/filter.c +3 -3
- data/vendor/libgit2/src/futils.c +3 -3
- data/vendor/libgit2/src/futils.h +3 -3
- data/vendor/libgit2/src/global.c +3 -1
- data/vendor/libgit2/src/idxmap.c +0 -22
- data/vendor/libgit2/src/index.c +12 -7
- data/vendor/libgit2/src/indexer.c +10 -4
- data/vendor/libgit2/src/iterator.c +4 -4
- data/vendor/libgit2/src/merge.c +13 -7
- data/vendor/libgit2/src/merge_file.c +4 -6
- data/vendor/libgit2/src/midx.c +418 -0
- data/vendor/libgit2/src/midx.h +83 -0
- data/vendor/libgit2/src/mwindow.c +124 -51
- data/vendor/libgit2/src/net.c +6 -1
- data/vendor/libgit2/src/object.c +2 -1
- data/vendor/libgit2/src/odb.c +9 -6
- data/vendor/libgit2/src/odb_loose.c +3 -3
- data/vendor/libgit2/src/odb_mempack.c +2 -0
- data/vendor/libgit2/src/oid.c +2 -0
- data/vendor/libgit2/src/pack-objects.c +29 -21
- data/vendor/libgit2/src/pack.c +47 -28
- data/vendor/libgit2/src/pack.h +19 -2
- data/vendor/libgit2/src/patch_generate.c +1 -3
- data/vendor/libgit2/src/patch_parse.c +4 -2
- data/vendor/libgit2/src/path.c +4 -4
- data/vendor/libgit2/src/pathspec.c +4 -3
- data/vendor/libgit2/src/pool.c +21 -15
- data/vendor/libgit2/src/pool.h +9 -1
- data/vendor/libgit2/src/proxy.c +2 -0
- data/vendor/libgit2/src/push.c +2 -0
- data/vendor/libgit2/src/rebase.c +2 -0
- data/vendor/libgit2/src/refdb.c +135 -0
- data/vendor/libgit2/src/refdb.h +69 -0
- data/vendor/libgit2/src/refdb_fs.c +19 -81
- data/vendor/libgit2/src/reflog.c +2 -6
- data/vendor/libgit2/src/refs.c +60 -188
- data/vendor/libgit2/src/refs.h +1 -19
- data/vendor/libgit2/src/regexp.c +2 -2
- data/vendor/libgit2/src/remote.c +32 -17
- data/vendor/libgit2/src/repository.c +168 -79
- data/vendor/libgit2/src/repository.h +10 -27
- data/vendor/libgit2/src/revert.c +2 -0
- data/vendor/libgit2/src/revparse.c +5 -4
- data/vendor/libgit2/src/revwalk.c +3 -5
- data/vendor/libgit2/src/settings.c +9 -0
- data/vendor/libgit2/src/sortedcache.c +2 -3
- data/vendor/libgit2/src/stash.c +2 -0
- data/vendor/libgit2/src/status.c +2 -0
- data/vendor/libgit2/src/strarray.c +63 -0
- data/vendor/libgit2/src/streams/openssl.c +12 -6
- data/vendor/libgit2/src/streams/registry.c +5 -3
- data/vendor/libgit2/src/submodule.c +6 -4
- data/vendor/libgit2/src/sysdir.c +4 -20
- data/vendor/libgit2/src/sysdir.h +0 -11
- data/vendor/libgit2/src/tag.c +2 -0
- data/vendor/libgit2/src/thread-utils.h +139 -21
- data/vendor/libgit2/src/transaction.c +2 -1
- data/vendor/libgit2/src/transports/credential.c +2 -0
- data/vendor/libgit2/src/transports/credential_helpers.c +2 -0
- data/vendor/libgit2/src/transports/httpclient.c +6 -8
- data/vendor/libgit2/src/transports/local.c +2 -2
- data/vendor/libgit2/src/transports/smart.c +2 -2
- data/vendor/libgit2/src/transports/winhttp.c +18 -7
- data/vendor/libgit2/src/unix/posix.h +13 -1
- data/vendor/libgit2/src/util.c +25 -58
- data/vendor/libgit2/src/util.h +2 -2
- data/vendor/libgit2/src/win32/git2.rc +18 -3
- data/vendor/libgit2/src/win32/path_w32.c +2 -2
- data/vendor/libgit2/src/worktree.c +4 -0
- metadata +27 -25
- data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.c.in +0 -29
- data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.cmake +0 -96
- data/vendor/libgit2/src/refdb_fs.h +0 -19
@@ -391,11 +391,10 @@ int git_attr_cache__init(git_repository *repo)
|
|
391
391
|
* hashtable for attribute macros, and string pool
|
392
392
|
*/
|
393
393
|
if ((ret = git_strmap_new(&cache->files)) < 0 ||
|
394
|
-
(ret = git_strmap_new(&cache->macros)) < 0
|
394
|
+
(ret = git_strmap_new(&cache->macros)) < 0 ||
|
395
|
+
(ret = git_pool_init(&cache->pool, 1)) < 0)
|
395
396
|
goto cancel;
|
396
397
|
|
397
|
-
git_pool_init(&cache->pool, 1);
|
398
|
-
|
399
398
|
cache = git__compare_and_swap(&repo->attrcache, NULL, cache);
|
400
399
|
if (cache)
|
401
400
|
goto cancel; /* raced with another thread, free this but no error */
|
data/vendor/libgit2/src/blame.c
CHANGED
@@ -538,7 +538,9 @@ int git_blame_options_init(git_blame_options *opts, unsigned int version)
|
|
538
538
|
return 0;
|
539
539
|
}
|
540
540
|
|
541
|
+
#ifndef GIT_DEPRECATE_HARD
|
541
542
|
int git_blame_init_options(git_blame_options *opts, unsigned int version)
|
542
543
|
{
|
543
544
|
return git_blame_options_init(opts, version);
|
544
545
|
}
|
546
|
+
#endif
|
@@ -365,11 +365,14 @@ static void trim_common_tail(mmfile_t *a, mmfile_t *b, long ctx)
|
|
365
365
|
b->size -= trimmed - recovered;
|
366
366
|
}
|
367
367
|
|
368
|
-
static int diff_hunks(mmfile_t file_a, mmfile_t file_b, void *cb_data)
|
368
|
+
static int diff_hunks(mmfile_t file_a, mmfile_t file_b, void *cb_data, git_blame_options *options)
|
369
369
|
{
|
370
|
-
xpparam_t xpp = {0};
|
371
370
|
xdemitconf_t xecfg = {0};
|
372
371
|
xdemitcb_t ecb = {0};
|
372
|
+
xpparam_t xpp = {0};
|
373
|
+
|
374
|
+
if (options->flags & GIT_BLAME_IGNORE_WHITESPACE)
|
375
|
+
xpp.flags |= XDF_IGNORE_WHITESPACE;
|
373
376
|
|
374
377
|
xecfg.hunk_func = my_emit;
|
375
378
|
ecb.priv = cb_data;
|
@@ -409,7 +412,7 @@ static int pass_blame_to_parent(
|
|
409
412
|
fill_origin_blob(parent, &file_p);
|
410
413
|
fill_origin_blob(target, &file_o);
|
411
414
|
|
412
|
-
if (diff_hunks(file_p, file_o, &d) < 0)
|
415
|
+
if (diff_hunks(file_p, file_o, &d, &blame->options) < 0)
|
413
416
|
return -1;
|
414
417
|
|
415
418
|
/* The reset (i.e. anything after tlno) are the same as the parent */
|
data/vendor/libgit2/src/blob.c
CHANGED
@@ -445,6 +445,7 @@ int git_blob_filter(
|
|
445
445
|
|
446
446
|
/* Deprecated functions */
|
447
447
|
|
448
|
+
#ifndef GIT_DEPRECATE_HARD
|
448
449
|
int git_blob_create_frombuffer(
|
449
450
|
git_oid *id, git_repository *repo, const void *buffer, size_t len)
|
450
451
|
{
|
@@ -491,3 +492,4 @@ int git_blob_filtered_content(
|
|
491
492
|
|
492
493
|
return git_blob_filter(out, blob, path, &opts);
|
493
494
|
}
|
495
|
+
#endif
|
data/vendor/libgit2/src/branch.c
CHANGED
@@ -134,39 +134,37 @@ int git_branch_create_from_annotated(
|
|
134
134
|
repository, branch_name, commit->commit, commit->description, force);
|
135
135
|
}
|
136
136
|
|
137
|
-
static int
|
137
|
+
static int branch_is_checked_out(git_repository *worktree, void *payload)
|
138
138
|
{
|
139
139
|
git_reference *branch = (git_reference *) payload;
|
140
140
|
git_reference *head = NULL;
|
141
|
-
int
|
141
|
+
int error;
|
142
142
|
|
143
|
-
if (
|
144
|
-
|
145
|
-
goto done;
|
143
|
+
if (git_repository_is_bare(worktree))
|
144
|
+
return 0;
|
146
145
|
|
147
|
-
|
146
|
+
if ((error = git_reference_lookup(&head, worktree, GIT_HEAD_FILE)) < 0) {
|
147
|
+
if (error == GIT_ENOTFOUND)
|
148
|
+
error = 0;
|
149
|
+
goto out;
|
150
|
+
}
|
148
151
|
|
149
|
-
|
152
|
+
if (git_reference_type(head) != GIT_REFERENCE_SYMBOLIC)
|
153
|
+
goto out;
|
154
|
+
|
155
|
+
error = !git__strcmp(head->target.symbolic, branch->name);
|
156
|
+
|
157
|
+
out:
|
150
158
|
git_reference_free(head);
|
151
|
-
return
|
159
|
+
return error;
|
152
160
|
}
|
153
161
|
|
154
162
|
int git_branch_is_checked_out(const git_reference *branch)
|
155
163
|
{
|
156
|
-
git_repository *repo;
|
157
|
-
int flags = 0;
|
158
|
-
|
159
|
-
assert(branch);
|
160
|
-
|
161
164
|
if (!git_reference_is_branch(branch))
|
162
165
|
return 0;
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
if (git_repository_is_bare(repo))
|
167
|
-
flags |= GIT_REPOSITORY_FOREACH_HEAD_SKIP_REPO;
|
168
|
-
|
169
|
-
return git_repository_foreach_head(repo, branch_equals, flags, (void *) branch) == 1;
|
166
|
+
return git_repository_foreach_worktree(git_reference_owner(branch),
|
167
|
+
branch_is_checked_out, (void *)branch) == 1;
|
170
168
|
}
|
171
169
|
|
172
170
|
int git_branch_delete(git_reference *branch)
|
@@ -548,7 +546,7 @@ cleanup:
|
|
548
546
|
if (error < 0)
|
549
547
|
git_buf_dispose(buf);
|
550
548
|
|
551
|
-
|
549
|
+
git_strarray_dispose(&remote_list);
|
552
550
|
return error;
|
553
551
|
}
|
554
552
|
|
data/vendor/libgit2/src/buffer.c
CHANGED
@@ -133,10 +133,12 @@ void git_buf_dispose(git_buf *buf)
|
|
133
133
|
git_buf_init(buf, 0);
|
134
134
|
}
|
135
135
|
|
136
|
+
#ifndef GIT_DEPRECATE_HARD
|
136
137
|
void git_buf_free(git_buf *buf)
|
137
138
|
{
|
138
139
|
git_buf_dispose(buf);
|
139
140
|
}
|
141
|
+
#endif
|
140
142
|
|
141
143
|
void git_buf_sanitize(git_buf *buf)
|
142
144
|
{
|
@@ -363,7 +365,7 @@ int git_buf_encode_base85(git_buf *buf, const char *data, size_t len)
|
|
363
365
|
|
364
366
|
for (i = 24; i >= 0; i -= 8) {
|
365
367
|
uint8_t ch = *data++;
|
366
|
-
acc |= ch << i;
|
368
|
+
acc |= (uint32_t)ch << i;
|
367
369
|
|
368
370
|
if (--len == 0)
|
369
371
|
break;
|
@@ -757,7 +759,8 @@ int git_buf_join(
|
|
757
759
|
ssize_t offset_a = -1;
|
758
760
|
|
759
761
|
/* not safe to have str_b point internally to the buffer */
|
760
|
-
|
762
|
+
if (buf->size)
|
763
|
+
assert(str_b < buf->ptr || str_b >= buf->ptr + buf->size);
|
761
764
|
|
762
765
|
/* figure out if we need to insert a separator */
|
763
766
|
if (separator && strlen_a) {
|
@@ -767,7 +770,7 @@ int git_buf_join(
|
|
767
770
|
}
|
768
771
|
|
769
772
|
/* str_a could be part of the buffer */
|
770
|
-
if (str_a >= buf->ptr && str_a < buf->ptr + buf->size)
|
773
|
+
if (buf->size && str_a >= buf->ptr && str_a < buf->ptr + buf->size)
|
771
774
|
offset_a = str_a - buf->ptr;
|
772
775
|
|
773
776
|
GIT_ERROR_CHECK_ALLOC_ADD(&alloc_len, strlen_a, strlen_b);
|
data/vendor/libgit2/src/cache.c
CHANGED
@@ -41,27 +41,6 @@ int git_cache_set_max_object_size(git_object_t type, size_t size)
|
|
41
41
|
return 0;
|
42
42
|
}
|
43
43
|
|
44
|
-
void git_cache_dump_stats(git_cache *cache)
|
45
|
-
{
|
46
|
-
git_cached_obj *object;
|
47
|
-
|
48
|
-
if (git_cache_size(cache) == 0)
|
49
|
-
return;
|
50
|
-
|
51
|
-
printf("Cache %p: %"PRIuZ" items cached, %"PRIdZ" bytes\n",
|
52
|
-
cache, git_cache_size(cache), cache->used_memory);
|
53
|
-
|
54
|
-
git_oidmap_foreach_value(cache->map, object, {
|
55
|
-
char oid_str[9];
|
56
|
-
printf(" %s%c %s (%"PRIuZ")\n",
|
57
|
-
git_object_type2string(object->type),
|
58
|
-
object->flags == GIT_CACHE_STORE_PARSED ? '*' : ' ',
|
59
|
-
git_oid_tostr(oid_str, sizeof(oid_str), &object->oid),
|
60
|
-
object->size
|
61
|
-
);
|
62
|
-
});
|
63
|
-
}
|
64
|
-
|
65
44
|
int git_cache_init(git_cache *cache)
|
66
45
|
{
|
67
46
|
memset(cache, 0, sizeof(*cache));
|
@@ -189,7 +168,7 @@ static void *cache_store(git_cache *cache, git_cached_obj *entry)
|
|
189
168
|
return entry;
|
190
169
|
|
191
170
|
/* soften the load on the cache */
|
192
|
-
if (git_cache__current_storage
|
171
|
+
if (git_atomic_ssize_get(&git_cache__current_storage) > git_cache__max_storage)
|
193
172
|
cache_evict_entries(cache);
|
194
173
|
|
195
174
|
/* not found */
|
@@ -44,7 +44,6 @@ enum {
|
|
44
44
|
CHECKOUT_ACTION__REMOVE_CONFLICT = 16,
|
45
45
|
CHECKOUT_ACTION__UPDATE_CONFLICT = 32,
|
46
46
|
CHECKOUT_ACTION__MAX = 32,
|
47
|
-
CHECKOUT_ACTION__DEFER_REMOVE = 64,
|
48
47
|
CHECKOUT_ACTION__REMOVE_AND_UPDATE =
|
49
48
|
(CHECKOUT_ACTION__UPDATE_BLOB | CHECKOUT_ACTION__REMOVE),
|
50
49
|
};
|
@@ -196,7 +195,7 @@ static bool checkout_is_workdir_modified(
|
|
196
195
|
}
|
197
196
|
|
198
197
|
if (git_submodule_status(&sm_status, data->repo, wditem->path, GIT_SUBMODULE_IGNORE_UNSPECIFIED) < 0 ||
|
199
|
-
|
198
|
+
GIT_SUBMODULE_STATUS_IS_WD_DIRTY(sm_status))
|
200
199
|
rval = true;
|
201
200
|
else if ((sm_oid = git_submodule_wd_id(sm)) == NULL)
|
202
201
|
rval = false;
|
@@ -217,9 +216,10 @@ static bool checkout_is_workdir_modified(
|
|
217
216
|
ie = git_index_get_bypath(data->index, wditem->path, 0);
|
218
217
|
|
219
218
|
if (ie != NULL &&
|
220
|
-
|
221
|
-
|
222
|
-
|
219
|
+
!git_index_entry_newer_than_index(ie, data->index) &&
|
220
|
+
git_index_time_eq(&wditem->mtime, &ie->mtime) &&
|
221
|
+
wditem->file_size == ie->file_size &&
|
222
|
+
!is_filemode_changed(wditem->mode, ie->mode, data->respect_filemode)) {
|
223
223
|
|
224
224
|
/* The workdir is modified iff the index entry is modified */
|
225
225
|
return !is_workdir_base_or_new(&ie->id, baseitem, newitem) ||
|
@@ -273,9 +273,8 @@ static int checkout_action_common(
|
|
273
273
|
|
274
274
|
/* if the file is on disk and doesn't match our mode, force update */
|
275
275
|
if (wd &&
|
276
|
-
|
277
|
-
|
278
|
-
*action |= CHECKOUT_ACTION__REMOVE;
|
276
|
+
GIT_PERMS_IS_EXEC(wd->mode) != GIT_PERMS_IS_EXEC(delta->new_file.mode))
|
277
|
+
*action |= CHECKOUT_ACTION__REMOVE;
|
279
278
|
|
280
279
|
notify = GIT_CHECKOUT_NOTIFY_UPDATED;
|
281
280
|
}
|
@@ -371,8 +370,13 @@ static int checkout_action_wd_only(
|
|
371
370
|
if (!git_pathspec__match(
|
372
371
|
pathspec, wd->path,
|
373
372
|
(data->strategy & GIT_CHECKOUT_DISABLE_PATHSPEC_MATCH) != 0,
|
374
|
-
git_iterator_ignore_case(workdir), NULL, NULL))
|
375
|
-
|
373
|
+
git_iterator_ignore_case(workdir), NULL, NULL)) {
|
374
|
+
|
375
|
+
if (wd->mode == GIT_FILEMODE_TREE)
|
376
|
+
return git_iterator_advance_into(wditem, workdir);
|
377
|
+
else
|
378
|
+
return git_iterator_advance(wditem, workdir);
|
379
|
+
}
|
376
380
|
|
377
381
|
/* check if item is tracked in the index but not in the checkout diff */
|
378
382
|
if (data->index != NULL) {
|
@@ -794,13 +798,13 @@ static int checkout_conflictdata_cmp(const void *a, const void *b)
|
|
794
798
|
int diff;
|
795
799
|
|
796
800
|
if ((diff = checkout_idxentry_cmp(ca->ancestor, cb->ancestor)) == 0 &&
|
797
|
-
|
801
|
+
(diff = checkout_idxentry_cmp(ca->ours, cb->theirs)) == 0)
|
798
802
|
diff = checkout_idxentry_cmp(ca->theirs, cb->theirs);
|
799
803
|
|
800
804
|
return diff;
|
801
805
|
}
|
802
806
|
|
803
|
-
int checkout_conflictdata_empty(
|
807
|
+
static int checkout_conflictdata_empty(
|
804
808
|
const git_vector *conflicts, size_t idx, void *payload)
|
805
809
|
{
|
806
810
|
checkout_conflictdata *conflict;
|
@@ -1173,7 +1177,7 @@ static int checkout_conflicts_mark_directoryfile(
|
|
1173
1177
|
/* Find d/f conflicts */
|
1174
1178
|
git_vector_foreach(&data->update_conflicts, i, conflict) {
|
1175
1179
|
if ((conflict->ours && conflict->theirs) ||
|
1176
|
-
|
1180
|
+
(!conflict->ours && !conflict->theirs))
|
1177
1181
|
continue;
|
1178
1182
|
|
1179
1183
|
path = conflict->ours ?
|
@@ -1222,8 +1226,8 @@ static int checkout_get_update_conflicts(
|
|
1222
1226
|
return 0;
|
1223
1227
|
|
1224
1228
|
if ((error = checkout_conflicts_load(data, workdir, pathspec)) < 0 ||
|
1225
|
-
|
1226
|
-
|
1229
|
+
(error = checkout_conflicts_coalesce_renames(data)) < 0 ||
|
1230
|
+
(error = checkout_conflicts_mark_directoryfile(data)) < 0)
|
1227
1231
|
goto done;
|
1228
1232
|
|
1229
1233
|
done:
|
@@ -1304,14 +1308,15 @@ static int checkout_get_actions(
|
|
1304
1308
|
size_t i, *counts = NULL;
|
1305
1309
|
uint32_t *actions = NULL;
|
1306
1310
|
|
1307
|
-
git_pool_init(&pathpool, 1)
|
1311
|
+
if (git_pool_init(&pathpool, 1) < 0)
|
1312
|
+
return -1;
|
1308
1313
|
|
1309
1314
|
if (data->opts.paths.count > 0 &&
|
1310
|
-
|
1315
|
+
git_pathspec__vinit(&pathspec, &data->opts.paths, &pathpool) < 0)
|
1311
1316
|
return -1;
|
1312
1317
|
|
1313
1318
|
if ((error = git_iterator_current(&wditem, workdir)) < 0 &&
|
1314
|
-
|
1319
|
+
error != GIT_ITEROVER)
|
1315
1320
|
goto fail;
|
1316
1321
|
|
1317
1322
|
deltas = &data->diff->deltas;
|
@@ -1350,8 +1355,7 @@ static int checkout_get_actions(
|
|
1350
1355
|
counts[CHECKOUT_ACTION__REMOVE] += data->removes.length;
|
1351
1356
|
|
1352
1357
|
if (counts[CHECKOUT_ACTION__CONFLICT] > 0 &&
|
1353
|
-
|
1354
|
-
{
|
1358
|
+
(data->strategy & GIT_CHECKOUT_ALLOW_CONFLICTS) == 0) {
|
1355
1359
|
git_error_set(GIT_ERROR_CHECKOUT, "%"PRIuZ" %s checkout",
|
1356
1360
|
counts[CHECKOUT_ACTION__CONFLICT],
|
1357
1361
|
counts[CHECKOUT_ACTION__CONFLICT] == 1 ?
|
@@ -1362,7 +1366,7 @@ static int checkout_get_actions(
|
|
1362
1366
|
|
1363
1367
|
|
1364
1368
|
if ((error = checkout_get_remove_conflicts(data, workdir, &pathspec)) < 0 ||
|
1365
|
-
|
1369
|
+
(error = checkout_get_update_conflicts(data, workdir, &pathspec)) < 0)
|
1366
1370
|
goto fail;
|
1367
1371
|
|
1368
1372
|
counts[CHECKOUT_ACTION__REMOVE_CONFLICT] = git_vector_length(&data->remove_conflicts);
|
@@ -1853,26 +1857,6 @@ static int checkout_remove_the_old(
|
|
1853
1857
|
return 0;
|
1854
1858
|
}
|
1855
1859
|
|
1856
|
-
static int checkout_deferred_remove(git_repository *repo, const char *path)
|
1857
|
-
{
|
1858
|
-
#if 0
|
1859
|
-
int error = git_futils_rmdir_r(
|
1860
|
-
path, data->opts.target_directory, GIT_RMDIR_EMPTY_PARENTS);
|
1861
|
-
|
1862
|
-
if (error == GIT_ENOTFOUND) {
|
1863
|
-
error = 0;
|
1864
|
-
git_error_clear();
|
1865
|
-
}
|
1866
|
-
|
1867
|
-
return error;
|
1868
|
-
#else
|
1869
|
-
GIT_UNUSED(repo);
|
1870
|
-
GIT_UNUSED(path);
|
1871
|
-
assert(false);
|
1872
|
-
return 0;
|
1873
|
-
#endif
|
1874
|
-
}
|
1875
|
-
|
1876
1860
|
static int checkout_create_the_new(
|
1877
1861
|
unsigned int *actions,
|
1878
1862
|
checkout_data *data)
|
@@ -1882,15 +1866,6 @@ static int checkout_create_the_new(
|
|
1882
1866
|
size_t i;
|
1883
1867
|
|
1884
1868
|
git_vector_foreach(&data->diff->deltas, i, delta) {
|
1885
|
-
if (actions[i] & CHECKOUT_ACTION__DEFER_REMOVE) {
|
1886
|
-
/* this had a blocker directory that should only be removed iff
|
1887
|
-
* all of the contents of the directory were safely removed
|
1888
|
-
*/
|
1889
|
-
if ((error = checkout_deferred_remove(
|
1890
|
-
data->repo, delta->old_file.path)) < 0)
|
1891
|
-
return error;
|
1892
|
-
}
|
1893
|
-
|
1894
1869
|
if (actions[i] & CHECKOUT_ACTION__UPDATE_BLOB && !S_ISLNK(delta->new_file.mode)) {
|
1895
1870
|
if ((error = checkout_blob(data, &delta->new_file)) < 0)
|
1896
1871
|
return error;
|
@@ -1915,20 +1890,10 @@ static int checkout_create_submodules(
|
|
1915
1890
|
unsigned int *actions,
|
1916
1891
|
checkout_data *data)
|
1917
1892
|
{
|
1918
|
-
int error = 0;
|
1919
1893
|
git_diff_delta *delta;
|
1920
1894
|
size_t i;
|
1921
1895
|
|
1922
1896
|
git_vector_foreach(&data->diff->deltas, i, delta) {
|
1923
|
-
if (actions[i] & CHECKOUT_ACTION__DEFER_REMOVE) {
|
1924
|
-
/* this has a blocker directory that should only be removed iff
|
1925
|
-
* all of the contents of the directory were safely removed
|
1926
|
-
*/
|
1927
|
-
if ((error = checkout_deferred_remove(
|
1928
|
-
data->repo, delta->old_file.path)) < 0)
|
1929
|
-
return error;
|
1930
|
-
}
|
1931
|
-
|
1932
1897
|
if (actions[i] & CHECKOUT_ACTION__UPDATE_SUBMODULE) {
|
1933
1898
|
int error = checkout_submodule(data, &delta->new_file);
|
1934
1899
|
if (error < 0)
|
@@ -2520,9 +2485,8 @@ static int checkout_data_init(
|
|
2520
2485
|
git_config_entry_free(conflict_style);
|
2521
2486
|
}
|
2522
2487
|
|
2523
|
-
git_pool_init(&data->pool, 1)
|
2524
|
-
|
2525
|
-
if ((error = git_vector_init(&data->removes, 0, git__strcmp_cb)) < 0 ||
|
2488
|
+
if ((error = git_pool_init(&data->pool, 1)) < 0 ||
|
2489
|
+
(error = git_vector_init(&data->removes, 0, git__strcmp_cb)) < 0 ||
|
2526
2490
|
(error = git_vector_init(&data->remove_conflicts, 0, NULL)) < 0 ||
|
2527
2491
|
(error = git_vector_init(&data->update_conflicts, 0, NULL)) < 0 ||
|
2528
2492
|
(error = git_buf_puts(&data->target_path, data->opts.target_directory)) < 0 ||
|
@@ -2544,6 +2508,17 @@ cleanup:
|
|
2544
2508
|
#define CHECKOUT_INDEX_DONT_WRITE_MASK \
|
2545
2509
|
(GIT_CHECKOUT_DONT_UPDATE_INDEX | GIT_CHECKOUT_DONT_WRITE_INDEX)
|
2546
2510
|
|
2511
|
+
GIT_INLINE(void) setup_pathspecs(
|
2512
|
+
git_iterator_options *iter_opts,
|
2513
|
+
const git_checkout_options *checkout_opts)
|
2514
|
+
{
|
2515
|
+
if (checkout_opts &&
|
2516
|
+
(checkout_opts->checkout_strategy & GIT_CHECKOUT_DISABLE_PATHSPEC_MATCH)) {
|
2517
|
+
iter_opts->pathlist.count = checkout_opts->paths.count;
|
2518
|
+
iter_opts->pathlist.strings = checkout_opts->paths.strings;
|
2519
|
+
}
|
2520
|
+
}
|
2521
|
+
|
2547
2522
|
int git_checkout_iterator(
|
2548
2523
|
git_iterator *target,
|
2549
2524
|
git_index *index,
|
@@ -2586,6 +2561,8 @@ int git_checkout_iterator(
|
|
2586
2561
|
workdir_opts.start = data.pfx;
|
2587
2562
|
workdir_opts.end = data.pfx;
|
2588
2563
|
|
2564
|
+
setup_pathspecs(&workdir_opts, opts);
|
2565
|
+
|
2589
2566
|
if ((error = git_iterator_reset_range(target, data.pfx, data.pfx)) < 0 ||
|
2590
2567
|
(error = git_iterator_for_workdir_ext(
|
2591
2568
|
&workdir, data.repo, data.opts.target_directory, index, NULL,
|
@@ -2596,10 +2573,8 @@ int git_checkout_iterator(
|
|
2596
2573
|
GIT_ITERATOR_IGNORE_CASE : GIT_ITERATOR_DONT_IGNORE_CASE;
|
2597
2574
|
baseline_opts.start = data.pfx;
|
2598
2575
|
baseline_opts.end = data.pfx;
|
2599
|
-
|
2600
|
-
|
2601
|
-
baseline_opts.pathlist.strings = opts->paths.strings;
|
2602
|
-
}
|
2576
|
+
|
2577
|
+
setup_pathspecs(&baseline_opts, opts);
|
2603
2578
|
|
2604
2579
|
if (data.opts.baseline_index) {
|
2605
2580
|
if ((error = git_iterator_for_index(
|
@@ -2689,6 +2664,7 @@ int git_checkout_index(
|
|
2689
2664
|
git_index *index,
|
2690
2665
|
const git_checkout_options *opts)
|
2691
2666
|
{
|
2667
|
+
git_iterator_options iter_opts = GIT_ITERATOR_OPTIONS_INIT;
|
2692
2668
|
int error, owned = 0;
|
2693
2669
|
git_iterator *index_i;
|
2694
2670
|
|
@@ -2716,7 +2692,9 @@ int git_checkout_index(
|
|
2716
2692
|
return error;
|
2717
2693
|
GIT_REFCOUNT_INC(index);
|
2718
2694
|
|
2719
|
-
|
2695
|
+
setup_pathspecs(&iter_opts, opts);
|
2696
|
+
|
2697
|
+
if (!(error = git_iterator_for_index(&index_i, repo, index, &iter_opts)))
|
2720
2698
|
error = git_checkout_iterator(index_i, index, opts);
|
2721
2699
|
|
2722
2700
|
if (owned)
|
@@ -2773,10 +2751,7 @@ int git_checkout_tree(
|
|
2773
2751
|
if ((error = git_repository_index(&index, repo)) < 0)
|
2774
2752
|
return error;
|
2775
2753
|
|
2776
|
-
|
2777
|
-
iter_opts.pathlist.count = opts->paths.count;
|
2778
|
-
iter_opts.pathlist.strings = opts->paths.strings;
|
2779
|
-
}
|
2754
|
+
setup_pathspecs(&iter_opts, opts);
|
2780
2755
|
|
2781
2756
|
if (!(error = git_iterator_for_tree(&tree_i, tree, &iter_opts)))
|
2782
2757
|
error = git_checkout_iterator(tree_i, index, opts);
|
@@ -2803,7 +2778,9 @@ int git_checkout_options_init(git_checkout_options *opts, unsigned int version)
|
|
2803
2778
|
return 0;
|
2804
2779
|
}
|
2805
2780
|
|
2781
|
+
#ifndef GIT_DEPRECATE_HARD
|
2806
2782
|
int git_checkout_init_options(git_checkout_options *opts, unsigned int version)
|
2807
2783
|
{
|
2808
2784
|
return git_checkout_options_init(opts, version);
|
2809
2785
|
}
|
2786
|
+
#endif
|