bug in mercurial/merge.py

Steve Borho steve at borho.org
Sat Sep 29 23:49:46 CDT 2007


I think this code block in merge.py is broken with respect to symlinks.
It starts on line 467:

        elif m == "m": # merge
            f2, fd, flags, move = a[2:]
            r = filemerge(repo, f, fd, f2, wctx, mctx)
            if r > 0:
                unresolved += 1
            else:
                if r is None:
                    updated += 1
                else:
                    merged += 1
            util.set_exec(repo.wjoin(fd), "x" in flags)
            if f != fd and move and util.lexists(repo.wjoin(f)):
                repo.ui.debug(_("removing %s\n") % f)
                os.unlink(repo.wjoin(f))

The problem is that if the merged file 'fd' is a symlink to a directory,
the util.set_exec() call can remove execute permissions from said
directory.

-- 
Steve Borho (steve at borho.org)
http://www.borho.org/~steve/steve.asc
Key fingerprint = 2D08 E7CF B624 624C DE1F  E2E4 B0C2 5292 F2C6 2C8C




More information about the Mercurial-devel mailing list