# HG changeset patch # User Matt Mackall # Date 1167444271 21600 # Node ID 616806f74f0f8dbcb98348185fb0fb53240b0462 # Parent d7b9ec5895467d8493e8c038b2bc5f38eed02062 symlinks: add _link checking function diff -r d7b9ec589546 -r 616806f74f0f mercurial/localrepo.py --- a/mercurial/localrepo.py Fri Dec 29 20:04:31 2006 -0600 +++ b/mercurial/localrepo.py Fri Dec 29 20:04:31 2006 -0600 @@ -121,6 +121,11 @@ self.decodepats = None self.transhandle = None + self._link = lambda x: False + if util.checklink(self.root): + r = self.root # avoid circular reference in lambda + self._link = lambda x: util.is_link(os.path.join(r, x)) + self.dirstate = dirstate.dirstate(self.opener, self.ui, self.root) def url(self): @@ -486,7 +491,10 @@ l.append((mf, cmd)) self.encodepats = l - data = self.wopener(filename, 'r').read() + if self._link(filename): + data = os.readlink(self.wjoin(filename)) + else: + data = self.wopener(filename, 'r').read() for mf, cmd in self.encodepats: if mf(filename): @@ -719,7 +727,7 @@ try: new[f] = self.filecommit(f, m1, m2, linkrev, tr, changed) m1.set(f, is_exec(f), is_link(f)) - except IOError: + except OSError: if use_dirstate: self.ui.warn(_("trouble committing %s!\n") % f) raise