comparison mercurial/commands.py @ 38181:476324a304b2

graft: start using the cmdstate class to read and write data to graftstate This patch replaces the logic to read and write data to graftstate file to use the state.cmdstate() class. The previous graftstate format didn't had any version number on top of that, so we have to catch the CorruptedState error and then read the graftstate in case of old state files. This will help us to implement nice additions to graft commands like `--no-commit`, `--abort`, `--stop` flags. Passing on test-graft.t shows that things are working fine. Differential Revision: https://phab.mercurial-scm.org/D3654
author Pulkit Goyal <7895pulkit@gmail.com>
date Fri, 25 May 2018 01:53:30 +0530
parents 58b08f4ce5f5
children 0dfa27e53c57
comparison
equal deleted inserted replaced
38180:58b08f4ce5f5 38181:476324a304b2
2222 cont = True 2222 cont = True
2223 if revs: 2223 if revs:
2224 raise error.Abort(_("can't specify --continue and revisions")) 2224 raise error.Abort(_("can't specify --continue and revisions"))
2225 # read in unfinished revisions 2225 # read in unfinished revisions
2226 if graftstate.exists(): 2226 if graftstate.exists():
2227 nodes = _readgraftstate(repo)['nodes'] 2227 nodes = _readgraftstate(repo, graftstate)['nodes']
2228 revs = [repo[node].rev() for node in nodes] 2228 revs = [repo[node].rev() for node in nodes]
2229 else: 2229 else:
2230 cmdutil.wrongtooltocontinue(repo, _('graft')) 2230 cmdutil.wrongtooltocontinue(repo, _('graft'))
2231 else: 2231 else:
2232 if not revs: 2232 if not revs:
2349 finally: 2349 finally:
2350 repo.ui.setconfig('ui', 'forcemerge', '', 'graft') 2350 repo.ui.setconfig('ui', 'forcemerge', '', 'graft')
2351 # report any conflicts 2351 # report any conflicts
2352 if stats.unresolvedcount > 0: 2352 if stats.unresolvedcount > 0:
2353 # write out state for --continue 2353 # write out state for --continue
2354 nodelines = [repo[rev].hex() + "\n" for rev in revs[pos:]] 2354 nodes = [repo[rev].hex() for rev in revs[pos:]]
2355 repo.vfs.write('graftstate', ''.join(nodelines)) 2355 statedata = {'nodes': nodes}
2356 stateversion = 1
2357 graftstate.save(stateversion, statedata)
2356 extra = '' 2358 extra = ''
2357 if opts.get('user'): 2359 if opts.get('user'):
2358 extra += ' --user %s' % procutil.shellquote(opts['user']) 2360 extra += ' --user %s' % procutil.shellquote(opts['user'])
2359 if opts.get('date'): 2361 if opts.get('date'):
2360 extra += ' --date %s' % procutil.shellquote(opts['date']) 2362 extra += ' --date %s' % procutil.shellquote(opts['date'])
2379 if not opts.get('dry_run'): 2381 if not opts.get('dry_run'):
2380 repo.vfs.unlinkpath('graftstate', ignoremissing=True) 2382 repo.vfs.unlinkpath('graftstate', ignoremissing=True)
2381 2383
2382 return 0 2384 return 0
2383 2385
2384 def _readgraftstate(repo): 2386 def _readgraftstate(repo, graftstate):
2385 """read the graft state file and return a dict of the data stored in it""" 2387 """read the graft state file and return a dict of the data stored in it"""
2386 nodes = repo.vfs.read('graftstate').splitlines() 2388 try:
2387 return {'nodes': nodes} 2389 return graftstate.read()
2390 except error.CorruptedState:
2391 nodes = repo.vfs.read('graftstate').splitlines()
2392 return {'nodes': nodes}
2388 2393
2389 @command('grep', 2394 @command('grep',
2390 [('0', 'print0', None, _('end fields with NUL')), 2395 [('0', 'print0', None, _('end fields with NUL')),
2391 ('', 'all', None, _('print all revisions that match')), 2396 ('', 'all', None, _('print all revisions that match')),
2392 ('a', 'text', None, _('treat all files as text')), 2397 ('a', 'text', None, _('treat all files as text')),