Skip to content

Commit

Permalink
Tell multi-parent diff about core.symlinks.
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Johannes Sixt authored and Junio C Hamano committed Mar 4, 2007
1 parent 723024d commit a249a9b
Showing 1 changed file with 10 additions and 0 deletions.
10 changes: 10 additions & 0 deletions combine-diff.c
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down

0 comments on commit a249a9b

Please sign in to comment.