equal
deleted
inserted
replaced
148 l = [hex(manifest), user, date] + list + ["", desc] |
148 l = [hex(manifest), user, date] + list + ["", desc] |
149 text = "\n".join(l) |
149 text = "\n".join(l) |
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 |
158 self.pl = None |
159 self.pl = None |
159 |
160 |
221 for f in files: |
222 for f in files: |
222 if state == "r": |
223 if state == "r": |
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 |
230 self.map[f] = ('r', 0, 0, 0) |
231 self.map[f] = ('r', 0, 0, 0) |
231 |
232 |
309 self.changelog = changelog(self.opener) |
310 self.changelog = changelog(self.opener) |
310 self.ignorelist = None |
311 self.ignorelist = None |
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: |
318 self.ignorelist = [] |
319 self.ignorelist = [] |
319 try: |
320 try: |
341 except KeyError: |
342 except KeyError: |
342 return self.changelog.lookup(key) |
343 return self.changelog.lookup(key) |
343 |
344 |
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) |
|
347 |
|
348 def wjoin(self, f): |
|
349 return os.path.join(self.root, f) |
346 |
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) |
350 |
354 |
418 commit = [] |
422 commit = [] |
419 remove = [] |
423 remove = [] |
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 |
432 remove = d |
436 remove = d |
433 |
437 |
448 linkrev = self.changelog.count() |
452 linkrev = self.changelog.count() |
449 commit.sort() |
453 commit.sort() |
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 |
457 |
461 |
458 r = self.file(f) |
462 r = self.file(f) |
491 for f,n in l: |
495 for f,n in l: |
492 if f[0] == "/": continue |
496 if f[0] == "/": continue |
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() |
503 self.dirstate.update([f for f,n in l], "n") |
507 self.dirstate.update([f for f,n in l], "n") |
504 |
508 |
517 change = self.changelog.read(changeset) |
521 change = self.changelog.read(changeset) |
518 mf = self.manifest.read(change[0]) |
522 mf = self.manifest.read(change[0]) |
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 |
526 for dir, subdirs, files in os.walk(self.root): |
530 for dir, subdirs, files in os.walk(self.root): |
527 d = dir[len(self.root)+1:] |
531 d = dir[len(self.root)+1:] |
583 |
587 |
584 return (changed, added, deleted) |
588 return (changed, added, deleted) |
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': |
592 self.ui.warn("%s already tracked!\n" % f) |
596 self.ui.warn("%s already tracked!\n" % f) |
593 else: |
597 else: |
600 else: |
604 else: |
601 self.dirstate.forget([f]) |
605 self.dirstate.forget([f]) |
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: |
609 self.ui.warn("%s not tracked!\n" % f) |
613 self.ui.warn("%s not tracked!\n" % f) |
610 else: |
614 else: |
933 for f in files: |
937 for f in files: |
934 if f[0] == "/": continue |
938 if f[0] == "/": continue |
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 |
945 # parents must be in the changeset |
949 # parents must be in the changeset |
946 self.dirstate.update(files, 'm') |
950 self.dirstate.update(files, 'm') |
971 f.close() |
975 f.close() |
972 return name |
976 return name |
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 |
980 self.ui.note("resolving %s\n" % fn) |
984 self.ui.note("resolving %s\n" % fn) |
981 self.ui.debug("file %s: other %s ancestor %s\n" % |
985 self.ui.debug("file %s: other %s ancestor %s\n" % |