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;