diff mercurial/localrepo.py @ 4006:67982d3ee76c

symlinks: add flags param to wwrite Now wwrite can set symlink and exec for files
author Matt Mackall <mpm@selenic.com>
date Fri, 29 Dec 2006 20:04:31 -0600
parents 656e06eebda7
children 20da40cc1c73
line wrap: on
line diff
--- a/mercurial/localrepo.py
+++ b/mercurial/localrepo.py
@@ -505,9 +505,19 @@ class localrepository(repo.repository):
             data = self.wopener(filename, 'r').read()
         return self._filter("encode", filename, data)
 
-    def wwrite(self, filename, data):
+    def wwrite(self, filename, data, flags):
         data = self._filter("decode", filename, data)
-        return self.wopener(filename, 'w').write(data)
+        if "l" in flags:
+            os.unlink(self.wjoin(filename))
+            os.symlink(data, self.wjoin(filename))
+        else:
+            try:
+                if self._link(filename):
+                    os.unlink(self.wjoin(filename))
+            except OSError:
+                pass
+            self.wopener(filename, 'w').write(data)
+            util.set_exec(self.wjoin(filename), "x" in flags)
 
     def wwritedata(self, filename, data):
         return self._filter("decode", filename, data)
@@ -971,8 +981,7 @@ class localrepository(repo.repository):
                 self.ui.warn("%s not removed!\n" % f)
             else:
                 t = self.file(f).read(m[f])
-                self.wwrite(f, t)
-                util.set_exec(self.wjoin(f), m.execf(f))
+                self.wwrite(f, t, m.flags(f))
                 self.dirstate.update([f], "n")
 
     def copy(self, source, dest, wlock=None):