hgext/evolve.py
branchstable
changeset 716 4c0f6d555032
parent 715 070bbbb0e6f2
child 722 4e7e7a7d8500
equal deleted inserted replaced
715:070bbbb0e6f2 716:4c0f6d555032
   827 
   827 
   828 ### new command
   828 ### new command
   829 #############################
   829 #############################
   830 cmdtable = {}
   830 cmdtable = {}
   831 command = cmdutil.command(cmdtable)
   831 command = cmdutil.command(cmdtable)
       
   832 metadataopts = [
       
   833     ('d', 'date', '',
       
   834      _('record the specified date in metadata'), _('DATE')),
       
   835     ('u', 'user', '',
       
   836      _('record the specified user in metadata'), _('USER')),
       
   837 ]
       
   838 
   832 
   839 
   833 @command('^evolve|stabilize|solve',
   840 @command('^evolve|stabilize|solve',
   834     [('n', 'dry-run', False, 'do not perform actions, print what to be done'),
   841     [('n', 'dry-run', False, 'do not perform actions, print what to be done'),
   835     ('A', 'any', False, 'evolve any troubled changeset'),
   842     ('A', 'any', False, 'evolve any troubled changeset'),
   836     ('a', 'all', False, 'evolve all troubled changesets'),
   843     ('a', 'all', False, 'evolve all troubled changesets'),
  1270 def _deletebookmark(ui, marks, mark):
  1277 def _deletebookmark(ui, marks, mark):
  1271     del marks[mark]
  1278     del marks[mark]
  1272     marks.write()
  1279     marks.write()
  1273     ui.write(_("bookmark '%s' deleted\n") % mark)
  1280     ui.write(_("bookmark '%s' deleted\n") % mark)
  1274 
  1281 
       
  1282 
       
  1283 
       
  1284 def _getmetadata(**opts):
       
  1285     metadata = {}
       
  1286     date = opts.get('date')
       
  1287     user = opts.get('user')
       
  1288     if date and '0 0' != date:
       
  1289         metadata['date'] = '%i %i' % util.parsedate(date)
       
  1290     if user:
       
  1291         metadata['user'] = user
       
  1292     return metadata
       
  1293 
       
  1294 
  1275 @command('^prune|obsolete|kill',
  1295 @command('^prune|obsolete|kill',
  1276     [('n', 'new', [], _("successor changeset (DEPRECATED)")),
  1296     [('n', 'new', [], _("successor changeset (DEPRECATED)")),
  1277      ('s', 'succ', [], _("successor changeset")),
  1297      ('s', 'succ', [], _("successor changeset")),
  1278      ('r', 'rev', [], _("revisions to prune")),
  1298      ('r', 'rev', [], _("revisions to prune")),
  1279      ('B', 'bookmark', '', _("remove revs only reachable from given"
  1299      ('B', 'bookmark', '', _("remove revs only reachable from given"
  1280                              " bookmark"))],
  1300                              " bookmark"))] + metadataopts,
  1281     _('[OPTION] [-r] REV...'))
  1301     _('[OPTION] [-r] REV...'))
  1282     # -d --date
       
  1283     # -u --user
       
  1284     # -U  --noupdate option to prevent wc update and or bookmarks update ?
  1302     # -U  --noupdate option to prevent wc update and or bookmarks update ?
  1285 def cmdprune(ui, repo, *revs, **opts):
  1303 def cmdprune(ui, repo, *revs, **opts):
  1286     """get rid of changesets by marking them obsolete
  1304     """get rid of changesets by marking them obsolete
  1287 
  1305 
  1288     Obsolete changesets becomes invisible to all commands.
  1306     Obsolete changesets becomes invisible to all commands.
  1297     of the pruned changeset exists.
  1315     of the pruned changeset exists.
  1298     """
  1316     """
  1299     revs = set(scmutil.revrange(repo, list(revs) + opts.get('rev')))
  1317     revs = set(scmutil.revrange(repo, list(revs) + opts.get('rev')))
  1300     succs = opts['new'] + opts['succ']
  1318     succs = opts['new'] + opts['succ']
  1301     bookmark = opts.get('bookmark')
  1319     bookmark = opts.get('bookmark')
       
  1320     metadata = _getmetadata(**opts)
  1302 
  1321 
  1303     if bookmark:
  1322     if bookmark:
  1304         marks,revs = _reachablefrombookmark(repo, revs, bookmark)
  1323         marks,revs = _reachablefrombookmark(repo, revs, bookmark)
  1305         if not revs:
  1324         if not revs:
  1306             # no revisions to prune - delete bookmark immediately
  1325             # no revisions to prune - delete bookmark immediately
  1330         sucs = tuple(repo[n] for n in sortedrevs(succs))
  1349         sucs = tuple(repo[n] for n in sortedrevs(succs))
  1331         if len(sucs) > 1 and len(precs) > 1:
  1350         if len(sucs) > 1 and len(precs) > 1:
  1332             msg = "Can't use multiple successors for multiple precursors"
  1351             msg = "Can't use multiple successors for multiple precursors"
  1333             raise util.Abort(msg)
  1352             raise util.Abort(msg)
  1334         # create markers
  1353         # create markers
  1335         createmarkers(repo, [(p, sucs) for p in precs])
  1354         createmarkers(repo, [(p, sucs) for p in precs], metadata=metadata)
       
  1355 
  1336         # informs that changeset have been pruned
  1356         # informs that changeset have been pruned
  1337         ui.status(_('%i changesets pruned\n') % len(precs))
  1357         ui.status(_('%i changesets pruned\n') % len(precs))
  1338         # update to an unkilled parent
  1358         # update to an unkilled parent
  1339         wdp = repo['.']
  1359         wdp = repo['.']
  1340         newnode = wdp
  1360         newnode = wdp
  1381     Returns 0 on success, 1 if nothing changed.
  1401     Returns 0 on success, 1 if nothing changed.
  1382     """
  1402     """
  1383 
  1403 
  1384     # determine updates to subsume
  1404     # determine updates to subsume
  1385     old = scmutil.revsingle(repo, '.')
  1405     old = scmutil.revsingle(repo, '.')
       
  1406     metadata = _getmetadata(**opts)
  1386 
  1407 
  1387     lock = repo.lock()
  1408     lock = repo.lock()
  1388     try:
  1409     try:
  1389         wlock = repo.wlock()
  1410         wlock = repo.wlock()
  1390         try:
  1411         try: