@matheusbsbs / matheus-bagliano / commits / bc052d7f43
Fork 0

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,