Browse Source

diff-lib: use ce_mode_from_stat() rather than messing with modes manually

The diff helpers used to do the magic mode canonicalization and all the
other special mode handling by hand ("trust executable bit" and "has
symlink support" handling).

That's bogus. Use "ce_mode_from_stat()" that does this all for us.

This is also going to be required when we add support for links to other
git repositories.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
maint
Linus Torvalds 18 years ago committed by Junio C Hamano
parent
commit
844c11ae25
  1. 15
      diff-lib.c

15
diff-lib.c

@ -357,7 +357,7 @@ int run_diff_files(struct rev_info *revs, int silent_on_removed) @@ -357,7 +357,7 @@ int run_diff_files(struct rev_info *revs, int silent_on_removed)
continue;
}
else
dpath->mode = canon_mode(st.st_mode);
dpath->mode = ntohl(ce_mode_from_stat(ce, st.st_mode));

while (i < entries) {
struct cache_entry *nce = active_cache[i];
@ -374,8 +374,7 @@ int run_diff_files(struct rev_info *revs, int silent_on_removed) @@ -374,8 +374,7 @@ int run_diff_files(struct rev_info *revs, int silent_on_removed)
int mode = ntohl(nce->ce_mode);
num_compare_stages++;
hashcpy(dpath->parent[stage-2].sha1, nce->sha1);
dpath->parent[stage-2].mode =
canon_mode(mode);
dpath->parent[stage-2].mode = ntohl(ce_mode_from_stat(nce, mode));
dpath->parent[stage-2].status =
DIFF_STATUS_MODIFIED;
}
@ -424,15 +423,7 @@ int run_diff_files(struct rev_info *revs, int silent_on_removed) @@ -424,15 +423,7 @@ int run_diff_files(struct rev_info *revs, int silent_on_removed)
if (!changed && !revs->diffopt.find_copies_harder)
continue;
oldmode = ntohl(ce->ce_mode);

newmode = canon_mode(st.st_mode);
if (!trust_executable_bit &&
S_ISREG(newmode) && S_ISREG(oldmode) &&
((newmode ^ oldmode) == 0111))
newmode = oldmode;
else if (!has_symlinks &&
S_ISREG(newmode) && S_ISLNK(oldmode))
newmode = oldmode;
newmode = ntohl(ce_mode_from_stat(ce, st.st_mode));
diff_change(&revs->diffopt, oldmode, newmode,
ce->sha1, (changed ? null_sha1 : ce->sha1),
ce->name, NULL);

Loading…
Cancel
Save