Mercurial > public > mercurial-scm > hg-stable
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')), |