comparison mercurial/debugcommands.py @ 30512:6bfb333a6f2f

debugcommands: move 'debugcheckstate' in the new module
author Gregory Szorc <gregory.szorc@gmail.com>
date Wed, 17 Aug 2016 20:38:29 -0700
parents 6da030496667
children c3bdc27121d1
comparison
equal deleted inserted replaced
30511:6da030496667 30512:6bfb333a6f2f
291 def debugapplystreamclonebundle(ui, repo, fname): 291 def debugapplystreamclonebundle(ui, repo, fname):
292 """apply a stream clone bundle file""" 292 """apply a stream clone bundle file"""
293 f = hg.openpath(ui, fname) 293 f = hg.openpath(ui, fname)
294 gen = exchange.readbundle(ui, f, fname) 294 gen = exchange.readbundle(ui, f, fname)
295 gen.apply(repo) 295 gen.apply(repo)
296
297 @command('debugcheckstate', [], '')
298 def debugcheckstate(ui, repo):
299 """validate the correctness of the current dirstate"""
300 parent1, parent2 = repo.dirstate.parents()
301 m1 = repo[parent1].manifest()
302 m2 = repo[parent2].manifest()
303 errors = 0
304 for f in repo.dirstate:
305 state = repo.dirstate[f]
306 if state in "nr" and f not in m1:
307 ui.warn(_("%s in state %s, but not in manifest1\n") % (f, state))
308 errors += 1
309 if state in "a" and f in m1:
310 ui.warn(_("%s in state %s, but also in manifest1\n") % (f, state))
311 errors += 1
312 if state in "m" and f not in m1 and f not in m2:
313 ui.warn(_("%s in state %s, but not in either manifest\n") %
314 (f, state))
315 errors += 1
316 for f in m1:
317 state = repo.dirstate[f]
318 if state not in "nrm":
319 ui.warn(_("%s in manifest1, but listed as state %s") % (f, state))
320 errors += 1
321 if errors:
322 error = _(".hg/dirstate inconsistent with current parent's manifest")
323 raise error.Abort(error)