Mercurial > evolve
annotate hgext3rd/evolve/cmdrewrite.py @ 3514:498f782ccb4b
compat: add compat layer for date related functions
author | Boris Feld <boris.feld@octobus.net> |
---|---|
date | Sat, 03 Mar 2018 23:17:26 -0500 |
parents | 6b4272bbb65d |
children | 7fa887cb1a6e |
rev | line source |
---|---|
2772
394b836e475b
commands: rewrite the 'evocommands' module to 'cmdrewrite'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2771
diff
changeset
|
1 # Module dedicated to host history rewriting commands |
2724
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
2 # |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
3 # Copyright 2017 Octobus <contact@octobus.net> |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
4 # |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
6 # GNU General Public License version 2 or any later version. |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
7 |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
8 # Status: Stabilization of the API in progress |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
9 # |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
10 # The final set of command should go into core. |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
11 |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
12 from __future__ import absolute_import |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
13 |
2763
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
14 import random |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
15 |
2724
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
16 from mercurial import ( |
2762
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
17 bookmarks as bookmarksmod, |
2724
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
18 cmdutil, |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
19 commands, |
2725
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
20 context, |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
21 copies, |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
22 error, |
2760
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
23 hg, |
2725
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
24 lock as lockmod, |
3453
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
25 merge, |
2725
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
26 node, |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
27 obsolete, |
2941
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
28 patch, |
2725
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
29 phases, |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
30 scmutil, |
2724
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
31 util, |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
32 ) |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
33 |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
34 from mercurial.i18n import _ |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
35 |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
36 from . import ( |
2763
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
37 compat, |
3457
82e9f9603b1b
evolvestate: rename the file to state.py and class name to cmdstate
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3456
diff
changeset
|
38 state, |
2724
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
39 exthelper, |
2756
f4dd6e6d4c73
rewriteutil: create a rewriteutil module to host utility function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2752
diff
changeset
|
40 rewriteutil, |
2763
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
41 utility, |
2724
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
42 ) |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
43 |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
44 eh = exthelper.exthelper() |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
45 |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
46 walkopts = commands.walkopts |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
47 commitopts = commands.commitopts |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
48 commitopts2 = commands.commitopts2 |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
49 mergetoolopts = commands.mergetoolopts |
2941
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
50 stringio = util.stringio |
2724
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
51 |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
52 # option added by evolve |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
53 |
3283
039c4b8dc3ed
obsnote: warn if user try to store a note in obsmarker on an older hg
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3271
diff
changeset
|
54 def _checknotesize(ui, opts): |
3213
7bc587557e4f
cmdrewrite: add a utility function to make sure note is of valid format
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2949
diff
changeset
|
55 """ make sure note is of valid format """ |
7bc587557e4f
cmdrewrite: add a utility function to make sure note is of valid format
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2949
diff
changeset
|
56 |
7bc587557e4f
cmdrewrite: add a utility function to make sure note is of valid format
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2949
diff
changeset
|
57 note = opts.get('note') |
7bc587557e4f
cmdrewrite: add a utility function to make sure note is of valid format
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2949
diff
changeset
|
58 if not note: |
7bc587557e4f
cmdrewrite: add a utility function to make sure note is of valid format
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2949
diff
changeset
|
59 return |
7bc587557e4f
cmdrewrite: add a utility function to make sure note is of valid format
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2949
diff
changeset
|
60 |
3283
039c4b8dc3ed
obsnote: warn if user try to store a note in obsmarker on an older hg
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3271
diff
changeset
|
61 if not compat.isobsnotesupported(): |
039c4b8dc3ed
obsnote: warn if user try to store a note in obsmarker on an older hg
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3271
diff
changeset
|
62 ui.warn(_("current hg version does not support storing" |
039c4b8dc3ed
obsnote: warn if user try to store a note in obsmarker on an older hg
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3271
diff
changeset
|
63 " note in obsmarker\n")) |
3213
7bc587557e4f
cmdrewrite: add a utility function to make sure note is of valid format
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2949
diff
changeset
|
64 if len(note) > 255: |
7bc587557e4f
cmdrewrite: add a utility function to make sure note is of valid format
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2949
diff
changeset
|
65 raise error.Abort(_("cannot store a note of more than 255 bytes")) |
7bc587557e4f
cmdrewrite: add a utility function to make sure note is of valid format
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2949
diff
changeset
|
66 if '\n' in note: |
7bc587557e4f
cmdrewrite: add a utility function to make sure note is of valid format
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2949
diff
changeset
|
67 raise error.Abort(_("note cannot contain a newline")) |
7bc587557e4f
cmdrewrite: add a utility function to make sure note is of valid format
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2949
diff
changeset
|
68 |
2724
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
69 def _resolveoptions(ui, opts): |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
70 """modify commit options dict to handle related options |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
71 |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
72 For now, all it does is figure out the commit date: respect -D unless |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
73 -d was supplied. |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
74 """ |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
75 # N.B. this is extremely similar to setupheaderopts() in mq.py |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
76 if not opts.get('date') and opts.get('current_date'): |
3514
498f782ccb4b
compat: add compat layer for date related functions
Boris Feld <boris.feld@octobus.net>
parents:
3506
diff
changeset
|
77 opts['date'] = '%d %d' % compat.makedate() |
2724
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
78 if not opts.get('user') and opts.get('current_user'): |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
79 opts['user'] = ui.username() |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
80 |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
81 commitopts3 = [ |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
82 ('D', 'current-date', None, |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
83 _('record the current date as commit date')), |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
84 ('U', 'current-user', None, |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
85 _('record the current user as committer')), |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
86 ] |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
87 |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
88 interactiveopt = [['i', 'interactive', None, _('use interactive mode')]] |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
89 |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
90 @eh.command( |
3231
996dabc4224b
help: promote "amend" to important command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3230
diff
changeset
|
91 '^amend|refresh', |
2724
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
92 [('A', 'addremove', None, |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
93 _('mark new/missing files as added/removed before committing')), |
2730
7fbb7a5d359f
uncommit: expose the feature with a '--extract' to amend
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2729
diff
changeset
|
94 ('a', 'all', False, _("match all files")), |
2724
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
95 ('e', 'edit', False, _('invoke editor on commit messages')), |
2730
7fbb7a5d359f
uncommit: expose the feature with a '--extract' to amend
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2729
diff
changeset
|
96 ('', 'extract', False, _('extract changes from the commit to the working copy')), |
2724
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
97 ('', 'close-branch', None, |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
98 _('mark a branch as closed, hiding it from the branch list')), |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
99 ('s', 'secret', None, _('use the secret phase for committing')), |
3221
9f3521cc4c90
amend: add support for storing a note in obsmarker
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3220
diff
changeset
|
100 ('n', 'note', '', _('store a note on amend')), |
2724
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
101 ] + walkopts + commitopts + commitopts2 + commitopts3 + interactiveopt, |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
102 _('[OPTION]... [FILE]...')) |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
103 def amend(ui, repo, *pats, **opts): |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
104 """combine a changeset with updates and replace it with a new one |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
105 |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
106 Commits a new changeset incorporating both the changes to the given files |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
107 and all the changes from the current parent changeset into the repository. |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
108 |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
109 See :hg:`commit` for details about committing changes. |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
110 |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
111 If you don't specify -m, the parent's message will be reused. |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
112 |
3296
b834cb64f779
amend: fix a typo in amend help text related to the extract option
Boris Feld <boris.feld@octobus.net>
parents:
3283
diff
changeset
|
113 If --extract is specified, the behavior of `hg amend` is reversed: Changes |
2730
7fbb7a5d359f
uncommit: expose the feature with a '--extract' to amend
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2729
diff
changeset
|
114 to selected files in the checked out revision appear again as uncommitted |
7fbb7a5d359f
uncommit: expose the feature with a '--extract' to amend
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2729
diff
changeset
|
115 changed in the working directory. |
7fbb7a5d359f
uncommit: expose the feature with a '--extract' to amend
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2729
diff
changeset
|
116 |
2724
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
117 Returns 0 on success, 1 if nothing changed. |
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
118 """ |
3283
039c4b8dc3ed
obsnote: warn if user try to store a note in obsmarker on an older hg
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3271
diff
changeset
|
119 _checknotesize(ui, opts) |
2724
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
120 opts = opts.copy() |
2730
7fbb7a5d359f
uncommit: expose the feature with a '--extract' to amend
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2729
diff
changeset
|
121 if opts.get('extract'): |
7fbb7a5d359f
uncommit: expose the feature with a '--extract' to amend
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2729
diff
changeset
|
122 return uncommit(ui, repo, *pats, **opts) |
7fbb7a5d359f
uncommit: expose the feature with a '--extract' to amend
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2729
diff
changeset
|
123 else: |
7fbb7a5d359f
uncommit: expose the feature with a '--extract' to amend
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2729
diff
changeset
|
124 if opts.pop('all', False): |
7fbb7a5d359f
uncommit: expose the feature with a '--extract' to amend
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2729
diff
changeset
|
125 # add an include for all |
7fbb7a5d359f
uncommit: expose the feature with a '--extract' to amend
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2729
diff
changeset
|
126 include = list(opts.get('include')) |
7fbb7a5d359f
uncommit: expose the feature with a '--extract' to amend
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2729
diff
changeset
|
127 include.append('re:.*') |
7fbb7a5d359f
uncommit: expose the feature with a '--extract' to amend
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2729
diff
changeset
|
128 edit = opts.pop('edit', False) |
7fbb7a5d359f
uncommit: expose the feature with a '--extract' to amend
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2729
diff
changeset
|
129 log = opts.get('logfile') |
7fbb7a5d359f
uncommit: expose the feature with a '--extract' to amend
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2729
diff
changeset
|
130 opts['amend'] = True |
7fbb7a5d359f
uncommit: expose the feature with a '--extract' to amend
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2729
diff
changeset
|
131 _resolveoptions(ui, opts) |
7fbb7a5d359f
uncommit: expose the feature with a '--extract' to amend
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2729
diff
changeset
|
132 _alias, commitcmd = cmdutil.findcmd('commit', commands.table) |
2787
ebca049e8ca9
amend: use precheck to validate revision
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2786
diff
changeset
|
133 try: |
ebca049e8ca9
amend: use precheck to validate revision
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2786
diff
changeset
|
134 wlock = repo.wlock() |
ebca049e8ca9
amend: use precheck to validate revision
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2786
diff
changeset
|
135 lock = repo.lock() |
3452
8275ef099135
amend: query the wdir parent after taking lock (issue5266)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3451
diff
changeset
|
136 if not (edit or opts['message'] or log): |
8275ef099135
amend: query the wdir parent after taking lock (issue5266)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3451
diff
changeset
|
137 opts['message'] = repo['.'].description() |
2787
ebca049e8ca9
amend: use precheck to validate revision
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2786
diff
changeset
|
138 rewriteutil.precheck(repo, [repo['.'].rev()], action='amend') |
ebca049e8ca9
amend: use precheck to validate revision
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2786
diff
changeset
|
139 return commitcmd[0](ui, repo, *pats, **opts) |
ebca049e8ca9
amend: use precheck to validate revision
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2786
diff
changeset
|
140 finally: |
ebca049e8ca9
amend: use precheck to validate revision
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2786
diff
changeset
|
141 lockmod.release(lock, wlock) |
2725
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
142 |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
143 def _touchedbetween(repo, source, dest, match=None): |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
144 touched = set() |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
145 for files in repo.status(source, dest, match=match)[:3]: |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
146 touched.update(files) |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
147 return touched |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
148 |
2728
3c371aa16cb9
uncommit: add support for --user and --date
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2727
diff
changeset
|
149 def _commitfiltered(repo, ctx, match, target=None, message=None, user=None, |
3c371aa16cb9
uncommit: add support for --user and --date
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2727
diff
changeset
|
150 date=None): |
2725
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
151 """Recommit ctx with changed files not in match. Return the new |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
152 node identifier, or None if nothing changed. |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
153 """ |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
154 base = ctx.p1() |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
155 if target is None: |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
156 target = base |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
157 # ctx |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
158 initialfiles = _touchedbetween(repo, base, ctx) |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
159 if base == target: |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
160 affected = set(f for f in initialfiles if match(f)) |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
161 newcontent = set() |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
162 else: |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
163 affected = _touchedbetween(repo, target, ctx, match=match) |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
164 newcontent = _touchedbetween(repo, target, base, match=match) |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
165 # The commit touchs all existing files |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
166 # + all file that needs a new content |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
167 # - the file affected bny uncommit with the same content than base. |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
168 files = (initialfiles - affected) | newcontent |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
169 if not newcontent and files == initialfiles: |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
170 return None |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
171 |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
172 # Filter copies |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
173 copied = copies.pathcopies(target, ctx) |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
174 copied = dict((dst, src) for dst, src in copied.iteritems() |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
175 if dst in files) |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
176 |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
177 def filectxfn(repo, memctx, path, contentctx=ctx, redirect=newcontent): |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
178 if path in redirect: |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
179 return filectxfn(repo, memctx, path, contentctx=target, redirect=()) |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
180 if path not in contentctx: |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
181 return None |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
182 fctx = contentctx[path] |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
183 flags = fctx.flags() |
3298
f4b06f44d274
memfilectx: changectx argument is not mandatory
Boris Feld <boris.feld@octobus.net>
parents:
3296
diff
changeset
|
184 mctx = compat.memfilectx(repo, memctx, fctx, flags, copied, path) |
2725
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
185 return mctx |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
186 |
2727
f7d44441dfd3
uncommit: add support for --message and --logfile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2726
diff
changeset
|
187 if message is None: |
f7d44441dfd3
uncommit: add support for --message and --logfile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2726
diff
changeset
|
188 message = ctx.description() |
2728
3c371aa16cb9
uncommit: add support for --user and --date
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2727
diff
changeset
|
189 if not user: |
3c371aa16cb9
uncommit: add support for --user and --date
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2727
diff
changeset
|
190 user = ctx.user() |
3c371aa16cb9
uncommit: add support for --user and --date
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2727
diff
changeset
|
191 if not date: |
3c371aa16cb9
uncommit: add support for --user and --date
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2727
diff
changeset
|
192 date = ctx.date() |
2725
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
193 new = context.memctx(repo, |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
194 parents=[base.node(), node.nullid], |
2727
f7d44441dfd3
uncommit: add support for --message and --logfile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2726
diff
changeset
|
195 text=message, |
2725
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
196 files=files, |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
197 filectxfn=filectxfn, |
2728
3c371aa16cb9
uncommit: add support for --user and --date
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2727
diff
changeset
|
198 user=user, |
3c371aa16cb9
uncommit: add support for --user and --date
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2727
diff
changeset
|
199 date=date, |
2725
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
200 extra=ctx.extra()) |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
201 # commitctx always create a new revision, no need to check |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
202 newid = repo.commitctx(new) |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
203 return newid |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
204 |
2943
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
205 def _uncommitdirstate(repo, oldctx, match, interactive): |
2725
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
206 """Fix the dirstate after switching the working directory from |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
207 oldctx to a copy of oldctx not containing changed files matched by |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
208 match. |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
209 """ |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
210 ctx = repo['.'] |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
211 ds = repo.dirstate |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
212 copies = dict(ds.copies()) |
2943
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
213 if interactive: |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
214 # In interactive cases, we will find the status between oldctx and ctx |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
215 # and considering only the files which are changed between oldctx and |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
216 # ctx, and the status of what changed between oldctx and ctx will help |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
217 # us in defining the exact behavior |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
218 m, a, r = repo.status(oldctx, ctx, match=match)[:3] |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
219 for f in m: |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
220 # These are files which are modified between oldctx and ctx which |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
221 # contains two cases: 1) Were modified in oldctx and some |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
222 # modifications are uncommitted |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
223 # 2) Were added in oldctx but some part is uncommitted (this cannot |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
224 # contain the case when added files are uncommitted completely as |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
225 # that will result in status as removed not modified.) |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
226 # Also any modifications to a removed file will result the status as |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
227 # added, so we have only two cases. So in either of the cases, the |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
228 # resulting status can be modified or clean. |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
229 if ds[f] == 'r': |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
230 # But the file is removed in the working directory, leaving that |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
231 # as removed |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
232 continue |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
233 ds.normallookup(f) |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
234 |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
235 for f in a: |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
236 # These are the files which are added between oldctx and ctx(new |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
237 # one), which means the files which were removed in oldctx |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
238 # but uncommitted completely while making the ctx |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
239 # This file should be marked as removed if the working directory |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
240 # does not adds it back. If it's adds it back, we do a normallookup. |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
241 # The file can't be removed in working directory, because it was |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
242 # removed in oldctx |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
243 if ds[f] == 'a': |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
244 ds.normallookup(f) |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
245 continue |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
246 ds.remove(f) |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
247 |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
248 for f in r: |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
249 # These are files which are removed between oldctx and ctx, which |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
250 # means the files which were added in oldctx and were completely |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
251 # uncommitted in ctx. If a added file is partially uncommitted, that |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
252 # would have resulted in modified status, not removed. |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
253 # So a file added in a commit, and uncommitting that addition must |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
254 # result in file being stated as unknown. |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
255 if ds[f] == 'r': |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
256 # The working directory say it's removed, so lets make the file |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
257 # unknown |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
258 ds.drop(f) |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
259 continue |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
260 ds.add(f) |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
261 else: |
2942
10194206acc7
uncommit: pre-indent a block in if-True
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2941
diff
changeset
|
262 m, a, r = repo.status(oldctx.p1(), oldctx, match=match)[:3] |
10194206acc7
uncommit: pre-indent a block in if-True
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2941
diff
changeset
|
263 for f in m: |
10194206acc7
uncommit: pre-indent a block in if-True
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2941
diff
changeset
|
264 if ds[f] == 'r': |
10194206acc7
uncommit: pre-indent a block in if-True
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2941
diff
changeset
|
265 # modified + removed -> removed |
10194206acc7
uncommit: pre-indent a block in if-True
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2941
diff
changeset
|
266 continue |
10194206acc7
uncommit: pre-indent a block in if-True
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2941
diff
changeset
|
267 ds.normallookup(f) |
2725
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
268 |
2942
10194206acc7
uncommit: pre-indent a block in if-True
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2941
diff
changeset
|
269 for f in a: |
10194206acc7
uncommit: pre-indent a block in if-True
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2941
diff
changeset
|
270 if ds[f] == 'r': |
10194206acc7
uncommit: pre-indent a block in if-True
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2941
diff
changeset
|
271 # added + removed -> unknown |
10194206acc7
uncommit: pre-indent a block in if-True
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2941
diff
changeset
|
272 ds.drop(f) |
10194206acc7
uncommit: pre-indent a block in if-True
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2941
diff
changeset
|
273 elif ds[f] != 'a': |
10194206acc7
uncommit: pre-indent a block in if-True
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2941
diff
changeset
|
274 ds.add(f) |
2725
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
275 |
2942
10194206acc7
uncommit: pre-indent a block in if-True
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2941
diff
changeset
|
276 for f in r: |
10194206acc7
uncommit: pre-indent a block in if-True
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2941
diff
changeset
|
277 if ds[f] == 'a': |
10194206acc7
uncommit: pre-indent a block in if-True
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2941
diff
changeset
|
278 # removed + added -> normal |
10194206acc7
uncommit: pre-indent a block in if-True
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2941
diff
changeset
|
279 ds.normallookup(f) |
10194206acc7
uncommit: pre-indent a block in if-True
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2941
diff
changeset
|
280 elif ds[f] != 'r': |
10194206acc7
uncommit: pre-indent a block in if-True
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2941
diff
changeset
|
281 ds.remove(f) |
2725
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
282 |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
283 # Merge old parent and old working dir copies |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
284 oldcopies = {} |
2943
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
285 if interactive: |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
286 # Interactive had different meaning of the variables so restoring the |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
287 # original meaning to use them |
25576132cb30
uncommit: fix the dirstate handling in `uncommit -i`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2942
diff
changeset
|
288 m, a, r = repo.status(oldctx.p1(), oldctx, match=match)[:3] |
2725
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
289 for f in (m + a): |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
290 src = oldctx[f].renamed() |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
291 if src: |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
292 oldcopies[f] = src[0] |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
293 oldcopies.update(copies) |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
294 copies = dict((dst, oldcopies.get(src, src)) |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
295 for dst, src in oldcopies.iteritems()) |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
296 # Adjust the dirstate copies |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
297 for dst, src in copies.iteritems(): |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
298 if (src not in ctx or dst in ctx or ds[dst] != 'a'): |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
299 src = None |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
300 ds.copy(src, dst) |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
301 |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
302 @eh.command( |
3229
63f6f9db9c3a
help: remove a few commands from `hg` (no args) command list
Kyle Lippincott <spectral@google.com>
parents:
2949
diff
changeset
|
303 'uncommit', |
2725
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
304 [('a', 'all', None, _('uncommit all changes when no arguments given')), |
2941
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
305 ('i', 'interactive', False, _('interactive mode to uncommit (EXPERIMENTAL)')), |
2725
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
306 ('r', 'rev', '', _('revert commit content to REV instead')), |
3389
eacf6149b678
uncommit: add a new flag `--revert` to discard wdir changes after uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3298
diff
changeset
|
307 ('', 'revert', False, _('discard working directory changes after uncommit')), |
3220
f0f4cc2febac
uncommit: add support for storing a note in obsmarker
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3219
diff
changeset
|
308 ('n', 'note', '', _('store a note on uncommit')), |
2729
69fe16428b0f
uncommit: add support for -U and -D
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2728
diff
changeset
|
309 ] + commands.walkopts + commitopts + commitopts2 + commitopts3, |
2725
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
310 _('[OPTION]... [NAME]')) |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
311 def uncommit(ui, repo, *pats, **opts): |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
312 """move changes from parent revision to working directory |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
313 |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
314 Changes to selected files in the checked out revision appear again as |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
315 uncommitted changed in the working directory. A new revision |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
316 without the selected changes is created, becomes the checked out |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
317 revision, and obsoletes the previous one. |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
318 |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
319 The --include option specifies patterns to uncommit. |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
320 The --exclude option specifies patterns to keep in the commit. |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
321 |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
322 The --rev argument let you change the commit file to a content of another |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
323 revision. It still does not change the content of your file in the working |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
324 directory. |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
325 |
2941
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
326 .. container:: verbose |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
327 |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
328 The --interactive option lets you select hunks interactively to uncommit. |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
329 You can uncommit parts of file using this option. |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
330 |
2725
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
331 Return 0 if changed files are uncommitted. |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
332 """ |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
333 |
3283
039c4b8dc3ed
obsnote: warn if user try to store a note in obsmarker on an older hg
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3271
diff
changeset
|
334 _checknotesize(ui, opts) |
2729
69fe16428b0f
uncommit: add support for -U and -D
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2728
diff
changeset
|
335 _resolveoptions(ui, opts) # process commitopts3 |
2941
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
336 interactive = opts.get('interactive') |
2725
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
337 wlock = lock = tr = None |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
338 try: |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
339 wlock = repo.wlock() |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
340 lock = repo.lock() |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
341 wctx = repo[None] |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
342 if len(wctx.parents()) <= 0: |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
343 raise error.Abort(_("cannot uncommit null changeset")) |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
344 if len(wctx.parents()) > 1: |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
345 raise error.Abort(_("cannot uncommit while merging")) |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
346 old = repo['.'] |
2788
554c069cdc85
uncommit: use precheck to validate revision
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2787
diff
changeset
|
347 rewriteutil.precheck(repo, [repo['.'].rev()], action='uncommit') |
2725
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
348 if len(old.parents()) > 1: |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
349 raise error.Abort(_("cannot uncommit merge changeset")) |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
350 oldphase = old.phase() |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
351 |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
352 rev = None |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
353 if opts.get('rev'): |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
354 rev = scmutil.revsingle(repo, opts.get('rev')) |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
355 ctx = repo[None] |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
356 if ctx.p1() == rev or ctx.p2() == rev: |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
357 raise error.Abort(_("cannot uncommit to parent changeset")) |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
358 |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
359 onahead = old.rev() in repo.changelog.headrevs() |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
360 disallowunstable = not obsolete.isenabled(repo, |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
361 obsolete.allowunstableopt) |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
362 if disallowunstable and not onahead: |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
363 raise error.Abort(_("cannot uncommit in the middle of a stack")) |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
364 |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
365 # Recommit the filtered changeset |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
366 tr = repo.transaction('uncommit') |
2756
f4dd6e6d4c73
rewriteutil: create a rewriteutil module to host utility function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2752
diff
changeset
|
367 updatebookmarks = rewriteutil.bookmarksupdater(repo, old.node(), tr) |
2941
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
368 if interactive: |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
369 opts['all'] = True |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
370 match = scmutil.match(old, pats, opts) |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
371 newid = _interactiveuncommit(ui, repo, old, match) |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
372 else: |
2940
89b205e5271e
uncommit: pre-indent a block in if-True for the next patch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2923
diff
changeset
|
373 newid = None |
89b205e5271e
uncommit: pre-indent a block in if-True for the next patch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2923
diff
changeset
|
374 includeorexclude = opts.get('include') or opts.get('exclude') |
89b205e5271e
uncommit: pre-indent a block in if-True for the next patch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2923
diff
changeset
|
375 if (pats or includeorexclude or opts.get('all')): |
89b205e5271e
uncommit: pre-indent a block in if-True for the next patch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2923
diff
changeset
|
376 match = scmutil.match(old, pats, opts) |
89b205e5271e
uncommit: pre-indent a block in if-True for the next patch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2923
diff
changeset
|
377 if not (opts['message'] or opts['logfile']): |
89b205e5271e
uncommit: pre-indent a block in if-True for the next patch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2923
diff
changeset
|
378 opts['message'] = old.description() |
89b205e5271e
uncommit: pre-indent a block in if-True for the next patch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2923
diff
changeset
|
379 message = cmdutil.logmessage(ui, opts) |
89b205e5271e
uncommit: pre-indent a block in if-True for the next patch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2923
diff
changeset
|
380 newid = _commitfiltered(repo, old, match, target=rev, |
89b205e5271e
uncommit: pre-indent a block in if-True for the next patch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2923
diff
changeset
|
381 message=message, user=opts.get('user'), |
89b205e5271e
uncommit: pre-indent a block in if-True for the next patch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2923
diff
changeset
|
382 date=opts.get('date')) |
89b205e5271e
uncommit: pre-indent a block in if-True for the next patch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2923
diff
changeset
|
383 if newid is None: |
89b205e5271e
uncommit: pre-indent a block in if-True for the next patch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2923
diff
changeset
|
384 raise error.Abort(_('nothing to uncommit'), |
89b205e5271e
uncommit: pre-indent a block in if-True for the next patch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2923
diff
changeset
|
385 hint=_("use --all to uncommit all files")) |
2941
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
386 |
3220
f0f4cc2febac
uncommit: add support for storing a note in obsmarker
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3219
diff
changeset
|
387 # metadata to be stored in obsmarker |
f0f4cc2febac
uncommit: add support for storing a note in obsmarker
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3219
diff
changeset
|
388 metadata = {} |
f0f4cc2febac
uncommit: add support for storing a note in obsmarker
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3219
diff
changeset
|
389 if opts.get('note'): |
f0f4cc2febac
uncommit: add support for storing a note in obsmarker
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3219
diff
changeset
|
390 metadata['note'] = opts['note'] |
f0f4cc2febac
uncommit: add support for storing a note in obsmarker
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3219
diff
changeset
|
391 |
f0f4cc2febac
uncommit: add support for storing a note in obsmarker
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3219
diff
changeset
|
392 obsolete.createmarkers(repo, [(old, (repo[newid],))], metadata=metadata) |
2725
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
393 phases.retractboundary(repo, tr, oldphase, [newid]) |
3389
eacf6149b678
uncommit: add a new flag `--revert` to discard wdir changes after uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3298
diff
changeset
|
394 if opts.get('revert'): |
eacf6149b678
uncommit: add a new flag `--revert` to discard wdir changes after uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3298
diff
changeset
|
395 hg.updaterepo(repo, newid, True) |
eacf6149b678
uncommit: add a new flag `--revert` to discard wdir changes after uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3298
diff
changeset
|
396 else: |
eacf6149b678
uncommit: add a new flag `--revert` to discard wdir changes after uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3298
diff
changeset
|
397 with repo.dirstate.parentchange(): |
eacf6149b678
uncommit: add a new flag `--revert` to discard wdir changes after uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3298
diff
changeset
|
398 repo.dirstate.setparents(newid, node.nullid) |
eacf6149b678
uncommit: add a new flag `--revert` to discard wdir changes after uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3298
diff
changeset
|
399 _uncommitdirstate(repo, old, match, interactive) |
2725
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
400 updatebookmarks(newid) |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
401 if not repo[newid].files(): |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
402 ui.warn(_("new changeset is empty\n")) |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
403 ui.status(_("(use 'hg prune .' to remove it)\n")) |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
404 tr.close() |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
405 finally: |
4eb90eace7f9
uncommit: move to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2724
diff
changeset
|
406 lockmod.release(tr, lock, wlock) |
2760
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
407 |
2941
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
408 def _interactiveuncommit(ui, repo, old, match): |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
409 """ The function which contains all the logic for interactively uncommiting |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
410 a commit. This function makes a temporary commit with the chunks which user |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
411 selected to uncommit. After that the diff of the parent and that commit is |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
412 applied to the working directory and committed again which results in the |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
413 new commit which should be one after uncommitted. |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
414 """ |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
415 |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
416 # create a temporary commit with hunks user selected |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
417 tempnode = _createtempcommit(ui, repo, old, match) |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
418 |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
419 diffopts = patch.difffeatureopts(repo.ui, whitespace=True) |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
420 diffopts.nodates = True |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
421 diffopts.git = True |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
422 fp = stringio() |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
423 for chunk, label in patch.diffui(repo, tempnode, old.node(), None, |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
424 opts=diffopts): |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
425 fp.write(chunk) |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
426 |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
427 fp.seek(0) |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
428 newnode = _patchtocommit(ui, repo, old, fp) |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
429 # creating obs marker temp -> () |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
430 obsolete.createmarkers(repo, [(repo[tempnode], ())]) |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
431 return newnode |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
432 |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
433 def _createtempcommit(ui, repo, old, match): |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
434 """ Creates a temporary commit for `uncommit --interative` which contains |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
435 the hunks which were selected by the user to uncommit. |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
436 """ |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
437 |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
438 pold = old.p1() |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
439 # The logic to interactively selecting something copied from |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
440 # cmdutil.revert() |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
441 diffopts = patch.difffeatureopts(repo.ui, whitespace=True) |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
442 diffopts.nodates = True |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
443 diffopts.git = True |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
444 diff = patch.diff(repo, pold.node(), old.node(), match, opts=diffopts) |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
445 originalchunks = patch.parsepatch(diff) |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
446 # XXX: The interactive selection is buggy and does not let you |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
447 # uncommit a removed file partially. |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
448 # TODO: wrap the operations in mercurial/patch.py and mercurial/crecord.py |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
449 # to add uncommit as an operation taking care of BC. |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
450 chunks, opts = cmdutil.recordfilter(repo.ui, originalchunks, |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
451 operation='discard') |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
452 if not chunks: |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
453 raise error.Abort(_("nothing selected to uncommit")) |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
454 fp = stringio() |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
455 for c in chunks: |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
456 c.write(fp) |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
457 |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
458 fp.seek(0) |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
459 oldnode = node.hex(old.node())[:12] |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
460 message = 'temporary commit for uncommiting %s' % oldnode |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
461 tempnode = _patchtocommit(ui, repo, old, fp, message, oldnode) |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
462 return tempnode |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
463 |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
464 def _patchtocommit(ui, repo, old, fp, message=None, extras=None): |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
465 """ A function which will apply the patch to the working directory and |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
466 make a commit whose parents are same as that of old argument. The message |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
467 argument tells us whether to use the message of the old commit or a |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
468 different message which is passed. Returns the node of new commit made. |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
469 """ |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
470 pold = old.p1() |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
471 parents = (old.p1().node(), old.p2().node()) |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
472 date = old.date() |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
473 branch = old.branch() |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
474 user = old.user() |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
475 extra = old.extra() |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
476 if extras: |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
477 extra['uncommit_source'] = extras |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
478 if not message: |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
479 message = old.description() |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
480 store = patch.filestore() |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
481 try: |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
482 files = set() |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
483 try: |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
484 patch.patchrepo(ui, repo, pold, store, fp, 1, '', |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
485 files=files, eolmode=None) |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
486 except patch.PatchError as err: |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
487 raise error.Abort(str(err)) |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
488 |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
489 finally: |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
490 del fp |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
491 |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
492 memctx = context.memctx(repo, parents, message, files=files, |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
493 filectxfn=store, |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
494 user=user, |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
495 date=date, |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
496 branch=branch, |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
497 extra=extra) |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
498 newcm = memctx.commit() |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
499 finally: |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
500 store.close() |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
501 return newcm |
b0458b9e1b47
uncommit: add an interactive option to uncommit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2940
diff
changeset
|
502 |
2760
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
503 @eh.command( |
2761
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
504 '^fold|squash', |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
505 [('r', 'rev', [], _("revision to fold")), |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
506 ('', 'exact', None, _("only fold specified revisions")), |
3219
b73bd280b21c
fold: add support for storing a note in obsmarker
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3218
diff
changeset
|
507 ('', 'from', None, _("fold revisions linearly to working copy parent")), |
b73bd280b21c
fold: add support for storing a note in obsmarker
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3218
diff
changeset
|
508 ('n', 'note', '', _('store a note on fold')), |
2768
85e5a56db776
fold: add support for the -D and -U options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2766
diff
changeset
|
509 ] + commitopts + commitopts2 + commitopts3, |
2761
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
510 _('hg fold [OPTION]... [-r] REV')) |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
511 def fold(ui, repo, *revs, **opts): |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
512 """fold multiple revisions into a single one |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
513 |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
514 With --from, folds all the revisions linearly between the given revisions |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
515 and the parent of the working directory. |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
516 |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
517 With --exact, folds only the specified revisions while ignoring the |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
518 parent of the working directory. In this case, the given revisions must |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
519 form a linear unbroken chain. |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
520 |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
521 .. container:: verbose |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
522 |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
523 Some examples: |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
524 |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
525 - Fold the current revision with its parent:: |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
526 |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
527 hg fold --from .^ |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
528 |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
529 - Fold all draft revisions with working directory parent:: |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
530 |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
531 hg fold --from 'draft()' |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
532 |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
533 See :hg:`help phases` for more about draft revisions and |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
534 :hg:`help revsets` for more about the `draft()` keyword |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
535 |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
536 - Fold revisions between 3 and 6 with the working directory parent:: |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
537 |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
538 hg fold --from 3::6 |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
539 |
2923
8c2d3c474fc6
doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2790
diff
changeset
|
540 - Fold revisions 3 and 4:: |
2761
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
541 |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
542 hg fold "3 + 4" --exact |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
543 |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
544 - Only fold revisions linearly between foo and @:: |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
545 |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
546 hg fold foo::@ --exact |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
547 """ |
3283
039c4b8dc3ed
obsnote: warn if user try to store a note in obsmarker on an older hg
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3271
diff
changeset
|
548 _checknotesize(ui, opts) |
2768
85e5a56db776
fold: add support for the -D and -U options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2766
diff
changeset
|
549 _resolveoptions(ui, opts) |
2761
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
550 revs = list(revs) |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
551 revs.extend(opts['rev']) |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
552 if not revs: |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
553 raise error.Abort(_('no revisions specified')) |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
554 |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
555 revs = scmutil.revrange(repo, revs) |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
556 |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
557 if opts['from'] and opts['exact']: |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
558 raise error.Abort(_('cannot use both --from and --exact')) |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
559 elif opts['from']: |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
560 # Try to extend given revision starting from the working directory |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
561 extrevs = repo.revs('(%ld::.) or (.::%ld)', revs, revs) |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
562 discardedrevs = [r for r in revs if r not in extrevs] |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
563 if discardedrevs: |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
564 msg = _("cannot fold non-linear revisions") |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
565 hint = _("given revisions are unrelated to parent of working" |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
566 " directory") |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
567 raise error.Abort(msg, hint=hint) |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
568 revs = extrevs |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
569 elif opts['exact']: |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
570 # Nothing to do; "revs" is already set correctly |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
571 pass |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
572 else: |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
573 raise error.Abort(_('must specify either --from or --exact')) |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
574 |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
575 if not revs: |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
576 raise error.Abort(_('specified revisions evaluate to an empty set'), |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
577 hint=_('use different revision arguments')) |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
578 elif len(revs) == 1: |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
579 ui.write_err(_('single revision specified, nothing to fold\n')) |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
580 return 1 |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
581 |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
582 wlock = lock = None |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
583 try: |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
584 wlock = repo.wlock() |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
585 lock = repo.lock() |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
586 |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
587 root, head = rewriteutil.foldcheck(repo, revs) |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
588 |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
589 tr = repo.transaction('fold') |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
590 try: |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
591 commitopts = opts.copy() |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
592 allctx = [repo[r] for r in revs] |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
593 targetphase = max(c.phase() for c in allctx) |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
594 |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
595 if commitopts.get('message') or commitopts.get('logfile'): |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
596 commitopts['edit'] = False |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
597 else: |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
598 msgs = ["HG: This is a fold of %d changesets." % len(allctx)] |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
599 msgs += ["HG: Commit message of changeset %s.\n\n%s\n" % |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
600 (c.rev(), c.description()) for c in allctx] |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
601 commitopts['message'] = "\n".join(msgs) |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
602 commitopts['edit'] = True |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
603 |
3219
b73bd280b21c
fold: add support for storing a note in obsmarker
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3218
diff
changeset
|
604 metadata = {} |
b73bd280b21c
fold: add support for storing a note in obsmarker
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3218
diff
changeset
|
605 if opts.get('note'): |
b73bd280b21c
fold: add support for storing a note in obsmarker
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3218
diff
changeset
|
606 metadata['note'] = opts['note'] |
b73bd280b21c
fold: add support for storing a note in obsmarker
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3218
diff
changeset
|
607 |
2761
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
608 newid, unusedvariable = rewriteutil.rewrite(repo, root, allctx, |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
609 head, |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
610 [root.p1().node(), |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
611 root.p2().node()], |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
612 commitopts=commitopts) |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
613 phases.retractboundary(repo, tr, targetphase, [newid]) |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
614 obsolete.createmarkers(repo, [(ctx, (repo[newid],)) |
3219
b73bd280b21c
fold: add support for storing a note in obsmarker
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3218
diff
changeset
|
615 for ctx in allctx], metadata=metadata) |
3451
f062a4719e46
fold: make sure we move bookmarks after folding (issue5772)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
616 # move bookmarks from old nodes to the new one |
f062a4719e46
fold: make sure we move bookmarks after folding (issue5772)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
617 # XXX: we should make rewriteutil.rewrite() handle such cases |
f062a4719e46
fold: make sure we move bookmarks after folding (issue5772)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
618 for ctx in allctx: |
f062a4719e46
fold: make sure we move bookmarks after folding (issue5772)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
619 bmupdater = rewriteutil.bookmarksupdater(repo, ctx.node(), tr) |
f062a4719e46
fold: make sure we move bookmarks after folding (issue5772)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
620 bmupdater(newid) |
2761
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
621 tr.close() |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
622 finally: |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
623 tr.release() |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
624 ui.status('%i changesets folded\n' % len(revs)) |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
625 if repo['.'].rev() in revs: |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
626 hg.update(repo, newid) |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
627 finally: |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
628 lockmod.release(lock, wlock) |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
629 |
7450e360c88c
commands: move fold to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2760
diff
changeset
|
630 @eh.command( |
3229
63f6f9db9c3a
help: remove a few commands from `hg` (no args) command list
Kyle Lippincott <spectral@google.com>
parents:
2949
diff
changeset
|
631 'metaedit', |
2760
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
632 [('r', 'rev', [], _("revision to edit")), |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
633 ('', 'fold', None, _("also fold specified revisions into one")), |
3218
772cc931f085
metaedit: add support for storing a note in obsmarker
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3217
diff
changeset
|
634 ('n', 'note', '', _('store a note on metaedit')), |
2769
b96349ae3e2a
metaedit: add support for the -D and -U options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2768
diff
changeset
|
635 ] + commitopts + commitopts2 + commitopts3, |
2760
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
636 _('hg metaedit [OPTION]... [-r] [REV]')) |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
637 def metaedit(ui, repo, *revs, **opts): |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
638 """edit commit information |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
639 |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
640 Edits the commit information for the specified revisions. By default, edits |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
641 commit information for the working directory parent. |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
642 |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
643 With --fold, also folds multiple revisions into one if necessary. In this |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
644 case, the given revisions must form a linear unbroken chain. |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
645 |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
646 .. container:: verbose |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
647 |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
648 Some examples: |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
649 |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
650 - Edit the commit message for the working directory parent:: |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
651 |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
652 hg metaedit |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
653 |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
654 - Change the username for the working directory parent:: |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
655 |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
656 hg metaedit --user 'New User <new-email@example.com>' |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
657 |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
658 - Combine all draft revisions that are ancestors of foo but not of @ into |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
659 one:: |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
660 |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
661 hg metaedit --fold 'draft() and only(foo,@)' |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
662 |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
663 See :hg:`help phases` for more about draft revisions, and |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
664 :hg:`help revsets` for more about the `draft()` and `only()` keywords. |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
665 """ |
3283
039c4b8dc3ed
obsnote: warn if user try to store a note in obsmarker on an older hg
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3271
diff
changeset
|
666 _checknotesize(ui, opts) |
2769
b96349ae3e2a
metaedit: add support for the -D and -U options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2768
diff
changeset
|
667 _resolveoptions(ui, opts) |
2760
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
668 revs = list(revs) |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
669 revs.extend(opts['rev']) |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
670 if not revs: |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
671 if opts['fold']: |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
672 raise error.Abort(_('revisions must be specified with --fold')) |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
673 revs = ['.'] |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
674 |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
675 wlock = lock = None |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
676 try: |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
677 wlock = repo.wlock() |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
678 lock = repo.lock() |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
679 |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
680 revs = scmutil.revrange(repo, revs) |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
681 if not opts['fold'] and len(revs) > 1: |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
682 # TODO: handle multiple revisions. This is somewhat tricky because |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
683 # if we want to edit a series of commits: |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
684 # |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
685 # a ---- b ---- c |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
686 # |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
687 # we need to rewrite a first, then directly rewrite b on top of the |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
688 # new a, then rewrite c on top of the new b. So we need to handle |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
689 # revisions in topological order. |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
690 raise error.Abort(_('editing multiple revisions without --fold is ' |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
691 'not currently supported')) |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
692 |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
693 if opts['fold']: |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
694 root, head = rewriteutil.foldcheck(repo, revs) |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
695 else: |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
696 if repo.revs("%ld and public()", revs): |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
697 raise error.Abort(_('cannot edit commit information for public ' |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
698 'revisions')) |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
699 newunstable = rewriteutil.disallowednewunstable(repo, revs) |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
700 if newunstable: |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
701 msg = _('cannot edit commit information in the middle' |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
702 ' of a stack') |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
703 hint = _('%s will become unstable and new unstable changes' |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
704 ' are not allowed') |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
705 hint %= repo[newunstable.first()] |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
706 raise error.Abort(msg, hint=hint) |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
707 root = head = repo[revs.first()] |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
708 |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
709 wctx = repo[None] |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
710 p1 = wctx.p1() |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
711 tr = repo.transaction('metaedit') |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
712 newp1 = None |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
713 try: |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
714 commitopts = opts.copy() |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
715 allctx = [repo[r] for r in revs] |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
716 targetphase = max(c.phase() for c in allctx) |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
717 |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
718 if commitopts.get('message') or commitopts.get('logfile'): |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
719 commitopts['edit'] = False |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
720 else: |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
721 if opts['fold']: |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
722 msgs = ["HG: This is a fold of %d changesets." % len(allctx)] |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
723 msgs += ["HG: Commit message of changeset %s.\n\n%s\n" % |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
724 (c.rev(), c.description()) for c in allctx] |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
725 else: |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
726 msgs = [head.description()] |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
727 commitopts['message'] = "\n".join(msgs) |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
728 commitopts['edit'] = True |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
729 |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
730 # TODO: if the author and message are the same, don't create a new |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
731 # hash. Right now we create a new hash because the date can be |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
732 # different. |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
733 newid, created = rewriteutil.rewrite(repo, root, allctx, head, |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
734 [root.p1().node(), |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
735 root.p2().node()], |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
736 commitopts=commitopts) |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
737 if created: |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
738 if p1.rev() in revs: |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
739 newp1 = newid |
3218
772cc931f085
metaedit: add support for storing a note in obsmarker
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3217
diff
changeset
|
740 # metadata to be stored on obsmarker |
772cc931f085
metaedit: add support for storing a note in obsmarker
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3217
diff
changeset
|
741 metadata = {} |
772cc931f085
metaedit: add support for storing a note in obsmarker
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3217
diff
changeset
|
742 if opts.get('note'): |
772cc931f085
metaedit: add support for storing a note in obsmarker
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3217
diff
changeset
|
743 metadata['note'] = opts['note'] |
772cc931f085
metaedit: add support for storing a note in obsmarker
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3217
diff
changeset
|
744 |
2760
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
745 phases.retractboundary(repo, tr, targetphase, [newid]) |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
746 obsolete.createmarkers(repo, [(ctx, (repo[newid],)) |
3218
772cc931f085
metaedit: add support for storing a note in obsmarker
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3217
diff
changeset
|
747 for ctx in allctx], |
772cc931f085
metaedit: add support for storing a note in obsmarker
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3217
diff
changeset
|
748 metadata=metadata) |
2760
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
749 else: |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
750 ui.status(_("nothing changed\n")) |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
751 tr.close() |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
752 finally: |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
753 tr.release() |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
754 |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
755 if opts['fold']: |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
756 ui.status('%i changesets folded\n' % len(revs)) |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
757 if newp1 is not None: |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
758 hg.update(repo, newp1) |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
759 finally: |
ddff53ecc00b
commands: move metaedit to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
760 lockmod.release(lock, wlock) |
2762
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
761 |
2766
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
762 metadataopts = [ |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
763 ('d', 'date', '', |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
764 _('record the specified date in metadata'), _('DATE')), |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
765 ('u', 'user', '', |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
766 _('record the specified user in metadata'), _('USER')), |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
767 ] |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
768 |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
769 def _getmetadata(**opts): |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
770 metadata = {} |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
771 date = opts.get('date') |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
772 user = opts.get('user') |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
773 if date: |
3514
498f782ccb4b
compat: add compat layer for date related functions
Boris Feld <boris.feld@octobus.net>
parents:
3506
diff
changeset
|
774 metadata['date'] = '%i %i' % compat.parsedate(date) |
2766
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
775 if user: |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
776 metadata['user'] = user |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
777 return metadata |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
778 |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
779 @eh.command( |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
780 '^prune|obsolete', |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
781 [('n', 'new', [], _("successor changeset (DEPRECATED)")), |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
782 ('s', 'succ', [], _("successor changeset")), |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
783 ('r', 'rev', [], _("revisions to prune")), |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
784 ('k', 'keep', None, _("does not modify working copy during prune")), |
3217
b6ba296532cb
prune: add support for storing a note in obsmarker
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3216
diff
changeset
|
785 ('n', 'note', '', _('store a note on prune')), |
2766
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
786 ('', 'biject', False, _("do a 1-1 map between rev and successor ranges")), |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
787 ('', 'fold', False, |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
788 _("record a fold (multiple precursors, one successors)")), |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
789 ('', 'split', False, |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
790 _("record a split (on precursor, multiple successors)")), |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
791 ('B', 'bookmark', [], _("remove revs only reachable from given" |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
792 " bookmark"))] + metadataopts, |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
793 _('[OPTION] [-r] REV...')) |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
794 # XXX -U --noupdate option to prevent wc update and or bookmarks update ? |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
795 def cmdprune(ui, repo, *revs, **opts): |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
796 """hide changesets by marking them obsolete |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
797 |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
798 Pruned changesets are obsolete with no successors. If they also have no |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
799 descendants, they are hidden (invisible to all commands). |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
800 |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
801 Non-obsolete descendants of pruned changesets become "unstable". Use :hg:`evolve` |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
802 to handle this situation. |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
803 |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
804 When you prune the parent of your working copy, Mercurial updates the working |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
805 copy to a non-obsolete parent. |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
806 |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
807 You can use ``--succ`` to tell Mercurial that a newer version (successor) of the |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
808 pruned changeset exists. Mercurial records successor revisions in obsolescence |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
809 markers. |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
810 |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
811 You can use the ``--biject`` option to specify a 1-1 mapping (bijection) between |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
812 revisions to pruned (precursor) and successor changesets. This option may be |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
813 removed in a future release (with the functionality provided automatically). |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
814 |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
815 If you specify multiple revisions in ``--succ``, you are recording a "split" and |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
816 must acknowledge it by passing ``--split``. Similarly, when you prune multiple |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
817 changesets with a single successor, you must pass the ``--fold`` option. |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
818 """ |
3283
039c4b8dc3ed
obsnote: warn if user try to store a note in obsmarker on an older hg
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3271
diff
changeset
|
819 _checknotesize(ui, opts) |
2766
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
820 revs = scmutil.revrange(repo, list(revs) + opts.get('rev')) |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
821 succs = opts['new'] + opts['succ'] |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
822 bookmarks = set(opts.get('bookmark')) |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
823 metadata = _getmetadata(**opts) |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
824 biject = opts.get('biject') |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
825 fold = opts.get('fold') |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
826 split = opts.get('split') |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
827 |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
828 options = [o for o in ('biject', 'fold', 'split') if opts.get(o)] |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
829 if 1 < len(options): |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
830 raise error.Abort(_("can only specify one of %s") % ', '.join(options)) |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
831 |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
832 if bookmarks: |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
833 reachablefrombookmark = rewriteutil.reachablefrombookmark |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
834 repomarks, revs = reachablefrombookmark(repo, revs, bookmarks) |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
835 if not revs: |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
836 # no revisions to prune - delete bookmark immediately |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
837 rewriteutil.deletebookmark(repo, repomarks, bookmarks) |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
838 |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
839 if not revs: |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
840 raise error.Abort(_('nothing to prune')) |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
841 |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
842 wlock = lock = tr = None |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
843 try: |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
844 wlock = repo.wlock() |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
845 lock = repo.lock() |
2789
06ee4ec88190
prune: use precheck to validate revision
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2788
diff
changeset
|
846 rewriteutil.precheck(repo, revs, 'touch') |
2766
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
847 tr = repo.transaction('prune') |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
848 # defines pruned changesets |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
849 precs = [] |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
850 revs.sort() |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
851 for p in revs: |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
852 cp = repo[p] |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
853 precs.append(cp) |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
854 if not precs: |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
855 raise error.Abort('nothing to prune') |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
856 |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
857 # defines successors changesets |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
858 sucs = scmutil.revrange(repo, succs) |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
859 sucs.sort() |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
860 sucs = tuple(repo[n] for n in sucs) |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
861 if not biject and len(sucs) > 1 and len(precs) > 1: |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
862 msg = "Can't use multiple successors for multiple precursors" |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
863 hint = _("use --biject to mark a series as a replacement" |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
864 " for another") |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
865 raise error.Abort(msg, hint=hint) |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
866 elif biject and len(sucs) != len(precs): |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
867 msg = "Can't use %d successors for %d precursors" \ |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
868 % (len(sucs), len(precs)) |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
869 raise error.Abort(msg) |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
870 elif (len(precs) == 1 and len(sucs) > 1) and not split: |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
871 msg = "please add --split if you want to do a split" |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
872 raise error.Abort(msg) |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
873 elif len(sucs) == 1 and len(precs) > 1 and not fold: |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
874 msg = "please add --fold if you want to do a fold" |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
875 raise error.Abort(msg) |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
876 elif biject: |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
877 relations = [(p, (s,)) for p, s in zip(precs, sucs)] |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
878 else: |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
879 relations = [(p, sucs) for p in precs] |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
880 |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
881 wdp = repo['.'] |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
882 |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
883 if len(sucs) == 1 and len(precs) == 1 and wdp in precs: |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
884 # '.' killed, so update to the successor |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
885 newnode = sucs[0] |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
886 else: |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
887 # update to an unkilled parent |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
888 newnode = wdp |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
889 |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
890 while newnode in precs or newnode.obsolete(): |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
891 newnode = newnode.parents()[0] |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
892 |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
893 if newnode.node() != wdp.node(): |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
894 if opts.get('keep', False): |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
895 # This is largely the same as the implementation in |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
896 # strip.stripcmd(). We might want to refactor this somewhere |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
897 # common at some point. |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
898 |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
899 # only reset the dirstate for files that would actually change |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
900 # between the working context and uctx |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
901 descendantrevs = repo.revs("%d::." % newnode.rev()) |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
902 changedfiles = [] |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
903 for rev in descendantrevs: |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
904 # blindly reset the files, regardless of what actually |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
905 # changed |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
906 changedfiles.extend(repo[rev].files()) |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
907 |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
908 # reset files that only changed in the dirstate too |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
909 dirstate = repo.dirstate |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
910 dirchanges = [f for f in dirstate if dirstate[f] != 'n'] |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
911 changedfiles.extend(dirchanges) |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
912 repo.dirstate.rebuild(newnode.node(), newnode.manifest(), |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
913 changedfiles) |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
914 dirstate.write(tr) |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
915 else: |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
916 bookactive = repo._activebookmark |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
917 # Active bookmark that we don't want to delete (with -B option) |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
918 # we deactivate and move it before the update and reactivate it |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
919 # after |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
920 movebookmark = bookactive and not bookmarks |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
921 if movebookmark: |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
922 bookmarksmod.deactivate(repo) |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
923 bmchanges = [(bookactive, newnode.node())] |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
924 compat.bookmarkapplychanges(repo, tr, bmchanges) |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
925 commands.update(ui, repo, newnode.rev()) |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
926 ui.status(_('working directory now at %s\n') |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
927 % ui.label(str(newnode), 'evolve.node')) |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
928 if movebookmark: |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
929 bookmarksmod.activate(repo, bookactive) |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
930 |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
931 # update bookmarks |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
932 if bookmarks: |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
933 rewriteutil.deletebookmark(repo, repomarks, bookmarks) |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
934 |
3217
b6ba296532cb
prune: add support for storing a note in obsmarker
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3216
diff
changeset
|
935 # store note in metadata |
b6ba296532cb
prune: add support for storing a note in obsmarker
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3216
diff
changeset
|
936 if opts.get('note'): |
b6ba296532cb
prune: add support for storing a note in obsmarker
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3216
diff
changeset
|
937 metadata['note'] = opts['note'] |
b6ba296532cb
prune: add support for storing a note in obsmarker
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3216
diff
changeset
|
938 |
2766
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
939 # create markers |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
940 obsolete.createmarkers(repo, relations, metadata=metadata) |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
941 |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
942 # informs that changeset have been pruned |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
943 ui.status(_('%i changesets pruned\n') % len(precs)) |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
944 |
3506
6b4272bbb65d
evolve: update code for not implicitly converting ctx to revision
Boris Feld <boris.feld@octobus.net>
parents:
3484
diff
changeset
|
945 precrevs = (precursor.rev() for precursor in precs) |
6b4272bbb65d
evolve: update code for not implicitly converting ctx to revision
Boris Feld <boris.feld@octobus.net>
parents:
3484
diff
changeset
|
946 for ctx in repo.unfiltered().set('bookmark() and %ld', precrevs): |
2766
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
947 # used to be: |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
948 # |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
949 # ldest = list(repo.set('max((::%d) - obsolete())', ctx)) |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
950 # if ldest: |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
951 # c = ldest[0] |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
952 # |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
953 # but then revset took a lazy arrow in the knee and became much |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
954 # slower. The new forms makes as much sense and a much faster. |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
955 for dest in ctx.ancestors(): |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
956 if not dest.obsolete(): |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
957 bookmarksupdater = rewriteutil.bookmarksupdater |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
958 updatebookmarks = bookmarksupdater(repo, ctx.node(), tr) |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
959 updatebookmarks(dest.node()) |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
960 break |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
961 |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
962 tr.close() |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
963 finally: |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
964 lockmod.release(tr, lock, wlock) |
83ad13719e26
commands: move 'prune' to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
965 |
2762
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
966 @eh.command( |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
967 '^split', |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
968 [('r', 'rev', [], _("revision to split")), |
3216
13cb0810ce22
split: add support for storing a note in obsmarker
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3215
diff
changeset
|
969 ('n', 'note', '', _("store a note on split")), |
2771
6044bd16bfb7
split: add support for the -D and -U option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2770
diff
changeset
|
970 ] + commitopts + commitopts2 + commitopts3, |
2762
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
971 _('hg split [OPTION]... [-r] REV')) |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
972 def cmdsplit(ui, repo, *revs, **opts): |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
973 """split a changeset into smaller changesets |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
974 |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
975 By default, split the current revision by prompting for all its hunks to be |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
976 redistributed into new changesets. |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
977 |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
978 Use --rev to split a given changeset instead. |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
979 """ |
3283
039c4b8dc3ed
obsnote: warn if user try to store a note in obsmarker on an older hg
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3271
diff
changeset
|
980 _checknotesize(ui, opts) |
2771
6044bd16bfb7
split: add support for the -D and -U option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2770
diff
changeset
|
981 _resolveoptions(ui, opts) |
2762
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
982 tr = wlock = lock = None |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
983 newcommits = [] |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
984 |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
985 revarg = (list(revs) + opts.get('rev')) or ['.'] |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
986 if len(revarg) != 1: |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
987 msg = _("more than one revset is given") |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
988 hnt = _("use either `hg split <rs>` or `hg split --rev <rs>`, not both") |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
989 raise error.Abort(msg, hint=hnt) |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
990 |
3270
e6150b9b88d9
split: force the branch to fix the split bug
Boris Feld <boris.feld@octobus.net>
parents:
3233
diff
changeset
|
991 # Save the current branch to restore it in the end |
e6150b9b88d9
split: force the branch to fix the split bug
Boris Feld <boris.feld@octobus.net>
parents:
3233
diff
changeset
|
992 savedbranch = repo.dirstate.branch() |
e6150b9b88d9
split: force the branch to fix the split bug
Boris Feld <boris.feld@octobus.net>
parents:
3233
diff
changeset
|
993 |
2762
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
994 try: |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
995 wlock = repo.wlock() |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
996 lock = repo.lock() |
3506
6b4272bbb65d
evolve: update code for not implicitly converting ctx to revision
Boris Feld <boris.feld@octobus.net>
parents:
3484
diff
changeset
|
997 ctx = scmutil.revsingle(repo, revarg[0]) |
6b4272bbb65d
evolve: update code for not implicitly converting ctx to revision
Boris Feld <boris.feld@octobus.net>
parents:
3484
diff
changeset
|
998 rev = ctx.rev() |
2762
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
999 cmdutil.bailifchanged(repo) |
2786
ae690d39fc92
split: use precheck to validate revision
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2774
diff
changeset
|
1000 rewriteutil.precheck(repo, [rev], action='split') |
2762
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
1001 tr = repo.transaction('split') |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
1002 |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
1003 if len(ctx.parents()) > 1: |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
1004 raise error.Abort(_("cannot split merge commits")) |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
1005 prev = ctx.p1() |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
1006 bmupdate = rewriteutil.bookmarksupdater(repo, ctx.node(), tr) |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
1007 bookactive = repo._activebookmark |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
1008 if bookactive is not None: |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
1009 repo.ui.status(_("(leaving bookmark %s)\n") % repo._activebookmark) |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
1010 bookmarksmod.deactivate(repo) |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
1011 |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
1012 # Prepare the working directory |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
1013 rewriteutil.presplitupdate(repo, ui, prev, ctx) |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
1014 |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
1015 def haschanges(): |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
1016 modified, added, removed, deleted = repo.status()[:4] |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
1017 return modified or added or removed or deleted |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
1018 msg = ("HG: This is the original pre-split commit message. " |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
1019 "Edit it as appropriate.\n\n") |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
1020 msg += ctx.description() |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
1021 opts['message'] = msg |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
1022 opts['edit'] = True |
2770
a9ea16a1f4dc
split: fix the --user option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2769
diff
changeset
|
1023 if not opts['user']: |
a9ea16a1f4dc
split: fix the --user option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2769
diff
changeset
|
1024 opts['user'] = ctx.user() |
3270
e6150b9b88d9
split: force the branch to fix the split bug
Boris Feld <boris.feld@octobus.net>
parents:
3233
diff
changeset
|
1025 |
e6150b9b88d9
split: force the branch to fix the split bug
Boris Feld <boris.feld@octobus.net>
parents:
3233
diff
changeset
|
1026 # Set the right branch |
e6150b9b88d9
split: force the branch to fix the split bug
Boris Feld <boris.feld@octobus.net>
parents:
3233
diff
changeset
|
1027 # XXX-TODO: Find a way to set the branch without altering the dirstate |
e6150b9b88d9
split: force the branch to fix the split bug
Boris Feld <boris.feld@octobus.net>
parents:
3233
diff
changeset
|
1028 repo.dirstate.setbranch(ctx.branch()) |
e6150b9b88d9
split: force the branch to fix the split bug
Boris Feld <boris.feld@octobus.net>
parents:
3233
diff
changeset
|
1029 |
2762
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
1030 while haschanges(): |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
1031 pats = () |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
1032 cmdutil.dorecord(ui, repo, commands.commit, 'commit', False, |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
1033 cmdutil.recordfilter, *pats, **opts) |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
1034 # TODO: Does no seem like the best way to do this |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
1035 # We should make dorecord return the newly created commit |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
1036 newcommits.append(repo['.']) |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
1037 if haschanges(): |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
1038 if ui.prompt('Done splitting? [yN]', default='n') == 'y': |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
1039 commands.commit(ui, repo, **opts) |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
1040 newcommits.append(repo['.']) |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
1041 break |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
1042 else: |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
1043 ui.status(_("no more change to split\n")) |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
1044 |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
1045 if newcommits: |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
1046 tip = repo[newcommits[-1]] |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
1047 bmupdate(tip.node()) |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
1048 if bookactive is not None: |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
1049 bookmarksmod.activate(repo, bookactive) |
3216
13cb0810ce22
split: add support for storing a note in obsmarker
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3215
diff
changeset
|
1050 metadata = {} |
13cb0810ce22
split: add support for storing a note in obsmarker
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3215
diff
changeset
|
1051 if opts.get('note'): |
13cb0810ce22
split: add support for storing a note in obsmarker
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3215
diff
changeset
|
1052 metadata['note'] = opts['note'] |
13cb0810ce22
split: add support for storing a note in obsmarker
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3215
diff
changeset
|
1053 obsolete.createmarkers(repo, [(repo[rev], newcommits)], |
13cb0810ce22
split: add support for storing a note in obsmarker
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3215
diff
changeset
|
1054 metadata=metadata) |
2762
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
1055 tr.close() |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
1056 finally: |
3270
e6150b9b88d9
split: force the branch to fix the split bug
Boris Feld <boris.feld@octobus.net>
parents:
3233
diff
changeset
|
1057 # Restore the old branch |
e6150b9b88d9
split: force the branch to fix the split bug
Boris Feld <boris.feld@octobus.net>
parents:
3233
diff
changeset
|
1058 repo.dirstate.setbranch(savedbranch) |
e6150b9b88d9
split: force the branch to fix the split bug
Boris Feld <boris.feld@octobus.net>
parents:
3233
diff
changeset
|
1059 |
2762
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
1060 lockmod.release(tr, lock, wlock) |
2763
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1061 |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1062 @eh.command( |
3229
63f6f9db9c3a
help: remove a few commands from `hg` (no args) command list
Kyle Lippincott <spectral@google.com>
parents:
2949
diff
changeset
|
1063 'touch', |
2763
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1064 [('r', 'rev', [], 'revision to update'), |
3215
175b524b9a2b
touch: add support for storing a note in obsmarker
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3213
diff
changeset
|
1065 ('n', 'note', '', _('store a note on touch')), |
2763
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1066 ('D', 'duplicate', False, |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1067 'do not mark the new revision as successor of the old one'), |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1068 ('A', 'allowdivergence', False, |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1069 'mark the new revision as successor of the old one potentially creating ' |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1070 'divergence')], |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1071 # allow to choose the seed ? |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1072 _('[-r] revs')) |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1073 def touch(ui, repo, *revs, **opts): |
3233
bd01eb0108f4
touch: shorten touch's docstring to make it fit into a one line
Denis Laxalde <denis@laxalde.org>
parents:
3231
diff
changeset
|
1074 """create successors identical to their predecessors but the changeset ID |
2763
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1075 |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1076 This is used to "resurrect" changesets |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1077 """ |
3283
039c4b8dc3ed
obsnote: warn if user try to store a note in obsmarker on an older hg
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3271
diff
changeset
|
1078 _checknotesize(ui, opts) |
2763
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1079 duplicate = opts['duplicate'] |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1080 allowdivergence = opts['allowdivergence'] |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1081 revs = list(revs) |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1082 revs.extend(opts['rev']) |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1083 if not revs: |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1084 revs = ['.'] |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1085 revs = scmutil.revrange(repo, revs) |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1086 if not revs: |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1087 ui.write_err('no revision to touch\n') |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1088 return 1 |
2790
1b7b9acda2a9
touch: use precheck to validate revision
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2789
diff
changeset
|
1089 if not duplicate: |
1b7b9acda2a9
touch: use precheck to validate revision
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2789
diff
changeset
|
1090 rewriteutil.precheck(repo, revs, touch) |
2763
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1091 tmpl = utility.shorttemplate |
3483
f03845bfd015
compat: add wrapper for logcmdutil functions
Yuya Nishihara <yuya@tcha.org>
parents:
3452
diff
changeset
|
1092 displayer = compat.changesetdisplayer(ui, repo, {'template': tmpl}) |
2763
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1093 wlock = lock = tr = None |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1094 try: |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1095 wlock = repo.wlock() |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1096 lock = repo.lock() |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1097 tr = repo.transaction('touch') |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1098 revs.sort() # ensure parent are run first |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1099 newmapping = {} |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1100 for r in revs: |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1101 ctx = repo[r] |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1102 extra = ctx.extra().copy() |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1103 extra['__touch-noise__'] = random.randint(0, 0xffffffff) |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1104 # search for touched parent |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1105 p1 = ctx.p1().node() |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1106 p2 = ctx.p2().node() |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1107 p1 = newmapping.get(p1, p1) |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1108 p2 = newmapping.get(p2, p2) |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1109 |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1110 if not (duplicate or allowdivergence): |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1111 # The user hasn't yet decided what to do with the revived |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1112 # cset, let's ask |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1113 sset = compat.successorssets(repo, ctx.node()) |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1114 nodivergencerisk = (len(sset) == 0 or |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1115 (len(sset) == 1 and |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1116 len(sset[0]) == 1 and |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1117 repo[sset[0][0]].rev() == ctx.rev() |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1118 )) |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1119 if nodivergencerisk: |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1120 duplicate = False |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1121 else: |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1122 displayer.show(ctx) |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1123 index = ui.promptchoice( |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1124 _("reviving this changeset will create divergence" |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1125 " unless you make a duplicate.\n(a)llow divergence or" |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1126 " (d)uplicate the changeset? $$ &Allowdivergence $$ " |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1127 "&Duplicate"), 0) |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1128 choice = ['allowdivergence', 'duplicate'][index] |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1129 if choice == 'allowdivergence': |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1130 duplicate = False |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1131 else: |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1132 duplicate = True |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1133 |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1134 extradict = {'extra': extra} |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1135 new, unusedvariable = rewriteutil.rewrite(repo, ctx, [], ctx, |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1136 [p1, p2], |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1137 commitopts=extradict) |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1138 # store touched version to help potential children |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1139 newmapping[ctx.node()] = new |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1140 |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1141 if not duplicate: |
3215
175b524b9a2b
touch: add support for storing a note in obsmarker
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3213
diff
changeset
|
1142 metadata = {} |
175b524b9a2b
touch: add support for storing a note in obsmarker
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3213
diff
changeset
|
1143 if opts.get('note'): |
175b524b9a2b
touch: add support for storing a note in obsmarker
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3213
diff
changeset
|
1144 metadata['note'] = opts['note'] |
175b524b9a2b
touch: add support for storing a note in obsmarker
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3213
diff
changeset
|
1145 obsolete.createmarkers(repo, [(ctx, (repo[new],))], |
175b524b9a2b
touch: add support for storing a note in obsmarker
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3213
diff
changeset
|
1146 metadata=metadata) |
2763
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1147 phases.retractboundary(repo, tr, ctx.phase(), [new]) |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1148 if ctx in repo[None].parents(): |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1149 with repo.dirstate.parentchange(): |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1150 repo.dirstate.setparents(new, node.nullid) |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1151 tr.close() |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1152 finally: |
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1153 lockmod.release(tr, lock, wlock) |
3453
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1154 |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1155 @eh.command( |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1156 'grab', |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1157 [('r', 'rev', '', 'revision to grab'), |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1158 ('', 'continue', False, 'continue interrupted grab'), |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1159 ('', 'abort', False, 'abort interrupted grab'), |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1160 ], |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1161 _('[-r] rev')) |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1162 def grab(ui, repo, *revs, **opts): |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1163 """grabs a commit, move it on the top of working directory parent and |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1164 updates to it.""" |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1165 |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1166 cont = opts.get('continue') |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1167 abort = opts.get('abort') |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1168 |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1169 if cont and abort: |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1170 raise error.Abort(_("cannot specify both --continue and --abort")) |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1171 |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1172 revs = list(revs) |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1173 if opts.get('rev'): |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1174 revs.append(opts['rev']) |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1175 |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1176 with repo.wlock(), repo.lock(), repo.transaction('grab'): |
3457
82e9f9603b1b
evolvestate: rename the file to state.py and class name to cmdstate
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3456
diff
changeset
|
1177 grabstate = state.cmdstate(repo, path='grabstate') |
3453
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1178 |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1179 if not cont and not abort: |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1180 cmdutil.bailifchanged(repo) |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1181 revs = scmutil.revrange(repo, revs) |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1182 if len(revs) > 1: |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1183 raise error.Abort(_("specify just one revision")) |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1184 elif not revs: |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1185 raise error.Abort(_("empty revision set")) |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1186 |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1187 origctx = repo[revs.first()] |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1188 pctx = repo['.'] |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1189 |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1190 if origctx in pctx.ancestors(): |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1191 raise error.Abort(_("cannot grab an ancestor revision")) |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1192 |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1193 rewriteutil.precheck(repo, [origctx.rev()], 'grab') |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1194 |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1195 ui.status(_('grabbing %d:%s "%s"\n') % |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1196 (origctx.rev(), origctx, |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1197 origctx.description().split("\n", 1)[0])) |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1198 stats = merge.graft(repo, origctx, origctx.p1(), ['local', |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1199 'destination']) |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1200 if stats[3]: |
3457
82e9f9603b1b
evolvestate: rename the file to state.py and class name to cmdstate
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3456
diff
changeset
|
1201 grabstate.addopts({'orignode': origctx.node(), |
82e9f9603b1b
evolvestate: rename the file to state.py and class name to cmdstate
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3456
diff
changeset
|
1202 'oldpctx': pctx.node()}) |
82e9f9603b1b
evolvestate: rename the file to state.py and class name to cmdstate
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3456
diff
changeset
|
1203 grabstate.save() |
3453
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1204 raise error.InterventionRequired(_("unresolved merge conflicts" |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1205 " (see hg help resolve)")) |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1206 |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1207 elif abort: |
3457
82e9f9603b1b
evolvestate: rename the file to state.py and class name to cmdstate
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3456
diff
changeset
|
1208 if not grabstate: |
3453
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1209 raise error.Abort(_("no interrupted grab state exists")) |
3457
82e9f9603b1b
evolvestate: rename the file to state.py and class name to cmdstate
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3456
diff
changeset
|
1210 grabstate.load() |
82e9f9603b1b
evolvestate: rename the file to state.py and class name to cmdstate
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3456
diff
changeset
|
1211 pctxnode = grabstate['oldpctx'] |
3453
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1212 ui.status(_("aborting grab, updating to %s\n") % |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1213 node.hex(pctxnode)[:12]) |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1214 hg.updaterepo(repo, pctxnode, True) |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1215 return 0 |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1216 |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1217 else: |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1218 if revs: |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1219 raise error.Abort(_("cannot specify both --continue and " |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1220 "revision")) |
3457
82e9f9603b1b
evolvestate: rename the file to state.py and class name to cmdstate
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3456
diff
changeset
|
1221 if not grabstate: |
3453
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1222 raise error.Abort(_("no interrupted grab state exists")) |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1223 |
3457
82e9f9603b1b
evolvestate: rename the file to state.py and class name to cmdstate
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3456
diff
changeset
|
1224 grabstate.load() |
82e9f9603b1b
evolvestate: rename the file to state.py and class name to cmdstate
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3456
diff
changeset
|
1225 orignode = grabstate['orignode'] |
3453
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1226 origctx = repo[orignode] |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1227 |
3475
a03bb02dfaba
grab: preserve phase of the grabbed changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3457
diff
changeset
|
1228 overrides = {('phases', 'new-commit'): origctx.phase()} |
a03bb02dfaba
grab: preserve phase of the grabbed changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3457
diff
changeset
|
1229 with repo.ui.configoverride(overrides, 'grab'): |
a03bb02dfaba
grab: preserve phase of the grabbed changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3457
diff
changeset
|
1230 newnode = repo.commit(text=origctx.description(), |
a03bb02dfaba
grab: preserve phase of the grabbed changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3457
diff
changeset
|
1231 user=origctx.user(), |
a03bb02dfaba
grab: preserve phase of the grabbed changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3457
diff
changeset
|
1232 date=origctx.date(), extra=origctx.extra()) |
3453
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1233 |
3457
82e9f9603b1b
evolvestate: rename the file to state.py and class name to cmdstate
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3456
diff
changeset
|
1234 if grabstate: |
82e9f9603b1b
evolvestate: rename the file to state.py and class name to cmdstate
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3456
diff
changeset
|
1235 grabstate.delete() |
3453
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1236 if newnode: |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1237 obsolete.createmarkers(repo, [(origctx, (repo[newnode],))]) |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1238 else: |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1239 obsolete.createmarkers(repo, [(origctx, (pctx,))]) |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1240 |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1241 if newnode is None: |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1242 ui.warn(_("note: grab of %d:%s created no changes to commit\n") % |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1243 (origctx.rev(), origctx)) |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1244 return 0 |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1245 |
32ed5b6fadd3
grab: add a command to grab a commit and update to it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3389
diff
changeset
|
1246 return 0 |