Show More
@@ -214,6 +214,13 b' baseopt = (' | |||
|
214 | 214 | _(b'REV'), |
|
215 | 215 | ) |
|
216 | 216 | revopt = (b'r', b'rev', [], _(b'revisions to fix'), _(b'REV')) |
|
217 | sourceopt = ( | |
|
218 | b's', | |
|
219 | b'source', | |
|
220 | [], | |
|
221 | _(b'fix the specified revisions and their descendants'), | |
|
222 | _(b'REV'), | |
|
223 | ) | |
|
217 | 224 | wdiropt = (b'w', b'working-dir', False, _(b'fix the working directory')) |
|
218 | 225 | wholeopt = (b'', b'whole', False, _(b'always fix every line of a file')) |
|
219 | 226 | usage = _(b'[OPTION]... [FILE]...') |
@@ -221,7 +228,7 b" usage = _(b'[OPTION]... [FILE]...')" | |||
|
221 | 228 | |
|
222 | 229 | @command( |
|
223 | 230 | b'fix', |
|
224 | [allopt, baseopt, revopt, wdiropt, wholeopt], | |
|
231 | [allopt, baseopt, revopt, sourceopt, wdiropt, wholeopt], | |
|
225 | 232 | usage, |
|
226 | 233 | helpcategory=command.CATEGORY_FILE_CONTENTS, |
|
227 | 234 | ) |
@@ -249,8 +256,10 b' def fix(ui, repo, *pats, **opts):' | |||
|
249 | 256 | override this default behavior, though it is not usually desirable to do so. |
|
250 | 257 | """ |
|
251 | 258 | opts = pycompat.byteskwargs(opts) |
|
252 | cmdutil.check_at_most_one_arg(opts, b'all', b'rev') | |
|
253 |
cmdutil.check_incompatible_arguments( |
|
|
259 | cmdutil.check_at_most_one_arg(opts, b'all', b'source', b'rev') | |
|
260 | cmdutil.check_incompatible_arguments( | |
|
261 | opts, b'working_dir', [b'all', b'source'] | |
|
262 | ) | |
|
254 | 263 | |
|
255 | 264 | with repo.wlock(), repo.lock(), repo.transaction(b'fix'): |
|
256 | 265 | revstofix = getrevstofix(ui, repo, opts) |
@@ -399,6 +408,14 b' def getrevstofix(ui, repo, opts):' | |||
|
399 | 408 | """Returns the set of revision numbers that should be fixed""" |
|
400 | 409 | if opts[b'all']: |
|
401 | 410 | revs = repo.revs(b'(not public() and not obsolete()) or wdir()') |
|
411 | elif opts[b'source']: | |
|
412 | source_revs = scmutil.revrange(repo, opts[b'source']) | |
|
413 | revs = set(repo.revs(b'%ld::', source_revs)) | |
|
414 | if wdirrev in source_revs: | |
|
415 | # `wdir()::` is currently empty, so manually add wdir | |
|
416 | revs.add(wdirrev) | |
|
417 | if repo[b'.'].rev() in revs: | |
|
418 | revs.add(wdirrev) | |
|
402 | 419 | else: |
|
403 | 420 | revs = set(scmutil.revrange(repo, opts[b'rev'])) |
|
404 | 421 | if opts.get(b'working_dir'): |
@@ -21,6 +21,7 b' relationships. We indicate fixed file co' | |||
|
21 | 21 | $ cat >> $HGRCPATH <<EOF |
|
22 | 22 | > [extensions] |
|
23 | 23 | > fix = |
|
24 | > strip = | |
|
24 | 25 | > [fix] |
|
25 | 26 | > uppercase-whole-file:command="$PYTHON" $UPPERCASEPY |
|
26 | 27 | > uppercase-whole-file:pattern=set:** |
@@ -262,6 +263,111 b' Change A was never a baserev because non' | |||
|
262 | 263 | |
|
263 | 264 | $ cd .. |
|
264 | 265 | |
|
266 | ||
|
267 | Test the --source option. We only do this with obsstore on to avoid duplicating | |
|
268 | test code. We rely on the other tests to prove that obsolescence is not an | |
|
269 | important factor here. | |
|
270 | ||
|
271 | #if obsstore-on | |
|
272 | $ hg init source-arg | |
|
273 | $ cd source-arg | |
|
274 | $ printf "aaaa\n" > a | |
|
275 | $ hg commit -Am "change A" | |
|
276 | adding a | |
|
277 | $ printf "bbbb\n" > b | |
|
278 | $ hg commit -Am "change B" | |
|
279 | adding b | |
|
280 | $ printf "cccc\n" > c | |
|
281 | $ hg commit -Am "change C" | |
|
282 | adding c | |
|
283 | $ hg checkout 0 | |
|
284 | 0 files updated, 0 files merged, 2 files removed, 0 files unresolved | |
|
285 | $ printf "dddd\n" > d | |
|
286 | $ hg commit -Am "change D" | |
|
287 | adding d | |
|
288 | created new head | |
|
289 | $ hg log --graph --template '{rev} {desc}\n' | |
|
290 | @ 3 change D | |
|
291 | | | |
|
292 | | o 2 change C | |
|
293 | | | | |
|
294 | | o 1 change B | |
|
295 | |/ | |
|
296 | o 0 change A | |
|
297 | ||
|
298 | ||
|
299 | Test passing 'wdir()' to --source | |
|
300 | $ printf "xxxx\n" > x | |
|
301 | $ hg add x | |
|
302 | $ hg fix -s 'wdir()' | |
|
303 | $ cat * | |
|
304 | aaaa | |
|
305 | dddd | |
|
306 | XXXX | |
|
307 | ||
|
308 | Test passing '.' to --source | |
|
309 | $ printf "xxxx\n" > x | |
|
310 | $ hg fix -s . | |
|
311 | $ hg log --graph --template '{rev} {desc}\n' | |
|
312 | @ 4 change D | |
|
313 | | | |
|
314 | | o 2 change C | |
|
315 | | | | |
|
316 | | o 1 change B | |
|
317 | |/ | |
|
318 | o 0 change A | |
|
319 | ||
|
320 | $ cat * | |
|
321 | aaaa | |
|
322 | DDDD | |
|
323 | XXXX | |
|
324 | $ hg strip -qf 4 | |
|
325 | $ hg co -q 3 | |
|
326 | ||
|
327 | Test passing other branch to --source | |
|
328 | $ printf "xxxx\n" > x | |
|
329 | $ hg add x | |
|
330 | $ hg fix -s 2 | |
|
331 | $ hg log --graph --template '{rev} {desc}\n' | |
|
332 | o 4 change C | |
|
333 | | | |
|
334 | | @ 3 change D | |
|
335 | | | | |
|
336 | o | 1 change B | |
|
337 | |/ | |
|
338 | o 0 change A | |
|
339 | ||
|
340 | $ hg cat -r 4 b c | |
|
341 | bbbb | |
|
342 | CCCC | |
|
343 | $ cat * | |
|
344 | aaaa | |
|
345 | dddd | |
|
346 | xxxx | |
|
347 | $ hg strip -qf 4 | |
|
348 | ||
|
349 | Test passing multiple revisions to --source | |
|
350 | $ hg fix -s '2 + .' | |
|
351 | $ hg log --graph --template '{rev} {desc}\n' | |
|
352 | @ 5 change D | |
|
353 | | | |
|
354 | | o 4 change C | |
|
355 | | | | |
|
356 | | o 1 change B | |
|
357 | |/ | |
|
358 | o 0 change A | |
|
359 | ||
|
360 | $ hg cat -r 4 b c | |
|
361 | bbbb | |
|
362 | CCCC | |
|
363 | $ cat * | |
|
364 | aaaa | |
|
365 | DDDD | |
|
366 | XXXX | |
|
367 | ||
|
368 | $ cd .. | |
|
369 | #endif | |
|
370 | ||
|
265 | 371 |
The --all |
|
266 | 372 | it, including the working copy. Obsolete revisions are not fixed because that |
|
267 | 373 | could cause divergence. Public revisions would cause an abort because they are |
@@ -104,12 +104,13 b' Help text for fix.' | |||
|
104 | 104 | |
|
105 | 105 | options ([+] can be repeated): |
|
106 | 106 | |
|
107 | --all fix all non-public non-obsolete revisions | |
|
108 | --base REV [+] revisions to diff against (overrides automatic selection, | |
|
109 | and applies to every revision being fixed) | |
|
110 | -r --rev REV [+] revisions to fix | |
|
111 | -w --working-dir fix the working directory | |
|
112 | --whole always fix every line of a file | |
|
107 | --all fix all non-public non-obsolete revisions | |
|
108 | --base REV [+] revisions to diff against (overrides automatic selection, | |
|
109 | and applies to every revision being fixed) | |
|
110 | -r --rev REV [+] revisions to fix | |
|
111 | -s --source REV [+] fix the specified revisions and their descendants | |
|
112 | -w --working-dir fix the working directory | |
|
113 | --whole always fix every line of a file | |
|
113 | 114 | |
|
114 | 115 | (some details hidden, use --verbose to show complete help) |
|
115 | 116 |
General Comments 0
You need to be logged in to leave comments.
Login now