equal
deleted
inserted
replaced
13 import sys |
13 import sys |
14 |
14 |
15 from .i18n import _ |
15 from .i18n import _ |
16 from .node import ( |
16 from .node import ( |
17 hex, |
17 hex, |
18 nullid, |
|
19 nullrev, |
18 nullrev, |
20 short, |
19 short, |
21 wdirhex, |
|
22 wdirrev, |
20 wdirrev, |
23 ) |
21 ) |
24 from .pycompat import open |
22 from .pycompat import open |
25 from . import ( |
23 from . import ( |
26 archival, |
24 archival, |
484 return b'%d+' % ctx.p1().rev() |
482 return b'%d+' % ctx.p1().rev() |
485 else: |
483 else: |
486 return b'%d ' % rev |
484 return b'%d ' % rev |
487 |
485 |
488 def formathex(h): |
486 def formathex(h): |
489 if h == wdirhex: |
487 if h == repo.nodeconstants.wdirhex: |
490 return b'%s+' % shorthex(hex(ctx.p1().node())) |
488 return b'%s+' % shorthex(hex(ctx.p1().node())) |
491 else: |
489 else: |
492 return b'%s ' % shorthex(h) |
490 return b'%s ' % shorthex(h) |
493 |
491 |
494 else: |
492 else: |
807 raise error.InputError( |
805 raise error.InputError( |
808 _(b'cannot backout change that is not an ancestor') |
806 _(b'cannot backout change that is not an ancestor') |
809 ) |
807 ) |
810 |
808 |
811 p1, p2 = repo.changelog.parents(node) |
809 p1, p2 = repo.changelog.parents(node) |
812 if p1 == nullid: |
810 if p1 == repo.nullid: |
813 raise error.InputError(_(b'cannot backout a change with no parents')) |
811 raise error.InputError(_(b'cannot backout a change with no parents')) |
814 if p2 != nullid: |
812 if p2 != repo.nullid: |
815 if not opts.get(b'parent'): |
813 if not opts.get(b'parent'): |
816 raise error.InputError(_(b'cannot backout a merge changeset')) |
814 raise error.InputError(_(b'cannot backout a merge changeset')) |
817 p = repo.lookup(opts[b'parent']) |
815 p = repo.lookup(opts[b'parent']) |
818 if p not in (p1, p2): |
816 if p not in (p1, p2): |
819 raise error.InputError( |
817 raise error.InputError( |
1083 b'start a new bisect to fix' |
1081 b'start a new bisect to fix' |
1084 ) |
1082 ) |
1085 ) |
1083 ) |
1086 else: |
1084 else: |
1087 node, p2 = repo.dirstate.parents() |
1085 node, p2 = repo.dirstate.parents() |
1088 if p2 != nullid: |
1086 if p2 != repo.nullid: |
1089 raise error.StateError(_(b'current bisect revision is a merge')) |
1087 raise error.StateError(_(b'current bisect revision is a merge')) |
1090 if rev: |
1088 if rev: |
1091 if not nodes: |
1089 if not nodes: |
1092 raise error.Abort(_(b'empty revision set')) |
1090 raise error.Abort(_(b'empty revision set')) |
1093 node = repo[nodes[-1]].node() |
1091 node = repo[nodes[-1]].node() |
4845 Returns 0 on success, 1 if there are unresolved files. |
4843 Returns 0 on success, 1 if there are unresolved files. |
4846 """ |
4844 """ |
4847 |
4845 |
4848 opts = pycompat.byteskwargs(opts) |
4846 opts = pycompat.byteskwargs(opts) |
4849 abort = opts.get(b'abort') |
4847 abort = opts.get(b'abort') |
4850 if abort and repo.dirstate.p2() == nullid: |
4848 if abort and repo.dirstate.p2() == repo.nullid: |
4851 cmdutil.wrongtooltocontinue(repo, _(b'merge')) |
4849 cmdutil.wrongtooltocontinue(repo, _(b'merge')) |
4852 cmdutil.check_incompatible_arguments(opts, b'abort', [b'rev', b'preview']) |
4850 cmdutil.check_incompatible_arguments(opts, b'abort', [b'rev', b'preview']) |
4853 if abort: |
4851 if abort: |
4854 state = cmdutil.getunfinishedstate(repo) |
4852 state = cmdutil.getunfinishedstate(repo) |
4855 if state and state._opname != b'merge': |
4853 if state and state._opname != b'merge': |
5070 else: |
5068 else: |
5071 p = [cp.node() for cp in ctx.parents()] |
5069 p = [cp.node() for cp in ctx.parents()] |
5072 |
5070 |
5073 displayer = logcmdutil.changesetdisplayer(ui, repo, opts) |
5071 displayer = logcmdutil.changesetdisplayer(ui, repo, opts) |
5074 for n in p: |
5072 for n in p: |
5075 if n != nullid: |
5073 if n != repo.nullid: |
5076 displayer.show(repo[n]) |
5074 displayer.show(repo[n]) |
5077 displayer.close() |
5075 displayer.close() |
5078 |
5076 |
5079 |
5077 |
5080 @command( |
5078 @command( |
6103 return 0 |
6101 return 0 |
6104 |
6102 |
6105 with repo.wlock(): |
6103 with repo.wlock(): |
6106 ms = mergestatemod.mergestate.read(repo) |
6104 ms = mergestatemod.mergestate.read(repo) |
6107 |
6105 |
6108 if not (ms.active() or repo.dirstate.p2() != nullid): |
6106 if not (ms.active() or repo.dirstate.p2() != repo.nullid): |
6109 raise error.StateError( |
6107 raise error.StateError( |
6110 _(b'resolve command not applicable when not merging') |
6108 _(b'resolve command not applicable when not merging') |
6111 ) |
6109 ) |
6112 |
6110 |
6113 wctx = repo[None] |
6111 wctx = repo[None] |
6221 except OSError as inst: |
6219 except OSError as inst: |
6222 if inst.errno != errno.ENOENT: |
6220 if inst.errno != errno.ENOENT: |
6223 raise |
6221 raise |
6224 |
6222 |
6225 ms.commit() |
6223 ms.commit() |
6226 branchmerge = repo.dirstate.p2() != nullid |
6224 branchmerge = repo.dirstate.p2() != repo.nullid |
6227 mergestatemod.recordupdates(repo, ms.actions(), branchmerge, None) |
6225 mergestatemod.recordupdates(repo, ms.actions(), branchmerge, None) |
6228 |
6226 |
6229 if not didwork and pats: |
6227 if not didwork and pats: |
6230 hint = None |
6228 hint = None |
6231 if not any([p for p in pats if p.find(b':') >= 0]): |
6229 if not any([p for p in pats if p.find(b':') >= 0]): |
6313 if opts.get(b"date"): |
6311 if opts.get(b"date"): |
6314 cmdutil.check_incompatible_arguments(opts, b'date', [b'rev']) |
6312 cmdutil.check_incompatible_arguments(opts, b'date', [b'rev']) |
6315 opts[b"rev"] = cmdutil.finddate(ui, repo, opts[b"date"]) |
6313 opts[b"rev"] = cmdutil.finddate(ui, repo, opts[b"date"]) |
6316 |
6314 |
6317 parent, p2 = repo.dirstate.parents() |
6315 parent, p2 = repo.dirstate.parents() |
6318 if not opts.get(b'rev') and p2 != nullid: |
6316 if not opts.get(b'rev') and p2 != repo.nullid: |
6319 # revert after merge is a trap for new users (issue2915) |
6317 # revert after merge is a trap for new users (issue2915) |
6320 raise error.InputError( |
6318 raise error.InputError( |
6321 _(b'uncommitted merge with no revision specified'), |
6319 _(b'uncommitted merge with no revision specified'), |
6322 hint=_(b"use 'hg update' or see 'hg help revert'"), |
6320 hint=_(b"use 'hg update' or see 'hg help revert'"), |
6323 ) |
6321 ) |
6333 or opts.get(b'exclude') |
6331 or opts.get(b'exclude') |
6334 or opts.get(b'all') |
6332 or opts.get(b'all') |
6335 or opts.get(b'interactive') |
6333 or opts.get(b'interactive') |
6336 ): |
6334 ): |
6337 msg = _(b"no files or directories specified") |
6335 msg = _(b"no files or directories specified") |
6338 if p2 != nullid: |
6336 if p2 != repo.nullid: |
6339 hint = _( |
6337 hint = _( |
6340 b"uncommitted merge, use --all to discard all changes," |
6338 b"uncommitted merge, use --all to discard all changes," |
6341 b" or 'hg update -C .' to abort the merge" |
6339 b" or 'hg update -C .' to abort the merge" |
6342 ) |
6340 ) |
6343 raise error.InputError(msg, hint=hint) |
6341 raise error.InputError(msg, hint=hint) |
7394 expectedtype = b'global' |
7392 expectedtype = b'global' |
7395 |
7393 |
7396 for n in names: |
7394 for n in names: |
7397 if repo.tagtype(n) == b'global': |
7395 if repo.tagtype(n) == b'global': |
7398 alltags = tagsmod.findglobaltags(ui, repo) |
7396 alltags = tagsmod.findglobaltags(ui, repo) |
7399 if alltags[n][0] == nullid: |
7397 if alltags[n][0] == repo.nullid: |
7400 raise error.InputError( |
7398 raise error.InputError( |
7401 _(b"tag '%s' is already removed") % n |
7399 _(b"tag '%s' is already removed") % n |
7402 ) |
7400 ) |
7403 if not repo.tagtype(n): |
7401 if not repo.tagtype(n): |
7404 raise error.InputError(_(b"tag '%s' does not exist") % n) |
7402 raise error.InputError(_(b"tag '%s' does not exist") % n) |
7421 raise error.InputError( |
7419 raise error.InputError( |
7422 _(b"tag '%s' already exists (use -f to force)") % n |
7420 _(b"tag '%s' already exists (use -f to force)") % n |
7423 ) |
7421 ) |
7424 if not opts.get(b'local'): |
7422 if not opts.get(b'local'): |
7425 p1, p2 = repo.dirstate.parents() |
7423 p1, p2 = repo.dirstate.parents() |
7426 if p2 != nullid: |
7424 if p2 != repo.nullid: |
7427 raise error.StateError(_(b'uncommitted merge')) |
7425 raise error.StateError(_(b'uncommitted merge')) |
7428 bheads = repo.branchheads() |
7426 bheads = repo.branchheads() |
7429 if not opts.get(b'force') and bheads and p1 not in bheads: |
7427 if not opts.get(b'force') and bheads and p1 not in bheads: |
7430 raise error.InputError( |
7428 raise error.InputError( |
7431 _( |
7429 _( |