Make 'unpack_trees()' take the index to work on as an argument
This is just a very mechanical conversion, and makes everybody set it to '&the_index' before calling, but at least it makes it more explicit where we work with the index. The next stage would be to split that index usage up into a 'source' and a 'destination' index, so that we can unpack into a different index than we started out from. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Linus Torvalds committed
Mar 6, 2008 at 12:26 UTC
bc052d7f435f8f729127cc4790484865c1a974b9
7 files changed
+52
-39
builtin-checkout.c
+6
@@ -152,6 +152,7 @@ static int reset_to_new(struct tree *tree, int quiet)
152
{
153
struct unpack_trees_options opts;
154
struct tree_desc tree_desc;
155
+
156
memset(&opts, 0, sizeof(opts));
157
opts.head_idx = -1;
158
opts.update = 1;
@@ -159,6 +160,7 @@ static int reset_to_new(struct tree *tree, int quiet)
160
opts.merge = 1;
161
opts.fn = oneway_merge;
162
opts.verbose_update = !quiet;
163
+ opts.index = &the_index;
164
parse_tree(tree);
165
init_tree_desc(&tree_desc, tree->buffer, tree->size);
166
if (unpack_trees(1, &tree_desc, &opts))
@@ -170,6 +172,7 @@ static void reset_clean_to_new(struct tree *tree, int quiet)
172
{
173
struct unpack_trees_options opts;
174
struct tree_desc tree_desc;
175
+
176
memset(&opts, 0, sizeof(opts));
177
opts.head_idx = -1;
178
opts.skip_unmerged = 1;
@@ -177,6 +180,7 @@ static void reset_clean_to_new(struct tree *tree, int quiet)
180
opts.merge = 1;
181
opts.fn = oneway_merge;
182
opts.verbose_update = !quiet;
183
+ opts.index = &the_index;
184
parse_tree(tree);
185
init_tree_desc(&tree_desc, tree->buffer, tree->size);
186
if (unpack_trees(1, &tree_desc, &opts))
@@ -224,8 +228,10 @@ static int merge_working_tree(struct checkout_opts *opts,
228
struct tree_desc trees[2];
229
struct tree *tree;
230
struct unpack_trees_options topts;
231
+
232
memset(&topts, 0, sizeof(topts));
233
topts.head_idx = -1;
234
+ topts.index = &the_index;
235
236
refresh_cache(REFRESH_QUIET);
237
builtin-commit.c
+1
@@ -198,6 +198,7 @@ static void create_base_index(void)
198
opts.head_idx = 1;
199
opts.index_only = 1;
200
opts.merge = 1;
201
+ opts.index = &the_index;
202
203
opts.fn = oneway_merge;
204
tree = parse_tree_indirect(head_sha1);
builtin-merge-recursive.c
+1
@@ -213,6 +213,7 @@ static int git_merge_trees(int index_only,
213
opts.merge = 1;
214
opts.head_idx = 2;
215
opts.fn = threeway_merge;
216
+ opts.index = &the_index;
217
218
init_tree_desc_from_tree(t+0, common);
219
init_tree_desc_from_tree(t+1, head);
builtin-read-tree.c
+1
@@ -102,6 +102,7 @@ int cmd_read_tree(int argc, const char **argv, const char *unused_prefix)
102
103
memset(&opts, 0, sizeof(opts));
104
opts.head_idx = -1;
105
+ opts.index = &the_index;
106
107
git_config(git_default_config);
108
diff-lib.c
+2
@@ -734,6 +734,7 @@ int run_diff_index(struct rev_info *revs, int cached)
734
opts.merge = 1;
735
opts.fn = oneway_diff;
736
opts.unpack_data = revs;
737
+ opts.index = &the_index;
738
739
init_tree_desc(&t, tree->buffer, tree->size);
740
if (unpack_trees(1, &t, &opts))
@@ -787,6 +788,7 @@ int do_diff_cache(const unsigned char *tree_sha1, struct diff_options *opt)
788
opts.merge = 1;
789
opts.fn = oneway_diff;
790
opts.unpack_data = &revs;
791
+ opts.index = &the_index;
792
793
init_tree_desc(&t, tree->buffer, tree->size);
794
if (unpack_trees(1, &t, &opts))
unpack-trees.c
+40
-39
@@ -1,3 +1,4 @@
1
+#define NO_THE_INDEX_COMPATIBILITY_MACROS
2
#include "cache.h"
3
#include "dir.h"
4
#include "tree.h"
@@ -7,10 +8,10 @@
8
#include "progress.h"
9
#include "refs.h"
10
10
-static inline void remove_entry(int remove)
11
+static inline void remove_entry(int remove, struct unpack_trees_options *o)
12
{
13
if (remove >= 0)
13
- remove_cache_entry_at(remove);
14
+ remove_index_entry_at(o->index, remove);
15
}
16
17
/* Unlink the last component and attempt to remove leading
@@ -53,8 +54,8 @@ static void check_updates(struct unpack_trees_options *o)
54
int i;
55
56
if (o->update && o->verbose_update) {
56
- for (total = cnt = 0; cnt < active_nr; cnt++) {
57
- struct cache_entry *ce = active_cache[cnt];
57
+ for (total = cnt = 0; cnt < o->index->cache_nr; cnt++) {
58
+ struct cache_entry *ce = o->index->cache[cnt];
59
if (ce->ce_flags & (CE_UPDATE | CE_REMOVE))
60
total++;
61
}
@@ -65,15 +66,15 @@ static void check_updates(struct unpack_trees_options *o)
66
}
67
68
*last_symlink = '\0';
68
- for (i = 0; i < active_nr; i++) {
69
- struct cache_entry *ce = active_cache[i];
69
+ for (i = 0; i < o->index->cache_nr; i++) {
70
+ struct cache_entry *ce = o->index->cache[i];
71
72
if (ce->ce_flags & (CE_UPDATE | CE_REMOVE))
73
display_progress(progress, ++cnt);
74
if (ce->ce_flags & CE_REMOVE) {
75
if (o->update)
76
unlink_entry(ce->name, last_symlink);
76
- remove_cache_entry_at(i);
77
+ remove_index_entry_at(o->index, i);
78
i--;
79
continue;
80
}
@@ -105,7 +106,7 @@ static int unpack_index_entry(struct cache_entry *ce, struct unpack_trees_option
106
if (o->skip_unmerged) {
107
o->pos++;
108
} else {
108
- remove_entry(o->pos);
109
+ remove_entry(o->pos, o);
110
}
111
return 0;
112
}
@@ -242,9 +243,9 @@ static int unpack_nondirectories(int n, unsigned long mask, unsigned long dirmas
243
return call_unpack_fn(src, o, remove);
244
245
n += o->merge;
245
- remove_entry(remove);
246
+ remove_entry(remove, o);
247
for (i = 0; i < n; i++)
247
- add_cache_entry(src[i], ADD_CACHE_OK_TO_ADD|ADD_CACHE_SKIP_DFCHECK);
248
+ add_index_entry(o->index, src[i], ADD_CACHE_OK_TO_ADD|ADD_CACHE_SKIP_DFCHECK);
249
return 0;
250
}
251
@@ -261,8 +262,8 @@ static int unpack_callback(int n, unsigned long mask, unsigned long dirmask, str
262
263
/* Are we supposed to look at the index too? */
264
if (o->merge) {
264
- while (o->pos < active_nr) {
265
- struct cache_entry *ce = active_cache[o->pos];
265
+ while (o->pos < o->index->cache_nr) {
266
+ struct cache_entry *ce = o->index->cache[o->pos];
267
int cmp = compare_entry(ce, info, p);
268
if (cmp < 0) {
269
if (unpack_index_entry(ce, o) < 0)
@@ -277,7 +278,7 @@ static int unpack_callback(int n, unsigned long mask, unsigned long dirmask, str
278
*/
279
if (o->skip_unmerged)
280
return mask;
280
- remove_entry(o->pos);
281
+ remove_entry(o->pos, o);
282
continue;
283
}
284
src[0] = ce;
@@ -312,8 +313,8 @@ static int unpack_failed(struct unpack_trees_options *o, const char *message)
313
return error(message);
314
return -1;
315
}
315
- discard_cache();
316
- read_cache();
316
+ discard_index(o->index);
317
+ read_index(o->index);
318
return -1;
319
}
320
@@ -349,8 +350,8 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options
350
351
/* Any left-over entries in the index? */
352
if (o->merge) {
352
- while (o->pos < active_nr) {
353
- struct cache_entry *ce = active_cache[o->pos];
353
+ while (o->pos < o->index->cache_nr) {
354
+ struct cache_entry *ce = o->index->cache[o->pos];
355
if (unpack_index_entry(ce, o) < 0)
356
return unpack_failed(o, NULL);
357
}
@@ -395,7 +396,7 @@ static int verify_uptodate(struct cache_entry *ce,
396
return 0;
397
398
if (!lstat(ce->name, &st)) {
398
- unsigned changed = ce_match_stat(ce, &st, CE_MATCH_IGNORE_VALID);
399
+ unsigned changed = ie_match_stat(o->index, ce, &st, CE_MATCH_IGNORE_VALID);
400
if (!changed)
401
return 0;
402
/*
@@ -415,10 +416,10 @@ static int verify_uptodate(struct cache_entry *ce,
416
error("Entry '%s' not uptodate. Cannot merge.", ce->name);
417
}
418
418
-static void invalidate_ce_path(struct cache_entry *ce)
419
+static void invalidate_ce_path(struct cache_entry *ce, struct unpack_trees_options *o)
420
{
421
if (ce)
421
- cache_tree_invalidate_path(active_cache_tree, ce->name);
422
+ cache_tree_invalidate_path(o->index->cache_tree, ce->name);
423
}
424
425
/*
@@ -463,12 +464,12 @@ static int verify_clean_subdirectory(struct cache_entry *ce, const char *action,
464
* in that directory.
465
*/
466
namelen = strlen(ce->name);
466
- pos = cache_name_pos(ce->name, namelen);
467
+ pos = index_name_pos(o->index, ce->name, namelen);
468
if (0 <= pos)
469
return cnt; /* we have it as nondirectory */
470
pos = -pos - 1;
470
- for (i = pos; i < active_nr; i++) {
471
- struct cache_entry *ce = active_cache[i];
471
+ for (i = pos; i < o->index->cache_nr; i++) {
472
+ struct cache_entry *ce = o->index->cache[i];
473
int len = ce_namelen(ce);
474
if (len < namelen ||
475
strncmp(ce->name, ce->name, namelen) ||
@@ -566,9 +567,9 @@ static int verify_absent(struct cache_entry *ce, const char *action,
567
* delete this path, which is in a subdirectory that
568
* is being replaced with a blob.
569
*/
569
- cnt = cache_name_pos(ce->name, strlen(ce->name));
570
+ cnt = index_name_pos(o->index, ce->name, strlen(ce->name));
571
if (0 <= cnt) {
571
- struct cache_entry *ce = active_cache[cnt];
572
+ struct cache_entry *ce = o->index->cache[cnt];
573
if (ce->ce_flags & CE_REMOVE)
574
return 0;
575
}
@@ -597,17 +598,17 @@ static int merged_entry(struct cache_entry *merge, struct cache_entry *old,
598
} else {
599
if (verify_uptodate(old, o))
600
return -1;
600
- invalidate_ce_path(old);
601
+ invalidate_ce_path(old, o);
602
}
603
}
604
else {
605
if (verify_absent(merge, "overwritten", o))
606
return -1;
606
- invalidate_ce_path(merge);
607
+ invalidate_ce_path(merge, o);
608
}
609
610
merge->ce_flags &= ~CE_STAGEMASK;
610
- add_cache_entry(merge, ADD_CACHE_OK_TO_ADD|ADD_CACHE_OK_TO_REPLACE);
611
+ add_index_entry(o->index, merge, ADD_CACHE_OK_TO_ADD|ADD_CACHE_OK_TO_REPLACE);
612
return 1;
613
}
614
@@ -621,14 +622,14 @@ static int deleted_entry(struct cache_entry *ce, struct cache_entry *old,
622
if (verify_absent(ce, "removed", o))
623
return -1;
624
ce->ce_flags |= CE_REMOVE;
624
- add_cache_entry(ce, ADD_CACHE_OK_TO_ADD|ADD_CACHE_OK_TO_REPLACE);
625
- invalidate_ce_path(ce);
625
+ add_index_entry(o->index, ce, ADD_CACHE_OK_TO_ADD|ADD_CACHE_OK_TO_REPLACE);
626
+ invalidate_ce_path(ce, o);
627
return 1;
628
}
629
630
static int keep_entry(struct cache_entry *ce, struct unpack_trees_options *o)
631
{
631
- add_cache_entry(ce, ADD_CACHE_OK_TO_ADD);
632
+ add_index_entry(o->index, ce, ADD_CACHE_OK_TO_ADD);
633
return 1;
634
}
635
@@ -728,7 +729,7 @@ int threeway_merge(struct cache_entry **stages,
729
730
/* #1 */
731
if (!head && !remote && any_anc_missing) {
731
- remove_entry(remove);
732
+ remove_entry(remove, o);
733
return 0;
734
}
735
@@ -762,7 +763,7 @@ int threeway_merge(struct cache_entry **stages,
763
if ((head_deleted && remote_deleted) ||
764
(head_deleted && remote && remote_match) ||
765
(remote_deleted && head && head_match)) {
765
- remove_entry(remove);
766
+ remove_entry(remove, o);
767
if (index)
768
return deleted_entry(index, index, o);
769
else if (ce && !head_deleted) {
@@ -788,7 +789,7 @@ int threeway_merge(struct cache_entry **stages,
789
return -1;
790
}
791
791
- remove_entry(remove);
792
+ remove_entry(remove, o);
793
o->nontrivial_merge = 1;
794
795
/* #2, #3, #4, #6, #7, #9, #10, #11. */
@@ -853,7 +854,7 @@ int twoway_merge(struct cache_entry **src,
854
}
855
else if (oldtree && !newtree && same(current, oldtree)) {
856
/* 10 or 11 */
856
- remove_entry(remove);
857
+ remove_entry(remove, o);
858
return deleted_entry(oldtree, current, o);
859
}
860
else if (oldtree && newtree &&
@@ -863,7 +864,7 @@ int twoway_merge(struct cache_entry **src,
864
}
865
else {
866
/* all other failures */
866
- remove_entry(remove);
867
+ remove_entry(remove, o);
868
if (oldtree)
869
return o->gently ? -1 : reject_merge(oldtree);
870
if (current)
@@ -875,7 +876,7 @@ int twoway_merge(struct cache_entry **src,
876
}
877
else if (newtree)
878
return merged_entry(newtree, current, o);
878
- remove_entry(remove);
879
+ remove_entry(remove, o);
880
return deleted_entry(oldtree, current, o);
881
}
882
@@ -922,14 +923,14 @@ int oneway_merge(struct cache_entry **src,
923
o->merge_size);
924
925
if (!a) {
925
- remove_entry(remove);
926
+ remove_entry(remove, o);
927
return deleted_entry(old, old, o);
928
}
929
if (old && same(old, a)) {
930
if (o->reset) {
931
struct stat st;
932
if (lstat(old->name, &st) ||
932
- ce_match_stat(old, &st, CE_MATCH_IGNORE_VALID))
933
+ ie_match_stat(o->index, old, &st, CE_MATCH_IGNORE_VALID))
934
old->ce_flags |= CE_UPDATE;
935
}
936
return keep_entry(old, o);
unpack-trees.h
+1
@@ -28,6 +28,7 @@ struct unpack_trees_options {
28
29
struct cache_entry *df_conflict_entry;
30
void *unpack_data;
31
+ struct index_state *index;
32
};
33
34
extern int unpack_trees(unsigned n, struct tree_desc *t,