##// END OF EJS Templates
root relative IO and valid commit states...
mpm@selenic.com -
r244:43105253 default
parent child Browse files
Show More
@@ -150,8 +150,9 b' class changelog(revlog):'
150 return self.addrevision(text, transaction, self.count(), p1, p2)
150 return self.addrevision(text, transaction, self.count(), p1, p2)
151
151
152 class dirstate:
152 class dirstate:
153 def __init__(self, opener, ui):
153 def __init__(self, opener, ui, root):
154 self.opener = opener
154 self.opener = opener
155 self.root = root
155 self.dirty = 0
156 self.dirty = 0
156 self.ui = ui
157 self.ui = ui
157 self.map = None
158 self.map = None
@@ -223,7 +224,7 b' class dirstate:'
223 self.map[f] = ('r', 0, 0, 0)
224 self.map[f] = ('r', 0, 0, 0)
224 else:
225 else:
225 try:
226 try:
226 s = os.stat(f)
227 s = os.stat(os.path.join(self.root, f))
227 self.map[f] = (state, s.st_mode, s.st_size, s.st_mtime)
228 self.map[f] = (state, s.st_mode, s.st_size, s.st_mtime)
228 except OSError:
229 except OSError:
229 if state != "i": raise
230 if state != "i": raise
@@ -311,7 +312,7 b' class localrepository:'
311 self.tags = None
312 self.tags = None
312
313
313 if not self.remote:
314 if not self.remote:
314 self.dirstate = dirstate(self.opener, ui)
315 self.dirstate = dirstate(self.opener, ui, self.root)
315
316
316 def ignore(self, f):
317 def ignore(self, f):
317 if self.ignorelist is None:
318 if self.ignorelist is None:
@@ -344,6 +345,9 b' class localrepository:'
344 def join(self, f):
345 def join(self, f):
345 return os.path.join(self.path, f)
346 return os.path.join(self.path, f)
346
347
348 def wjoin(self, f):
349 return os.path.join(self.root, f)
350
347 def file(self, f):
351 def file(self, f):
348 if f[0] == '/': f = f[1:]
352 if f[0] == '/': f = f[1:]
349 return filelog(self.opener, f)
353 return filelog(self.opener, f)
@@ -420,12 +424,12 b' class localrepository:'
420 if files:
424 if files:
421 for f in files:
425 for f in files:
422 s = self.dirstate.state(f)
426 s = self.dirstate.state(f)
423 if s in 'cai':
427 if s in 'nmai':
424 commit.append(f)
428 commit.append(f)
425 elif s == 'r':
429 elif s == 'r':
426 remove.append(f)
430 remove.append(f)
427 else:
431 else:
428 self.warn("%s not tracked!\n")
432 self.ui.warn("%s not tracked!\n" % f)
429 else:
433 else:
430 (c, a, d, u) = self.diffdir(self.root)
434 (c, a, d, u) = self.diffdir(self.root)
431 commit = c + a
435 commit = c + a
@@ -450,7 +454,7 b' class localrepository:'
450 for f in commit:
454 for f in commit:
451 self.ui.note(f + "\n")
455 self.ui.note(f + "\n")
452 try:
456 try:
453 t = file(f).read()
457 t = file(self.wjoin(f)).read()
454 except IOError:
458 except IOError:
455 self.warn("trouble committing %s!\n" % f)
459 self.warn("trouble committing %s!\n" % f)
456 raise
460 raise
@@ -493,10 +497,10 b' class localrepository:'
493 self.ui.note(f, "\n")
497 self.ui.note(f, "\n")
494 t = self.file(f).revision(n)
498 t = self.file(f).revision(n)
495 try:
499 try:
496 file(f, "w").write(t)
500 file(self.wjoin(f), "w").write(t)
497 except IOError:
501 except IOError:
498 os.makedirs(os.path.dirname(f))
502 os.makedirs(os.path.dirname(f))
499 file(f, "w").write(t)
503 file(self.wjoin(f), "w").write(t)
500
504
501 self.dirstate.setparents(node)
505 self.dirstate.setparents(node)
502 self.dirstate.clear()
506 self.dirstate.clear()
@@ -519,7 +523,7 b' class localrepository:'
519 dc = self.dirstate.copy()
523 dc = self.dirstate.copy()
520
524
521 def fcmp(fn):
525 def fcmp(fn):
522 t1 = file(os.path.join(self.root, fn)).read()
526 t1 = file(self.wjoin(fn)).read()
523 t2 = self.file(fn).revision(mf[fn])
527 t2 = self.file(fn).revision(mf[fn])
524 return cmp(t1, t2)
528 return cmp(t1, t2)
525
529
@@ -585,7 +589,7 b' class localrepository:'
585
589
586 def add(self, list):
590 def add(self, list):
587 for f in list:
591 for f in list:
588 p = os.path.join(self.root, f)
592 p = self.wjoin(f)
589 if not os.path.isfile(p):
593 if not os.path.isfile(p):
590 self.ui.warn("%s does not exist!\n" % f)
594 self.ui.warn("%s does not exist!\n" % f)
591 elif self.dirstate.state(f) == 'n':
595 elif self.dirstate.state(f) == 'n':
@@ -602,7 +606,7 b' class localrepository:'
602
606
603 def remove(self, list):
607 def remove(self, list):
604 for f in list:
608 for f in list:
605 p = os.path.join(self.root, f)
609 p = self.wjoin(f)
606 if os.path.isfile(p):
610 if os.path.isfile(p):
607 self.ui.warn("%s still exists!\n" % f)
611 self.ui.warn("%s still exists!\n" % f)
608 elif f not in self.dirstate:
612 elif f not in self.dirstate:
@@ -935,10 +939,10 b' class localrepository:'
935 self.ui.note(f, "\n")
939 self.ui.note(f, "\n")
936 t = self.file(f).revision(get[f])
940 t = self.file(f).revision(get[f])
937 try:
941 try:
938 file(f, "w").write(t)
942 file(self.wjoin(f), "w").write(t)
939 except IOError:
943 except IOError:
940 os.makedirs(os.path.dirname(f))
944 os.makedirs(os.path.dirname(f))
941 file(f, "w").write(t)
945 file(self.wjoin(f), "w").write(t)
942
946
943 # we have to remember what files we needed to get/change
947 # we have to remember what files we needed to get/change
944 # because any file that's different from either one of its
948 # because any file that's different from either one of its
@@ -973,7 +977,7 b' class localrepository:'
973
977
974 fl = self.file(fn)
978 fl = self.file(fn)
975 base = fl.ancestor(my, other)
979 base = fl.ancestor(my, other)
976 a = fn
980 a = self.wjoin(fn)
977 b = temp("other", other)
981 b = temp("other", other)
978 c = temp("base", base)
982 c = temp("base", base)
979
983
General Comments 0
You need to be logged in to leave comments. Login now