merge: setup `opts` later in `checkout_fast_forward()`

After we initialize the various fields in `opts` but before we actually use them, we might return early. Move the initialization further down, to immediately before we use `opts`. This limits the scope of `opts` and will help a later commit fix a memory leak without having to worry about those early returns. This patch is best viewed using something like this (note the tab!): --color-moved --anchored=" trees[nr_trees] = parse_tree_indirect" Signed-off-by: Martin Ågren <martin.agren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Martin Ågren committed May 20, 2018 at 12:17 UTC 89e653da5b1bee9cf645e9d4bdd95f6bb31cc4b9
1 file changed +17 -15
merge.c
+17 -15
@@ -94,8 +94,24 @@ int checkout_fast_forward(const struct object_id *head,
94 return -1;
95
96 memset(&trees, 0, sizeof(trees));
97 - memset(&opts, 0, sizeof(opts));
97 memset(&t, 0, sizeof(t));
98 +
99 + trees[nr_trees] = parse_tree_indirect(head);
100 + if (!trees[nr_trees++]) {
101 + rollback_lock_file(&lock_file);
102 + return -1;
103 + }
104 + trees[nr_trees] = parse_tree_indirect(remote);
105 + if (!trees[nr_trees++]) {
106 + rollback_lock_file(&lock_file);
107 + return -1;
108 + }
109 + for (i = 0; i < nr_trees; i++) {
110 + parse_tree(trees[i]);
111 + init_tree_desc(t+i, trees[i]->buffer, trees[i]->size);
112 + }
113 +
114 + memset(&opts, 0, sizeof(opts));
115 if (overwrite_ignore) {
116 memset(&dir, 0, sizeof(dir));
117 dir.flags |= DIR_SHOW_IGNORED;
@@ -112,20 +128,6 @@ int checkout_fast_forward(const struct object_id *head,
128 opts.fn = twoway_merge;
129 setup_unpack_trees_porcelain(&opts, "merge");
130
115 - trees[nr_trees] = parse_tree_indirect(head);
116 - if (!trees[nr_trees++]) {
117 - rollback_lock_file(&lock_file);
118 - return -1;
119 - }
120 - trees[nr_trees] = parse_tree_indirect(remote);
121 - if (!trees[nr_trees++]) {
122 - rollback_lock_file(&lock_file);
123 - return -1;
124 - }
125 - for (i = 0; i < nr_trees; i++) {
126 - parse_tree(trees[i]);
127 - init_tree_desc(t+i, trees[i]->buffer, trees[i]->size);
128 - }
131 if (unpack_trees(nr_trees, t, &opts)) {
132 rollback_lock_file(&lock_file);
133 return -1;