Code

merge-index: fix longstanding bug in merging symlinks
authorJunio C Hamano <junkio@cox.net>
Mon, 26 Feb 2007 02:17:15 +0000 (18:17 -0800)
committerJunio C Hamano <junkio@cox.net>
Mon, 26 Feb 2007 03:08:48 +0000 (19:08 -0800)
Ancient commit e2b6a9d0 added code to pass "file modes" from
merge-index to merge-one-file, and then later commit 54dd99a1
wanted to make sure we do not end up creating a nonsense symlink
that points at a path whose name contains conflict markers.

However, nobody noticed that the code in merge-index added by
e2b6a9d0 were stripping the S_IFMT bits and the code in 54dd99a1
was meaningless.  This fixes it.

Signed-off-by: Junio C Hamano <junkio@cox.net>
merge-index.c

index a9983dd78ad5cd1e364f0e00c259bdb7e6f151f0..7027d7865971646f178690a150246d9bc4d674c0 100644 (file)
@@ -60,7 +60,7 @@ static int merge_entry(int pos, const char *path)
                        break;
                found++;
                strcpy(hexbuf[stage], sha1_to_hex(ce->sha1));
-               sprintf(ownbuf[stage], "%o", ntohl(ce->ce_mode) & (~S_IFMT));
+               sprintf(ownbuf[stage], "%o", ntohl(ce->ce_mode));
                arguments[stage] = hexbuf[stage];
                arguments[stage + 4] = ownbuf[stage];
        } while (++pos < active_nr);