@@ -190,14 +190,17 @@ static void resolve(const struct traverse_info *info, struct name_entry *ours, s
{
struct merge_list *orig, *final;
const char *path;
+ unsigned int orig_mode, final_mode;
/* If it's already ours, don't bother showing it */
if (!ours)
return;
path = traverse_path(info, result);
- orig = create_entry(2, ours->mode, &ours->oid, path);
- final = create_entry(0, result->mode, &result->oid, path);
+ orig_mode = ours->mode;
+ orig = create_entry(2, orig_mode, &ours->oid, path);
+ final_mode = result->mode;
+ final = create_entry(0, final_mode, &result->oid, path);
final->link = orig;
@@ -241,6 +244,7 @@ static struct merge_list *link_entry(unsigned stage, const struct traverse_info
{
const char *path;
struct merge_list *link;
+ unsigned int link_mode;
if (n->object_type == OBJ_NONE)
return entry;
@@ -248,7 +252,9 @@ static struct merge_list *link_entry(unsigned stage, const struct traverse_info
path = entry->path;
else
path = traverse_path(info, n);
- link = create_entry(stage, n->mode, &n->oid, path);
+ link_mode = n->mode;
+ link = create_entry(stage, link_mode, &n->oid, path);
+
link->link = entry;
return link;
}
@@ -86,6 +86,8 @@ static int score_trees(const struct object_id *hash1, const struct object_id *ha
for (;;) {
int cmp;
+ unsigned int one_mode = one.entry.mode;
+ unsigned int two_mode = two.entry.mode;
if (one.size && two.size)
cmp = base_name_entries_compare(&one.entry, &two.entry);
@@ -100,22 +102,21 @@ static int score_trees(const struct object_id *hash1, const struct object_id *ha
if (cmp < 0) {
/* path1 does not appear in two */
- score += score_missing(one.entry.mode);
+ score += score_missing(one_mode);
update_tree_entry(&one);
} else if (cmp > 0) {
/* path2 does not appear in one */
- score += score_missing(two.entry.mode);
+ score += score_missing(two_mode);
update_tree_entry(&two);
} else {
+
/* path appears in both */
if (!oideq(&one.entry.oid, &two.entry.oid)) {
/* they are different */
- score += score_differs(one.entry.mode,
- two.entry.mode);
+ score += score_differs(one_mode, two_mode);
} else {
/* same subtree or blob */
- score += score_matches(one.entry.mode,
- two.entry.mode);
+ score += score_matches(one_mode, two_mode);
}
update_tree_entry(&one);
update_tree_entry(&two);
@@ -544,11 +544,12 @@ static void add_pair(struct merge_options *opt,
struct diff_filespec *one, *two;
struct rename_info *renames = &opt->priv->renames;
int names_idx = is_add ? side : 0;
+ const struct object_id *oid = &names[names_idx].oid;
+ unsigned int mode = names[names_idx].mode;
one = alloc_filespec(pathname);
two = alloc_filespec(pathname);
- fill_filespec(is_add ? two : one,
- &names[names_idx].oid, 1, names[names_idx].mode);
+ fill_filespec(is_add ? two : one, oid, 1, mode);
diff_queue(&renames->pairs[side], one, two);
}
@@ -478,6 +478,7 @@ static void load_subtree(struct notes_tree *t, struct leaf_node *subtree,
struct strbuf non_note_path = STRBUF_INIT;
const char *q = oid_to_hex(&subtree->key_oid);
size_t i;
+ unsigned int mode = entry.mode;
for (i = 0; i < prefix_len; i++) {
strbuf_addch(&non_note_path, *q++);
strbuf_addch(&non_note_path, *q++);
@@ -485,7 +486,7 @@ static void load_subtree(struct notes_tree *t, struct leaf_node *subtree,
}
strbuf_add(&non_note_path, entry.path, path_len);
add_non_note(t, strbuf_detach(&non_note_path, NULL),
- entry.mode, entry.oid.hash);
+ mode, entry.oid.hash);
}
}
free(buf);
@@ -466,17 +466,19 @@ static struct combine_diff_path *ll_diff_tree_paths(
tp[0].entry.mode &= ~S_IFXMIN_NEQ;
for (i = 1; i < nparent; ++i) {
+ unsigned int mode = tp[i].entry.mode;
cmp = tree_entry_pathcmp(&tp[i], &tp[imin]);
if (cmp < 0) {
imin = i;
- tp[i].entry.mode &= ~S_IFXMIN_NEQ;
+ mode &= ~S_IFXMIN_NEQ;
}
else if (cmp == 0) {
- tp[i].entry.mode &= ~S_IFXMIN_NEQ;
+ mode &= ~S_IFXMIN_NEQ;
}
else {
- tp[i].entry.mode |= S_IFXMIN_NEQ;
+ mode |= S_IFXMIN_NEQ;
}
+ tp[i].entry.mode = mode;
}
/* fixup markings for entries before imin */
@@ -493,13 +495,14 @@ static struct combine_diff_path *ll_diff_tree_paths(
/* are either pi > p[imin] or diff(t,pi) != ø ? */
if (!opt->flags.find_copies_harder) {
for (i = 0; i < nparent; ++i) {
+ unsigned int mode = tp[i].entry.mode;
/* p[i] > p[imin] */
- if (tp[i].entry.mode & S_IFXMIN_NEQ)
+ if (mode & S_IFXMIN_NEQ)
continue;
/* diff(t,pi) != ø */
if (!oideq(&t.entry.oid, &tp[i].entry.oid) ||
- (t.entry.mode != tp[i].entry.mode))
+ (t.entry.mode != mode))
continue;
goto skip_emit_t_tp;
@@ -1020,8 +1020,9 @@ static struct cache_entry *create_ce_entry(const struct traverse_info *info,
is_transient ?
make_empty_transient_cache_entry(len) :
make_empty_cache_entry(istate, len);
+ unsigned int mode = n->mode;
- ce->ce_mode = create_ce_mode(n->mode);
+ ce->ce_mode = create_ce_mode(mode);
ce->ce_flags = create_ce_flags(stage);
ce->ce_namelen = len;
oidcpy(&ce->oid, &n->oid);
In preparation for an eventual rename of the "mode" field, add temporary variable(s) in those places where it's used more than once. This will make a subsequent commits easier to read., since we're only going to need to modify the line on which the assignment happens. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> --- builtin/merge-tree.c | 12 +++++++++--- match-trees.c | 13 +++++++------ merge-ort.c | 5 +++-- notes.c | 3 ++- tree-diff.c | 13 ++++++++----- unpack-trees.c | 3 ++- 6 files changed, 31 insertions(+), 18 deletions(-)