123 if prevtags and prevtags[-1] != '\n': |
123 if prevtags and prevtags[-1] != '\n': |
124 fp.write('\n') |
124 fp.write('\n') |
125 fp.write('%s %s\n' % (hex(node), munge and munge(name) or name)) |
125 fp.write('%s %s\n' % (hex(node), munge and munge(name) or name)) |
126 fp.close() |
126 fp.close() |
127 self.hook('tag', node=hex(node), tag=name, local=local) |
127 self.hook('tag', node=hex(node), tag=name, local=local) |
128 |
128 |
129 prevtags = '' |
129 prevtags = '' |
130 if local: |
130 if local: |
131 try: |
131 try: |
132 fp = self.opener('localtags', 'r+') |
132 fp = self.opener('localtags', 'r+') |
133 except IOError, err: |
133 except IOError, err: |
154 fp = self.wfile('.hgtags', 'wb') |
154 fp = self.wfile('.hgtags', 'wb') |
155 |
155 |
156 # committed tags are stored in UTF-8 |
156 # committed tags are stored in UTF-8 |
157 writetag(fp, name, util.fromlocal, prevtags) |
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 self.add(['.hgtags']) |
160 self.add(['.hgtags']) |
161 |
161 |
162 tagnode = self.commit(['.hgtags'], message, user, date, p1=parent, |
162 tagnode = self.commit(['.hgtags'], message, user, date, p1=parent, |
163 extra=extra) |
163 extra=extra) |
164 |
164 |
968 "(use 'hg revert %s' to unadd the file)\n") |
968 "(use 'hg revert %s' to unadd the file)\n") |
969 % (f, f)) |
969 % (f, f)) |
970 if not (stat.S_ISREG(st.st_mode) or stat.S_ISLNK(st.st_mode)): |
970 if not (stat.S_ISREG(st.st_mode) or stat.S_ISLNK(st.st_mode)): |
971 self.ui.warn(_("%s not added: only files and symlinks " |
971 self.ui.warn(_("%s not added: only files and symlinks " |
972 "supported currently\n") % f) |
972 "supported currently\n") % f) |
973 elif self.dirstate.state(f) in 'an': |
973 elif self.dirstate[f] in 'an': |
974 self.ui.warn(_("%s already tracked!\n") % f) |
974 self.ui.warn(_("%s already tracked!\n") % f) |
975 else: |
975 else: |
976 self.dirstate.add(f) |
976 self.dirstate.add(f) |
977 |
977 |
978 def forget(self, list, wlock=None): |
978 def forget(self, list, wlock=None): |
979 if not wlock: |
979 if not wlock: |
980 wlock = self.wlock() |
980 wlock = self.wlock() |
981 for f in list: |
981 for f in list: |
982 if self.dirstate.state(f) not in 'ai': |
982 if self.dirstate[f] != 'a': |
983 self.ui.warn(_("%s not added!\n") % f) |
983 self.ui.warn(_("%s not added!\n") % f) |
984 else: |
984 else: |
985 self.dirstate.forget(f) |
985 self.dirstate.forget(f) |
986 |
986 |
987 def remove(self, list, unlink=False, wlock=None): |
987 def remove(self, list, unlink=False, wlock=None): |
995 if not wlock: |
995 if not wlock: |
996 wlock = self.wlock() |
996 wlock = self.wlock() |
997 for f in list: |
997 for f in list: |
998 if unlink and os.path.exists(self.wjoin(f)): |
998 if unlink and os.path.exists(self.wjoin(f)): |
999 self.ui.warn(_("%s still exists!\n") % f) |
999 self.ui.warn(_("%s still exists!\n") % f) |
1000 elif self.dirstate.state(f) == 'a': |
1000 elif self.dirstate[f] == 'a': |
1001 self.dirstate.forget(f) |
1001 self.dirstate.forget(f) |
1002 elif f not in self.dirstate: |
1002 elif f not in self.dirstate: |
1003 self.ui.warn(_("%s not tracked!\n") % f) |
1003 self.ui.warn(_("%s not tracked!\n") % f) |
1004 else: |
1004 else: |
1005 self.dirstate.remove(f) |
1005 self.dirstate.remove(f) |
1009 mn = self.changelog.read(p)[0] |
1009 mn = self.changelog.read(p)[0] |
1010 m = self.manifest.read(mn) |
1010 m = self.manifest.read(mn) |
1011 if not wlock: |
1011 if not wlock: |
1012 wlock = self.wlock() |
1012 wlock = self.wlock() |
1013 for f in list: |
1013 for f in list: |
1014 if self.dirstate.state(f) not in "r": |
1014 if self.dirstate[f] != 'r': |
1015 self.ui.warn("%s not removed!\n" % f) |
1015 self.ui.warn("%s not removed!\n" % f) |
1016 else: |
1016 else: |
1017 t = self.file(f).read(m[f]) |
1017 t = self.file(f).read(m[f]) |
1018 self.wwrite(f, t, m.flags(f)) |
1018 self.wwrite(f, t, m.flags(f)) |
1019 self.dirstate.normal(f) |
1019 self.dirstate.normal(f) |
1026 self.ui.warn(_("copy failed: %s is not a file or a " |
1026 self.ui.warn(_("copy failed: %s is not a file or a " |
1027 "symbolic link\n") % dest) |
1027 "symbolic link\n") % dest) |
1028 else: |
1028 else: |
1029 if not wlock: |
1029 if not wlock: |
1030 wlock = self.wlock() |
1030 wlock = self.wlock() |
1031 if self.dirstate.state(dest) == '?': |
1031 if dest not in self.dirstate: |
1032 self.dirstate.add(dest) |
1032 self.dirstate.add(dest) |
1033 self.dirstate.copy(source, dest) |
1033 self.dirstate.copy(source, dest) |
1034 |
1034 |
1035 def heads(self, start=None): |
1035 def heads(self, start=None): |
1036 heads = self.changelog.heads(start) |
1036 heads = self.changelog.heads(start) |