[PATCH 1 of 4 topic-experiment] prev: factor out the logic to update to previous commit to a new function
Pulkit Goyal
7895pulkit at gmail.com
Tue Jul 4 14:29:21 UTC 2017
# HG changeset patch
# User Pulkit Goyal <7895pulkit at gmail.com>
# Date 1499168421 -19800
# Tue Jul 04 17:10:21 2017 +0530
# Node ID 143abe59c2d630461718ea0ea6277ab16abd9637
# Parent b4b5c5331caec02c1e26bda42ec997fcb7b6af93
prev: factor out the logic to update to previous commit to a new function
This will make things easy for topic extension to change the behaviour by
wrapping the new function.
While factoring, this breaks the existing topic code using `hg prev` as better
support will be added in upcoming changesets.
diff --git a/hgext3rd/evolve/__init__.py b/hgext3rd/evolve/__init__.py
--- a/hgext3rd/evolve/__init__.py
+++ b/hgext3rd/evolve/__init__.py
@@ -2026,47 +2026,44 @@
raise
parents = wparents[0].parents()
- topic = getattr(repo, 'currenttopic', '')
- if topic and not opts.get("no_topic", False):
- parents = [ctx for ctx in parents if ctx.topic() == topic]
- displayer = cmdutil.show_changeset(ui, repo, {'template': shorttemplate})
- if not parents:
- ui.warn(_('no parent in topic "%s"\n') % topic)
- ui.warn(_('(do you want --no-topic)\n'))
- elif len(parents) == 1:
- p = parents[0]
- bm = repo._activebookmark
- shouldmove = opts.get('move_bookmark') and bm is not None
- if dryrunopt:
- ui.write(('hg update %s;\n' % p.rev()))
- if shouldmove:
- ui.write(('hg bookmark %s -r %s;\n' % (bm, p.rev())))
- else:
- ret = hg.update(repo, p.rev())
- if not ret:
- tr = lock = None
- try:
- lock = repo.lock()
- tr = repo.transaction('previous')
- if shouldmove:
- repo._bookmarks[bm] = p.node()
- repo._bookmarks.recordchange(tr)
- else:
- bookmarksmod.deactivate(repo)
- tr.close()
- finally:
- lockmod.release(tr, lock)
-
- displayer.show(p)
- return 0
- else:
- for p in parents:
- displayer.show(p)
- ui.warn(_('multiple parents, explicitly update to one\n'))
- return 1
+ return movetoprev(ui, repo, parents, opts)
finally:
lockmod.release(wlock)
+def movetoprev(ui, repo, parents, opts):
+ displayer = cmdutil.show_changeset(ui, repo, {'template': shorttemplate})
+ if len(parents) == 1:
+ p = parents[0]
+ bm = repo._activebookmark
+ shouldmove = opts.get('move_bookmark') and bm is not None
+ if opts['dry_run']:
+ ui.write(('hg update %s;\n' % p.rev()))
+ if shouldmove:
+ ui.write(('hg bookmark %s -r %s;\n' % (bm, p.rev())))
+ else:
+ ret = hg.update(repo, p.rev())
+ if not ret:
+ tr = lock = None
+ try:
+ lock = repo.lock()
+ tr = repo.transaction('previous')
+ if shouldmove:
+ repo._bookmarks[bm] = p.node()
+ repo._bookmarks.recordchange(tr)
+ else:
+ bookmarksmod.deactivate(repo)
+ tr.close()
+ finally:
+ lockmod.release(tr, lock)
+
+ displayer.show(p)
+ return 0
+ else:
+ for p in parents:
+ displayer.show(p)
+ ui.warn(_('multiple parents, explicitly update to one\n'))
+ return 1
+
@eh.command(
'^next',
[('B', 'move-bookmark', False,
diff --git a/tests/test-evolve-topic.t b/tests/test-evolve-topic.t
--- a/tests/test-evolve-topic.t
+++ b/tests/test-evolve-topic.t
@@ -209,9 +209,9 @@
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
[16] add ggg
$ hg prev
- no parent in topic "bar"
- (do you want --no-topic)
- $ hg prev --no-topic
switching to topic foo
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
[15] add fff
+ $ hg prev --no-topic
+ 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ [14] add eee
More information about the Mercurial-devel
mailing list