aboutsummaryrefslogtreecommitdiff
path: root/combine-diff.c
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2007-03-04 17:31:09 -0800
committerJunio C Hamano <junkio@cox.net>2007-03-04 17:31:09 -0800
commite6f95113431f7e69263bc3d075c0a7715ce587e3 (patch)
tree810569356f64b58df52560fcce0d3cfb561014ab /combine-diff.c
parent784b11cd05e7862b0fbcc1251a65669c7004a8df (diff)
parenta249a9b5a26e841a28f6e993a560d749303cf91c (diff)
downloadgit-e6f95113431f7e69263bc3d075c0a7715ce587e3.tar.gz
git-e6f95113431f7e69263bc3d075c0a7715ce587e3.tar.xz
Merge branch 'js/symlink'
* js/symlink: Tell multi-parent diff about core.symlinks. Handle core.symlinks=false case in merge-recursive. Add core.symlinks to mark filesystems that do not support symbolic links.
Diffstat (limited to 'combine-diff.c')
-rw-r--r--combine-diff.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/combine-diff.c b/combine-diff.c
index 9daa0cb9a..6d928f282 100644
--- a/combine-diff.c
+++ b/combine-diff.c
@@ -699,8 +699,18 @@ static void show_patch_diff(struct combine_diff_path *elem, int num_parent,
!fstat(fd, &st)) {
size_t len = st.st_size;
size_t sz = 0;
+ int is_file, i;
elem->mode = canon_mode(st.st_mode);
+ /* if symlinks don't work, assume symlink if all parents
+ * are symlinks
+ */
+ is_file = has_symlinks;
+ for (i = 0; !is_file && i < num_parent; i++)
+ is_file = !S_ISLNK(elem->parent[i].mode);
+ if (!is_file)
+ elem->mode = canon_mode(S_IFLNK);
+
result_size = len;
result = xmalloc(len + 1);
while (sz < len) {