Show More
@@ -214,6 +214,13 b' baseopt = (' | |||||
214 | _(b'REV'), |
|
214 | _(b'REV'), | |
215 | ) |
|
215 | ) | |
216 | revopt = (b'r', b'rev', [], _(b'revisions to fix'), _(b'REV')) |
|
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 | wdiropt = (b'w', b'working-dir', False, _(b'fix the working directory')) |
|
224 | wdiropt = (b'w', b'working-dir', False, _(b'fix the working directory')) | |
218 | wholeopt = (b'', b'whole', False, _(b'always fix every line of a file')) |
|
225 | wholeopt = (b'', b'whole', False, _(b'always fix every line of a file')) | |
219 | usage = _(b'[OPTION]... [FILE]...') |
|
226 | usage = _(b'[OPTION]... [FILE]...') | |
@@ -221,7 +228,7 b" usage = _(b'[OPTION]... [FILE]...')" | |||||
221 |
|
228 | |||
222 | @command( |
|
229 | @command( | |
223 | b'fix', |
|
230 | b'fix', | |
224 | [allopt, baseopt, revopt, wdiropt, wholeopt], |
|
231 | [allopt, baseopt, revopt, sourceopt, wdiropt, wholeopt], | |
225 | usage, |
|
232 | usage, | |
226 | helpcategory=command.CATEGORY_FILE_CONTENTS, |
|
233 | helpcategory=command.CATEGORY_FILE_CONTENTS, | |
227 | ) |
|
234 | ) | |
@@ -249,8 +256,10 b' def fix(ui, repo, *pats, **opts):' | |||||
249 | override this default behavior, though it is not usually desirable to do so. |
|
256 | override this default behavior, though it is not usually desirable to do so. | |
250 | """ |
|
257 | """ | |
251 | opts = pycompat.byteskwargs(opts) |
|
258 | opts = pycompat.byteskwargs(opts) | |
252 | cmdutil.check_at_most_one_arg(opts, b'all', b'rev') |
|
259 | cmdutil.check_at_most_one_arg(opts, b'all', b'source', b'rev') | |
253 |
cmdutil.check_incompatible_arguments( |
|
260 | cmdutil.check_incompatible_arguments( | |
|
261 | opts, b'working_dir', [b'all', b'source'] | |||
|
262 | ) | |||
254 |
|
263 | |||
255 | with repo.wlock(), repo.lock(), repo.transaction(b'fix'): |
|
264 | with repo.wlock(), repo.lock(), repo.transaction(b'fix'): | |
256 | revstofix = getrevstofix(ui, repo, opts) |
|
265 | revstofix = getrevstofix(ui, repo, opts) | |
@@ -399,6 +408,14 b' def getrevstofix(ui, repo, opts):' | |||||
399 | """Returns the set of revision numbers that should be fixed""" |
|
408 | """Returns the set of revision numbers that should be fixed""" | |
400 | if opts[b'all']: |
|
409 | if opts[b'all']: | |
401 | revs = repo.revs(b'(not public() and not obsolete()) or wdir()') |
|
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 | else: |
|
419 | else: | |
403 | revs = set(scmutil.revrange(repo, opts[b'rev'])) |
|
420 | revs = set(scmutil.revrange(repo, opts[b'rev'])) | |
404 | if opts.get(b'working_dir'): |
|
421 | if opts.get(b'working_dir'): |
@@ -21,6 +21,7 b' relationships. We indicate fixed file co' | |||||
21 | $ cat >> $HGRCPATH <<EOF |
|
21 | $ cat >> $HGRCPATH <<EOF | |
22 | > [extensions] |
|
22 | > [extensions] | |
23 | > fix = |
|
23 | > fix = | |
|
24 | > strip = | |||
24 | > [fix] |
|
25 | > [fix] | |
25 | > uppercase-whole-file:command="$PYTHON" $UPPERCASEPY |
|
26 | > uppercase-whole-file:command="$PYTHON" $UPPERCASEPY | |
26 | > uppercase-whole-file:pattern=set:** |
|
27 | > uppercase-whole-file:pattern=set:** | |
@@ -262,6 +263,111 b' Change A was never a baserev because non' | |||||
262 |
|
263 | |||
263 | $ cd .. |
|
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 |
The --all |
|
371 | The --all flag should fix anything that wouldn't cause a problem if you fixed | |
266 | it, including the working copy. Obsolete revisions are not fixed because that |
|
372 | it, including the working copy. Obsolete revisions are not fixed because that | |
267 | could cause divergence. Public revisions would cause an abort because they are |
|
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 | options ([+] can be repeated): |
|
105 | options ([+] can be repeated): | |
106 |
|
106 | |||
107 | --all fix all non-public non-obsolete revisions |
|
107 | --all fix all non-public non-obsolete revisions | |
108 | --base REV [+] revisions to diff against (overrides automatic selection, |
|
108 | --base REV [+] revisions to diff against (overrides automatic selection, | |
109 | and applies to every revision being fixed) |
|
109 | and applies to every revision being fixed) | |
110 | -r --rev REV [+] revisions to fix |
|
110 | -r --rev REV [+] revisions to fix | |
111 | -w --working-dir fix the working directory |
|
111 | -s --source REV [+] fix the specified revisions and their descendants | |
112 | --whole always fix every line of a file |
|
112 | -w --working-dir fix the working directory | |
|
113 | --whole always fix every line of a file | |||
113 |
|
114 | |||
114 | (some details hidden, use --verbose to show complete help) |
|
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