##// END OF EJS Templates
dirstate: add __contains__ and make __getitem__ more useful...
Matt Mackall -
r4906:30847b8a default
parent child Browse files
Show More
@@ -26,7 +26,7 b' class convert_mercurial(converter_sink):'
26 26
27 27 def putfile(self, f, e, data):
28 28 self.repo.wwrite(f, data, e)
29 if self.repo.dirstate.state(f) == '?':
29 if f not in self.repo.dirstate:
30 30 self.repo.dirstate.add(f)
31 31
32 32 def copyfile(self, source, dest):
@@ -58,7 +58,7 b' class convert_mercurial(converter_sink):'
58 58 extra['branch'] = commit.branch
59 59 if commit.rev:
60 60 extra['convert_revision'] = commit.rev
61
61
62 62 while parents:
63 63 p1 = p2
64 64 p2 = parents.pop(0)
@@ -240,7 +240,7 b' def sign(ui, repo, *revs, **opts):'
240 240
241 241 repo.wfile(".hgsigs", "ab").write(sigmessage)
242 242
243 if repo.dirstate.state(".hgsigs") == '?':
243 if '.hgsigs' not in repo.dirstate:
244 244 repo.add([".hgsigs"])
245 245
246 246 if opts["no_commit"]:
@@ -1872,7 +1872,7 b' def rename(ui, repo, patch, name=None, *'
1872 1872 r = q.qrepo()
1873 1873 if r:
1874 1874 wlock = r.wlock()
1875 if r.dirstate.state(name) == 'r':
1875 if r.dirstate[name] == 'r':
1876 1876 r.undelete([name], wlock)
1877 1877 r.copy(patch, name, wlock)
1878 1878 r.remove([patch], False, wlock)
@@ -638,12 +638,12 b' def addremove(repo, pats=[], opts={}, wl'
638 638 mapping = {}
639 639 for src, abs, rel, exact in walk(repo, pats, opts):
640 640 target = repo.wjoin(abs)
641 if src == 'f' and repo.dirstate.state(abs) == '?':
641 if src == 'f' and abs not in repo.dirstate:
642 642 add.append(abs)
643 643 mapping[abs] = rel, exact
644 644 if repo.ui.verbose or not exact:
645 645 repo.ui.status(_('adding %s\n') % ((pats and rel) or abs))
646 if repo.dirstate.state(abs) != 'r' and not util.lexists(target):
646 if repo.dirstate[abs] != 'r' and not util.lexists(target):
647 647 remove.append(abs)
648 648 mapping[abs] = rel, exact
649 649 if repo.ui.verbose or not exact:
@@ -33,7 +33,7 b' def add(ui, repo, *pats, **opts):'
33 33 if ui.verbose:
34 34 ui.status(_('adding %s\n') % rel)
35 35 names.append(abs)
36 elif repo.dirstate.state(abs) == '?':
36 elif abs not in repo.dirstate:
37 37 ui.status(_('adding %s\n') % rel)
38 38 names.append(abs)
39 39 if not opts.get('dry_run'):
@@ -456,7 +456,7 b' def commit(ui, repo, *pats, **opts):'
456 456 elif not (stat.S_ISREG(mode) or stat.S_ISLNK(mode)):
457 457 raise util.Abort(_("can't commit %s: "
458 458 "unsupported file type!") % rf)
459 elif repo.dirstate.state(f) == '?':
459 elif f not in repo.dirstate:
460 460 raise util.Abort(_("file %s not tracked!") % rf)
461 461 else:
462 462 files = []
@@ -482,7 +482,7 b' def docopy(ui, repo, pats, opts, wlock):'
482 482 def okaytocopy(abs, rel, exact):
483 483 reasons = {'?': _('is not managed'),
484 484 'r': _('has been marked for remove')}
485 state = repo.dirstate.state(abs)
485 state = repo.dirstate[abs]
486 486 reason = reasons.get(state)
487 487 if reason:
488 488 if exact:
@@ -510,7 +510,7 b' def docopy(ui, repo, pats, opts, wlock):'
510 510 repo.pathto(prevsrc, cwd)))
511 511 return
512 512 if (not opts['after'] and os.path.exists(target) or
513 opts['after'] and repo.dirstate.state(abstarget) not in '?ar'):
513 opts['after'] and repo.dirstate[abstarget] in 'mn'):
514 514 if not opts['force']:
515 515 ui.warn(_('%s: not overwriting - file exists\n') %
516 516 reltarget)
@@ -525,7 +525,7 b' def docopy(ui, repo, pats, opts, wlock):'
525 525 if not os.path.isdir(targetdir) and not opts.get('dry_run'):
526 526 os.makedirs(targetdir)
527 527 try:
528 restore = repo.dirstate.state(abstarget) == 'r'
528 restore = repo.dirstate[abstarget] == 'r'
529 529 if restore and not opts.get('dry_run'):
530 530 repo.undelete([abstarget], wlock)
531 531 try:
@@ -547,7 +547,7 b' def docopy(ui, repo, pats, opts, wlock):'
547 547 ui.status(_('copying %s to %s\n') % (relsrc, reltarget))
548 548 targets[abstarget] = abssrc
549 549 if abstarget != origsrc:
550 if repo.dirstate.state(origsrc) == 'a':
550 if repo.dirstate[origsrc] == 'a':
551 551 if not ui.quiet:
552 552 ui.warn(_("%s has not been committed yet, so no copy "
553 553 "data will be stored for %s.\n")
@@ -718,12 +718,11 b' def debugrebuildstate(ui, repo, rev=""):'
718 718 def debugcheckstate(ui, repo):
719 719 """validate the correctness of the current dirstate"""
720 720 parent1, parent2 = repo.dirstate.parents()
721 dc = repo.dirstate
722 721 m1 = repo.changectx(parent1).manifest()
723 722 m2 = repo.changectx(parent2).manifest()
724 723 errors = 0
725 for f in dc:
726 state = repo.dirstate.state(f)
724 for f in repo.dirstate:
725 state = repo.dirstate[f]
727 726 if state in "nr" and f not in m1:
728 727 ui.warn(_("%s in state %s, but not in manifest1\n") % (f, state))
729 728 errors += 1
@@ -735,7 +734,7 b' def debugcheckstate(ui, repo):'
735 734 (f, state))
736 735 errors += 1
737 736 for f in m1:
738 state = repo.dirstate.state(f)
737 state = repo.dirstate[f]
739 738 if state not in "nrm":
740 739 ui.warn(_("%s in manifest1, but listed as state %s") % (f, state))
741 740 errors += 1
@@ -787,8 +786,10 b' def debugsetparents(ui, repo, rev1, rev2'
787 786
788 787 def debugstate(ui, repo):
789 788 """show the contents of the current dirstate"""
790 dc = repo.dirstate
791 for file_ in dc:
789 dc = repo.dirstate._map
790 k = dc.keys()
791 k.sort()
792 for file_ in k:
792 793 if dc[file_][3] == -1:
793 794 # Pad or slice to locale representation
794 795 locale_len = len(time.strftime("%x %X", time.localtime(0)))
@@ -1758,7 +1759,7 b' def locate(ui, repo, *pats, **opts):'
1758 1759 default='relglob'):
1759 1760 if src == 'b':
1760 1761 continue
1761 if not node and repo.dirstate.state(abs) == '?':
1762 if not node and abs not in repo.dirstate:
1762 1763 continue
1763 1764 if opts['fullpath']:
1764 1765 ui.write(os.path.join(repo.root, abs), end)
@@ -2216,7 +2217,7 b' def remove(ui, repo, *pats, **opts):'
2216 2217 forget.append(abs)
2217 2218 continue
2218 2219 reason = _('has been marked for add (use -f to force removal)')
2219 elif repo.dirstate.state(abs) == '?':
2220 elif abs not in repo.dirstate:
2220 2221 reason = _('is not managed')
2221 2222 elif opts['after'] and not exact and abs not in deleted:
2222 2223 continue
@@ -88,11 +88,14 b' class dirstate(object):'
88 88 return path.replace(os.sep, '/')
89 89 return path
90 90
91 def __del__(self):
92 self.write()
93
94 91 def __getitem__(self, key):
95 return self._map[key]
92 ''' current states:
93 n normal
94 m needs merging
95 r marked for removal
96 a marked for addition
97 ? not tracked'''
98 return self._map.get(key, ("?",))[0]
96 99
97 100 def __contains__(self, key):
98 101 return key in self._map
@@ -117,14 +120,6 b' class dirstate(object):'
117 120 self._branch = branch
118 121 self._opener("branch", "w").write(branch + '\n')
119 122
120 def state(self, key):
121 ''' current states:
122 n normal
123 m needs merging
124 r marked for removal
125 a marked for addition'''
126 return self._map.get(key, ("?",))[0]
127
128 123 def _read(self):
129 124 self._map = {}
130 125 self._copymap = {}
@@ -460,7 +455,7 b' class dirstate(object):'
460 455
461 456 for src, fn, st in self.statwalk(files, match, ignored=list_ignored):
462 457 try:
463 type_, mode, size, time = self[fn]
458 type_, mode, size, time = self._map[fn]
464 459 except KeyError:
465 460 if list_ignored and self._ignore(fn):
466 461 ignored.append(fn)
@@ -125,7 +125,7 b' class localrepository(repo.repository):'
125 125 fp.write('%s %s\n' % (hex(node), munge and munge(name) or name))
126 126 fp.close()
127 127 self.hook('tag', node=hex(node), tag=name, local=local)
128
128
129 129 prevtags = ''
130 130 if local:
131 131 try:
@@ -156,7 +156,7 b' class localrepository(repo.repository):'
156 156 # committed tags are stored in UTF-8
157 157 writetag(fp, name, util.fromlocal, prevtags)
158 158
159 if use_dirstate and self.dirstate.state('.hgtags') == '?':
159 if use_dirstate and '.hgtags' not in self.dirstate:
160 160 self.add(['.hgtags'])
161 161
162 162 tagnode = self.commit(['.hgtags'], message, user, date, p1=parent,
@@ -651,8 +651,8 b' class localrepository(repo.repository):'
651 651 if use_dirstate:
652 652 if files:
653 653 for f in files:
654 s = self.dirstate.state(f)
655 if s in 'nmai':
654 s = self.dirstate[f]
655 if s in 'nma':
656 656 commit.append(f)
657 657 elif s == 'r':
658 658 remove.append(f)
@@ -970,7 +970,7 b' class localrepository(repo.repository):'
970 970 if not (stat.S_ISREG(st.st_mode) or stat.S_ISLNK(st.st_mode)):
971 971 self.ui.warn(_("%s not added: only files and symlinks "
972 972 "supported currently\n") % f)
973 elif self.dirstate.state(f) in 'an':
973 elif self.dirstate[f] in 'an':
974 974 self.ui.warn(_("%s already tracked!\n") % f)
975 975 else:
976 976 self.dirstate.add(f)
@@ -979,7 +979,7 b' class localrepository(repo.repository):'
979 979 if not wlock:
980 980 wlock = self.wlock()
981 981 for f in list:
982 if self.dirstate.state(f) not in 'ai':
982 if self.dirstate[f] != 'a':
983 983 self.ui.warn(_("%s not added!\n") % f)
984 984 else:
985 985 self.dirstate.forget(f)
@@ -997,7 +997,7 b' class localrepository(repo.repository):'
997 997 for f in list:
998 998 if unlink and os.path.exists(self.wjoin(f)):
999 999 self.ui.warn(_("%s still exists!\n") % f)
1000 elif self.dirstate.state(f) == 'a':
1000 elif self.dirstate[f] == 'a':
1001 1001 self.dirstate.forget(f)
1002 1002 elif f not in self.dirstate:
1003 1003 self.ui.warn(_("%s not tracked!\n") % f)
@@ -1011,7 +1011,7 b' class localrepository(repo.repository):'
1011 1011 if not wlock:
1012 1012 wlock = self.wlock()
1013 1013 for f in list:
1014 if self.dirstate.state(f) not in "r":
1014 if self.dirstate[f] != 'r':
1015 1015 self.ui.warn("%s not removed!\n" % f)
1016 1016 else:
1017 1017 t = self.file(f).read(m[f])
@@ -1028,7 +1028,7 b' class localrepository(repo.repository):'
1028 1028 else:
1029 1029 if not wlock:
1030 1030 wlock = self.wlock()
1031 if self.dirstate.state(dest) == '?':
1031 if dest not in self.dirstate:
1032 1032 self.dirstate.add(dest)
1033 1033 self.dirstate.copy(source, dest)
1034 1034
General Comments 0
You need to be logged in to leave comments. Login now