503 data = os.readlink(self.wjoin(filename)) |
503 data = os.readlink(self.wjoin(filename)) |
504 else: |
504 else: |
505 data = self.wopener(filename, 'r').read() |
505 data = self.wopener(filename, 'r').read() |
506 return self._filter("encode", filename, data) |
506 return self._filter("encode", filename, data) |
507 |
507 |
508 def wwrite(self, filename, data): |
508 def wwrite(self, filename, data, flags): |
509 data = self._filter("decode", filename, data) |
509 data = self._filter("decode", filename, data) |
510 return self.wopener(filename, 'w').write(data) |
510 if "l" in flags: |
|
511 os.unlink(self.wjoin(filename)) |
|
512 os.symlink(data, self.wjoin(filename)) |
|
513 else: |
|
514 try: |
|
515 if self._link(filename): |
|
516 os.unlink(self.wjoin(filename)) |
|
517 except OSError: |
|
518 pass |
|
519 self.wopener(filename, 'w').write(data) |
|
520 util.set_exec(self.wjoin(filename), "x" in flags) |
511 |
521 |
512 def wwritedata(self, filename, data): |
522 def wwritedata(self, filename, data): |
513 return self._filter("decode", filename, data) |
523 return self._filter("decode", filename, data) |
514 |
524 |
515 def transaction(self): |
525 def transaction(self): |
969 for f in list: |
979 for f in list: |
970 if self.dirstate.state(f) not in "r": |
980 if self.dirstate.state(f) not in "r": |
971 self.ui.warn("%s not removed!\n" % f) |
981 self.ui.warn("%s not removed!\n" % f) |
972 else: |
982 else: |
973 t = self.file(f).read(m[f]) |
983 t = self.file(f).read(m[f]) |
974 self.wwrite(f, t) |
984 self.wwrite(f, t, m.flags(f)) |
975 util.set_exec(self.wjoin(f), m.execf(f)) |
|
976 self.dirstate.update([f], "n") |
985 self.dirstate.update([f], "n") |
977 |
986 |
978 def copy(self, source, dest, wlock=None): |
987 def copy(self, source, dest, wlock=None): |
979 p = self.wjoin(dest) |
988 p = self.wjoin(dest) |
980 if not os.path.exists(p): |
989 if not os.path.exists(p): |