Skip to content

Commit

Permalink
diff-index --cached --raw: show tree entry on the LHS for unmerged en…
Browse files Browse the repository at this point in the history
…tries.

This updates the way diffcore represents an unmerged pair
somewhat.  It used to be that entries with mode=0 on both sides
were used to represent an unmerged pair, but now it has an
explicit flag.  This is to allow diff-index --cached to report
the entry from the tree when the path is unmerged in the index.

This is used in updating "git reset <tree> -- <path>" to restore
absense of the path in the index from the tree.

Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Junio C Hamano committed Jan 7, 2007
1 parent 13e86ef commit e9c8409
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 8 deletions.
9 changes: 6 additions & 3 deletions diff-lib.c
Expand Up @@ -97,7 +97,7 @@ int run_diff_files(struct rev_info *revs, int silent_on_removed)
* Show the diff for the 'ce' if we found the one
* from the desired stage.
*/
diff_unmerge(&revs->diffopt, ce->name);
diff_unmerge(&revs->diffopt, ce->name, 0, null_sha1);
if (ce_stage(ce) != diff_unmerged_stage)
continue;
}
Expand Down Expand Up @@ -297,9 +297,12 @@ static int diff_cache(struct rev_info *revs,
!show_modified(revs, ce, ac[1], 0,
cached, match_missing))
break;
/* fallthru */
diff_unmerge(&revs->diffopt, ce->name,
ntohl(ce->ce_mode), ce->sha1);
break;
case 3:
diff_unmerge(&revs->diffopt, ce->name);
diff_unmerge(&revs->diffopt, ce->name,
0, null_sha1);
break;

default:
Expand Down
6 changes: 4 additions & 2 deletions diff.c
Expand Up @@ -2875,10 +2875,12 @@ void diff_change(struct diff_options *options,
}

void diff_unmerge(struct diff_options *options,
const char *path)
const char *path,
unsigned mode, const unsigned char *sha1)
{
struct diff_filespec *one, *two;
one = alloc_filespec(path);
two = alloc_filespec(path);
diff_queue(&diff_queued_diff, one, two);
fill_filespec(one, sha1, mode);
diff_queue(&diff_queued_diff, one, two)->is_unmerged = 1;
}
4 changes: 3 additions & 1 deletion diff.h
Expand Up @@ -144,7 +144,9 @@ extern void diff_change(struct diff_options *,
const char *base, const char *path);

extern void diff_unmerge(struct diff_options *,
const char *path);
const char *path,
unsigned mode,
const unsigned char *sha1);

extern int diff_scoreopt_parse(const char *opt);

Expand Down
4 changes: 2 additions & 2 deletions diffcore.h
Expand Up @@ -54,9 +54,9 @@ struct diff_filepair {
unsigned source_stays : 1; /* all of R/C are copies */
unsigned broken_pair : 1;
unsigned renamed_pair : 1;
unsigned is_unmerged : 1;
};
#define DIFF_PAIR_UNMERGED(p) \
(!DIFF_FILE_VALID((p)->one) && !DIFF_FILE_VALID((p)->two))
#define DIFF_PAIR_UNMERGED(p) ((p)->is_unmerged)

#define DIFF_PAIR_RENAME(p) ((p)->renamed_pair)

Expand Down

0 comments on commit e9c8409

Please sign in to comment.