rugged 0.24.0b6 → 0.24.0b7
Sign up to get free protection for your applications and to get access to all the features.
- 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
|