Show More
@@ -1970,6 +1970,32 b' def _newhistedit(ui, repo, state, revs, ' | |||
|
1970 | 1970 | node.short(root)) |
|
1971 | 1971 | |
|
1972 | 1972 | ctxs = [repo[r] for r in revs] |
|
1973 | ||
|
1974 | wctx = repo[None] | |
|
1975 | # Please don't ask me why `ancestors` is this value. I figured it | |
|
1976 | # out with print-debugging, not by actually understanding what the | |
|
1977 | # merge code is doing. :( | |
|
1978 | ancs = [repo['.']] | |
|
1979 | # Sniff-test to make sure we won't collide with untracked files in | |
|
1980 | # the working directory. If we don't do this, we can get a | |
|
1981 | # collision after we've started histedit and backing out gets ugly | |
|
1982 | # for everyone, especially the user. | |
|
1983 | for c in [ctxs[0].p1()] + ctxs: | |
|
1984 | try: | |
|
1985 | mergemod.calculateupdates( | |
|
1986 | repo, wctx, c, ancs, | |
|
1987 | # These parameters were determined by print-debugging | |
|
1988 | # what happens later on inside histedit. | |
|
1989 | False, # branchmerge | |
|
1990 | False, # force | |
|
1991 | False, # acceptremote | |
|
1992 | False, # followcopies | |
|
1993 | ) | |
|
1994 | except error.Abort: | |
|
1995 | raise error.Abort( | |
|
1996 | _("untracked files in working directory conflict with files in %s") % ( | |
|
1997 | c)) | |
|
1998 | ||
|
1973 | 1999 | if not rules: |
|
1974 | 2000 | comment = geteditcomment(ui, node.short(root), node.short(topmost)) |
|
1975 | 2001 | actions = [pick(state, r) for r in revs] |
@@ -162,55 +162,26 b' log after abort' | |||
|
162 | 162 | summary: a |
|
163 | 163 | |
|
164 | 164 | |
|
165 | Early tree conflict doesn't leave histedit in a wedged state. | |
|
165 | Early tree conflict doesn't leave histedit in a wedged state. Note | |
|
166 | that we don't specify --commands here: we catch the problem before we | |
|
167 | even prompt the user for rules, sidestepping any dataloss issues. | |
|
168 | ||
|
166 | 169 | $ hg rm c |
|
167 | 170 | $ hg ci -m 'remove c' |
|
168 | 171 | $ echo collision > c |
|
169 | 172 | |
|
170 |
|
|
|
171 | > edit e860deea161a | |
|
172 | > pick 652413bf663e | |
|
173 | > pick bfa474341cc9 | |
|
174 | > pick 1b0954ff00fc | |
|
175 | > EOF | |
|
173 | $ hg histedit e860deea161a | |
|
176 | 174 |
c: |
|
177 |
abort: |
|
|
175 | abort: untracked files in working directory conflict with files in 055a42cdd887 | |
|
178 | 176 | [255] |
|
179 | 177 | |
|
180 | BUG: we didn't actually change p1 of the working copy, but we're in a | |
|
181 | histedit state. This confuses the process very badly and leads to | |
|
182 | histedit stripping things it shouldn't (in obsmarker mode it inserts | |
|
183 | bogus prune markers in this case.) | |
|
178 | We should have detected the collision early enough we're not in a | |
|
179 | histedit state, and p1 is unchanged. | |
|
184 | 180 | |
|
185 | 181 |
$ hg log -r ' |
|
186 | 182 | 1b0954ff00fccb15a37b679e4a35e9b01dfe685e |
|
187 | 183 | $ hg status --config ui.tweakdefaults=yes |
|
188 | 184 | ? c |
|
189 | 185 | ? e.orig |
|
190 | # The repository is in an unfinished *histedit* state. | |
|
191 | ||
|
192 | # To continue: hg histedit --continue | |
|
193 | # To abort: hg histedit --abort | |
|
194 | ||
|
195 | $ hg histedit --continue | |
|
196 | 652413bf663e: skipping changeset (no changes) | |
|
197 | bfa474341cc9: skipping changeset (no changes) | |
|
198 | 1b0954ff00fc: skipping changeset (no changes) | |
|
199 | saved backup bundle to $TESTTMP/r/.hg/strip-backup/e860deea161a-a0738322-histedit.hg | |
|
200 | ||
|
201 | $ hg log -GTcompact | |
|
202 | warning: ignoring unknown working parent 1b0954ff00fc! | |
|
203 | o 3[tip] 055a42cdd887 1970-01-01 00:00 +0000 test | |
|
204 | | d | |
|
205 | | | |
|
206 | o 2 177f92b77385 1970-01-01 00:00 +0000 test | |
|
207 | | c | |
|
208 | | | |
|
209 | o 1 d2ae7f538514 1970-01-01 00:00 +0000 test | |
|
210 | | b | |
|
211 | | | |
|
212 | o 0 cb9a9f314b8b 1970-01-01 00:00 +0000 test | |
|
213 | a | |
|
214 | ||
|
215 | 186 | |
|
216 | 187 | $ cd .. |
General Comments 0
You need to be logged in to leave comments.
Login now