diff -r 0d714a48ab53 -r 1d38f3605b20 mercurial/localrepo.py --- a/mercurial/localrepo.py Sun Aug 10 18:01:03 2008 -0500 +++ b/mercurial/localrepo.py Sun Aug 10 21:55:06 2008 -0500 @@ -562,8 +562,12 @@ os.unlink(self.wjoin(filename)) except OSError: pass - self.wopener(filename, 'w').write(data) - util.set_flags(self.wjoin(filename), flags) + if 'l' in flags: + self.wopener.symlink(data, filename) + else: + self.wopener(filename, 'w').write(data) + if 'x' in flags: + util.set_flags(self.wjoin(filename), False, True) def wwritedata(self, filename, data): return self._filter("decode", filename, data)