comparison mercurial/commands.py @ 1619:1ba0d7041ac4

Distinguish removed and deleted files. Tests are not fixed yet. hg status will now show "R filename" for "hg rm"ed files and "! filename" for files which were deleted manually. Manually deleted files are considered unmodified.
author Thomas Arendsen Hein <thomas@intevation.de>
date Thu, 12 Jan 2006 13:58:36 +0100
parents ff339dd21976
children 5e9168401a68
comparison
equal deleted inserted replaced
1618:ff339dd21976 1619:1ba0d7041ac4
262 262
263 def dodiff(fp, ui, repo, node1, node2, files=None, match=util.always, 263 def dodiff(fp, ui, repo, node1, node2, files=None, match=util.always,
264 changes=None, text=False): 264 changes=None, text=False):
265 if not changes: 265 if not changes:
266 changes = repo.changes(node1, node2, files, match=match) 266 changes = repo.changes(node1, node2, files, match=match)
267 modified, added, removed, unknown = changes 267 modified, added, removed, deleted, unknown = changes
268 if files: 268 if files:
269 modified, added, removed = map(lambda x: filterfiles(x, files), 269 modified, added, removed = map(lambda x: filterfiles(x, files),
270 (modified, added, removed)) 270 (modified, added, removed))
271 271
272 if not modified and not added and not removed: 272 if not modified and not added and not removed:
783 783
784 if opts['addremove']: 784 if opts['addremove']:
785 addremove(ui, repo, *pats, **opts) 785 addremove(ui, repo, *pats, **opts)
786 fns, match, anypats, cwd = matchpats(repo, pats, opts) 786 fns, match, anypats, cwd = matchpats(repo, pats, opts)
787 if pats: 787 if pats:
788 modified, added, removed, unknown = ( 788 modified, added, removed, deleted, unknown = (
789 repo.changes(files=fns, match=match)) 789 repo.changes(files=fns, match=match))
790 files = (modified + added + 790 files = modified + added + removed
791 [fn for fn in removed if repo.dirstate.state(fn) == 'r'])
792 else: 791 else:
793 files = [] 792 files = []
794 try: 793 try:
795 repo.commit(files, message, opts['user'], opts['date'], match) 794 repo.commit(files, message, opts['user'], opts['date'], match)
796 except ValueError, inst: 795 except ValueError, inst:
1379 if not parents: 1378 if not parents:
1380 ui.write(_("unknown\n")) 1379 ui.write(_("unknown\n"))
1381 return 1380 return
1382 1381
1383 hexfunc = ui.verbose and hex or short 1382 hexfunc = ui.verbose and hex or short
1384 modified, added, removed, unknown = repo.changes() 1383 modified, added, removed, deleted, unknown = repo.changes()
1385 output = ["%s%s" % ('+'.join([hexfunc(parent) for parent in parents]), 1384 output = ["%s%s" %
1386 (modified or added or removed) and "+" or "")] 1385 ('+'.join([hexfunc(parent) for parent in parents]),
1386 (modified or added or removed or deleted) and "+" or "")]
1387 1387
1388 if not ui.quiet: 1388 if not ui.quiet:
1389 # multiple tags for a single parent separated by '/' 1389 # multiple tags for a single parent separated by '/'
1390 parenttags = ['/'.join(tags) 1390 parenttags = ['/'.join(tags)
1391 for tags in map(repo.nodetags, parents) if tags] 1391 for tags in map(repo.nodetags, parents) if tags]
1410 safety check, not to import a real mail message. 1410 safety check, not to import a real mail message.
1411 """ 1411 """
1412 patches = (patch1,) + patches 1412 patches = (patch1,) + patches
1413 1413
1414 if not opts['force']: 1414 if not opts['force']:
1415 modified, added, removed, unknown = repo.changes() 1415 modified, added, removed, deleted, unknown = repo.changes()
1416 if modified or added or removed: 1416 if modified or added or removed or deleted:
1417 raise util.Abort(_("outstanding uncommitted changes")) 1417 raise util.Abort(_("outstanding uncommitted changes"))
1418 1418
1419 d = opts["base"] 1419 d = opts["base"]
1420 strip = opts["strip"] 1420 strip = opts["strip"]
1421 1421
1827 entire project history. If the files still exist in the working 1827 entire project history. If the files still exist in the working
1828 directory, they will be deleted from it. 1828 directory, they will be deleted from it.
1829 """ 1829 """
1830 names = [] 1830 names = []
1831 def okaytoremove(abs, rel, exact): 1831 def okaytoremove(abs, rel, exact):
1832 modified, added, removed, unknown = repo.changes(files=[abs]) 1832 modified, added, removed, deleted, unknown = repo.changes(files=[abs])
1833 reason = None 1833 reason = None
1834 if modified: 1834 if modified:
1835 reason = _('is modified') 1835 reason = _('is modified')
1836 elif added: 1836 elif added:
1837 reason = _('has been marked for add') 1837 reason = _('has been marked for add')
1891 """ 1891 """
1892 node = opts['rev'] and repo.lookup(opts['rev']) or \ 1892 node = opts['rev'] and repo.lookup(opts['rev']) or \
1893 repo.dirstate.parents()[0] 1893 repo.dirstate.parents()[0]
1894 1894
1895 files, choose, anypats, cwd = matchpats(repo, pats, opts) 1895 files, choose, anypats, cwd = matchpats(repo, pats, opts)
1896 modified, added, removed, unknown = repo.changes(match=choose) 1896 modified, added, removed, deleted, unknown = repo.changes(match=choose)
1897 repo.forget(added) 1897 repo.forget(added)
1898 repo.undelete(removed) 1898 repo.undelete(removed + deleted)
1899 1899
1900 return repo.update(node, False, True, choose, False) 1900 return repo.update(node, False, True, choose, False)
1901 1901
1902 def root(ui, repo): 1902 def root(ui, repo):
1903 """print the root (top) of the current working dir 1903 """print the root (top) of the current working dir
2020 2020
2021 The codes used to show the status of files are: 2021 The codes used to show the status of files are:
2022 M = modified 2022 M = modified
2023 A = added 2023 A = added
2024 R = removed 2024 R = removed
2025 ! = deleted, but still tracked
2025 ? = not tracked 2026 ? = not tracked
2026 """ 2027 """
2027 2028
2028 files, matchfn, anypats, cwd = matchpats(repo, pats, opts) 2029 files, matchfn, anypats, cwd = matchpats(repo, pats, opts)
2029 modified, added, removed, unknown = [ 2030 modified, added, removed, deleted, unknown = [
2030 [util.pathto(cwd, x) for x in n] 2031 [util.pathto(cwd, x) for x in n]
2031 for n in repo.changes(files=files, match=matchfn)] 2032 for n in repo.changes(files=files, match=matchfn)]
2032 2033
2033 changetypes = [(_('modified'), 'M', modified), 2034 changetypes = [(_('modified'), 'M', modified),
2034 (_('added'), 'A', added), 2035 (_('added'), 'A', added),
2035 (_('removed'), 'R', removed), 2036 (_('removed'), 'R', removed),
2037 (_('deleted'), '!', deleted),
2036 (_('unknown'), '?', unknown)] 2038 (_('unknown'), '?', unknown)]
2037 2039
2038 end = opts['print0'] and '\0' or '\n' 2040 end = opts['print0'] and '\0' or '\n'
2039 2041
2040 for opt, char, changes in ([ct for ct in changetypes if opts[ct[0]]] 2042 for opt, char, changes in ([ct for ct in changetypes if opts[ct[0]]]
2435 "^status|st": 2437 "^status|st":
2436 (status, 2438 (status,
2437 [('m', 'modified', None, _('show only modified files')), 2439 [('m', 'modified', None, _('show only modified files')),
2438 ('a', 'added', None, _('show only added files')), 2440 ('a', 'added', None, _('show only added files')),
2439 ('r', 'removed', None, _('show only removed files')), 2441 ('r', 'removed', None, _('show only removed files')),
2442 ('d', 'deleted', None, _('show only deleted (but tracked) files')),
2440 ('u', 'unknown', None, _('show only unknown (not tracked) files')), 2443 ('u', 'unknown', None, _('show only unknown (not tracked) files')),
2441 ('n', 'no-status', None, _('hide status prefix')), 2444 ('n', 'no-status', None, _('hide status prefix')),
2442 ('0', 'print0', None, 2445 ('0', 'print0', None,
2443 _('end filenames with NUL, for use with xargs')), 2446 _('end filenames with NUL, for use with xargs')),
2444 ('I', 'include', [], _('include names matching the given patterns')), 2447 ('I', 'include', [], _('include names matching the given patterns')),