diff options
| author | Junio C Hamano <junkio@cox.net> | 2007-02-27 02:27:26 -0800 |
|---|---|---|
| committer | Junio C Hamano <junkio@cox.net> | 2007-02-27 02:27:26 -0800 |
| commit | 88459358cdd70246e805b0ee7db7fffb9564f80e (patch) | |
| tree | 2bbb9cc6508fb5eb33e0d2fe1f70c5ada0bb7334 /diff-lib.c | |
| parent | fee7c2c71d9e35b2f54aa3631072bd7f73bb7b4c (diff) | |
| parent | 0ab179504a17907c395a4009f7c23d2f71bba1d3 (diff) | |
| download | git-88459358cdd70246e805b0ee7db7fffb9564f80e.tar.gz | |
Merge branch 'np/types' into jc/fetch
* np/types: (253 commits)
get rid of lookup_object_type()
convert object type handling from a string to a number
formalize typename(), and add its reverse type_from_string()
sha1_file.c: don't ignore an error condition in sha1_loose_object_info()
sha1_file.c: cleanup "offset" usage
sha1_file.c: cleanup hdr usage
git-apply: do not fix whitespaces on context lines.
diff --cc: integer overflow given a 2GB-or-larger file
mailinfo: do not get confused with logical lines that are too long.
Documentation: link in 1.5.0.2 material to the top documentation page.
Documentation: document remote.<name>.tagopt
GIT 1.5.0.2
git-remote: support remotes with a dot in the name
Documentation: describe "-f/-t/-m" options to "git-remote add"
diff --cc: fix display of symlink conflicts during a merge.
merge-recursive: fix longstanding bug in merging symlinks
merge-index: fix longstanding bug in merging symlinks
diff --cached: give more sensible error message when HEAD is yet to be created.
Update tests to use test-chmtime
Add test-chmtime: a utility to change mtime on files
...
Diffstat (limited to 'diff-lib.c')
| -rw-r--r-- | diff-lib.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/diff-lib.c b/diff-lib.c index 91cd87742f..60c0fa6488 100644 --- a/diff-lib.c +++ b/diff-lib.c @@ -41,17 +41,27 @@ int run_diff_files(struct rev_info *revs, int silent_on_removed) path_len = ce_namelen(ce); - dpath = xmalloc (combine_diff_path_size (5, path_len)); + dpath = xmalloc(combine_diff_path_size(5, path_len)); dpath->path = (char *) &(dpath->parent[5]); dpath->next = NULL; dpath->len = path_len; memcpy(dpath->path, ce->name, path_len); dpath->path[path_len] = '\0'; - dpath->mode = 0; hashclr(dpath->sha1); memset(&(dpath->parent[0]), 0, - sizeof(struct combine_diff_parent)*5); + sizeof(struct combine_diff_parent)*5); + + if (lstat(ce->name, &st) < 0) { + if (errno != ENOENT && errno != ENOTDIR) { + perror(ce->name); + continue; + } + if (silent_on_removed) + continue; + } + else + dpath->mode = canon_mode(st.st_mode); while (i < entries) { struct cache_entry *nce = active_cache[i]; @@ -170,9 +180,7 @@ static int get_stat_data(struct cache_entry *ce, } changed = ce_match_stat(ce, &st, 0); if (changed) { - mode = create_ce_mode(st.st_mode); - if (!trust_executable_bit && S_ISREG(st.st_mode)) - mode = ce->ce_mode; + mode = ce_mode_from_stat(ce, st.st_mode); sha1 = no_sha1; } } |
