rugged 0.24.0b6 → 0.24.0b7
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/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/src/commit_list.h +1 -0
- data/vendor/libgit2/src/index.c +29 -9
- data/vendor/libgit2/src/merge.c +170 -22
- data/vendor/libgit2/src/pool.h +2 -2
- data/vendor/libgit2/src/refdb_fs.c +1 -1
- data/vendor/libgit2/src/transports/git.c +7 -4
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 34a82c36a2937fc0183d0c2a5cad5682c4d64055
|
4
|
+
data.tar.gz: 98ef84b8da23e17429430ebc0cc37b860e51bc28
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3d288fc1bb1799b49da9fbf7e525def0695dfcddd347cfcc08f6855dc6e9fba31913547bc21d8560d99a1dbadf3e06913ebd447f13ced8f0f9d3f1c24d8bf520
|
7
|
+
data.tar.gz: f624e44c09a2f0742b23e79b6151729f80381be2e3b91a4130debbd372ff4246e269d741887cab61a9459ecaa3484f437add2cb5cb5984e40377730fb851f56c
|
data/lib/rugged/version.rb
CHANGED
data/vendor/libgit2/src/index.c
CHANGED
@@ -2899,6 +2899,7 @@ int git_index_read_index(
|
|
2899
2899
|
{
|
2900
2900
|
git_vector new_entries = GIT_VECTOR_INIT,
|
2901
2901
|
remove_entries = GIT_VECTOR_INIT;
|
2902
|
+
git_idxmap *new_entries_map = NULL;
|
2902
2903
|
git_iterator *index_iterator = NULL;
|
2903
2904
|
git_iterator *new_iterator = NULL;
|
2904
2905
|
git_iterator_options opts = GIT_ITERATOR_OPTIONS_INIT;
|
@@ -2908,9 +2909,15 @@ int git_index_read_index(
|
|
2908
2909
|
int error;
|
2909
2910
|
|
2910
2911
|
if ((error = git_vector_init(&new_entries, new_index->entries.length, index->entries._cmp)) < 0 ||
|
2911
|
-
(error = git_vector_init(&remove_entries, index->entries.length, NULL)) < 0
|
2912
|
+
(error = git_vector_init(&remove_entries, index->entries.length, NULL)) < 0 ||
|
2913
|
+
(error = git_idxmap_alloc(&new_entries_map)) < 0)
|
2912
2914
|
goto done;
|
2913
2915
|
|
2916
|
+
if (index->ignore_case)
|
2917
|
+
kh_resize(idxicase, (khash_t(idxicase) *) new_entries_map, new_index->entries.length);
|
2918
|
+
else
|
2919
|
+
kh_resize(idx, new_entries_map, new_index->entries.length);
|
2920
|
+
|
2914
2921
|
opts.flags = GIT_ITERATOR_DONT_IGNORE_CASE;
|
2915
2922
|
|
2916
2923
|
if ((error = git_iterator_for_index(&index_iterator, index, &opts)) < 0 ||
|
@@ -2924,6 +2931,7 @@ int git_index_read_index(
|
|
2924
2931
|
goto done;
|
2925
2932
|
|
2926
2933
|
while (true) {
|
2934
|
+
git_index_entry *add_entry = NULL, *remove_entry = NULL;
|
2927
2935
|
int diff;
|
2928
2936
|
|
2929
2937
|
if (old_entry && new_entry)
|
@@ -2936,27 +2944,37 @@ int git_index_read_index(
|
|
2936
2944
|
break;
|
2937
2945
|
|
2938
2946
|
if (diff < 0) {
|
2939
|
-
|
2947
|
+
remove_entry = (git_index_entry *)old_entry;
|
2940
2948
|
} else if (diff > 0) {
|
2941
|
-
if ((error = index_entry_dup(&
|
2949
|
+
if ((error = index_entry_dup(&add_entry, index, new_entry)) < 0)
|
2942
2950
|
goto done;
|
2943
|
-
|
2944
|
-
git_vector_insert(&new_entries, entry);
|
2945
2951
|
} else {
|
2946
2952
|
/* Path and stage are equal, if the OID is equal, keep it to
|
2947
2953
|
* keep the stat cache data.
|
2948
2954
|
*/
|
2949
2955
|
if (git_oid_equal(&old_entry->id, &new_entry->id)) {
|
2950
|
-
|
2956
|
+
add_entry = (git_index_entry *)old_entry;
|
2951
2957
|
} else {
|
2952
|
-
if ((error = index_entry_dup(&
|
2958
|
+
if ((error = index_entry_dup(&add_entry, index, new_entry)) < 0)
|
2953
2959
|
goto done;
|
2954
2960
|
|
2955
|
-
|
2956
|
-
git_vector_insert(&remove_entries, (git_index_entry *)old_entry);
|
2961
|
+
remove_entry = (git_index_entry *)old_entry;
|
2957
2962
|
}
|
2958
2963
|
}
|
2959
2964
|
|
2965
|
+
if (add_entry) {
|
2966
|
+
if ((error = git_vector_insert(&new_entries, add_entry)) == 0)
|
2967
|
+
INSERT_IN_MAP_EX(index, new_entries_map, add_entry, error);
|
2968
|
+
}
|
2969
|
+
|
2970
|
+
if (remove_entry && !error)
|
2971
|
+
error = git_vector_insert(&remove_entries, remove_entry);
|
2972
|
+
|
2973
|
+
if (error < 0) {
|
2974
|
+
giterr_set(GITERR_INDEX, "failed to insert entry");
|
2975
|
+
return error;
|
2976
|
+
}
|
2977
|
+
|
2960
2978
|
if (diff <= 0) {
|
2961
2979
|
if ((error = git_iterator_advance(&old_entry, index_iterator)) < 0 &&
|
2962
2980
|
error != GIT_ITEROVER)
|
@@ -2974,6 +2992,7 @@ int git_index_read_index(
|
|
2974
2992
|
git_index_reuc_clear(index);
|
2975
2993
|
|
2976
2994
|
git_vector_swap(&new_entries, &index->entries);
|
2995
|
+
new_entries_map = git__swap(index->entries_map, new_entries_map);
|
2977
2996
|
|
2978
2997
|
git_vector_foreach(&remove_entries, i, entry) {
|
2979
2998
|
if (index->tree)
|
@@ -2985,6 +3004,7 @@ int git_index_read_index(
|
|
2985
3004
|
error = 0;
|
2986
3005
|
|
2987
3006
|
done:
|
3007
|
+
git_idxmap_free(new_entries_map);
|
2988
3008
|
git_vector_free(&new_entries);
|
2989
3009
|
git_vector_free(&remove_entries);
|
2990
3010
|
git_iterator_free(index_iterator);
|
data/vendor/libgit2/src/merge.c
CHANGED
@@ -302,30 +302,59 @@ static int interesting(git_pqueue *list)
|
|
302
302
|
return 0;
|
303
303
|
}
|
304
304
|
|
305
|
-
|
305
|
+
static void clear_commit_marks_1(git_commit_list **plist,
|
306
|
+
git_commit_list_node *commit, unsigned int mark)
|
306
307
|
{
|
307
|
-
|
308
|
-
|
309
|
-
git_commit_list_node *two;
|
310
|
-
git_commit_list *result = NULL, *tmp = NULL;
|
311
|
-
git_pqueue list;
|
308
|
+
while (commit) {
|
309
|
+
unsigned int i;
|
312
310
|
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
311
|
+
if (!(mark & commit->flags))
|
312
|
+
return;
|
313
|
+
|
314
|
+
commit->flags &= ~mark;
|
315
|
+
|
316
|
+
for (i = 1; i < commit->out_degree; i++) {
|
317
|
+
git_commit_list_node *p = commit->parents[i];
|
318
|
+
git_commit_list_insert(p, plist);
|
319
|
+
}
|
320
|
+
|
321
|
+
commit = commit->out_degree ? commit->parents[0] : NULL;
|
317
322
|
}
|
323
|
+
}
|
318
324
|
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
325
|
+
static void clear_commit_marks_many(git_vector *commits, unsigned int mark)
|
326
|
+
{
|
327
|
+
git_commit_list *list = NULL;
|
328
|
+
git_commit_list_node *c;
|
329
|
+
unsigned int i;
|
330
|
+
|
331
|
+
git_vector_foreach(commits, i, c) {
|
332
|
+
git_commit_list_insert(c, &list);
|
323
333
|
}
|
324
334
|
|
325
|
-
|
326
|
-
|
335
|
+
while (list)
|
336
|
+
clear_commit_marks_1(&list, git_commit_list_pop(&list), mark);
|
337
|
+
}
|
327
338
|
|
328
|
-
|
339
|
+
static void clear_commit_marks(git_commit_list_node *commit, unsigned int mark)
|
340
|
+
{
|
341
|
+
git_commit_list *list = NULL;
|
342
|
+
git_commit_list_insert(commit, &list);
|
343
|
+
while (list)
|
344
|
+
clear_commit_marks_1(&list, git_commit_list_pop(&list), mark);
|
345
|
+
}
|
346
|
+
|
347
|
+
static int paint_down_to_common(
|
348
|
+
git_commit_list **out, git_revwalk *walk, git_commit_list_node *one, git_vector *twos)
|
349
|
+
{
|
350
|
+
git_pqueue list;
|
351
|
+
git_commit_list *result = NULL;
|
352
|
+
git_commit_list_node *two;
|
353
|
+
|
354
|
+
int error;
|
355
|
+
unsigned int i;
|
356
|
+
|
357
|
+
if (git_pqueue_init(&list, 0, twos->length * 2, git_commit_list_time_cmp) < 0)
|
329
358
|
return -1;
|
330
359
|
|
331
360
|
one->flags |= PARENT1;
|
@@ -376,19 +405,138 @@ int git_merge__bases_many(git_commit_list **out, git_revwalk *walk, git_commit_l
|
|
376
405
|
}
|
377
406
|
|
378
407
|
git_pqueue_free(&list);
|
408
|
+
*out = result;
|
409
|
+
return 0;
|
410
|
+
}
|
411
|
+
|
412
|
+
static int remove_redundant(git_revwalk *walk, git_vector *commits)
|
413
|
+
{
|
414
|
+
git_vector work = GIT_VECTOR_INIT;
|
415
|
+
unsigned char *redundant;
|
416
|
+
unsigned int *filled_index;
|
417
|
+
unsigned int i, j;
|
418
|
+
int error = 0;
|
419
|
+
|
420
|
+
redundant = git__calloc(commits->length, 1);
|
421
|
+
GITERR_CHECK_ALLOC(redundant);
|
422
|
+
filled_index = git__calloc((commits->length - 1), sizeof(unsigned int));
|
423
|
+
GITERR_CHECK_ALLOC(filled_index);
|
424
|
+
|
425
|
+
for (i = 0; i < commits->length; ++i) {
|
426
|
+
if ((error = git_commit_list_parse(walk, commits->contents[i])) < 0)
|
427
|
+
goto done;
|
428
|
+
}
|
429
|
+
|
430
|
+
for (i = 0; i < commits->length; ++i) {
|
431
|
+
git_commit_list *common = NULL;
|
432
|
+
git_commit_list_node *commit = commits->contents[i];
|
433
|
+
|
434
|
+
if (redundant[i])
|
435
|
+
continue;
|
436
|
+
|
437
|
+
git_vector_clear(&work);
|
438
|
+
|
439
|
+
for (j = 0; j < commits->length; j++) {
|
440
|
+
if (i == j || redundant[j])
|
441
|
+
continue;
|
442
|
+
|
443
|
+
filled_index[work.length] = j;
|
444
|
+
if ((error = git_vector_insert(&work, commits->contents[j])) < 0)
|
445
|
+
goto done;
|
446
|
+
}
|
447
|
+
|
448
|
+
error = paint_down_to_common(&common, walk, commit, &work);
|
449
|
+
if (error < 0)
|
450
|
+
goto done;
|
451
|
+
|
452
|
+
if (commit->flags & PARENT2)
|
453
|
+
redundant[i] = 1;
|
454
|
+
|
455
|
+
for (j = 0; j < work.length; j++) {
|
456
|
+
git_commit_list_node *w = work.contents[j];
|
457
|
+
if (w->flags & PARENT1)
|
458
|
+
redundant[filled_index[j]] = 1;
|
459
|
+
}
|
460
|
+
|
461
|
+
clear_commit_marks(commit, ALL_FLAGS);
|
462
|
+
clear_commit_marks_many(&work, ALL_FLAGS);
|
463
|
+
|
464
|
+
git_commit_list_free(&common);
|
465
|
+
}
|
466
|
+
|
467
|
+
for (i = 0; i < commits->length; ++i) {
|
468
|
+
if (redundant[i])
|
469
|
+
commits->contents[i] = NULL;
|
470
|
+
}
|
471
|
+
|
472
|
+
done:
|
473
|
+
git__free(redundant);
|
474
|
+
git__free(filled_index);
|
475
|
+
git_vector_free(&work);
|
476
|
+
return error;
|
477
|
+
}
|
478
|
+
|
479
|
+
int git_merge__bases_many(git_commit_list **out, git_revwalk *walk, git_commit_list_node *one, git_vector *twos)
|
480
|
+
{
|
481
|
+
int error;
|
482
|
+
unsigned int i;
|
483
|
+
git_commit_list_node *two;
|
484
|
+
git_commit_list *result = NULL, *tmp = NULL;
|
485
|
+
|
486
|
+
/* If there's only the one commit, there can be no merge bases */
|
487
|
+
if (twos->length == 0) {
|
488
|
+
*out = NULL;
|
489
|
+
return 0;
|
490
|
+
}
|
491
|
+
|
492
|
+
/* if the commit is repeated, we have a our merge base already */
|
493
|
+
git_vector_foreach(twos, i, two) {
|
494
|
+
if (one == two)
|
495
|
+
return git_commit_list_insert(one, out) ? 0 : -1;
|
496
|
+
}
|
497
|
+
|
498
|
+
if (git_commit_list_parse(walk, one) < 0)
|
499
|
+
return -1;
|
500
|
+
|
501
|
+
error = paint_down_to_common(&result, walk, one, twos);
|
502
|
+
if (error < 0)
|
503
|
+
return error;
|
379
504
|
|
380
505
|
/* filter out any stale commits in the results */
|
381
506
|
tmp = result;
|
382
507
|
result = NULL;
|
383
508
|
|
384
509
|
while (tmp) {
|
385
|
-
|
386
|
-
if (!(
|
387
|
-
if (git_commit_list_insert_by_date(
|
510
|
+
git_commit_list_node *c = git_commit_list_pop(&tmp);
|
511
|
+
if (!(c->flags & STALE))
|
512
|
+
if (git_commit_list_insert_by_date(c, &result) == NULL)
|
388
513
|
return -1;
|
514
|
+
}
|
515
|
+
|
516
|
+
/*
|
517
|
+
* more than one merge base -- see if there are redundant merge
|
518
|
+
* bases and remove them
|
519
|
+
*/
|
520
|
+
if (result && result->next) {
|
521
|
+
git_vector redundant = GIT_VECTOR_INIT;
|
522
|
+
|
523
|
+
while (result)
|
524
|
+
git_vector_insert(&redundant, git_commit_list_pop(&result));
|
525
|
+
|
526
|
+
clear_commit_marks(one, ALL_FLAGS);
|
527
|
+
clear_commit_marks_many(twos, ALL_FLAGS);
|
528
|
+
|
529
|
+
if ((error = remove_redundant(walk, &redundant)) < 0) {
|
530
|
+
git_vector_free(&redundant);
|
531
|
+
return error;
|
532
|
+
}
|
533
|
+
|
534
|
+
git_vector_foreach(&redundant, i, two) {
|
535
|
+
if (two != NULL)
|
536
|
+
git_commit_list_insert_by_date(two, &result);
|
537
|
+
}
|
389
538
|
|
390
|
-
|
391
|
-
tmp = next;
|
539
|
+
git_vector_free(&redundant);
|
392
540
|
}
|
393
541
|
|
394
542
|
*out = result;
|
data/vendor/libgit2/src/pool.h
CHANGED
@@ -38,12 +38,12 @@ typedef struct {
|
|
38
38
|
*
|
39
39
|
* To allocation strings, use like this:
|
40
40
|
*
|
41
|
-
* git_pool_init(&string_pool, 1
|
41
|
+
* git_pool_init(&string_pool, 1);
|
42
42
|
* my_string = git_pool_strdup(&string_pool, your_string);
|
43
43
|
*
|
44
44
|
* To allocate items of fixed size, use like this:
|
45
45
|
*
|
46
|
-
* git_pool_init(&pool, sizeof(item)
|
46
|
+
* git_pool_init(&pool, sizeof(item));
|
47
47
|
* my_item = git_pool_malloc(&pool, 1);
|
48
48
|
*
|
49
49
|
* Of course, you can use this in other ways, but those are the
|
@@ -1464,7 +1464,7 @@ static int reflog_parse(git_reflog *log, const char *buf, size_t buf_size)
|
|
1464
1464
|
entry = git__calloc(1, sizeof(git_reflog_entry));
|
1465
1465
|
GITERR_CHECK_ALLOC(entry);
|
1466
1466
|
|
1467
|
-
entry->committer =
|
1467
|
+
entry->committer = git__calloc(1, sizeof(git_signature));
|
1468
1468
|
GITERR_CHECK_ALLOC(entry->committer);
|
1469
1469
|
|
1470
1470
|
if (git_oid_fromstrn(&entry->oid_old, buf, GIT_OID_HEXSZ) < 0)
|
@@ -130,11 +130,14 @@ static int git_proto_stream_write(
|
|
130
130
|
|
131
131
|
static void git_proto_stream_free(git_smart_subtransport_stream *stream)
|
132
132
|
{
|
133
|
-
git_proto_stream *s
|
134
|
-
git_subtransport *t
|
135
|
-
|
133
|
+
git_proto_stream *s;
|
134
|
+
git_subtransport *t;
|
135
|
+
|
136
|
+
if (!stream)
|
137
|
+
return;
|
136
138
|
|
137
|
-
|
139
|
+
s = (git_proto_stream *)stream;
|
140
|
+
t = OWNING_SUBTRANSPORT(s);
|
138
141
|
|
139
142
|
t->current_stream = NULL;
|
140
143
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rugged
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.24.
|
4
|
+
version: 0.24.0b7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Scott Chacon
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-11-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake-compiler
|