Browse Source

unpack-trees: don't shift conflicts left and right

If o->merge is set, the struct traverse_info member conflicts is shifted
left in unpack_callback, then passed through traverse_trees_recursive
to unpack_nondirectories, where it is shifted right before use.  Stop
the shifting and just pass the conflict bit mask as is.  Rename the
member to df_conflicts to prove that it isn't used anywhere else.

Signed-off-by: René Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
René Scharfe 12 years ago committed by Junio C Hamano
parent
commit
603d249853
  1. 2
      tree-walk.h
  2. 18
      unpack-trees.c

2
tree-walk.h

@ -46,7 +46,7 @@ struct traverse_info { @@ -46,7 +46,7 @@ struct traverse_info {
int pathlen;
struct pathspec *pathspec;

unsigned long conflicts;
unsigned long df_conflicts;
traverse_callback_t fn;
void *data;
int show_all_errors;

18
unpack-trees.c

@ -454,7 +454,7 @@ static int traverse_trees_recursive(int n, unsigned long dirmask, @@ -454,7 +454,7 @@ static int traverse_trees_recursive(int n, unsigned long dirmask,
newinfo.pathspec = info->pathspec;
newinfo.name = *p;
newinfo.pathlen += tree_entry_len(p) + 1;
newinfo.conflicts |= df_conflicts;
newinfo.df_conflicts |= df_conflicts;

for (i = 0; i < n; i++, dirmask >>= 1) {
const unsigned char *sha1 = NULL;
@ -555,17 +555,12 @@ static int unpack_nondirectories(int n, unsigned long mask, @@ -555,17 +555,12 @@ static int unpack_nondirectories(int n, unsigned long mask,
{
int i;
struct unpack_trees_options *o = info->data;
unsigned long conflicts;
unsigned long conflicts = info->df_conflicts | dirmask;

/* Do we have *only* directories? Nothing to do */
if (mask == dirmask && !src[0])
return 0;

conflicts = info->conflicts;
if (o->merge)
conflicts >>= 1;
conflicts |= dirmask;

/*
* Ok, we've filled in up to any potential index entry in src[0],
* now do the rest.
@ -789,13 +784,6 @@ static int unpack_callback(int n, unsigned long mask, unsigned long dirmask, str @@ -789,13 +784,6 @@ static int unpack_callback(int n, unsigned long mask, unsigned long dirmask, str

/* Now handle any directories.. */
if (dirmask) {
unsigned long conflicts = mask & ~dirmask;
if (o->merge) {
conflicts <<= 1;
if (src[0])
conflicts |= 1;
}

/* special case: "diff-index --cached" looking at a tree */
if (o->diff_index_cached &&
n == 1 && dirmask == 1 && S_ISDIR(names->mode)) {
@ -814,7 +802,7 @@ static int unpack_callback(int n, unsigned long mask, unsigned long dirmask, str @@ -814,7 +802,7 @@ static int unpack_callback(int n, unsigned long mask, unsigned long dirmask, str
}
}

if (traverse_trees_recursive(n, dirmask, conflicts,
if (traverse_trees_recursive(n, dirmask, mask & ~dirmask,
names, info) < 0)
return -1;
return mask;

Loading…
Cancel
Save