diff options
author | Johannes Sixt <johannes.sixt@telecom.at> | 2007-03-03 20:38:00 +0100 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2007-03-03 19:30:34 -0800 |
commit | a249a9b5a26e841a28f6e993a560d749303cf91c (patch) | |
tree | 7ba145ca3cb4d8f1acba75e7091a1953128a7e91 | |
parent | Handle core.symlinks=false case in merge-recursive. (diff) | |
download | tgif-a249a9b5a26e841a28f6e993a560d749303cf91c.tar.xz |
Tell multi-parent diff about core.symlinks.
When core.symlinks is false, and a merge of symbolic links had conflicts,
the merge result is left as a file in the working directory. A decision
must be made whether the file is treated as a regular file or as a
symbolic link. This patch treats the file as a symbolic link only if
all merge parents were also symbolic links.
Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
Signed-off-by: Junio C Hamano <junkio@cox.net>
-rw-r--r-- | combine-diff.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/combine-diff.c b/combine-diff.c index 9daa0cb9a9..6d928f282a 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) { |