本文整理汇总了Python中mercurial.cmdutil.bailifchanged函数的典型用法代码示例。如果您正苦于以下问题:Python bailifchanged函数的具体用法?Python bailifchanged怎么用?Python bailifchanged使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了bailifchanged函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: pullrebaseif
def pullrebaseif(orig, ui, repo, *args, **opts):
'''Call rebaseif after pull if the latter has been invoked with --rebaseif'''
# this function is taken in verbatim from rebase extension, with rebase replaced with rebaseif
if opts.get('rebaseif'):
if opts.get('update'):
del opts['update']
ui.debug(_('--update and --rebaseif are not compatible, ignoring the update flag\n'))
try:
cmdutil.bailifchanged(repo) # 1.9
except AttributeError:
cmdutil.bail_if_changed(repo) # < 1.9
revsprepull = len(repo)
origpostincoming = commands.postincoming
def _dummy(*args, **kwargs):
pass
commands.postincoming = _dummy
try:
orig(ui, repo, *args, **opts)
finally:
commands.postincoming = origpostincoming
revspostpull = len(repo)
if revspostpull > revsprepull:
rebaseif(ui, repo, **opts)
branch = repo[None].branch()
dest = repo[branch].rev()
if dest != repo['.'].rev():
# there was nothing to rebase we force an update
hg.update(repo, dest)
else:
orig(ui, repo, *args, **opts)
示例2: pullrebase
def pullrebase(orig, ui, repo, *args, **opts):
'Call rebase after pull if the latter has been invoked with --rebase'
if opts.get('rebase'):
if opts.get('update'):
del opts['update']
ui.debug('--update and --rebase are not compatible, ignoring '
'the update flag\n')
cmdutil.bailifchanged(repo)
revsprepull = len(repo)
origpostincoming = commands.postincoming
def _dummy(*args, **kwargs):
pass
commands.postincoming = _dummy
try:
orig(ui, repo, *args, **opts)
finally:
commands.postincoming = origpostincoming
revspostpull = len(repo)
if revspostpull > revsprepull:
rebase(ui, repo, **opts)
branch = repo[None].branch()
dest = repo[branch].rev()
if dest != repo['.'].rev():
# there was nothing to rebase we force an update
hg.update(repo, dest)
else:
if opts.get('tool'):
raise util.Abort(_('--tool can only be used with --rebase'))
orig(ui, repo, *args, **opts)
示例3: override_pull
def override_pull(orig, ui, repo, source=None, **opts):
if opts.get('rebase', False):
repo._isrebasing = True
try:
if opts.get('update'):
del opts['update']
ui.debug('--update and --rebase are not compatible, ignoring '
'the update flag\n')
del opts['rebase']
cmdutil.bailifchanged(repo)
revsprepull = len(repo)
origpostincoming = commands.postincoming
def _dummy(*args, **kwargs):
pass
commands.postincoming = _dummy
repo.lfpullsource = source
if not source:
source = 'default'
try:
result = commands.pull(ui, repo, source, **opts)
finally:
commands.postincoming = origpostincoming
revspostpull = len(repo)
if revspostpull > revsprepull:
result = result or rebase.rebase(ui, repo)
finally:
repo._isrebasing = False
else:
repo.lfpullsource = source
if not source:
source = 'default'
result = orig(ui, repo, source, **opts)
return result
示例4: verify_pending_commits
def verify_pending_commits(repo):
"""
Checks if there are any pending uncommitted changese
Args:
repo - the current repository
"""
cmdutil.bailifchanged(repo)
示例5: hide
def hide(ui, repo, *revs, **opts):
"""hide changesets and their descendants
Hidden changesets are still accessible by their hashes which can be found
in ``hg journal``.
If a parent of the working directory is hidden, then the working directory
will automatically be updated to the most recent available ancestor of the
hidden parent.
If there is a bookmark pointing to the commit it will be removed.
"""
revs = list(revs) + opts.pop('rev', [])
revs = set(scmutil.revrange(repo, revs))
hidectxs = list(repo.set("(%ld)::", revs))
if not hidectxs:
raise error.Abort(_('nothing to hide'))
with repo.wlock(), repo.lock(), repo.transaction('hide') as tr:
# revs to be hidden
for ctx in hidectxs:
if not ctx.mutable():
raise error.Abort(
_('cannot hide immutable changeset: %s') % ctx,
hint="see 'hg help phases' for details")
wdp = repo['.']
newnode = wdp
while newnode in hidectxs:
newnode = newnode.parents()[0]
if newnode.node() != wdp.node():
cmdutil.bailifchanged(repo, merge=False)
hg.update(repo, newnode, False)
ui.status(_('working directory now at %s\n')
% ui.label(str(newnode), 'node'))
# create markers
obsolete.createmarkers(repo, [(r, []) for r in hidectxs],
operation='hide')
ui.status(_('%i changesets hidden\n') % len(hidectxs))
# remove bookmarks pointing to hidden changesets
hnodes = [r.node() for r in hidectxs]
bmchanges = []
for book, node in bookmarksmod.listbinbookmarks(repo):
if node in hnodes:
bmchanges.append((book, None))
repo._bookmarks.applychanges(repo, tr, bmchanges)
if len(bmchanges) > 0:
ui.status(_('%i bookmarks removed\n') % len(bmchanges))
示例6: override_pull
def override_pull(orig, ui, repo, source=None, **opts):
if opts.get("rebase", False):
repo._isrebasing = True
try:
if opts.get("update"):
del opts["update"]
ui.debug("--update and --rebase are not compatible, ignoring " "the update flag\n")
del opts["rebase"]
cmdutil.bailifchanged(repo)
revsprepull = len(repo)
origpostincoming = commands.postincoming
def _dummy(*args, **kwargs):
pass
commands.postincoming = _dummy
repo.lfpullsource = source
if not source:
source = "default"
try:
result = commands.pull(ui, repo, source, **opts)
finally:
commands.postincoming = origpostincoming
revspostpull = len(repo)
if revspostpull > revsprepull:
result = result or rebase.rebase(ui, repo)
finally:
repo._isrebasing = False
else:
repo.lfpullsource = source
if not source:
source = "default"
oldheads = lfutil.getcurrentheads(repo)
result = orig(ui, repo, source, **opts)
# If we do not have the new largefiles for any new heads we pulled, we
# will run into a problem later if we try to merge or rebase with one of
# these heads, so cache the largefiles now direclty into the system
# cache.
ui.status(_("caching new largefiles\n"))
numcached = 0
heads = lfutil.getcurrentheads(repo)
newheads = set(heads).difference(set(oldheads))
for head in newheads:
(cached, missing) = lfcommands.cachelfiles(ui, repo, head)
numcached += len(cached)
ui.status(_("%d largefiles cached\n") % numcached)
return result
示例7: override_pull
def override_pull(orig, ui, repo, source=None, **opts):
if opts.get('rebase', False):
repo._isrebasing = True
try:
if opts.get('update'):
del opts['update']
ui.debug('--update and --rebase are not compatible, ignoring '
'the update flag\n')
del opts['rebase']
cmdutil.bailifchanged(repo)
revsprepull = len(repo)
origpostincoming = commands.postincoming
def _dummy(*args, **kwargs):
pass
commands.postincoming = _dummy
repo.lfpullsource = source
if not source:
source = 'default'
try:
result = commands.pull(ui, repo, source, **opts)
finally:
commands.postincoming = origpostincoming
revspostpull = len(repo)
if revspostpull > revsprepull:
result = result or rebase.rebase(ui, repo)
finally:
repo._isrebasing = False
else:
repo.lfpullsource = source
if not source:
source = 'default'
result = orig(ui, repo, source, **opts)
# If we do not have the new largefiles for any new heads we pulled, we
# will run into a problem later if we try to merge or rebase with one of
# these heads, so cache the largefiles now direclty into the system
# cache.
ui.status(_("caching new largefiles\n"))
numcached = 0
branches = repo.branchmap()
for branch in branches:
heads = repo.branchheads(branch)
for head in heads:
(cached, missing) = lfcommands.cachelfiles(ui, repo, head)
numcached += len(cached)
ui.status(_("%d largefiles cached\n" % numcached))
return result
示例8: overridepull
def overridepull(orig, ui, repo, source=None, **opts):
revsprepull = len(repo)
if not source:
source = 'default'
repo.lfpullsource = source
if opts.get('rebase', False):
repo._isrebasing = True
try:
if opts.get('update'):
del opts['update']
ui.debug('--update and --rebase are not compatible, ignoring '
'the update flag\n')
del opts['rebase']
cmdutil.bailifchanged(repo)
origpostincoming = commands.postincoming
def _dummy(*args, **kwargs):
pass
commands.postincoming = _dummy
try:
result = commands.pull(ui, repo, source, **opts)
finally:
commands.postincoming = origpostincoming
revspostpull = len(repo)
if revspostpull > revsprepull:
result = result or rebase.rebase(ui, repo)
finally:
repo._isrebasing = False
else:
result = orig(ui, repo, source, **opts)
revspostpull = len(repo)
lfrevs = opts.get('lfrev', [])
if opts.get('all_largefiles'):
lfrevs.append('pulled()')
if lfrevs and revspostpull > revsprepull:
numcached = 0
repo.firstpulled = revsprepull # for pulled() revset expression
try:
for rev in scmutil.revrange(repo, lfrevs):
ui.note(_('pulling largefiles for revision %s\n') % rev)
(cached, missing) = lfcommands.cachelfiles(ui, repo, rev)
numcached += len(cached)
finally:
del repo.firstpulled
ui.status(_("%d largefiles cached\n") % numcached)
return result
示例9: pullrebase
def pullrebase(orig, ui, repo, *args, **opts):
'Call rebase after pull if the latter has been invoked with --rebase'
if opts.get('rebase'):
if opts.get('update'):
del opts['update']
ui.debug('--update and --rebase are not compatible, ignoring '
'the update flag\n')
movemarkfrom = repo['.'].node()
cmdutil.bailifchanged(repo)
revsprepull = len(repo)
origpostincoming = commands.postincoming
def _dummy(*args, **kwargs):
pass
commands.postincoming = _dummy
try:
orig(ui, repo, *args, **opts)
finally:
commands.postincoming = origpostincoming
revspostpull = len(repo)
if revspostpull > revsprepull:
# --rev option from pull conflict with rebase own --rev
# dropping it
if 'rev' in opts:
del opts['rev']
rebase(ui, repo, **opts)
branch = repo[None].branch()
dest = repo[branch].rev()
if dest != repo['.'].rev():
# there was nothing to rebase we force an update
hg.update(repo, dest)
if bookmarks.update(repo, [movemarkfrom], repo['.'].node()):
ui.status(_("updating bookmark %s\n")
% repo._bookmarkcurrent)
else:
if opts.get('tool'):
raise util.Abort(_('--tool can only be used with --rebase'))
orig(ui, repo, *args, **opts)
示例10: _histedit
def _histedit(ui, repo, *freeargs, **opts):
# TODO only abort if we try and histedit mq patches, not just
# blanket if mq patches are applied somewhere
mq = getattr(repo, 'mq', None)
if mq and mq.applied:
raise util.Abort(_('source has mq patches applied'))
# basic argument incompatibility processing
outg = opts.get('outgoing')
cont = opts.get('continue')
abort = opts.get('abort')
force = opts.get('force')
rules = opts.get('commands', '')
revs = opts.get('rev', [])
goal = 'new' # This invocation goal, in new, continue, abort
if force and not outg:
raise util.Abort(_('--force only allowed with --outgoing'))
if cont:
if util.any((outg, abort, revs, freeargs, rules)):
raise util.Abort(_('no arguments allowed with --continue'))
goal = 'continue'
elif abort:
if util.any((outg, revs, freeargs, rules)):
raise util.Abort(_('no arguments allowed with --abort'))
goal = 'abort'
else:
if os.path.exists(os.path.join(repo.path, 'histedit-state')):
raise util.Abort(_('history edit already in progress, try '
'--continue or --abort'))
if outg:
if revs:
raise util.Abort(_('no revisions allowed with --outgoing'))
if len(freeargs) > 1:
raise util.Abort(
_('only one repo argument allowed with --outgoing'))
else:
revs.extend(freeargs)
if len(revs) != 1:
raise util.Abort(
_('histedit requires exactly one ancestor revision'))
if goal == 'continue':
(parentctxnode, rules, keep, topmost, replacements) = readstate(repo)
parentctx = repo[parentctxnode]
parentctx, repl = bootstrapcontinue(ui, repo, parentctx, rules, opts)
replacements.extend(repl)
elif goal == 'abort':
(parentctxnode, rules, keep, topmost, replacements) = readstate(repo)
mapping, tmpnodes, leafs, _ntm = processreplacement(repo, replacements)
ui.debug('restore wc to old parent %s\n' % node.short(topmost))
# check whether we should update away
parentnodes = [c.node() for c in repo[None].parents()]
for n in leafs | set([parentctxnode]):
if n in parentnodes:
hg.clean(repo, topmost)
break
else:
pass
cleanupnode(ui, repo, 'created', tmpnodes)
cleanupnode(ui, repo, 'temp', leafs)
os.unlink(os.path.join(repo.path, 'histedit-state'))
return
else:
cmdutil.checkunfinished(repo)
cmdutil.bailifchanged(repo)
topmost, empty = repo.dirstate.parents()
if outg:
if freeargs:
remote = freeargs[0]
else:
remote = None
root = findoutgoing(ui, repo, remote, force, opts)
else:
rootrevs = list(repo.set('roots(%lr)', revs))
if len(rootrevs) != 1:
raise util.Abort(_('The specified revisions must have '
'exactly one common root'))
root = rootrevs[0].node()
keep = opts.get('keep', False)
revs = between(repo, root, topmost, keep)
if not revs:
raise util.Abort(_('%s is not an ancestor of working directory') %
node.short(root))
ctxs = [repo[r] for r in revs]
if not rules:
rules = '\n'.join([makedesc(c) for c in ctxs])
rules += '\n\n'
rules += editcomment % (node.short(root), node.short(topmost))
rules = ui.edit(rules, ui.username())
# Save edit rules in .hg/histedit-last-edit.txt in case
# the user needs to ask for help after something
# surprising happens.
f = open(repo.join('histedit-last-edit.txt'), 'w')
f.write(rules)
f.close()
else:
#.........这里部分代码省略.........
示例11: rebase
#.........这里部分代码省略.........
if srcf or basef or destf:
raise util.Abort(
_('abort and continue do not allow specifying revisions'))
if opts.get('tool', False):
ui.warn(_('tool option will be ignored\n'))
try:
(originalwd, target, state, skipped, collapsef, keepf,
keepbranchesf, external, activebookmark) = restorestatus(repo)
except error.RepoLookupError:
if abortf:
clearstatus(repo)
repo.ui.warn(_('rebase aborted (no revision is removed,'
' only broken state is cleared)\n'))
return 0
else:
msg = _('cannot continue inconsistent rebase')
hint = _('use "hg rebase --abort" to clear borken state')
raise util.Abort(msg, hint=hint)
if abortf:
return abort(repo, originalwd, target, state)
else:
if srcf and basef:
raise util.Abort(_('cannot specify both a '
'source and a base'))
if revf and basef:
raise util.Abort(_('cannot specify both a '
'revision and a base'))
if revf and srcf:
raise util.Abort(_('cannot specify both a '
'revision and a source'))
cmdutil.checkunfinished(repo)
cmdutil.bailifchanged(repo)
if not destf:
# Destination defaults to the latest revision in the
# current branch
branch = repo[None].branch()
dest = repo[branch]
else:
dest = scmutil.revsingle(repo, destf)
if revf:
rebaseset = scmutil.revrange(repo, revf)
elif srcf:
src = scmutil.revrange(repo, [srcf])
rebaseset = repo.revs('(%ld)::', src)
else:
base = scmutil.revrange(repo, [basef or '.'])
rebaseset = repo.revs(
'(children(ancestor(%ld, %d)) and ::(%ld))::',
base, dest, base)
if rebaseset:
root = min(rebaseset)
else:
root = None
if not rebaseset:
repo.ui.debug('base is ancestor of destination\n')
result = None
elif (not (keepf or obsolete._enabled)
and repo.revs('first(children(%ld) - %ld)',
rebaseset, rebaseset)):
raise util.Abort(
_("can't remove original changesets with"
示例12: histedit
#.........这里部分代码省略.........
parentctx, oldctx, new,
opts, newchildren)
replaced.extend(replaced_)
created.extend(created_)
tmpnodes.extend(tmpnodes_)
elif action not in ('d', 'drop'):
if new != oldctx.node():
replaced.append(oldctx.node())
if new:
if new != oldctx.node():
created.append(new)
parentctx = repo[new]
elif opts.get('abort', False):
if len(parent) != 0:
raise util.Abort('no arguments allowed with --abort')
(parentctxnode, created, replaced, tmpnodes,
existing, rules, keep, tip, ) = readstate(repo)
ui.debug('restore wc to old tip %s\n' % node.hex(tip))
hg.clean(repo, tip)
ui.debug('should strip created nodes %s\n' %
', '.join([node.hex(n)[:12] for n in created]))
ui.debug('should strip temp nodes %s\n' %
', '.join([node.hex(n)[:12] for n in tmpnodes]))
for nodes in (created, tmpnodes, ):
for n in reversed(nodes):
try:
repair.strip(ui, repo, n)
except error.LookupError:
pass
os.unlink(os.path.join(repo.path, 'histedit-state'))
return
else:
bailifchanged(repo)
if os.path.exists(os.path.join(repo.path, 'histedit-state')):
raise util.Abort('history edit already in progress, try '
'--continue or --abort')
tip, empty = repo.dirstate.parents()
if len(parent) != 1:
raise util.Abort('requires exactly one parent revision')
parent = _revsingle(repo, parent[0]).node()
keep = opts.get('keep', False)
revs = between(repo, parent, tip, keep)
ctxs = [repo[r] for r in revs]
existing = [r.node() for r in ctxs]
rules = opts.get('commands', '')
if not rules:
rules = '\n'.join([makedesc(c) for c in ctxs])
rules += editcomment % (node.hex(parent)[:12], node.hex(tip)[:12], )
rules = ui.edit(rules, ui.username())
# Save edit rules in .hg/histedit-last-edit.txt in case
# the user needs to ask for help after something
# surprising happens.
f = open(repo.join('histedit-last-edit.txt'), 'w')
f.write(rules)
f.close()
else:
f = open(rules)
rules = f.read()
f.close()
rules = [l for l in (r.strip() for r in rules.splitlines())
示例13: push
def push(repo, dest, force, revs):
"""push revisions starting at a specified head back to Subversion.
"""
assert not revs, 'designated revisions for push remains unimplemented.'
if hasattr(cmdutil, 'bail_if_changed'):
cmdutil.bail_if_changed(repo)
else:
# Since 1.9 (d68ddccf276b)
cmdutil.bailifchanged(repo)
checkpush = getattr(repo, 'checkpush', None)
if checkpush:
checkpush(force, revs)
ui = repo.ui
old_encoding = util.swap_out_encoding()
# TODO: implement --rev/#rev support
# TODO: do credentials specified in the URL still work?
svnurl = repo.ui.expandpath(dest.svnurl)
svn = dest.svn
meta = repo.svnmeta(svn.uuid, svn.subdir)
# Strategy:
# 1. Find all outgoing commits from this head
if len(repo.parents()) != 1:
ui.status('Cowardly refusing to push branch merge\n')
return 0 # results in nonzero exit status, see hg's commands.py
workingrev = repo.parents()[0]
ui.status('searching for changes\n')
hashes = meta.revmap.hashes()
outgoing = util.outgoing_revisions(repo, hashes, workingrev.node())
if not (outgoing and len(outgoing)):
ui.status('no changes found\n')
return 1 # so we get a sane exit status, see hg's commands.push
while outgoing:
# 2. Commit oldest revision that needs to be pushed
oldest = outgoing.pop(-1)
old_ctx = repo[oldest]
old_pars = old_ctx.parents()
if len(old_pars) != 1:
ui.status('Found a branch merge, this needs discussion and '
'implementation.\n')
return 0 # results in nonzero exit status, see hg's commands.py
# We will commit to svn against this node's parent rev. Any file-level
# conflicts here will result in an error reported by svn.
base_ctx = old_pars[0]
base_revision = hashes[base_ctx.node()][0]
svnbranch = base_ctx.branch()
# Find most recent svn commit we have on this branch.
# This node will become the nearest known ancestor of the pushed rev.
oldtipctx = base_ctx
old_children = oldtipctx.descendants()
seen = set(c.node() for c in old_children)
samebranchchildren = [c for c in old_children if c.branch() == svnbranch
and c.node() in hashes]
if samebranchchildren:
# The following relies on descendants being sorted by rev.
oldtipctx = samebranchchildren[-1]
# All set, so commit now.
try:
pushmod.commit(ui, repo, old_ctx, meta, base_revision, svn)
except pushmod.NoFilesException:
ui.warn("Could not push revision %s because it had no changes in svn.\n" %
old_ctx)
return 1
# 3. Fetch revisions from svn
# TODO: this probably should pass in the source explicitly - rev too?
r = repo.pull(dest, force=force)
assert not r or r == 0
# 4. Find the new head of the target branch
# We expect to get our own new commit back, but we might also get other
# commits that happened since our last pull, or even right after our own
# commit (race).
for c in oldtipctx.descendants():
if c.node() not in seen and c.branch() == svnbranch:
newtipctx = c
# 5. Rebase all children of the currently-pushing rev to the new head
heads = repo.heads(old_ctx.node())
for needs_transplant in heads:
def extrafn(ctx, extra):
if ctx.node() == oldest:
return
extra['branch'] = ctx.branch()
# TODO: can we avoid calling our own rebase wrapper here?
rebase(hgrebase.rebase, ui, repo, svn=True, svnextrafn=extrafn,
svnsourcerev=needs_transplant)
# Reload the repo after the rebase. Do not reuse contexts across this.
newtip = newtipctx.node()
repo = hg.repository(ui, meta.path)
newtipctx = repo[newtip]
# Rewrite the node ids in outgoing to their rebased versions.
rebasemap = dict()
for child in newtipctx.descendants():
rebasesrc = child.extra().get('rebase_source')
if rebasesrc:
rebasemap[node.bin(rebasesrc)] = child.node()
outgoing = [rebasemap.get(n) or n for n in outgoing]
# TODO: stop constantly creating the SVNMeta instances.
#.........这里部分代码省略.........
示例14: do_backout
def do_backout(ui, repo, rev, handle_change, commit_change, use_mq=False, reverse_order=False, **opts):
if not opts.get('force'):
ui.status('checking for uncommitted changes\n')
cmdutil.bailifchanged(repo)
backout = not opts.get('apply')
desc = {'action': 'backout',
'Actioned': 'Backed out',
'actioning': 'backing out',
'name': 'backout'
}
if not backout:
desc = {'action': 'apply',
'Actioned': 'Reapplied',
'actioning': 'Reapplying',
'name': 'patch'
}
rev = scmutil.revrange(repo, rev)
if len(rev) == 0:
raise util.Abort('at least one revision required')
csets = [repo[r] for r in rev]
csets.sort(reverse=reverse_order, key=lambda cset: cset.rev())
new_opts = opts.copy()
def bugs_suffix(bugs):
if len(bugs) == 0:
return ''
elif len(bugs) == 1:
return ' (bug ' + list(bugs)[0] + ')'
else:
return ' (' + ', '.join(map(lambda b: 'bug %s' % b, bugs)) + ')'
def parse_bugs(msg):
bugs = set()
m = BUG_RE.search(msg)
if m:
bugs.add(m.group(2))
return bugs
def apply_change(node, reverse, push_patch=True, name=None):
p1, p2 = repo.changelog.parents(node)
if p2 != nullid:
raise util.Abort('cannot %s a merge changeset' % desc['action'])
opts = mdiff.defaultopts
opts.git = True
rpatch = StringIO.StringIO()
orig, mod = (node, p1) if reverse else (p1, node)
for chunk in patch.diff(repo, node1=orig, node2=mod, opts=opts):
rpatch.write(chunk)
rpatch.seek(0)
saved_stdin = None
try:
save_fin = ui.fin
ui.fin = rpatch
except:
# Old versions of hg did not use the ui.fin mechanism
saved_stdin = sys.stdin
sys.stdin = rpatch
handle_change(desc, node, qimport=(use_mq and new_opts.get('nopush')))
if saved_stdin is None:
ui.fin = save_fin
else:
sys.stdin = saved_stdin
allbugs = set()
messages = []
for cset in csets:
# Hunt down original description if we might want to use it
orig_desc = None
orig_desc_cset = None
orig_author = None
r = cset
while len(csets) == 1 or not opts.get('single'):
ui.debug("Parsing message for %s\n" % short(r.node()))
m = backout_re.match(r.description())
if m:
ui.debug(" looks like a backout of %s\n" % m.group(1))
else:
m = reapply_re.match(r.description())
if m:
ui.debug(" looks like a reapply of %s\n" % m.group(1))
else:
ui.debug(" looks like the original description\n")
orig_desc = r.description()
orig_desc_cset = r
orig_author = r.user()
break
r = repo[m.group(1)]
bugs = parse_bugs(cset.description())
allbugs.update(bugs)
node = cset.node()
shortnode = short(node)
ui.status('%s %s\n' % (desc['actioning'], shortnode))
#.........这里部分代码省略.........
示例15: histedit
def histedit(ui, repo, *freeargs, **opts):
"""interactively edit changeset history
This command edits changesets between ANCESTOR and the parent of
the working directory.
With --outgoing, this edits changesets not found in the
destination repository. If URL of the destination is omitted, the
'default-push' (or 'default') path will be used.
For safety, this command is aborted, also if there are ambiguous
outgoing revisions which may confuse users: for example, there are
multiple branches containing outgoing revisions.
Use "min(outgoing() and ::.)" or similar revset specification
instead of --outgoing to specify edit target revision exactly in
such ambiguous situation. See :hg:`help revsets` for detail about
selecting revisions.
"""
# TODO only abort if we try and histedit mq patches, not just
# blanket if mq patches are applied somewhere
mq = getattr(repo, "mq", None)
if mq and mq.applied:
raise util.Abort(_("source has mq patches applied"))
# basic argument incompatibility processing
outg = opts.get("outgoing")
cont = opts.get("continue")
abort = opts.get("abort")
force = opts.get("force")
rules = opts.get("commands", "")
revs = opts.get("rev", [])
goal = "new" # This invocation goal, in new, continue, abort
if force and not outg:
raise util.Abort(_("--force only allowed with --outgoing"))
if cont:
if util.any((outg, abort, revs, freeargs, rules)):
raise util.Abort(_("no arguments allowed with --continue"))
goal = "continue"
elif abort:
if util.any((outg, revs, freeargs, rules)):
raise util.Abort(_("no arguments allowed with --abort"))
goal = "abort"
else:
if os.path.exists(os.path.join(repo.path, "histedit-state")):
raise util.Abort(_("history edit already in progress, try " "--continue or --abort"))
if outg:
if revs:
raise util.Abort(_("no revisions allowed with --outgoing"))
if len(freeargs) > 1:
raise util.Abort(_("only one repo argument allowed with --outgoing"))
else:
revs.extend(freeargs)
if len(revs) != 1:
raise util.Abort(_("histedit requires exactly one ancestor revision"))
if goal == "continue":
(parentctxnode, rules, keep, topmost, replacements) = readstate(repo)
parentctx = repo[parentctxnode]
parentctx, repl = bootstrapcontinue(ui, repo, parentctx, rules, opts)
replacements.extend(repl)
elif goal == "abort":
(parentctxnode, rules, keep, topmost, replacements) = readstate(repo)
mapping, tmpnodes, leafs, _ntm = processreplacement(repo, replacements)
ui.debug("restore wc to old parent %s\n" % node.short(topmost))
# check whether we should update away
parentnodes = [c.node() for c in repo[None].parents()]
for n in leafs | set([parentctxnode]):
if n in parentnodes:
hg.clean(repo, topmost)
break
else:
pass
cleanupnode(ui, repo, "created", tmpnodes)
cleanupnode(ui, repo, "temp", leafs)
os.unlink(os.path.join(repo.path, "histedit-state"))
return
else:
cmdutil.checkunfinished(repo)
cmdutil.bailifchanged(repo)
topmost, empty = repo.dirstate.parents()
if outg:
if freeargs:
remote = freeargs[0]
else:
remote = None
root = findoutgoing(ui, repo, remote, force, opts)
else:
root = revs[0]
root = scmutil.revsingle(repo, root).node()
keep = opts.get("keep", False)
revs = between(repo, root, topmost, keep)
if not revs:
raise util.Abort(_("%s is not an ancestor of working directory") % node.short(root))
ctxs = [repo[r] for r in revs]
if not rules:
rules = "\n".join([makedesc(c) for c in ctxs])
#.........这里部分代码省略.........