diff --git a/mercurial/hg.py b/mercurial/hg.py index 9a9ea2d1d3c4b631394bd8f850122c1943adba8d_bWVyY3VyaWFsL2hnLnB5..43105253cf5e7630ac60397b413056c7afd9a03d_bWVyY3VyaWFsL2hnLnB5 100644 --- a/mercurial/hg.py +++ b/mercurial/hg.py @@ -150,5 +150,5 @@ return self.addrevision(text, transaction, self.count(), p1, p2) class dirstate: - def __init__(self, opener, ui): + def __init__(self, opener, ui, root): self.opener = opener @@ -154,4 +154,5 @@ self.opener = opener + self.root = root self.dirty = 0 self.ui = ui self.map = None @@ -223,7 +224,7 @@ self.map[f] = ('r', 0, 0, 0) else: try: - s = os.stat(f) + s = os.stat(os.path.join(self.root, f)) self.map[f] = (state, s.st_mode, s.st_size, s.st_mtime) except OSError: if state != "i": raise @@ -311,7 +312,7 @@ self.tags = None if not self.remote: - self.dirstate = dirstate(self.opener, ui) + self.dirstate = dirstate(self.opener, ui, self.root) def ignore(self, f): if self.ignorelist is None: @@ -344,6 +345,9 @@ def join(self, f): return os.path.join(self.path, f) + def wjoin(self, f): + return os.path.join(self.root, f) + def file(self, f): if f[0] == '/': f = f[1:] return filelog(self.opener, f) @@ -420,8 +424,8 @@ if files: for f in files: s = self.dirstate.state(f) - if s in 'cai': + if s in 'nmai': commit.append(f) elif s == 'r': remove.append(f) else: @@ -424,8 +428,8 @@ commit.append(f) elif s == 'r': remove.append(f) else: - self.warn("%s not tracked!\n") + self.ui.warn("%s not tracked!\n" % f) else: (c, a, d, u) = self.diffdir(self.root) commit = c + a @@ -450,7 +454,7 @@ for f in commit: self.ui.note(f + "\n") try: - t = file(f).read() + t = file(self.wjoin(f)).read() except IOError: self.warn("trouble committing %s!\n" % f) raise @@ -493,6 +497,6 @@ self.ui.note(f, "\n") t = self.file(f).revision(n) try: - file(f, "w").write(t) + file(self.wjoin(f), "w").write(t) except IOError: os.makedirs(os.path.dirname(f)) @@ -497,6 +501,6 @@ except IOError: os.makedirs(os.path.dirname(f)) - file(f, "w").write(t) + file(self.wjoin(f), "w").write(t) self.dirstate.setparents(node) self.dirstate.clear() @@ -519,7 +523,7 @@ dc = self.dirstate.copy() def fcmp(fn): - t1 = file(os.path.join(self.root, fn)).read() + t1 = file(self.wjoin(fn)).read() t2 = self.file(fn).revision(mf[fn]) return cmp(t1, t2) @@ -585,7 +589,7 @@ def add(self, list): for f in list: - p = os.path.join(self.root, f) + p = self.wjoin(f) if not os.path.isfile(p): self.ui.warn("%s does not exist!\n" % f) elif self.dirstate.state(f) == 'n': @@ -602,7 +606,7 @@ def remove(self, list): for f in list: - p = os.path.join(self.root, f) + p = self.wjoin(f) if os.path.isfile(p): self.ui.warn("%s still exists!\n" % f) elif f not in self.dirstate: @@ -935,6 +939,6 @@ self.ui.note(f, "\n") t = self.file(f).revision(get[f]) try: - file(f, "w").write(t) + file(self.wjoin(f), "w").write(t) except IOError: os.makedirs(os.path.dirname(f)) @@ -939,6 +943,6 @@ except IOError: os.makedirs(os.path.dirname(f)) - file(f, "w").write(t) + file(self.wjoin(f), "w").write(t) # we have to remember what files we needed to get/change # because any file that's different from either one of its @@ -973,7 +977,7 @@ fl = self.file(fn) base = fl.ancestor(my, other) - a = fn + a = self.wjoin(fn) b = temp("other", other) c = temp("base", base)