summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 723024d)
raw | patch | inline | side by side (parent: 723024d)
author | Johannes Sixt <johannes.sixt@telecom.at> | |
Sat, 3 Mar 2007 19:38:00 +0000 (20:38 +0100) | ||
committer | Junio C Hamano <junkio@cox.net> | |
Sun, 4 Mar 2007 03:30:34 +0000 (19:30 -0800) |
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>
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>
combine-diff.c | patch | blob | history |
diff --git a/combine-diff.c b/combine-diff.c
index 9daa0cb9a95fe6c2176a927f093d8788d0195240..6d928f282a490a1295b11e31756e20b32cbc3822 100644 (file)
--- a/combine-diff.c
+++ b/combine-diff.c
!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) {