tests/test-fix.t
author Pierre-Yves David <pierre-yves.david@octobus.net>
Fri, 15 Mar 2024 01:31:57 +0100
branchstable
changeset 51505 c9ceb4f60256
parent 50439 f4ff55583dec
permissions -rw-r--r--
phases: avoid N² behavior in `advanceboundary` We allowed duplicated entries in the deque, which each entry could potentially insert all its ancestors. So advancing boundary for the full repository would mean each revision would walk all its ancestors, resulting in O(N²) iteration. For repository of any decent size, N² is quickly insane. We introduce a simple set to avoid this and get back to reasonable performance.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
37560
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
     1
A script that implements uppercasing of specific lines in a file. This
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
     2
approximates the behavior of code formatters well enough for our tests.
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
     3
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
     4
  $ UPPERCASEPY="$TESTTMP/uppercase.py"
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
     5
  $ cat > $UPPERCASEPY <<EOF
47765
184d83ef2e59 tests: demonstrate bug in `hg fix` with incorrectly dirty working copy
Martin von Zweigbergk <martinvonz@google.com>
parents: 47128
diff changeset
     6
  > import re
37560
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
     7
  > import sys
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
     8
  > from mercurial.utils.procutil import setbinary
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
     9
  > setbinary(sys.stdin)
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
    10
  > setbinary(sys.stdout)
47067
ea563187ee7c tests: change the fixer commands to use the buffer attribute on stdio objects
Matt Harbison <matt_harbison@yahoo.com>
parents: 46838
diff changeset
    11
  > stdin = getattr(sys.stdin, 'buffer', sys.stdin)
ea563187ee7c tests: change the fixer commands to use the buffer attribute on stdio objects
Matt Harbison <matt_harbison@yahoo.com>
parents: 46838
diff changeset
    12
  > stdout = getattr(sys.stdout, 'buffer', sys.stdout)
37560
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
    13
  > lines = set()
47765
184d83ef2e59 tests: demonstrate bug in `hg fix` with incorrectly dirty working copy
Martin von Zweigbergk <martinvonz@google.com>
parents: 47128
diff changeset
    14
  > def format(text):
184d83ef2e59 tests: demonstrate bug in `hg fix` with incorrectly dirty working copy
Martin von Zweigbergk <martinvonz@google.com>
parents: 47128
diff changeset
    15
  >   return re.sub(b' +', b' ', text.upper())
37560
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
    16
  > for arg in sys.argv[1:]:
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
    17
  >   if arg == 'all':
47765
184d83ef2e59 tests: demonstrate bug in `hg fix` with incorrectly dirty working copy
Martin von Zweigbergk <martinvonz@google.com>
parents: 47128
diff changeset
    18
  >     stdout.write(format(stdin.read()))
37560
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
    19
  >     sys.exit(0)
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
    20
  >   else:
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
    21
  >     first, last = arg.split('-')
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
    22
  >     lines.update(range(int(first), int(last) + 1))
47067
ea563187ee7c tests: change the fixer commands to use the buffer attribute on stdio objects
Matt Harbison <matt_harbison@yahoo.com>
parents: 46838
diff changeset
    23
  > for i, line in enumerate(stdin.readlines()):
37560
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
    24
  >   if i + 1 in lines:
47765
184d83ef2e59 tests: demonstrate bug in `hg fix` with incorrectly dirty working copy
Martin von Zweigbergk <martinvonz@google.com>
parents: 47128
diff changeset
    25
  >     stdout.write(format(line))
37560
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
    26
  >   else:
47067
ea563187ee7c tests: change the fixer commands to use the buffer attribute on stdio objects
Matt Harbison <matt_harbison@yahoo.com>
parents: 46838
diff changeset
    27
  >     stdout.write(line)
37560
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
    28
  > EOF
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
    29
  $ TESTLINES="foo\nbar\nbaz\nqux\n"
39707
5abc47d4ca6b tests: quote PYTHON usage
Matt Harbison <matt_harbison@yahoo.com>
parents: 39111
diff changeset
    30
  $ printf $TESTLINES | "$PYTHON" $UPPERCASEPY
37560
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
    31
  foo
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
    32
  bar
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
    33
  baz
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
    34
  qux
39707
5abc47d4ca6b tests: quote PYTHON usage
Matt Harbison <matt_harbison@yahoo.com>
parents: 39111
diff changeset
    35
  $ printf $TESTLINES | "$PYTHON" $UPPERCASEPY all
37560
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
    36
  FOO
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
    37
  BAR
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
    38
  BAZ
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
    39
  QUX
39707
5abc47d4ca6b tests: quote PYTHON usage
Matt Harbison <matt_harbison@yahoo.com>
parents: 39111
diff changeset
    40
  $ printf $TESTLINES | "$PYTHON" $UPPERCASEPY 1-1
37560
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
    41
  FOO
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
    42
  bar
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
    43
  baz
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
    44
  qux
39707
5abc47d4ca6b tests: quote PYTHON usage
Matt Harbison <matt_harbison@yahoo.com>
parents: 39111
diff changeset
    45
  $ printf $TESTLINES | "$PYTHON" $UPPERCASEPY 1-2
37560
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
    46
  FOO
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
    47
  BAR
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
    48
  baz
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
    49
  qux
39707
5abc47d4ca6b tests: quote PYTHON usage
Matt Harbison <matt_harbison@yahoo.com>
parents: 39111
diff changeset
    50
  $ printf $TESTLINES | "$PYTHON" $UPPERCASEPY 2-3
37560
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
    51
  foo
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
    52
  BAR
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
    53
  BAZ
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
    54
  qux
39707
5abc47d4ca6b tests: quote PYTHON usage
Matt Harbison <matt_harbison@yahoo.com>
parents: 39111
diff changeset
    55
  $ printf $TESTLINES | "$PYTHON" $UPPERCASEPY 2-2 4-4
37560
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
    56
  foo
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
    57
  BAR
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
    58
  baz
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
    59
  QUX
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
    60
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
    61
Set up the config with two simple fixers: one that fixes specific line ranges,
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
    62
and one that always fixes the whole file. They both "fix" files by converting
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
    63
letters to uppercase. They use different file extensions, so each test case can
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
    64
choose which behavior to use by naming files.
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
    65
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
    66
  $ cat >> $HGRCPATH <<EOF
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
    67
  > [extensions]
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
    68
  > fix =
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
    69
  > [experimental]
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
    70
  > evolution.createmarkers=True
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
    71
  > evolution.allowunstable=True
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
    72
  > [fix]
39707
5abc47d4ca6b tests: quote PYTHON usage
Matt Harbison <matt_harbison@yahoo.com>
parents: 39111
diff changeset
    73
  > uppercase-whole-file:command="$PYTHON" $UPPERCASEPY all
40533
2ecf5c24d0cd fix: rename :fileset subconfig to :pattern
Danny Hooper <hooper@google.com>
parents: 40532
diff changeset
    74
  > uppercase-whole-file:pattern=set:**.whole
39707
5abc47d4ca6b tests: quote PYTHON usage
Matt Harbison <matt_harbison@yahoo.com>
parents: 39111
diff changeset
    75
  > uppercase-changed-lines:command="$PYTHON" $UPPERCASEPY
37560
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
    76
  > uppercase-changed-lines:linerange={first}-{last}
40533
2ecf5c24d0cd fix: rename :fileset subconfig to :pattern
Danny Hooper <hooper@google.com>
parents: 40532
diff changeset
    77
  > uppercase-changed-lines:pattern=set:**.changed
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
    78
  > EOF
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
    79
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
    80
Help text for fix.
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
    81
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
    82
  $ hg help fix
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
    83
  hg fix [OPTION]... [FILE]...
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
    84
  
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
    85
  rewrite file content in changesets or working directory
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
    86
  
50439
f4ff55583dec fix: highlight the required configuration and behavior of the fixer tools
Matt Harbison <matt_harbison@yahoo.com>
parents: 49976
diff changeset
    87
      Runs any configured tools to fix the content of files. (See 'hg help -e
f4ff55583dec fix: highlight the required configuration and behavior of the fixer tools
Matt Harbison <matt_harbison@yahoo.com>
parents: 49976
diff changeset
    88
      fix' for details about configuring tools.) Only affects files with
f4ff55583dec fix: highlight the required configuration and behavior of the fixer tools
Matt Harbison <matt_harbison@yahoo.com>
parents: 49976
diff changeset
    89
      changes, unless file arguments are provided. Only affects changed lines of
f4ff55583dec fix: highlight the required configuration and behavior of the fixer tools
Matt Harbison <matt_harbison@yahoo.com>
parents: 49976
diff changeset
    90
      files, unless the --whole flag is used. Some tools may always affect the
f4ff55583dec fix: highlight the required configuration and behavior of the fixer tools
Matt Harbison <matt_harbison@yahoo.com>
parents: 49976
diff changeset
    91
      whole file regardless of --whole.
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
    92
  
45218
3ea3b85df03f fix: update documentation to reflect preference for --source over --rev
Martin von Zweigbergk <martinvonz@google.com>
parents: 45215
diff changeset
    93
      If --working-dir is used, files with uncommitted changes in the working
3ea3b85df03f fix: update documentation to reflect preference for --source over --rev
Martin von Zweigbergk <martinvonz@google.com>
parents: 45215
diff changeset
    94
      copy will be fixed. Note that no backup are made.
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
    95
  
45218
3ea3b85df03f fix: update documentation to reflect preference for --source over --rev
Martin von Zweigbergk <martinvonz@google.com>
parents: 45215
diff changeset
    96
      If revisions are specified with --source, those revisions and their
3ea3b85df03f fix: update documentation to reflect preference for --source over --rev
Martin von Zweigbergk <martinvonz@google.com>
parents: 45215
diff changeset
    97
      descendants will be checked, and they may be replaced with new revisions
3ea3b85df03f fix: update documentation to reflect preference for --source over --rev
Martin von Zweigbergk <martinvonz@google.com>
parents: 45215
diff changeset
    98
      that have fixed file content. By automatically including the descendants,
3ea3b85df03f fix: update documentation to reflect preference for --source over --rev
Martin von Zweigbergk <martinvonz@google.com>
parents: 45215
diff changeset
    99
      no merging, rebasing, or evolution will be required. If an ancestor of the
3ea3b85df03f fix: update documentation to reflect preference for --source over --rev
Martin von Zweigbergk <martinvonz@google.com>
parents: 45215
diff changeset
   100
      working copy is included, then the working copy itself will also be fixed,
3ea3b85df03f fix: update documentation to reflect preference for --source over --rev
Martin von Zweigbergk <martinvonz@google.com>
parents: 45215
diff changeset
   101
      and the working copy will be updated to the fixed parent.
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   102
  
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   103
      When determining what lines of each file to fix at each revision, the
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   104
      whole set of revisions being fixed is considered, so that fixes to earlier
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   105
      revisions are not forgotten in later ones. The --base flag can be used to
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   106
      override this default behavior, though it is not usually desirable to do
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   107
      so.
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   108
  
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   109
  (use 'hg help -e fix' to show help for the fix extension)
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   110
  
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   111
  options ([+] can be repeated):
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   112
  
44574
5205b46bd887 fix: add a -s option to format a revision and its descendants
Martin von Zweigbergk <martinvonz@google.com>
parents: 44129
diff changeset
   113
      --all            fix all non-public non-obsolete revisions
5205b46bd887 fix: add a -s option to format a revision and its descendants
Martin von Zweigbergk <martinvonz@google.com>
parents: 44129
diff changeset
   114
      --base REV [+]   revisions to diff against (overrides automatic selection,
5205b46bd887 fix: add a -s option to format a revision and its descendants
Martin von Zweigbergk <martinvonz@google.com>
parents: 44129
diff changeset
   115
                       and applies to every revision being fixed)
5205b46bd887 fix: add a -s option to format a revision and its descendants
Martin von Zweigbergk <martinvonz@google.com>
parents: 44129
diff changeset
   116
   -s --source REV [+] fix the specified revisions and their descendants
5205b46bd887 fix: add a -s option to format a revision and its descendants
Martin von Zweigbergk <martinvonz@google.com>
parents: 44129
diff changeset
   117
   -w --working-dir    fix the working directory
5205b46bd887 fix: add a -s option to format a revision and its descendants
Martin von Zweigbergk <martinvonz@google.com>
parents: 44129
diff changeset
   118
      --whole          always fix every line of a file
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   119
  
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   120
  (some details hidden, use --verbose to show complete help)
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   121
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   122
  $ hg help -e fix
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   123
  fix extension - rewrite file content in changesets or working copy
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   124
  (EXPERIMENTAL)
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   125
  
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   126
  Provides a command that runs configured tools on the contents of modified
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   127
  files, writing back any fixes to the working copy or replacing changesets.
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   128
  
50439
f4ff55583dec fix: highlight the required configuration and behavior of the fixer tools
Matt Harbison <matt_harbison@yahoo.com>
parents: 49976
diff changeset
   129
  Fixer tools are run in the repository's root directory. This allows them to
f4ff55583dec fix: highlight the required configuration and behavior of the fixer tools
Matt Harbison <matt_harbison@yahoo.com>
parents: 49976
diff changeset
   130
  read configuration files from the working copy, or even write to the working
f4ff55583dec fix: highlight the required configuration and behavior of the fixer tools
Matt Harbison <matt_harbison@yahoo.com>
parents: 49976
diff changeset
   131
  copy. The working copy is not updated to match the revision being fixed. In
f4ff55583dec fix: highlight the required configuration and behavior of the fixer tools
Matt Harbison <matt_harbison@yahoo.com>
parents: 49976
diff changeset
   132
  fact, several revisions may be fixed in parallel. Writes to the working copy
f4ff55583dec fix: highlight the required configuration and behavior of the fixer tools
Matt Harbison <matt_harbison@yahoo.com>
parents: 49976
diff changeset
   133
  are not amended into the revision being fixed; fixer tools MUST always read
f4ff55583dec fix: highlight the required configuration and behavior of the fixer tools
Matt Harbison <matt_harbison@yahoo.com>
parents: 49976
diff changeset
   134
  content to be fixed from stdin, and write fixed file content back to stdout.
f4ff55583dec fix: highlight the required configuration and behavior of the fixer tools
Matt Harbison <matt_harbison@yahoo.com>
parents: 49976
diff changeset
   135
  
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   136
  Here is an example configuration that causes 'hg fix' to apply automatic
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   137
  formatting fixes to modified lines in C++ code:
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   138
  
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   139
    [fix]
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   140
    clang-format:command=clang-format --assume-filename={rootpath}
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   141
    clang-format:linerange=--lines={first}:{last}
40533
2ecf5c24d0cd fix: rename :fileset subconfig to :pattern
Danny Hooper <hooper@google.com>
parents: 40532
diff changeset
   142
    clang-format:pattern=set:**.cpp or **.hpp
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   143
  
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   144
  The :command suboption forms the first part of the shell command that will be
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   145
  used to fix a file. The content of the file is passed on standard input, and
40532
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   146
  the fixed file content is expected on standard output. Any output on standard
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   147
  error will be displayed as a warning. If the exit status is not zero, the file
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   148
  will not be affected. A placeholder warning is displayed if there is a non-
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   149
  zero exit status but no standard error output. Some values may be substituted
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   150
  into the command:
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   151
  
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   152
    {rootpath}  The path of the file being fixed, relative to the repo root
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   153
    {basename}  The name of the file being fixed, without the directory path
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   154
  
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   155
  If the :linerange suboption is set, the tool will only be run if there are
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   156
  changed lines in a file. The value of this suboption is appended to the shell
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   157
  command once for every range of changed lines in the file. Some values may be
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   158
  substituted into the command:
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   159
  
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   160
    {first}   The 1-based line number of the first line in the modified range
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   161
    {last}    The 1-based line number of the last line in the modified range
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   162
  
42756
ed0da6e0d6ee fix: allow tools to use :linerange, but also run if a file is unchanged
Danny Hooper <hooper@google.com>
parents: 42673
diff changeset
   163
  Deleted sections of a file will be ignored by :linerange, because there is no
ed0da6e0d6ee fix: allow tools to use :linerange, but also run if a file is unchanged
Danny Hooper <hooper@google.com>
parents: 42673
diff changeset
   164
  corresponding line range in the version being fixed.
ed0da6e0d6ee fix: allow tools to use :linerange, but also run if a file is unchanged
Danny Hooper <hooper@google.com>
parents: 42673
diff changeset
   165
  
ed0da6e0d6ee fix: allow tools to use :linerange, but also run if a file is unchanged
Danny Hooper <hooper@google.com>
parents: 42673
diff changeset
   166
  By default, tools that set :linerange will only be executed if there is at
ed0da6e0d6ee fix: allow tools to use :linerange, but also run if a file is unchanged
Danny Hooper <hooper@google.com>
parents: 42673
diff changeset
   167
  least one changed line range. This is meant to prevent accidents like running
ed0da6e0d6ee fix: allow tools to use :linerange, but also run if a file is unchanged
Danny Hooper <hooper@google.com>
parents: 42673
diff changeset
   168
  a code formatter in such a way that it unexpectedly reformats the whole file.
ed0da6e0d6ee fix: allow tools to use :linerange, but also run if a file is unchanged
Danny Hooper <hooper@google.com>
parents: 42673
diff changeset
   169
  If such a tool needs to operate on unchanged files, it should set the
ed0da6e0d6ee fix: allow tools to use :linerange, but also run if a file is unchanged
Danny Hooper <hooper@google.com>
parents: 42673
diff changeset
   170
  :skipclean suboption to false.
ed0da6e0d6ee fix: allow tools to use :linerange, but also run if a file is unchanged
Danny Hooper <hooper@google.com>
parents: 42673
diff changeset
   171
  
40533
2ecf5c24d0cd fix: rename :fileset subconfig to :pattern
Danny Hooper <hooper@google.com>
parents: 40532
diff changeset
   172
  The :pattern suboption determines which files will be passed through each
43227
f02d3c0eed18 fix: match patterns relative to root
Martin von Zweigbergk <martinvonz@google.com>
parents: 43226
diff changeset
   173
  configured tool. See 'hg help patterns' for possible values. However, all
f02d3c0eed18 fix: match patterns relative to root
Martin von Zweigbergk <martinvonz@google.com>
parents: 43226
diff changeset
   174
  patterns are relative to the repo root, even if that text says they are
f02d3c0eed18 fix: match patterns relative to root
Martin von Zweigbergk <martinvonz@google.com>
parents: 43226
diff changeset
   175
  relative to the current working directory. If there are file arguments to 'hg
f02d3c0eed18 fix: match patterns relative to root
Martin von Zweigbergk <martinvonz@google.com>
parents: 43226
diff changeset
   176
  fix', the intersection of these patterns is used.
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   177
  
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   178
  There is also a configurable limit for the maximum size of file that will be
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   179
  processed by 'hg fix':
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   180
  
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   181
    [fix]
40532
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   182
    maxfilesize = 2MB
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   183
  
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   184
  Normally, execution of configured tools will continue after a failure
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   185
  (indicated by a non-zero exit status). It can also be configured to abort
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   186
  after the first such failure, so that no files will be affected if any tool
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   187
  fails. This abort will also cause 'hg fix' to exit with a non-zero status:
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   188
  
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   189
    [fix]
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   190
    failure = abort
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   191
  
40566
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
   192
  When multiple tools are configured to affect a file, they execute in an order
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
   193
  defined by the :priority suboption. The priority suboption has a default value
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
   194
  of zero for each tool. Tools are executed in order of descending priority. The
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
   195
  execution order of tools with equal priority is unspecified. For example, you
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
   196
  could use the 'sort' and 'head' utilities to keep only the 10 smallest numbers
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
   197
  in a text file by ensuring that 'sort' runs before 'head':
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
   198
  
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
   199
    [fix]
41126
d8f5c615e811 tests: use more portable flags in test-fix.t
Danny Hooper <hooper@google.com>
parents: 41010
diff changeset
   200
    sort:command = sort -n
d8f5c615e811 tests: use more portable flags in test-fix.t
Danny Hooper <hooper@google.com>
parents: 41010
diff changeset
   201
    head:command = head -n 10
40566
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
   202
    sort:pattern = numbers.txt
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
   203
    head:pattern = numbers.txt
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
   204
    sort:priority = 2
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
   205
    head:priority = 1
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
   206
  
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
   207
  To account for changes made by each tool, the line numbers used for
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
   208
  incremental formatting are recomputed before executing the next tool. So, each
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
   209
  tool may see different values for the arguments added by the :linerange
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
   210
  suboption.
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
   211
  
42194
0da689a60163 fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents: 42008
diff changeset
   212
  Each fixer tool is allowed to return some metadata in addition to the fixed
0da689a60163 fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents: 42008
diff changeset
   213
  file content. The metadata must be placed before the file content on stdout,
0da689a60163 fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents: 42008
diff changeset
   214
  separated from the file content by a zero byte. The metadata is parsed as a
0da689a60163 fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents: 42008
diff changeset
   215
  JSON value (so, it should be UTF-8 encoded and contain no zero bytes). A fixer
0da689a60163 fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents: 42008
diff changeset
   216
  tool is expected to produce this metadata encoding if and only if the
0da689a60163 fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents: 42008
diff changeset
   217
  :metadata suboption is true:
0da689a60163 fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents: 42008
diff changeset
   218
  
0da689a60163 fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents: 42008
diff changeset
   219
    [fix]
0da689a60163 fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents: 42008
diff changeset
   220
    tool:command = tool --prepend-json-metadata
0da689a60163 fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents: 42008
diff changeset
   221
    tool:metadata = true
0da689a60163 fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents: 42008
diff changeset
   222
  
0da689a60163 fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents: 42008
diff changeset
   223
  The metadata values are passed to hooks, which can be used to print summaries
0da689a60163 fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents: 42008
diff changeset
   224
  or perform other post-fixing work. The supported hooks are:
0da689a60163 fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents: 42008
diff changeset
   225
  
0da689a60163 fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents: 42008
diff changeset
   226
    "postfixfile"
0da689a60163 fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents: 42008
diff changeset
   227
      Run once for each file in each revision where any fixer tools made changes
0da689a60163 fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents: 42008
diff changeset
   228
      to the file content. Provides "$HG_REV" and "$HG_PATH" to identify the file,
0da689a60163 fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents: 42008
diff changeset
   229
      and "$HG_METADATA" with a map of fixer names to metadata values from fixer
0da689a60163 fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents: 42008
diff changeset
   230
      tools that affected the file. Fixer tools that didn't affect the file have a
44048
61881b170140 fix: fix grammar/typos in hg help -e fix
timeless <timeless@mozdev.org>
parents: 43227
diff changeset
   231
      value of None. Only fixer tools that executed are present in the metadata.
42194
0da689a60163 fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents: 42008
diff changeset
   232
  
0da689a60163 fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents: 42008
diff changeset
   233
    "postfix"
0da689a60163 fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents: 42008
diff changeset
   234
      Run once after all files and revisions have been handled. Provides
0da689a60163 fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents: 42008
diff changeset
   235
      "$HG_REPLACEMENTS" with information about what revisions were created and
0da689a60163 fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents: 42008
diff changeset
   236
      made obsolete. Provides a boolean "$HG_WDIRWRITTEN" to indicate whether any
0da689a60163 fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents: 42008
diff changeset
   237
      files in the working copy were updated. Provides a list "$HG_METADATA"
0da689a60163 fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents: 42008
diff changeset
   238
      mapping fixer tool names to lists of metadata values returned from
0da689a60163 fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents: 42008
diff changeset
   239
      executions that modified a file. This aggregates the same metadata
0da689a60163 fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents: 42008
diff changeset
   240
      previously passed to the "postfixfile" hook.
0da689a60163 fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents: 42008
diff changeset
   241
  
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   242
  list of commands:
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   243
  
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   244
   fix           rewrite file content in changesets or working directory
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   245
  
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   246
  (use 'hg help -v -e fix' to show built-in aliases and global options)
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   247
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   248
There is no default behavior in the absence of --rev and --working-dir.
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   249
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   250
  $ hg init badusage
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   251
  $ cd badusage
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   252
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   253
  $ hg fix
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   254
  abort: no changesets specified
45807
f90943d753ef fix: suggest --source instead of --rev on empty revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 45771
diff changeset
   255
  (use --source or --working-dir)
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   256
  [255]
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   257
  $ hg fix --whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   258
  abort: no changesets specified
45807
f90943d753ef fix: suggest --source instead of --rev on empty revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 45771
diff changeset
   259
  (use --source or --working-dir)
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   260
  [255]
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   261
  $ hg fix --base 0
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   262
  abort: no changesets specified
45807
f90943d753ef fix: suggest --source instead of --rev on empty revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 45771
diff changeset
   263
  (use --source or --working-dir)
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   264
  [255]
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   265
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   266
Fixing a public revision isn't allowed. It should abort early enough that
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   267
nothing happens, even to the working directory.
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   268
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   269
  $ printf "hello\n" > hello.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   270
  $ hg commit -Aqm "hello"
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   271
  $ hg phase -r 0 --public
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   272
  $ hg fix -r 0
47069
5b6dd0d9171b rewriteutil: give examples of public changesets that can't be rewritten
Martin von Zweigbergk <martinvonz@google.com>
parents: 47018
diff changeset
   273
  abort: cannot fix public changesets: 6470986d2e7b
43936
699d6be3820a fix: use rewriteutil.precheck() instead of reimplementing it
Martin von Zweigbergk <martinvonz@google.com>
parents: 43227
diff changeset
   274
  (see 'hg help phases' for details)
45853
b4694ef45db5 errors: raise more specific errors from rewriteutil
Martin von Zweigbergk <martinvonz@google.com>
parents: 45840
diff changeset
   275
  [10]
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   276
  $ hg fix -r 0 --working-dir
47069
5b6dd0d9171b rewriteutil: give examples of public changesets that can't be rewritten
Martin von Zweigbergk <martinvonz@google.com>
parents: 47018
diff changeset
   277
  abort: cannot fix public changesets: 6470986d2e7b
43936
699d6be3820a fix: use rewriteutil.precheck() instead of reimplementing it
Martin von Zweigbergk <martinvonz@google.com>
parents: 43227
diff changeset
   278
  (see 'hg help phases' for details)
45853
b4694ef45db5 errors: raise more specific errors from rewriteutil
Martin von Zweigbergk <martinvonz@google.com>
parents: 45840
diff changeset
   279
  [10]
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   280
  $ hg cat -r tip hello.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   281
  hello
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   282
  $ cat hello.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   283
  hello
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   284
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   285
  $ cd ..
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   286
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   287
Fixing a clean working directory should do nothing. Even the --whole flag
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   288
shouldn't cause any clean files to be fixed. Specifying a clean file explicitly
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   289
should only fix it if the fixer always fixes the whole file. The combination of
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   290
an explicit filename and --whole should format the entire file regardless.
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   291
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   292
  $ hg init fixcleanwdir
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   293
  $ cd fixcleanwdir
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   294
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   295
  $ printf "hello\n" > hello.changed
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   296
  $ printf "world\n" > hello.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   297
  $ hg commit -Aqm "foo"
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   298
  $ hg fix --working-dir
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   299
  $ hg diff
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   300
  $ hg fix --working-dir --whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   301
  $ hg diff
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   302
  $ hg fix --working-dir *
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   303
  $ cat *
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   304
  hello
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   305
  WORLD
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   306
  $ hg revert --all --no-backup
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   307
  reverting hello.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   308
  $ hg fix --working-dir * --whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   309
  $ cat *
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   310
  HELLO
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   311
  WORLD
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   312
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   313
The same ideas apply to fixing a revision, so we create a revision that doesn't
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   314
modify either of the files in question and try fixing it. This also tests that
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   315
we ignore a file that doesn't match any configured fixer.
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   316
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   317
  $ hg revert --all --no-backup
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   318
  reverting hello.changed
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   319
  reverting hello.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   320
  $ printf "unimportant\n" > some.file
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   321
  $ hg commit -Aqm "some other file"
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   322
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   323
  $ hg fix -r .
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   324
  $ hg cat -r tip *
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   325
  hello
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   326
  world
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   327
  unimportant
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   328
  $ hg fix -r . --whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   329
  $ hg cat -r tip *
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   330
  hello
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   331
  world
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   332
  unimportant
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   333
  $ hg fix -r . *
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   334
  $ hg cat -r tip *
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   335
  hello
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   336
  WORLD
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   337
  unimportant
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   338
  $ hg fix -r . * --whole --config experimental.evolution.allowdivergence=true
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   339
  2 new content-divergent changesets
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   340
  $ hg cat -r tip *
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   341
  HELLO
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   342
  WORLD
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   343
  unimportant
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   344
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   345
  $ cd ..
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   346
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   347
Fixing the working directory should still work if there are no revisions.
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   348
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   349
  $ hg init norevisions
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   350
  $ cd norevisions
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   351
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   352
  $ printf "something\n" > something.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   353
  $ hg add
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   354
  adding something.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   355
  $ hg fix --working-dir
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   356
  $ cat something.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   357
  SOMETHING
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   358
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   359
  $ cd ..
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   360
47765
184d83ef2e59 tests: demonstrate bug in `hg fix` with incorrectly dirty working copy
Martin von Zweigbergk <martinvonz@google.com>
parents: 47128
diff changeset
   361
Test that the working copy is reported clean if formatting of the parent makes
184d83ef2e59 tests: demonstrate bug in `hg fix` with incorrectly dirty working copy
Martin von Zweigbergk <martinvonz@google.com>
parents: 47128
diff changeset
   362
it clean.
184d83ef2e59 tests: demonstrate bug in `hg fix` with incorrectly dirty working copy
Martin von Zweigbergk <martinvonz@google.com>
parents: 47128
diff changeset
   363
  $ hg init wc-already-formatted
184d83ef2e59 tests: demonstrate bug in `hg fix` with incorrectly dirty working copy
Martin von Zweigbergk <martinvonz@google.com>
parents: 47128
diff changeset
   364
  $ cd wc-already-formatted
184d83ef2e59 tests: demonstrate bug in `hg fix` with incorrectly dirty working copy
Martin von Zweigbergk <martinvonz@google.com>
parents: 47128
diff changeset
   365
184d83ef2e59 tests: demonstrate bug in `hg fix` with incorrectly dirty working copy
Martin von Zweigbergk <martinvonz@google.com>
parents: 47128
diff changeset
   366
  $ printf "hello   world\n" > hello.whole
184d83ef2e59 tests: demonstrate bug in `hg fix` with incorrectly dirty working copy
Martin von Zweigbergk <martinvonz@google.com>
parents: 47128
diff changeset
   367
  $ hg commit -Am initial
184d83ef2e59 tests: demonstrate bug in `hg fix` with incorrectly dirty working copy
Martin von Zweigbergk <martinvonz@google.com>
parents: 47128
diff changeset
   368
  adding hello.whole
184d83ef2e59 tests: demonstrate bug in `hg fix` with incorrectly dirty working copy
Martin von Zweigbergk <martinvonz@google.com>
parents: 47128
diff changeset
   369
  $ hg fix -w *
184d83ef2e59 tests: demonstrate bug in `hg fix` with incorrectly dirty working copy
Martin von Zweigbergk <martinvonz@google.com>
parents: 47128
diff changeset
   370
  $ hg st
184d83ef2e59 tests: demonstrate bug in `hg fix` with incorrectly dirty working copy
Martin von Zweigbergk <martinvonz@google.com>
parents: 47128
diff changeset
   371
  M hello.whole
184d83ef2e59 tests: demonstrate bug in `hg fix` with incorrectly dirty working copy
Martin von Zweigbergk <martinvonz@google.com>
parents: 47128
diff changeset
   372
  $ hg fix -s . *
184d83ef2e59 tests: demonstrate bug in `hg fix` with incorrectly dirty working copy
Martin von Zweigbergk <martinvonz@google.com>
parents: 47128
diff changeset
   373
  $ hg st
184d83ef2e59 tests: demonstrate bug in `hg fix` with incorrectly dirty working copy
Martin von Zweigbergk <martinvonz@google.com>
parents: 47128
diff changeset
   374
  $ hg diff
184d83ef2e59 tests: demonstrate bug in `hg fix` with incorrectly dirty working copy
Martin von Zweigbergk <martinvonz@google.com>
parents: 47128
diff changeset
   375
184d83ef2e59 tests: demonstrate bug in `hg fix` with incorrectly dirty working copy
Martin von Zweigbergk <martinvonz@google.com>
parents: 47128
diff changeset
   376
  $ cd ..
184d83ef2e59 tests: demonstrate bug in `hg fix` with incorrectly dirty working copy
Martin von Zweigbergk <martinvonz@google.com>
parents: 47128
diff changeset
   377
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   378
Test the effect of fixing the working directory for each possible status, with
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   379
and without providing explicit file arguments.
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   380
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   381
  $ hg init implicitlyfixstatus
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   382
  $ cd implicitlyfixstatus
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   383
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   384
  $ printf "modified\n" > modified.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   385
  $ printf "removed\n" > removed.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   386
  $ printf "deleted\n" > deleted.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   387
  $ printf "clean\n" > clean.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   388
  $ printf "ignored.whole" > .hgignore
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   389
  $ hg commit -Aqm "stuff"
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   390
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   391
  $ printf "modified!!!\n" > modified.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   392
  $ printf "unknown\n" > unknown.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   393
  $ printf "ignored\n" > ignored.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   394
  $ printf "added\n" > added.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   395
  $ hg add added.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   396
  $ hg remove removed.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   397
  $ rm deleted.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   398
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   399
  $ hg status --all
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   400
  M modified.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   401
  A added.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   402
  R removed.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   403
  ! deleted.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   404
  ? unknown.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   405
  I ignored.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   406
  C .hgignore
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   407
  C clean.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   408
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   409
  $ hg fix --working-dir
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   410
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   411
  $ hg status --all
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   412
  M modified.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   413
  A added.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   414
  R removed.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   415
  ! deleted.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   416
  ? unknown.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   417
  I ignored.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   418
  C .hgignore
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   419
  C clean.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   420
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   421
  $ cat *.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   422
  ADDED
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   423
  clean
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   424
  ignored
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   425
  MODIFIED!!!
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   426
  unknown
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   427
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   428
  $ printf "modified!!!\n" > modified.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   429
  $ printf "added\n" > added.whole
42008
7f6b375a8903 fix: allow fixing untracked files when given as arguments
Danny Hooper <hooper@google.com>
parents: 41126
diff changeset
   430
7f6b375a8903 fix: allow fixing untracked files when given as arguments
Danny Hooper <hooper@google.com>
parents: 41126
diff changeset
   431
Listing the files explicitly causes untracked files to also be fixed, but
7f6b375a8903 fix: allow fixing untracked files when given as arguments
Danny Hooper <hooper@google.com>
parents: 41126
diff changeset
   432
ignored files are still unaffected.
7f6b375a8903 fix: allow fixing untracked files when given as arguments
Danny Hooper <hooper@google.com>
parents: 41126
diff changeset
   433
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   434
  $ hg fix --working-dir *.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   435
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   436
  $ hg status --all
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   437
  M clean.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   438
  M modified.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   439
  A added.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   440
  R removed.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   441
  ! deleted.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   442
  ? unknown.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   443
  I ignored.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   444
  C .hgignore
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   445
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   446
  $ cat *.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   447
  ADDED
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   448
  CLEAN
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   449
  ignored
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   450
  MODIFIED!!!
42008
7f6b375a8903 fix: allow fixing untracked files when given as arguments
Danny Hooper <hooper@google.com>
parents: 41126
diff changeset
   451
  UNKNOWN
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   452
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   453
  $ cd ..
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   454
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   455
Test that incremental fixing works on files with additions, deletions, and
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   456
changes in multiple line ranges. Note that deletions do not generally cause
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   457
neighboring lines to be fixed, so we don't return a line range for purely
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   458
deleted sections. In the future we should support a :deletion config that
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   459
allows fixers to know where deletions are located.
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   460
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   461
  $ hg init incrementalfixedlines
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   462
  $ cd incrementalfixedlines
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   463
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   464
  $ printf "a\nb\nc\nd\ne\nf\ng\n" > foo.txt
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   465
  $ hg commit -Aqm "foo"
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   466
  $ printf "zz\na\nc\ndd\nee\nff\nf\ngg\n" > foo.txt
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   467
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   468
  $ hg --config "fix.fail:command=echo" \
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   469
  >    --config "fix.fail:linerange={first}:{last}" \
40533
2ecf5c24d0cd fix: rename :fileset subconfig to :pattern
Danny Hooper <hooper@google.com>
parents: 40532
diff changeset
   470
  >    --config "fix.fail:pattern=foo.txt" \
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   471
  >    fix --working-dir
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   472
  $ cat foo.txt
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   473
  1:1 4:6 8:8
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   474
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   475
  $ cd ..
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   476
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   477
Test that --whole fixes all lines regardless of the diffs present.
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   478
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   479
  $ hg init wholeignoresdiffs
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   480
  $ cd wholeignoresdiffs
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   481
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   482
  $ printf "a\nb\nc\nd\ne\nf\ng\n" > foo.changed
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   483
  $ hg commit -Aqm "foo"
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   484
  $ printf "zz\na\nc\ndd\nee\nff\nf\ngg\n" > foo.changed
42663
4b04244f2d5f fix: add some new test cases
Danny Hooper <hooper@google.com>
parents: 42655
diff changeset
   485
4b04244f2d5f fix: add some new test cases
Danny Hooper <hooper@google.com>
parents: 42655
diff changeset
   486
  $ hg fix --working-dir
4b04244f2d5f fix: add some new test cases
Danny Hooper <hooper@google.com>
parents: 42655
diff changeset
   487
  $ cat foo.changed
4b04244f2d5f fix: add some new test cases
Danny Hooper <hooper@google.com>
parents: 42655
diff changeset
   488
  ZZ
4b04244f2d5f fix: add some new test cases
Danny Hooper <hooper@google.com>
parents: 42655
diff changeset
   489
  a
4b04244f2d5f fix: add some new test cases
Danny Hooper <hooper@google.com>
parents: 42655
diff changeset
   490
  c
4b04244f2d5f fix: add some new test cases
Danny Hooper <hooper@google.com>
parents: 42655
diff changeset
   491
  DD
4b04244f2d5f fix: add some new test cases
Danny Hooper <hooper@google.com>
parents: 42655
diff changeset
   492
  EE
4b04244f2d5f fix: add some new test cases
Danny Hooper <hooper@google.com>
parents: 42655
diff changeset
   493
  FF
4b04244f2d5f fix: add some new test cases
Danny Hooper <hooper@google.com>
parents: 42655
diff changeset
   494
  f
4b04244f2d5f fix: add some new test cases
Danny Hooper <hooper@google.com>
parents: 42655
diff changeset
   495
  GG
4b04244f2d5f fix: add some new test cases
Danny Hooper <hooper@google.com>
parents: 42655
diff changeset
   496
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   497
  $ hg fix --working-dir --whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   498
  $ cat foo.changed
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   499
  ZZ
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   500
  A
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   501
  C
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   502
  DD
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   503
  EE
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   504
  FF
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   505
  F
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   506
  GG
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   507
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   508
  $ cd ..
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   509
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   510
We should do nothing with symlinks, and their targets should be unaffected. Any
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   511
other behavior would be more complicated to implement and harder to document.
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   512
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   513
#if symlink
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   514
  $ hg init dontmesswithsymlinks
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   515
  $ cd dontmesswithsymlinks
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   516
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   517
  $ printf "hello\n" > hello.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   518
  $ ln -s hello.whole hellolink
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   519
  $ hg add
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   520
  adding hello.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   521
  adding hellolink
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   522
  $ hg fix --working-dir hellolink
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   523
  $ hg status
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   524
  A hello.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   525
  A hellolink
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   526
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   527
  $ cd ..
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   528
#endif
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   529
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   530
We should allow fixers to run on binary files, even though this doesn't sound
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   531
like a common use case. There's not much benefit to disallowing it, and users
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   532
can add "and not binary()" to their filesets if needed. The Mercurial
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   533
philosophy is generally to not handle binary files specially anyway.
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   534
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   535
  $ hg init cantouchbinaryfiles
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   536
  $ cd cantouchbinaryfiles
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   537
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   538
  $ printf "hello\0\n" > hello.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   539
  $ hg add
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   540
  adding hello.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   541
  $ hg fix --working-dir 'set:binary()'
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   542
  $ cat hello.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   543
  HELLO\x00 (esc)
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   544
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   545
  $ cd ..
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   546
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   547
We have a config for the maximum size of file we will attempt to fix. This can
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   548
be helpful to avoid running unsuspecting fixer tools on huge inputs, which
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   549
could happen by accident without a well considered configuration. A more
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   550
precise configuration could use the size() fileset function if one global limit
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   551
is undesired.
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   552
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   553
  $ hg init maxfilesize
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   554
  $ cd maxfilesize
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   555
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   556
  $ printf "this file is huge\n" > hello.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   557
  $ hg add
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   558
  adding hello.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   559
  $ hg --config fix.maxfilesize=10 fix --working-dir
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   560
  ignoring file larger than 10 bytes: hello.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   561
  $ cat hello.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   562
  this file is huge
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   563
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   564
  $ cd ..
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   565
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   566
If we specify a file to fix, other files should be left alone, even if they
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   567
have changes.
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   568
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   569
  $ hg init fixonlywhatitellyouto
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   570
  $ cd fixonlywhatitellyouto
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   571
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   572
  $ printf "fix me!\n" > fixme.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   573
  $ printf "not me.\n" > notme.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   574
  $ hg add
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   575
  adding fixme.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   576
  adding notme.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   577
  $ hg fix --working-dir fixme.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   578
  $ cat *.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   579
  FIX ME!
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   580
  not me.
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   581
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   582
  $ cd ..
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   583
42663
4b04244f2d5f fix: add some new test cases
Danny Hooper <hooper@google.com>
parents: 42655
diff changeset
   584
If we try to fix a missing file, we still fix other files.
4b04244f2d5f fix: add some new test cases
Danny Hooper <hooper@google.com>
parents: 42655
diff changeset
   585
4b04244f2d5f fix: add some new test cases
Danny Hooper <hooper@google.com>
parents: 42655
diff changeset
   586
  $ hg init fixmissingfile
4b04244f2d5f fix: add some new test cases
Danny Hooper <hooper@google.com>
parents: 42655
diff changeset
   587
  $ cd fixmissingfile
4b04244f2d5f fix: add some new test cases
Danny Hooper <hooper@google.com>
parents: 42655
diff changeset
   588
4b04244f2d5f fix: add some new test cases
Danny Hooper <hooper@google.com>
parents: 42655
diff changeset
   589
  $ printf "fix me!\n" > foo.whole
4b04244f2d5f fix: add some new test cases
Danny Hooper <hooper@google.com>
parents: 42655
diff changeset
   590
  $ hg add
4b04244f2d5f fix: add some new test cases
Danny Hooper <hooper@google.com>
parents: 42655
diff changeset
   591
  adding foo.whole
4b04244f2d5f fix: add some new test cases
Danny Hooper <hooper@google.com>
parents: 42655
diff changeset
   592
  $ hg fix --working-dir foo.whole bar.whole
4b04244f2d5f fix: add some new test cases
Danny Hooper <hooper@google.com>
parents: 42655
diff changeset
   593
  bar.whole: $ENOENT$
4b04244f2d5f fix: add some new test cases
Danny Hooper <hooper@google.com>
parents: 42655
diff changeset
   594
  $ cat *.whole
4b04244f2d5f fix: add some new test cases
Danny Hooper <hooper@google.com>
parents: 42655
diff changeset
   595
  FIX ME!
4b04244f2d5f fix: add some new test cases
Danny Hooper <hooper@google.com>
parents: 42655
diff changeset
   596
4b04244f2d5f fix: add some new test cases
Danny Hooper <hooper@google.com>
parents: 42655
diff changeset
   597
  $ cd ..
4b04244f2d5f fix: add some new test cases
Danny Hooper <hooper@google.com>
parents: 42655
diff changeset
   598
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   599
Specifying a directory name should fix all its files and subdirectories.
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   600
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   601
  $ hg init fixdirectory
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   602
  $ cd fixdirectory
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   603
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   604
  $ mkdir -p dir1/dir2
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   605
  $ printf "foo\n" > foo.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   606
  $ printf "bar\n" > dir1/bar.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   607
  $ printf "baz\n" > dir1/dir2/baz.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   608
  $ hg add
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   609
  adding dir1/bar.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   610
  adding dir1/dir2/baz.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   611
  adding foo.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   612
  $ hg fix --working-dir dir1
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   613
  $ cat foo.whole dir1/bar.whole dir1/dir2/baz.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   614
  foo
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   615
  BAR
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   616
  BAZ
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   617
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   618
  $ cd ..
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   619
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   620
Fixing a file in the working directory that needs no fixes should not actually
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   621
write back to the file, so for example the mtime shouldn't change.
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   622
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   623
  $ hg init donttouchunfixedfiles
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   624
  $ cd donttouchunfixedfiles
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   625
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   626
  $ printf "NO FIX NEEDED\n" > foo.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   627
  $ hg add
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   628
  adding foo.whole
37798
8fa3396a832d test-fix: fix use of 'f --newer' to check that foo.whole is not updated
Yuya Nishihara <yuya@tcha.org>
parents: 37791
diff changeset
   629
  $ cp -p foo.whole foo.whole.orig
37809
80695628adcb test-fix: normalize precision of mtime copied by 'cp -p'
Yuya Nishihara <yuya@tcha.org>
parents: 37798
diff changeset
   630
  $ cp -p foo.whole.orig foo.whole
37593
314f39e5fa86 tests: use `f --newer` instead of `stat -c` in test-fix.t
Augie Fackler <augie@google.com>
parents: 37560
diff changeset
   631
  $ sleep 2 # mtime has a resolution of one or two seconds.
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   632
  $ hg fix --working-dir
37798
8fa3396a832d test-fix: fix use of 'f --newer' to check that foo.whole is not updated
Yuya Nishihara <yuya@tcha.org>
parents: 37791
diff changeset
   633
  $ f foo.whole.orig --newer foo.whole
8fa3396a832d test-fix: fix use of 'f --newer' to check that foo.whole is not updated
Yuya Nishihara <yuya@tcha.org>
parents: 37791
diff changeset
   634
  foo.whole.orig: newer than foo.whole
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   635
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   636
  $ cd ..
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   637
38967
a009589cd32a fix: determine fixer tool failure by exit code instead of stderr
Danny Hooper <hooper@google.com>
parents: 38590
diff changeset
   638
When a fixer prints to stderr, we don't assume that it has failed. We show the
a009589cd32a fix: determine fixer tool failure by exit code instead of stderr
Danny Hooper <hooper@google.com>
parents: 38590
diff changeset
   639
error messages to the user, and we still let the fixer affect the file it was
a009589cd32a fix: determine fixer tool failure by exit code instead of stderr
Danny Hooper <hooper@google.com>
parents: 38590
diff changeset
   640
fixing if its exit code is zero. Some code formatters might emit error messages
a009589cd32a fix: determine fixer tool failure by exit code instead of stderr
Danny Hooper <hooper@google.com>
parents: 38590
diff changeset
   641
on stderr and nothing on stdout, which would cause us the clear the file,
a009589cd32a fix: determine fixer tool failure by exit code instead of stderr
Danny Hooper <hooper@google.com>
parents: 38590
diff changeset
   642
except that they also exit with a non-zero code. We show the user which fixer
a009589cd32a fix: determine fixer tool failure by exit code instead of stderr
Danny Hooper <hooper@google.com>
parents: 38590
diff changeset
   643
emitted the stderr, and which revision, but we assume that the fixer will print
40532
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   644
the filename if it is relevant (since the issue may be non-specific). There is
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   645
also a config to abort (without affecting any files whatsoever) if we see any
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   646
tool with a non-zero exit status.
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   647
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   648
  $ hg init showstderr
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   649
  $ cd showstderr
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   650
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   651
  $ printf "hello\n" > hello.txt
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   652
  $ hg add
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   653
  adding hello.txt
40532
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   654
  $ cat > $TESTTMP/work.sh <<'EOF'
37791
72ccb0716302 tests: stabilize test-fix.t for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 37595
diff changeset
   655
  > printf 'HELLO\n'
40532
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   656
  > printf "$@: some\nerror that didn't stop the tool" >&2
38967
a009589cd32a fix: determine fixer tool failure by exit code instead of stderr
Danny Hooper <hooper@google.com>
parents: 38590
diff changeset
   657
  > exit 0 # success despite the stderr output
37791
72ccb0716302 tests: stabilize test-fix.t for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 37595
diff changeset
   658
  > EOF
40532
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   659
  $ hg --config "fix.work:command=sh $TESTTMP/work.sh {rootpath}" \
40533
2ecf5c24d0cd fix: rename :fileset subconfig to :pattern
Danny Hooper <hooper@google.com>
parents: 40532
diff changeset
   660
  >    --config "fix.work:pattern=hello.txt" \
40532
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   661
  >    fix --working-dir
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   662
  [wdir] work: hello.txt: some
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   663
  [wdir] work: error that didn't stop the tool
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   664
  $ cat hello.txt
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   665
  HELLO
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   666
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   667
  $ printf "goodbye\n" > hello.txt
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   668
  $ printf "foo\n" > foo.whole
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   669
  $ hg add
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   670
  adding foo.whole
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   671
  $ cat > $TESTTMP/fail.sh <<'EOF'
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   672
  > printf 'GOODBYE\n'
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   673
  > printf "$@: some\nerror that did stop the tool\n" >&2
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   674
  > exit 42 # success despite the stdout output
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   675
  > EOF
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   676
  $ hg --config "fix.fail:command=sh $TESTTMP/fail.sh {rootpath}" \
40533
2ecf5c24d0cd fix: rename :fileset subconfig to :pattern
Danny Hooper <hooper@google.com>
parents: 40532
diff changeset
   677
  >    --config "fix.fail:pattern=hello.txt" \
40532
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   678
  >    --config "fix.failure=abort" \
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   679
  >    fix --working-dir
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   680
  [wdir] fail: hello.txt: some
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   681
  [wdir] fail: error that did stop the tool
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   682
  abort: no fixes will be applied
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   683
  (use --config fix.failure=continue to apply any successful fixes anyway)
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   684
  [255]
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   685
  $ cat hello.txt
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   686
  goodbye
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   687
  $ cat foo.whole
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   688
  foo
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   689
38967
a009589cd32a fix: determine fixer tool failure by exit code instead of stderr
Danny Hooper <hooper@google.com>
parents: 38590
diff changeset
   690
  $ hg --config "fix.fail:command=sh $TESTTMP/fail.sh {rootpath}" \
40533
2ecf5c24d0cd fix: rename :fileset subconfig to :pattern
Danny Hooper <hooper@google.com>
parents: 40532
diff changeset
   691
  >    --config "fix.fail:pattern=hello.txt" \
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   692
  >    fix --working-dir
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   693
  [wdir] fail: hello.txt: some
40532
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   694
  [wdir] fail: error that did stop the tool
38967
a009589cd32a fix: determine fixer tool failure by exit code instead of stderr
Danny Hooper <hooper@google.com>
parents: 38590
diff changeset
   695
  $ cat hello.txt
a009589cd32a fix: determine fixer tool failure by exit code instead of stderr
Danny Hooper <hooper@google.com>
parents: 38590
diff changeset
   696
  goodbye
40532
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   697
  $ cat foo.whole
93bab80993f4 fix: add a config to abort when a fixer tool fails
Danny Hooper <hooper@google.com>
parents: 39707
diff changeset
   698
  FOO
38967
a009589cd32a fix: determine fixer tool failure by exit code instead of stderr
Danny Hooper <hooper@google.com>
parents: 38590
diff changeset
   699
a009589cd32a fix: determine fixer tool failure by exit code instead of stderr
Danny Hooper <hooper@google.com>
parents: 38590
diff changeset
   700
  $ hg --config "fix.fail:command=exit 42" \
40533
2ecf5c24d0cd fix: rename :fileset subconfig to :pattern
Danny Hooper <hooper@google.com>
parents: 40532
diff changeset
   701
  >    --config "fix.fail:pattern=hello.txt" \
38967
a009589cd32a fix: determine fixer tool failure by exit code instead of stderr
Danny Hooper <hooper@google.com>
parents: 38590
diff changeset
   702
  >    fix --working-dir
a009589cd32a fix: determine fixer tool failure by exit code instead of stderr
Danny Hooper <hooper@google.com>
parents: 38590
diff changeset
   703
  [wdir] fail: exited with status 42
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   704
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   705
  $ cd ..
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   706
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   707
Fixing the working directory and its parent revision at the same time should
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   708
check out the replacement revision for the parent. This prevents any new
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   709
uncommitted changes from appearing. We test this for a clean working directory
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   710
and a dirty one. In both cases, all lines/files changed since the grandparent
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   711
will be fixed. The grandparent is the "baserev" for both the parent and the
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   712
working copy.
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   713
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   714
  $ hg init fixdotandcleanwdir
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   715
  $ cd fixdotandcleanwdir
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   716
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   717
  $ printf "hello\n" > hello.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   718
  $ printf "world\n" > world.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   719
  $ hg commit -Aqm "the parent commit"
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   720
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   721
  $ hg parents --template '{rev} {desc}\n'
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   722
  0 the parent commit
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   723
  $ hg fix --working-dir -r .
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   724
  $ hg parents --template '{rev} {desc}\n'
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   725
  1 the parent commit
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   726
  $ hg cat -r . *.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   727
  HELLO
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   728
  WORLD
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   729
  $ cat *.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   730
  HELLO
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   731
  WORLD
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   732
  $ hg status
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   733
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   734
  $ cd ..
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   735
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   736
Same test with a dirty working copy.
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   737
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   738
  $ hg init fixdotanddirtywdir
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   739
  $ cd fixdotanddirtywdir
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   740
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   741
  $ printf "hello\n" > hello.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   742
  $ printf "world\n" > world.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   743
  $ hg commit -Aqm "the parent commit"
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   744
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   745
  $ printf "hello,\n" > hello.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   746
  $ printf "world!\n" > world.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   747
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   748
  $ hg parents --template '{rev} {desc}\n'
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   749
  0 the parent commit
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   750
  $ hg fix --working-dir -r .
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   751
  $ hg parents --template '{rev} {desc}\n'
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   752
  1 the parent commit
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   753
  $ hg cat -r . *.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   754
  HELLO
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   755
  WORLD
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   756
  $ cat *.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   757
  HELLO,
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   758
  WORLD!
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   759
  $ hg status
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   760
  M hello.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   761
  M world.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   762
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   763
  $ cd ..
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   764
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   765
When we have a chain of commits that change mutually exclusive lines of code,
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   766
we should be able to do incremental fixing that causes each commit in the chain
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   767
to include fixes made to the previous commits. This prevents children from
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   768
backing out the fixes made in their parents. A dirty working directory is
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   769
conceptually similar to another commit in the chain.
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   770
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   771
  $ hg init incrementallyfixchain
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   772
  $ cd incrementallyfixchain
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   773
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   774
  $ cat > file.changed <<EOF
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   775
  > first
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   776
  > second
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   777
  > third
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   778
  > fourth
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   779
  > fifth
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   780
  > EOF
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   781
  $ hg commit -Aqm "the common ancestor (the baserev)"
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   782
  $ cat > file.changed <<EOF
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   783
  > first (changed)
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   784
  > second
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   785
  > third
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   786
  > fourth
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   787
  > fifth
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   788
  > EOF
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   789
  $ hg commit -Aqm "the first commit to fix"
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   790
  $ cat > file.changed <<EOF
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   791
  > first (changed)
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   792
  > second
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   793
  > third (changed)
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   794
  > fourth
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   795
  > fifth
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   796
  > EOF
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   797
  $ hg commit -Aqm "the second commit to fix"
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   798
  $ cat > file.changed <<EOF
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   799
  > first (changed)
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   800
  > second
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   801
  > third (changed)
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   802
  > fourth
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   803
  > fifth (changed)
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   804
  > EOF
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   805
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   806
  $ hg fix -r . -r '.^' --working-dir
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   807
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   808
  $ hg parents --template '{rev}\n'
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   809
  4
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   810
  $ hg cat -r '.^^' file.changed
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   811
  first
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   812
  second
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   813
  third
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   814
  fourth
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   815
  fifth
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   816
  $ hg cat -r '.^' file.changed
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   817
  FIRST (CHANGED)
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   818
  second
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   819
  third
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   820
  fourth
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   821
  fifth
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   822
  $ hg cat -r . file.changed
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   823
  FIRST (CHANGED)
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   824
  second
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   825
  THIRD (CHANGED)
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   826
  fourth
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   827
  fifth
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   828
  $ cat file.changed
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   829
  FIRST (CHANGED)
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   830
  second
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   831
  THIRD (CHANGED)
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   832
  fourth
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   833
  FIFTH (CHANGED)
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   834
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   835
  $ cd ..
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   836
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   837
If we incrementally fix a merge commit, we should fix any lines that changed
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   838
versus either parent. You could imagine only fixing the intersection or some
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   839
other subset, but this is necessary if either parent is being fixed. It
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   840
prevents us from forgetting fixes made in either parent.
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   841
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   842
  $ hg init incrementallyfixmergecommit
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   843
  $ cd incrementallyfixmergecommit
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   844
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   845
  $ printf "a\nb\nc\n" > file.changed
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   846
  $ hg commit -Aqm "ancestor"
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   847
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   848
  $ printf "aa\nb\nc\n" > file.changed
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   849
  $ hg commit -m "change a"
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   850
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   851
  $ hg checkout '.^'
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   852
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   853
  $ printf "a\nb\ncc\n" > file.changed
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   854
  $ hg commit -m "change c"
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   855
  created new head
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   856
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   857
  $ hg merge
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   858
  merging file.changed
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   859
  0 files updated, 1 files merged, 0 files removed, 0 files unresolved
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   860
  (branch merge, don't forget to commit)
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   861
  $ hg commit -m "merge"
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   862
  $ hg cat -r . file.changed
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   863
  aa
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   864
  b
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   865
  cc
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   866
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   867
  $ hg fix -r . --working-dir
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   868
  $ hg cat -r . file.changed
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   869
  AA
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   870
  b
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   871
  CC
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   872
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   873
  $ cd ..
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   874
47886
86a60679cf61 fix: again allow formatting the working copy while merging
Martin von Zweigbergk <martinvonz@google.com>
parents: 47767
diff changeset
   875
We should be allowed to fix the working (and only the working copy) while
86a60679cf61 fix: again allow formatting the working copy while merging
Martin von Zweigbergk <martinvonz@google.com>
parents: 47767
diff changeset
   876
merging.
86a60679cf61 fix: again allow formatting the working copy while merging
Martin von Zweigbergk <martinvonz@google.com>
parents: 47767
diff changeset
   877
86a60679cf61 fix: again allow formatting the working copy while merging
Martin von Zweigbergk <martinvonz@google.com>
parents: 47767
diff changeset
   878
  $ hg init fixworkingcopywhilemerging
86a60679cf61 fix: again allow formatting the working copy while merging
Martin von Zweigbergk <martinvonz@google.com>
parents: 47767
diff changeset
   879
  $ cd fixworkingcopywhilemerging
86a60679cf61 fix: again allow formatting the working copy while merging
Martin von Zweigbergk <martinvonz@google.com>
parents: 47767
diff changeset
   880
86a60679cf61 fix: again allow formatting the working copy while merging
Martin von Zweigbergk <martinvonz@google.com>
parents: 47767
diff changeset
   881
  $ printf "a\nb\nc\n" > file.changed
86a60679cf61 fix: again allow formatting the working copy while merging
Martin von Zweigbergk <martinvonz@google.com>
parents: 47767
diff changeset
   882
  $ hg commit -Aqm "ancestor"
86a60679cf61 fix: again allow formatting the working copy while merging
Martin von Zweigbergk <martinvonz@google.com>
parents: 47767
diff changeset
   883
86a60679cf61 fix: again allow formatting the working copy while merging
Martin von Zweigbergk <martinvonz@google.com>
parents: 47767
diff changeset
   884
  $ printf "aa\nb\nc\n" > file.changed
86a60679cf61 fix: again allow formatting the working copy while merging
Martin von Zweigbergk <martinvonz@google.com>
parents: 47767
diff changeset
   885
  $ hg commit -m "change a"
86a60679cf61 fix: again allow formatting the working copy while merging
Martin von Zweigbergk <martinvonz@google.com>
parents: 47767
diff changeset
   886
86a60679cf61 fix: again allow formatting the working copy while merging
Martin von Zweigbergk <martinvonz@google.com>
parents: 47767
diff changeset
   887
  $ hg checkout '.^'
86a60679cf61 fix: again allow formatting the working copy while merging
Martin von Zweigbergk <martinvonz@google.com>
parents: 47767
diff changeset
   888
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
86a60679cf61 fix: again allow formatting the working copy while merging
Martin von Zweigbergk <martinvonz@google.com>
parents: 47767
diff changeset
   889
  $ printf "a\nb\ncc\n" > file.changed
86a60679cf61 fix: again allow formatting the working copy while merging
Martin von Zweigbergk <martinvonz@google.com>
parents: 47767
diff changeset
   890
  $ hg commit -m "change c"
86a60679cf61 fix: again allow formatting the working copy while merging
Martin von Zweigbergk <martinvonz@google.com>
parents: 47767
diff changeset
   891
  created new head
86a60679cf61 fix: again allow formatting the working copy while merging
Martin von Zweigbergk <martinvonz@google.com>
parents: 47767
diff changeset
   892
86a60679cf61 fix: again allow formatting the working copy while merging
Martin von Zweigbergk <martinvonz@google.com>
parents: 47767
diff changeset
   893
  $ hg merge
86a60679cf61 fix: again allow formatting the working copy while merging
Martin von Zweigbergk <martinvonz@google.com>
parents: 47767
diff changeset
   894
  merging file.changed
86a60679cf61 fix: again allow formatting the working copy while merging
Martin von Zweigbergk <martinvonz@google.com>
parents: 47767
diff changeset
   895
  0 files updated, 1 files merged, 0 files removed, 0 files unresolved
86a60679cf61 fix: again allow formatting the working copy while merging
Martin von Zweigbergk <martinvonz@google.com>
parents: 47767
diff changeset
   896
  (branch merge, don't forget to commit)
86a60679cf61 fix: again allow formatting the working copy while merging
Martin von Zweigbergk <martinvonz@google.com>
parents: 47767
diff changeset
   897
  $ cat file.changed
86a60679cf61 fix: again allow formatting the working copy while merging
Martin von Zweigbergk <martinvonz@google.com>
parents: 47767
diff changeset
   898
  aa
86a60679cf61 fix: again allow formatting the working copy while merging
Martin von Zweigbergk <martinvonz@google.com>
parents: 47767
diff changeset
   899
  b
86a60679cf61 fix: again allow formatting the working copy while merging
Martin von Zweigbergk <martinvonz@google.com>
parents: 47767
diff changeset
   900
  cc
86a60679cf61 fix: again allow formatting the working copy while merging
Martin von Zweigbergk <martinvonz@google.com>
parents: 47767
diff changeset
   901
Not allowed to fix a parent of the working copy while merging
86a60679cf61 fix: again allow formatting the working copy while merging
Martin von Zweigbergk <martinvonz@google.com>
parents: 47767
diff changeset
   902
  $ hg fix -r . --working-dir
86a60679cf61 fix: again allow formatting the working copy while merging
Martin von Zweigbergk <martinvonz@google.com>
parents: 47767
diff changeset
   903
  abort: outstanding uncommitted merge
86a60679cf61 fix: again allow formatting the working copy while merging
Martin von Zweigbergk <martinvonz@google.com>
parents: 47767
diff changeset
   904
  (use 'hg commit' or 'hg merge --abort')
86a60679cf61 fix: again allow formatting the working copy while merging
Martin von Zweigbergk <martinvonz@google.com>
parents: 47767
diff changeset
   905
  [20]
86a60679cf61 fix: again allow formatting the working copy while merging
Martin von Zweigbergk <martinvonz@google.com>
parents: 47767
diff changeset
   906
  $ hg fix --working-dir
86a60679cf61 fix: again allow formatting the working copy while merging
Martin von Zweigbergk <martinvonz@google.com>
parents: 47767
diff changeset
   907
  $ cat file.changed
86a60679cf61 fix: again allow formatting the working copy while merging
Martin von Zweigbergk <martinvonz@google.com>
parents: 47767
diff changeset
   908
  AA
86a60679cf61 fix: again allow formatting the working copy while merging
Martin von Zweigbergk <martinvonz@google.com>
parents: 47767
diff changeset
   909
  b
86a60679cf61 fix: again allow formatting the working copy while merging
Martin von Zweigbergk <martinvonz@google.com>
parents: 47767
diff changeset
   910
  CC
86a60679cf61 fix: again allow formatting the working copy while merging
Martin von Zweigbergk <martinvonz@google.com>
parents: 47767
diff changeset
   911
86a60679cf61 fix: again allow formatting the working copy while merging
Martin von Zweigbergk <martinvonz@google.com>
parents: 47767
diff changeset
   912
  $ cd ..
86a60679cf61 fix: again allow formatting the working copy while merging
Martin von Zweigbergk <martinvonz@google.com>
parents: 47767
diff changeset
   913
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   914
Abort fixing revisions if there is an unfinished operation. We don't want to
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   915
make things worse by editing files or stripping/obsoleting things. Also abort
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   916
fixing the working directory if there are unresolved merge conflicts.
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   917
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   918
  $ hg init abortunresolved
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   919
  $ cd abortunresolved
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   920
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   921
  $ echo "foo1" > foo.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   922
  $ hg commit -Aqm "foo 1"
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   923
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   924
  $ hg update null
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   925
  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   926
  $ echo "foo2" > foo.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   927
  $ hg commit -Aqm "foo 2"
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   928
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   929
  $ hg --config extensions.rebase= rebase -r 1 -d 0
45771
f90a5c211251 rebase: change and standarize template for rebase's one-line summary
Martin von Zweigbergk <martinvonz@google.com>
parents: 45218
diff changeset
   930
  rebasing 1:c3b6dc0e177a tip "foo 2"
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   931
  merging foo.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   932
  warning: conflicts while merging foo.whole! (edit, then use 'hg resolve --mark')
45150
dc5e5577af39 error: unify the error message formats for 'rebase' and 'unshelve'
Daniel Ploch <dploch@google.com>
parents: 44575
diff changeset
   933
  unresolved conflicts (see 'hg resolve', then 'hg rebase --continue')
45826
21733e8c924f errors: add config that lets user get more detailed exit codes
Martin von Zweigbergk <martinvonz@google.com>
parents: 45807
diff changeset
   934
  [240]
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   935
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   936
  $ hg --config extensions.rebase= fix --working-dir
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   937
  abort: unresolved conflicts
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   938
  (use 'hg resolve')
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   939
  [255]
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   940
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   941
  $ hg --config extensions.rebase= fix -r .
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   942
  abort: rebase in progress
45215
a253ded5b03d morestatus: mention --stop even if not using --verbose
Kyle Lippincott <spectral@google.com>
parents: 45150
diff changeset
   943
  (use 'hg rebase --continue', 'hg rebase --abort', or 'hg rebase --stop')
45840
527ce85c2e60 errors: introduce StateError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents: 45826
diff changeset
   944
  [20]
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   945
42363
b02f3aa2fab5 test: add missing 'cd ..' to test case
Danny Hooper <hooper@google.com>
parents: 42194
diff changeset
   946
  $ cd ..
b02f3aa2fab5 test: add missing 'cd ..' to test case
Danny Hooper <hooper@google.com>
parents: 42194
diff changeset
   947
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   948
When fixing a file that was renamed, we should diff against the source of the
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   949
rename for incremental fixing and we should correctly reproduce the rename in
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   950
the replacement revision.
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   951
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   952
  $ hg init fixrenamecommit
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   953
  $ cd fixrenamecommit
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   954
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   955
  $ printf "a\nb\nc\n" > source.changed
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   956
  $ hg commit -Aqm "source revision"
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   957
  $ hg move source.changed dest.changed
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   958
  $ printf "a\nb\ncc\n" > dest.changed
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   959
  $ hg commit -m "dest revision"
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   960
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   961
  $ hg fix -r .
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   962
  $ hg log -r tip --copies --template "{file_copies}\n"
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   963
  dest.changed (source.changed)
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   964
  $ hg cat -r tip dest.changed
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   965
  a
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   966
  b
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   967
  CC
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   968
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   969
  $ cd ..
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   970
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   971
When fixing revisions that remove files we must ensure that the replacement
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   972
actually removes the file, whereas it could accidentally leave it unchanged or
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   973
write an empty string to it.
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   974
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   975
  $ hg init fixremovedfile
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   976
  $ cd fixremovedfile
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   977
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   978
  $ printf "foo\n" > foo.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   979
  $ printf "bar\n" > bar.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   980
  $ hg commit -Aqm "add files"
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   981
  $ hg remove bar.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   982
  $ hg commit -m "remove file"
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   983
  $ hg status --change .
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   984
  R bar.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   985
  $ hg fix -r . foo.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   986
  $ hg status --change tip
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   987
  M foo.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   988
  R bar.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   989
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   990
  $ cd ..
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   991
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   992
If fixing a revision finds no fixes to make, no replacement revision should be
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   993
created.
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   994
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   995
  $ hg init nofixesneeded
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   996
  $ cd nofixesneeded
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   997
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   998
  $ printf "FOO\n" > foo.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
   999
  $ hg commit -Aqm "add file"
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1000
  $ hg log --template '{rev}\n'
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1001
  0
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1002
  $ hg fix -r .
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1003
  $ hg log --template '{rev}\n'
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1004
  0
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1005
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1006
  $ cd ..
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1007
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1008
If fixing a commit reverts all the changes in the commit, we replace it with a
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1009
commit that changes no files.
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1010
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1011
  $ hg init nochangesleft
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1012
  $ cd nochangesleft
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1013
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1014
  $ printf "FOO\n" > foo.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1015
  $ hg commit -Aqm "add file"
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1016
  $ printf "foo\n" > foo.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1017
  $ hg commit -m "edit file"
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1018
  $ hg status --change .
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1019
  M foo.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1020
  $ hg fix -r .
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1021
  $ hg status --change tip
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1022
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1023
  $ cd ..
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1024
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1025
If we fix a parent and child revision together, the child revision must be
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1026
replaced if the parent is replaced, even if the diffs of the child needed no
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1027
fixes. However, we're free to not replace revisions that need no fixes and have
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1028
no ancestors that are replaced.
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1029
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1030
  $ hg init mustreplacechild
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1031
  $ cd mustreplacechild
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1032
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1033
  $ printf "FOO\n" > foo.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1034
  $ hg commit -Aqm "add foo"
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1035
  $ printf "foo\n" > foo.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1036
  $ hg commit -m "edit foo"
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1037
  $ printf "BAR\n" > bar.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1038
  $ hg commit -Aqm "add bar"
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1039
40569
19e1c26213f1 cleanup: use revision numbers instead of hashes in test output
Danny Hooper <hooper@google.com>
parents: 40566
diff changeset
  1040
  $ hg log --graph --template '{rev} {files}'
19e1c26213f1 cleanup: use revision numbers instead of hashes in test output
Danny Hooper <hooper@google.com>
parents: 40566
diff changeset
  1041
  @  2 bar.whole
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1042
  |
40569
19e1c26213f1 cleanup: use revision numbers instead of hashes in test output
Danny Hooper <hooper@google.com>
parents: 40566
diff changeset
  1043
  o  1 foo.whole
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1044
  |
40569
19e1c26213f1 cleanup: use revision numbers instead of hashes in test output
Danny Hooper <hooper@google.com>
parents: 40566
diff changeset
  1045
  o  0 foo.whole
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1046
  
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1047
  $ hg fix -r 0:2
40569
19e1c26213f1 cleanup: use revision numbers instead of hashes in test output
Danny Hooper <hooper@google.com>
parents: 40566
diff changeset
  1048
  $ hg log --graph --template '{rev} {files}'
19e1c26213f1 cleanup: use revision numbers instead of hashes in test output
Danny Hooper <hooper@google.com>
parents: 40566
diff changeset
  1049
  o  4 bar.whole
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1050
  |
40569
19e1c26213f1 cleanup: use revision numbers instead of hashes in test output
Danny Hooper <hooper@google.com>
parents: 40566
diff changeset
  1051
  o  3
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1052
  |
40569
19e1c26213f1 cleanup: use revision numbers instead of hashes in test output
Danny Hooper <hooper@google.com>
parents: 40566
diff changeset
  1053
  | @  2 bar.whole
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1054
  | |
40569
19e1c26213f1 cleanup: use revision numbers instead of hashes in test output
Danny Hooper <hooper@google.com>
parents: 40566
diff changeset
  1055
  | x  1 foo.whole
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1056
  |/
40569
19e1c26213f1 cleanup: use revision numbers instead of hashes in test output
Danny Hooper <hooper@google.com>
parents: 40566
diff changeset
  1057
  o  0 foo.whole
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1058
  
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1059
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1060
  $ cd ..
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1061
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1062
It's also possible that the child needs absolutely no changes, but we still
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1063
need to replace it to update its parent. If we skipped replacing the child
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1064
because it had no file content changes, it would become an orphan for no good
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1065
reason.
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1066
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1067
  $ hg init mustreplacechildevenifnop
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1068
  $ cd mustreplacechildevenifnop
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1069
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1070
  $ printf "Foo\n" > foo.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1071
  $ hg commit -Aqm "add a bad foo"
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1072
  $ printf "FOO\n" > foo.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1073
  $ hg commit -m "add a good foo"
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1074
  $ hg fix -r . -r '.^'
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1075
  $ hg log --graph --template '{rev} {desc}'
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1076
  o  3 add a good foo
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1077
  |
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1078
  o  2 add a bad foo
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1079
  
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1080
  @  1 add a good foo
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1081
  |
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1082
  x  0 add a bad foo
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1083
  
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1084
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1085
  $ cd ..
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1086
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1087
Similar to the case above, the child revision may become empty as a result of
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1088
fixing its parent. We should still create an empty replacement child.
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1089
TODO: determine how this should interact with ui.allowemptycommit given that
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1090
the empty replacement could have children.
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1091
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1092
  $ hg init mustreplacechildevenifempty
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1093
  $ cd mustreplacechildevenifempty
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1094
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1095
  $ printf "foo\n" > foo.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1096
  $ hg commit -Aqm "add foo"
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1097
  $ printf "Foo\n" > foo.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1098
  $ hg commit -m "edit foo"
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1099
  $ hg fix -r . -r '.^'
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1100
  $ hg log --graph --template '{rev} {desc}\n' --stat
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1101
  o  3 edit foo
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1102
  |
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1103
  o  2 add foo
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1104
      foo.whole |  1 +
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1105
      1 files changed, 1 insertions(+), 0 deletions(-)
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1106
  
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1107
  @  1 edit foo
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1108
  |   foo.whole |  2 +-
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1109
  |   1 files changed, 1 insertions(+), 1 deletions(-)
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1110
  |
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1111
  x  0 add foo
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1112
      foo.whole |  1 +
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1113
      1 files changed, 1 insertions(+), 0 deletions(-)
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1114
  
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1115
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1116
  $ cd ..
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1117
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1118
Fixing a secret commit should replace it with another secret commit.
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1119
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1120
  $ hg init fixsecretcommit
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1121
  $ cd fixsecretcommit
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1122
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1123
  $ printf "foo\n" > foo.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1124
  $ hg commit -Aqm "add foo" --secret
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1125
  $ hg fix -r .
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1126
  $ hg log --template '{rev} {phase}\n'
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1127
  1 secret
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1128
  0 secret
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1129
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1130
  $ cd ..
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1131
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1132
We should also preserve phase when fixing a draft commit while the user has
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1133
their default set to secret.
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1134
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1135
  $ hg init respectphasesnewcommit
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1136
  $ cd respectphasesnewcommit
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1137
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1138
  $ printf "foo\n" > foo.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1139
  $ hg commit -Aqm "add foo"
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1140
  $ hg --config phases.newcommit=secret fix -r .
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1141
  $ hg log --template '{rev} {phase}\n'
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1142
  1 draft
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1143
  0 draft
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1144
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1145
  $ cd ..
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1146
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1147
Debug output should show what fixer commands are being subprocessed, which is
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1148
useful for anyone trying to set up a new config.
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1149
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1150
  $ hg init debugoutput
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1151
  $ cd debugoutput
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1152
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1153
  $ printf "foo\nbar\nbaz\n" > foo.changed
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1154
  $ hg commit -Aqm "foo"
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1155
  $ printf "Foo\nbar\nBaz\n" > foo.changed
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1156
  $ hg --debug fix --working-dir
49976
b5ecd0bcbcd7 fix: add more information to the debug output
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48672
diff changeset
  1157
  fixing: f65cf3136d41+ - uppercase-changed-lines - foo.changed
37560
41ba336d9f1e fix: use a portable python script instead of sed in test
Danny Hooper <hooper@google.com>
parents: 37183
diff changeset
  1158
  subprocess: * $TESTTMP/uppercase.py 1-1 3-3 (glob)
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1159
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1160
  $ cd ..
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1161
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1162
Fixing an obsolete revision can cause divergence, so we abort unless the user
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1163
configures to allow it. This is not yet smart enough to know whether there is a
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1164
successor, but even then it is not likely intentional or idiomatic to fix an
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1165
obsolete revision.
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1166
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1167
  $ hg init abortobsoleterev
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1168
  $ cd abortobsoleterev
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1169
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1170
  $ printf "foo\n" > foo.changed
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1171
  $ hg commit -Aqm "foo"
46838
d083c12032c6 tests: update divergence test for `hg fix` to actually result in divergence
Martin von Zweigbergk <martinvonz@google.com>
parents: 45853
diff changeset
  1172
  $ hg ci --amend -m rewritten
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1173
  $ hg --hidden fix -r 0
48672
657e490756e6 fix: remove unnecessary and overly strict check for divergence
Martin von Zweigbergk <martinvonz@google.com>
parents: 48346
diff changeset
  1174
  abort: cannot fix b87e30dbf19b, as that creates content-divergence with 2e007a78dfb8
657e490756e6 fix: remove unnecessary and overly strict check for divergence
Martin von Zweigbergk <martinvonz@google.com>
parents: 48346
diff changeset
  1175
  (add --verbose for details or see 'hg help evolution.instability')
657e490756e6 fix: remove unnecessary and overly strict check for divergence
Martin von Zweigbergk <martinvonz@google.com>
parents: 48346
diff changeset
  1176
  [10]
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1177
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1178
  $ hg --hidden fix -r 0 --config experimental.evolution.allowdivergence=true
46838
d083c12032c6 tests: update divergence test for `hg fix` to actually result in divergence
Martin von Zweigbergk <martinvonz@google.com>
parents: 45853
diff changeset
  1179
  2 new content-divergent changesets
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1180
  $ hg cat -r tip foo.changed
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1181
  FOO
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1182
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1183
  $ cd ..
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1184
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1185
Test all of the available substitution values for fixer commands.
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1186
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1187
  $ hg init substitution
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1188
  $ cd substitution
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1189
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1190
  $ mkdir foo
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1191
  $ printf "hello\ngoodbye\n" > foo/bar
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1192
  $ hg add
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1193
  adding foo/bar
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1194
  $ hg --config "fix.fail:command=printf '%s\n' '{rootpath}' '{basename}'" \
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1195
  >    --config "fix.fail:linerange='{first}' '{last}'" \
40533
2ecf5c24d0cd fix: rename :fileset subconfig to :pattern
Danny Hooper <hooper@google.com>
parents: 40532
diff changeset
  1196
  >    --config "fix.fail:pattern=foo/bar" \
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1197
  >    fix --working-dir
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1198
  $ cat foo/bar
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1199
  foo/bar
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1200
  bar
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1201
  1
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1202
  2
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1203
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1204
  $ cd ..
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1205
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1206
The --base flag should allow picking the revisions to diff against for changed
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1207
files and incremental line formatting.
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1208
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1209
  $ hg init baseflag
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1210
  $ cd baseflag
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1211
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1212
  $ printf "one\ntwo\n" > foo.changed
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1213
  $ printf "bar\n" > bar.changed
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1214
  $ hg commit -Aqm "first"
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1215
  $ printf "one\nTwo\n" > foo.changed
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1216
  $ hg commit -m "second"
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1217
  $ hg fix -w --base .
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1218
  $ hg status
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1219
  $ hg fix -w --base null
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1220
  $ cat foo.changed
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1221
  ONE
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1222
  TWO
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1223
  $ cat bar.changed
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1224
  BAR
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1225
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1226
  $ cd ..
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1227
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1228
If the user asks to fix the parent of another commit, they are asking to create
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1229
an orphan. We must respect experimental.evolution.allowunstable.
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1230
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1231
  $ hg init allowunstable
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1232
  $ cd allowunstable
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1233
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1234
  $ printf "one\n" > foo.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1235
  $ hg commit -Aqm "first"
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1236
  $ printf "two\n" > foo.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1237
  $ hg commit -m "second"
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1238
  $ hg --config experimental.evolution.allowunstable=False fix -r '.^'
47070
d90f6237b3aa rewriteutil: say how many commits would become orphan if commit is rewritten
Martin von Zweigbergk <martinvonz@google.com>
parents: 47069
diff changeset
  1239
  abort: cannot fix changeset, as that will orphan 1 descendants
47018
7a90fddb13b0 rewriteutil: point to help about instability when rewriting creates orphan
Martin von Zweigbergk <martinvonz@google.com>
parents: 46838
diff changeset
  1240
  (see 'hg help evolution.instability')
45853
b4694ef45db5 errors: raise more specific errors from rewriteutil
Martin von Zweigbergk <martinvonz@google.com>
parents: 45840
diff changeset
  1241
  [10]
37183
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1242
  $ hg fix -r '.^'
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1243
  1 new orphan changesets
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1244
  $ hg cat -r 2 foo.whole
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1245
  ONE
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1246
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1247
  $ cd ..
ded5ea279a93 fix: new extension for automatically modifying file contents
Danny Hooper <hooper@google.com>
parents:
diff changeset
  1248
38590
f068495a1c28 fix: add test case that shows why --whole with --base is useful
Danny Hooper <hooper@google.com>
parents: 37809
diff changeset
  1249
The --base flag affects the set of files being fixed. So while the --whole flag
f068495a1c28 fix: add test case that shows why --whole with --base is useful
Danny Hooper <hooper@google.com>
parents: 37809
diff changeset
  1250
makes the base irrelevant for changed line ranges, it still changes the
f068495a1c28 fix: add test case that shows why --whole with --base is useful
Danny Hooper <hooper@google.com>
parents: 37809
diff changeset
  1251
meaning and effect of the command. In this example, no files or lines are fixed
f068495a1c28 fix: add test case that shows why --whole with --base is useful
Danny Hooper <hooper@google.com>
parents: 37809
diff changeset
  1252
until we specify the base, but then we do fix unchanged lines.
f068495a1c28 fix: add test case that shows why --whole with --base is useful
Danny Hooper <hooper@google.com>
parents: 37809
diff changeset
  1253
f068495a1c28 fix: add test case that shows why --whole with --base is useful
Danny Hooper <hooper@google.com>
parents: 37809
diff changeset
  1254
  $ hg init basewhole
f068495a1c28 fix: add test case that shows why --whole with --base is useful
Danny Hooper <hooper@google.com>
parents: 37809
diff changeset
  1255
  $ cd basewhole
f068495a1c28 fix: add test case that shows why --whole with --base is useful
Danny Hooper <hooper@google.com>
parents: 37809
diff changeset
  1256
  $ printf "foo1\n" > foo.changed
f068495a1c28 fix: add test case that shows why --whole with --base is useful
Danny Hooper <hooper@google.com>
parents: 37809
diff changeset
  1257
  $ hg commit -Aqm "first"
f068495a1c28 fix: add test case that shows why --whole with --base is useful
Danny Hooper <hooper@google.com>
parents: 37809
diff changeset
  1258
  $ printf "foo2\n" >> foo.changed
f068495a1c28 fix: add test case that shows why --whole with --base is useful
Danny Hooper <hooper@google.com>
parents: 37809
diff changeset
  1259
  $ printf "bar\n" > bar.changed
f068495a1c28 fix: add test case that shows why --whole with --base is useful
Danny Hooper <hooper@google.com>
parents: 37809
diff changeset
  1260
  $ hg commit -Aqm "second"
f068495a1c28 fix: add test case that shows why --whole with --base is useful
Danny Hooper <hooper@google.com>
parents: 37809
diff changeset
  1261
f068495a1c28 fix: add test case that shows why --whole with --base is useful
Danny Hooper <hooper@google.com>
parents: 37809
diff changeset
  1262
  $ hg fix --working-dir --whole
f068495a1c28 fix: add test case that shows why --whole with --base is useful
Danny Hooper <hooper@google.com>
parents: 37809
diff changeset
  1263
  $ cat *.changed
f068495a1c28 fix: add test case that shows why --whole with --base is useful
Danny Hooper <hooper@google.com>
parents: 37809
diff changeset
  1264
  bar
f068495a1c28 fix: add test case that shows why --whole with --base is useful
Danny Hooper <hooper@google.com>
parents: 37809
diff changeset
  1265
  foo1
f068495a1c28 fix: add test case that shows why --whole with --base is useful
Danny Hooper <hooper@google.com>
parents: 37809
diff changeset
  1266
  foo2
f068495a1c28 fix: add test case that shows why --whole with --base is useful
Danny Hooper <hooper@google.com>
parents: 37809
diff changeset
  1267
f068495a1c28 fix: add test case that shows why --whole with --base is useful
Danny Hooper <hooper@google.com>
parents: 37809
diff changeset
  1268
  $ hg fix --working-dir --base 0 --whole
f068495a1c28 fix: add test case that shows why --whole with --base is useful
Danny Hooper <hooper@google.com>
parents: 37809
diff changeset
  1269
  $ cat *.changed
f068495a1c28 fix: add test case that shows why --whole with --base is useful
Danny Hooper <hooper@google.com>
parents: 37809
diff changeset
  1270
  BAR
f068495a1c28 fix: add test case that shows why --whole with --base is useful
Danny Hooper <hooper@google.com>
parents: 37809
diff changeset
  1271
  FOO1
f068495a1c28 fix: add test case that shows why --whole with --base is useful
Danny Hooper <hooper@google.com>
parents: 37809
diff changeset
  1272
  FOO2
f068495a1c28 fix: add test case that shows why --whole with --base is useful
Danny Hooper <hooper@google.com>
parents: 37809
diff changeset
  1273
f068495a1c28 fix: add test case that shows why --whole with --base is useful
Danny Hooper <hooper@google.com>
parents: 37809
diff changeset
  1274
  $ cd ..
40533
2ecf5c24d0cd fix: rename :fileset subconfig to :pattern
Danny Hooper <hooper@google.com>
parents: 40532
diff changeset
  1275
40566
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
  1276
The execution order of tools can be controlled. This example doesn't work if
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
  1277
you sort after truncating, but the config defines the correct order while the
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
  1278
definitions are out of order (which might imply the incorrect order given the
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
  1279
implementation of fix). The goal is to use multiple tools to select the lowest
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
  1280
5 numbers in the file.
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
  1281
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
  1282
  $ hg init priorityexample
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
  1283
  $ cd priorityexample
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
  1284
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
  1285
  $ cat >> .hg/hgrc <<EOF
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
  1286
  > [fix]
41126
d8f5c615e811 tests: use more portable flags in test-fix.t
Danny Hooper <hooper@google.com>
parents: 41010
diff changeset
  1287
  > head:command = head -n 5
40566
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
  1288
  > head:pattern = numbers.txt
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
  1289
  > head:priority = 1
41126
d8f5c615e811 tests: use more portable flags in test-fix.t
Danny Hooper <hooper@google.com>
parents: 41010
diff changeset
  1290
  > sort:command = sort -n
40566
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
  1291
  > sort:pattern = numbers.txt
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
  1292
  > sort:priority = 2
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
  1293
  > EOF
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
  1294
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
  1295
  $ printf "8\n2\n3\n6\n7\n4\n9\n5\n1\n0\n" > numbers.txt
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
  1296
  $ hg add -q
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
  1297
  $ hg fix -w
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
  1298
  $ cat numbers.txt
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
  1299
  0
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
  1300
  1
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
  1301
  2
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
  1302
  3
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
  1303
  4
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
  1304
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
  1305
And of course we should be able to break this by reversing the execution order.
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
  1306
Test negative priorities while we're at it.
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
  1307
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
  1308
  $ cat >> .hg/hgrc <<EOF
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
  1309
  > [fix]
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
  1310
  > head:priority = -1
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
  1311
  > sort:priority = -2
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
  1312
  > EOF
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
  1313
  $ printf "8\n2\n3\n6\n7\n4\n9\n5\n1\n0\n" > numbers.txt
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
  1314
  $ hg fix -w
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
  1315
  $ cat numbers.txt
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
  1316
  2
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
  1317
  3
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
  1318
  6
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
  1319
  7
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
  1320
  8
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
  1321
b9557567cc3f fix: add suboption for configuring execution order of tools
Danny Hooper <hooper@google.com>
parents: 40564
diff changeset
  1322
  $ cd ..
40570
ad71c792a8d8 fix: add extra field to fixed revisions to avoid creating obsolescence cycles
Danny Hooper <hooper@google.com>
parents: 40569
diff changeset
  1323
ad71c792a8d8 fix: add extra field to fixed revisions to avoid creating obsolescence cycles
Danny Hooper <hooper@google.com>
parents: 40569
diff changeset
  1324
It's possible for repeated applications of a fixer tool to create cycles in the
ad71c792a8d8 fix: add extra field to fixed revisions to avoid creating obsolescence cycles
Danny Hooper <hooper@google.com>
parents: 40569
diff changeset
  1325
generated content of a file. For example, two users with different versions of
ad71c792a8d8 fix: add extra field to fixed revisions to avoid creating obsolescence cycles
Danny Hooper <hooper@google.com>
parents: 40569
diff changeset
  1326
a code formatter might fight over the formatting when they run hg fix. In the
ad71c792a8d8 fix: add extra field to fixed revisions to avoid creating obsolescence cycles
Danny Hooper <hooper@google.com>
parents: 40569
diff changeset
  1327
absence of other changes, this means we could produce commits with the same
ad71c792a8d8 fix: add extra field to fixed revisions to avoid creating obsolescence cycles
Danny Hooper <hooper@google.com>
parents: 40569
diff changeset
  1328
hash in subsequent runs of hg fix. This is a problem unless we support
ad71c792a8d8 fix: add extra field to fixed revisions to avoid creating obsolescence cycles
Danny Hooper <hooper@google.com>
parents: 40569
diff changeset
  1329
obsolescence cycles well. We avoid this by adding an extra field to the
ad71c792a8d8 fix: add extra field to fixed revisions to avoid creating obsolescence cycles
Danny Hooper <hooper@google.com>
parents: 40569
diff changeset
  1330
successor which forces it to have a new hash. That's why this test creates
ad71c792a8d8 fix: add extra field to fixed revisions to avoid creating obsolescence cycles
Danny Hooper <hooper@google.com>
parents: 40569
diff changeset
  1331
three revisions instead of two.
ad71c792a8d8 fix: add extra field to fixed revisions to avoid creating obsolescence cycles
Danny Hooper <hooper@google.com>
parents: 40569
diff changeset
  1332
ad71c792a8d8 fix: add extra field to fixed revisions to avoid creating obsolescence cycles
Danny Hooper <hooper@google.com>
parents: 40569
diff changeset
  1333
  $ hg init cyclictool
ad71c792a8d8 fix: add extra field to fixed revisions to avoid creating obsolescence cycles
Danny Hooper <hooper@google.com>
parents: 40569
diff changeset
  1334
  $ cd cyclictool
ad71c792a8d8 fix: add extra field to fixed revisions to avoid creating obsolescence cycles
Danny Hooper <hooper@google.com>
parents: 40569
diff changeset
  1335
ad71c792a8d8 fix: add extra field to fixed revisions to avoid creating obsolescence cycles
Danny Hooper <hooper@google.com>
parents: 40569
diff changeset
  1336
  $ cat >> .hg/hgrc <<EOF
ad71c792a8d8 fix: add extra field to fixed revisions to avoid creating obsolescence cycles
Danny Hooper <hooper@google.com>
parents: 40569
diff changeset
  1337
  > [fix]
ad71c792a8d8 fix: add extra field to fixed revisions to avoid creating obsolescence cycles
Danny Hooper <hooper@google.com>
parents: 40569
diff changeset
  1338
  > swapletters:command = tr ab ba
ad71c792a8d8 fix: add extra field to fixed revisions to avoid creating obsolescence cycles
Danny Hooper <hooper@google.com>
parents: 40569
diff changeset
  1339
  > swapletters:pattern = foo
ad71c792a8d8 fix: add extra field to fixed revisions to avoid creating obsolescence cycles
Danny Hooper <hooper@google.com>
parents: 40569
diff changeset
  1340
  > EOF
ad71c792a8d8 fix: add extra field to fixed revisions to avoid creating obsolescence cycles
Danny Hooper <hooper@google.com>
parents: 40569
diff changeset
  1341
ad71c792a8d8 fix: add extra field to fixed revisions to avoid creating obsolescence cycles
Danny Hooper <hooper@google.com>
parents: 40569
diff changeset
  1342
  $ echo ab > foo
ad71c792a8d8 fix: add extra field to fixed revisions to avoid creating obsolescence cycles
Danny Hooper <hooper@google.com>
parents: 40569
diff changeset
  1343
  $ hg commit -Aqm foo
ad71c792a8d8 fix: add extra field to fixed revisions to avoid creating obsolescence cycles
Danny Hooper <hooper@google.com>
parents: 40569
diff changeset
  1344
ad71c792a8d8 fix: add extra field to fixed revisions to avoid creating obsolescence cycles
Danny Hooper <hooper@google.com>
parents: 40569
diff changeset
  1345
  $ hg fix -r 0
ad71c792a8d8 fix: add extra field to fixed revisions to avoid creating obsolescence cycles
Danny Hooper <hooper@google.com>
parents: 40569
diff changeset
  1346
  $ hg fix -r 1
ad71c792a8d8 fix: add extra field to fixed revisions to avoid creating obsolescence cycles
Danny Hooper <hooper@google.com>
parents: 40569
diff changeset
  1347
ad71c792a8d8 fix: add extra field to fixed revisions to avoid creating obsolescence cycles
Danny Hooper <hooper@google.com>
parents: 40569
diff changeset
  1348
  $ hg cat -r 0 foo --hidden
ad71c792a8d8 fix: add extra field to fixed revisions to avoid creating obsolescence cycles
Danny Hooper <hooper@google.com>
parents: 40569
diff changeset
  1349
  ab
ad71c792a8d8 fix: add extra field to fixed revisions to avoid creating obsolescence cycles
Danny Hooper <hooper@google.com>
parents: 40569
diff changeset
  1350
  $ hg cat -r 1 foo --hidden
ad71c792a8d8 fix: add extra field to fixed revisions to avoid creating obsolescence cycles
Danny Hooper <hooper@google.com>
parents: 40569
diff changeset
  1351
  ba
ad71c792a8d8 fix: add extra field to fixed revisions to avoid creating obsolescence cycles
Danny Hooper <hooper@google.com>
parents: 40569
diff changeset
  1352
  $ hg cat -r 2 foo
ad71c792a8d8 fix: add extra field to fixed revisions to avoid creating obsolescence cycles
Danny Hooper <hooper@google.com>
parents: 40569
diff changeset
  1353
  ab
ad71c792a8d8 fix: add extra field to fixed revisions to avoid creating obsolescence cycles
Danny Hooper <hooper@google.com>
parents: 40569
diff changeset
  1354
ad71c792a8d8 fix: add extra field to fixed revisions to avoid creating obsolescence cycles
Danny Hooper <hooper@google.com>
parents: 40569
diff changeset
  1355
  $ cd ..
ad71c792a8d8 fix: add extra field to fixed revisions to avoid creating obsolescence cycles
Danny Hooper <hooper@google.com>
parents: 40569
diff changeset
  1356
42673
74b4cd091e0d fix: run fixer tools in the repo root as cwd so they can use the working copy
Danny Hooper <hooper@google.com>
parents: 42663
diff changeset
  1357
We run fixer tools in the repo root so they can look for config files or other
74b4cd091e0d fix: run fixer tools in the repo root as cwd so they can use the working copy
Danny Hooper <hooper@google.com>
parents: 42663
diff changeset
  1358
important things in the working directory. This does NOT mean we are
74b4cd091e0d fix: run fixer tools in the repo root as cwd so they can use the working copy
Danny Hooper <hooper@google.com>
parents: 42663
diff changeset
  1359
reconstructing a working copy of every revision being fixed; we're just giving
74b4cd091e0d fix: run fixer tools in the repo root as cwd so they can use the working copy
Danny Hooper <hooper@google.com>
parents: 42663
diff changeset
  1360
the tool knowledge of the repo's location in case it can do something
74b4cd091e0d fix: run fixer tools in the repo root as cwd so they can use the working copy
Danny Hooper <hooper@google.com>
parents: 42663
diff changeset
  1361
reasonable with that.
74b4cd091e0d fix: run fixer tools in the repo root as cwd so they can use the working copy
Danny Hooper <hooper@google.com>
parents: 42663
diff changeset
  1362
74b4cd091e0d fix: run fixer tools in the repo root as cwd so they can use the working copy
Danny Hooper <hooper@google.com>
parents: 42663
diff changeset
  1363
  $ hg init subprocesscwd
74b4cd091e0d fix: run fixer tools in the repo root as cwd so they can use the working copy
Danny Hooper <hooper@google.com>
parents: 42663
diff changeset
  1364
  $ cd subprocesscwd
74b4cd091e0d fix: run fixer tools in the repo root as cwd so they can use the working copy
Danny Hooper <hooper@google.com>
parents: 42663
diff changeset
  1365
74b4cd091e0d fix: run fixer tools in the repo root as cwd so they can use the working copy
Danny Hooper <hooper@google.com>
parents: 42663
diff changeset
  1366
  $ cat >> .hg/hgrc <<EOF
74b4cd091e0d fix: run fixer tools in the repo root as cwd so they can use the working copy
Danny Hooper <hooper@google.com>
parents: 42663
diff changeset
  1367
  > [fix]
42938
a2dffe68b4ea tests: stabilize test-fix.t on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 42893
diff changeset
  1368
  > printcwd:command = "$PYTHON" -c "import os; print(os.getcwd())"
43226
5272bd7e7517 tests: add test showing that fixer patterns are currently relative to $PWD
Martin von Zweigbergk <martinvonz@google.com>
parents: 43220
diff changeset
  1369
  > printcwd:pattern = relpath:foo/bar
43948
9595b6a9f0d5 tests: show that fileset patterns don't work with `fix` when not in repo root
Matt Harbison <matt_harbison@yahoo.com>
parents: 43936
diff changeset
  1370
  > filesetpwd:command = "$PYTHON" -c "import os; print('fs: ' + os.getcwd())"
9595b6a9f0d5 tests: show that fileset patterns don't work with `fix` when not in repo root
Matt Harbison <matt_harbison@yahoo.com>
parents: 43936
diff changeset
  1371
  > filesetpwd:pattern = set:**quux
42673
74b4cd091e0d fix: run fixer tools in the repo root as cwd so they can use the working copy
Danny Hooper <hooper@google.com>
parents: 42663
diff changeset
  1372
  > EOF
74b4cd091e0d fix: run fixer tools in the repo root as cwd so they can use the working copy
Danny Hooper <hooper@google.com>
parents: 42663
diff changeset
  1373
74b4cd091e0d fix: run fixer tools in the repo root as cwd so they can use the working copy
Danny Hooper <hooper@google.com>
parents: 42663
diff changeset
  1374
  $ mkdir foo
74b4cd091e0d fix: run fixer tools in the repo root as cwd so they can use the working copy
Danny Hooper <hooper@google.com>
parents: 42663
diff changeset
  1375
  $ printf "bar\n" > foo/bar
43948
9595b6a9f0d5 tests: show that fileset patterns don't work with `fix` when not in repo root
Matt Harbison <matt_harbison@yahoo.com>
parents: 43936
diff changeset
  1376
  $ printf "quux\n" > quux
42673
74b4cd091e0d fix: run fixer tools in the repo root as cwd so they can use the working copy
Danny Hooper <hooper@google.com>
parents: 42663
diff changeset
  1377
  $ hg commit -Aqm blah
74b4cd091e0d fix: run fixer tools in the repo root as cwd so they can use the working copy
Danny Hooper <hooper@google.com>
parents: 42663
diff changeset
  1378
74b4cd091e0d fix: run fixer tools in the repo root as cwd so they can use the working copy
Danny Hooper <hooper@google.com>
parents: 42663
diff changeset
  1379
  $ hg fix -w -r . foo/bar
74b4cd091e0d fix: run fixer tools in the repo root as cwd so they can use the working copy
Danny Hooper <hooper@google.com>
parents: 42663
diff changeset
  1380
  $ hg cat -r tip foo/bar
74b4cd091e0d fix: run fixer tools in the repo root as cwd so they can use the working copy
Danny Hooper <hooper@google.com>
parents: 42663
diff changeset
  1381
  $TESTTMP/subprocesscwd
74b4cd091e0d fix: run fixer tools in the repo root as cwd so they can use the working copy
Danny Hooper <hooper@google.com>
parents: 42663
diff changeset
  1382
  $ cat foo/bar
74b4cd091e0d fix: run fixer tools in the repo root as cwd so they can use the working copy
Danny Hooper <hooper@google.com>
parents: 42663
diff changeset
  1383
  $TESTTMP/subprocesscwd
74b4cd091e0d fix: run fixer tools in the repo root as cwd so they can use the working copy
Danny Hooper <hooper@google.com>
parents: 42663
diff changeset
  1384
74b4cd091e0d fix: run fixer tools in the repo root as cwd so they can use the working copy
Danny Hooper <hooper@google.com>
parents: 42663
diff changeset
  1385
  $ cd foo
74b4cd091e0d fix: run fixer tools in the repo root as cwd so they can use the working copy
Danny Hooper <hooper@google.com>
parents: 42663
diff changeset
  1386
74b4cd091e0d fix: run fixer tools in the repo root as cwd so they can use the working copy
Danny Hooper <hooper@google.com>
parents: 42663
diff changeset
  1387
  $ hg fix -w -r . bar
43948
9595b6a9f0d5 tests: show that fileset patterns don't work with `fix` when not in repo root
Matt Harbison <matt_harbison@yahoo.com>
parents: 43936
diff changeset
  1388
  $ hg cat -r tip bar ../quux
42673
74b4cd091e0d fix: run fixer tools in the repo root as cwd so they can use the working copy
Danny Hooper <hooper@google.com>
parents: 42663
diff changeset
  1389
  $TESTTMP/subprocesscwd
43948
9595b6a9f0d5 tests: show that fileset patterns don't work with `fix` when not in repo root
Matt Harbison <matt_harbison@yahoo.com>
parents: 43936
diff changeset
  1390
  quux
9595b6a9f0d5 tests: show that fileset patterns don't work with `fix` when not in repo root
Matt Harbison <matt_harbison@yahoo.com>
parents: 43936
diff changeset
  1391
  $ cat bar ../quux
42673
74b4cd091e0d fix: run fixer tools in the repo root as cwd so they can use the working copy
Danny Hooper <hooper@google.com>
parents: 42663
diff changeset
  1392
  $TESTTMP/subprocesscwd
43948
9595b6a9f0d5 tests: show that fileset patterns don't work with `fix` when not in repo root
Matt Harbison <matt_harbison@yahoo.com>
parents: 43936
diff changeset
  1393
  quux
43226
5272bd7e7517 tests: add test showing that fixer patterns are currently relative to $PWD
Martin von Zweigbergk <martinvonz@google.com>
parents: 43220
diff changeset
  1394
  $ echo modified > bar
5272bd7e7517 tests: add test showing that fixer patterns are currently relative to $PWD
Martin von Zweigbergk <martinvonz@google.com>
parents: 43220
diff changeset
  1395
  $ hg fix -w bar
5272bd7e7517 tests: add test showing that fixer patterns are currently relative to $PWD
Martin von Zweigbergk <martinvonz@google.com>
parents: 43220
diff changeset
  1396
  $ cat bar
43227
f02d3c0eed18 fix: match patterns relative to root
Martin von Zweigbergk <martinvonz@google.com>
parents: 43226
diff changeset
  1397
  $TESTTMP/subprocesscwd
42673
74b4cd091e0d fix: run fixer tools in the repo root as cwd so they can use the working copy
Danny Hooper <hooper@google.com>
parents: 42663
diff changeset
  1398
43948
9595b6a9f0d5 tests: show that fileset patterns don't work with `fix` when not in repo root
Matt Harbison <matt_harbison@yahoo.com>
parents: 43936
diff changeset
  1399
Apparently fixing p1() and its descendants doesn't include wdir() unless
9595b6a9f0d5 tests: show that fileset patterns don't work with `fix` when not in repo root
Matt Harbison <matt_harbison@yahoo.com>
parents: 43936
diff changeset
  1400
explicitly stated.
9595b6a9f0d5 tests: show that fileset patterns don't work with `fix` when not in repo root
Matt Harbison <matt_harbison@yahoo.com>
parents: 43936
diff changeset
  1401
9595b6a9f0d5 tests: show that fileset patterns don't work with `fix` when not in repo root
Matt Harbison <matt_harbison@yahoo.com>
parents: 43936
diff changeset
  1402
  $ hg fix -r '.::'
9595b6a9f0d5 tests: show that fileset patterns don't work with `fix` when not in repo root
Matt Harbison <matt_harbison@yahoo.com>
parents: 43936
diff changeset
  1403
  $ hg cat -r . ../quux
9595b6a9f0d5 tests: show that fileset patterns don't work with `fix` when not in repo root
Matt Harbison <matt_harbison@yahoo.com>
parents: 43936
diff changeset
  1404
  quux
9595b6a9f0d5 tests: show that fileset patterns don't work with `fix` when not in repo root
Matt Harbison <matt_harbison@yahoo.com>
parents: 43936
diff changeset
  1405
  $ hg cat -r tip ../quux
44009
e685fac56693 match: resolve filesets against the passed `cwd`, not the current one
Matt Harbison <matt_harbison@yahoo.com>
parents: 43962
diff changeset
  1406
  fs: $TESTTMP/subprocesscwd
43948
9595b6a9f0d5 tests: show that fileset patterns don't work with `fix` when not in repo root
Matt Harbison <matt_harbison@yahoo.com>
parents: 43936
diff changeset
  1407
  $ cat ../quux
9595b6a9f0d5 tests: show that fileset patterns don't work with `fix` when not in repo root
Matt Harbison <matt_harbison@yahoo.com>
parents: 43936
diff changeset
  1408
  quux
9595b6a9f0d5 tests: show that fileset patterns don't work with `fix` when not in repo root
Matt Harbison <matt_harbison@yahoo.com>
parents: 43936
diff changeset
  1409
9595b6a9f0d5 tests: show that fileset patterns don't work with `fix` when not in repo root
Matt Harbison <matt_harbison@yahoo.com>
parents: 43936
diff changeset
  1410
Clean files are not fixed unless explicitly named
9595b6a9f0d5 tests: show that fileset patterns don't work with `fix` when not in repo root
Matt Harbison <matt_harbison@yahoo.com>
parents: 43936
diff changeset
  1411
  $ echo 'dirty' > ../quux
9595b6a9f0d5 tests: show that fileset patterns don't work with `fix` when not in repo root
Matt Harbison <matt_harbison@yahoo.com>
parents: 43936
diff changeset
  1412
9595b6a9f0d5 tests: show that fileset patterns don't work with `fix` when not in repo root
Matt Harbison <matt_harbison@yahoo.com>
parents: 43936
diff changeset
  1413
  $ hg fix --working-dir
9595b6a9f0d5 tests: show that fileset patterns don't work with `fix` when not in repo root
Matt Harbison <matt_harbison@yahoo.com>
parents: 43936
diff changeset
  1414
  $ cat ../quux
44009
e685fac56693 match: resolve filesets against the passed `cwd`, not the current one
Matt Harbison <matt_harbison@yahoo.com>
parents: 43962
diff changeset
  1415
  fs: $TESTTMP/subprocesscwd
43948
9595b6a9f0d5 tests: show that fileset patterns don't work with `fix` when not in repo root
Matt Harbison <matt_harbison@yahoo.com>
parents: 43936
diff changeset
  1416
42673
74b4cd091e0d fix: run fixer tools in the repo root as cwd so they can use the working copy
Danny Hooper <hooper@google.com>
parents: 42663
diff changeset
  1417
  $ cd ../..
74b4cd091e0d fix: run fixer tools in the repo root as cwd so they can use the working copy
Danny Hooper <hooper@google.com>
parents: 42663
diff changeset
  1418
42655
2987d015aba4 fix: ignore fixer tool configurations that are missing patterns
Danny Hooper <hooper@google.com>
parents: 42654
diff changeset
  1419
Tools configured without a pattern are ignored. It would be too dangerous to
2987d015aba4 fix: ignore fixer tool configurations that are missing patterns
Danny Hooper <hooper@google.com>
parents: 42654
diff changeset
  1420
run them on all files, because this might happen while testing a configuration
2987d015aba4 fix: ignore fixer tool configurations that are missing patterns
Danny Hooper <hooper@google.com>
parents: 42654
diff changeset
  1421
that also deletes all of the file content. There is no reasonable subset of the
2987d015aba4 fix: ignore fixer tool configurations that are missing patterns
Danny Hooper <hooper@google.com>
parents: 42654
diff changeset
  1422
files to use as a default. Users should be explicit about what files are
2987d015aba4 fix: ignore fixer tool configurations that are missing patterns
Danny Hooper <hooper@google.com>
parents: 42654
diff changeset
  1423
affected by a tool. This test also confirms that we don't crash when the
2987d015aba4 fix: ignore fixer tool configurations that are missing patterns
Danny Hooper <hooper@google.com>
parents: 42654
diff changeset
  1424
pattern config is missing, and that we only warn about it once.
2987d015aba4 fix: ignore fixer tool configurations that are missing patterns
Danny Hooper <hooper@google.com>
parents: 42654
diff changeset
  1425
2987d015aba4 fix: ignore fixer tool configurations that are missing patterns
Danny Hooper <hooper@google.com>
parents: 42654
diff changeset
  1426
  $ hg init nopatternconfigured
2987d015aba4 fix: ignore fixer tool configurations that are missing patterns
Danny Hooper <hooper@google.com>
parents: 42654
diff changeset
  1427
  $ cd nopatternconfigured
2987d015aba4 fix: ignore fixer tool configurations that are missing patterns
Danny Hooper <hooper@google.com>
parents: 42654
diff changeset
  1428
2987d015aba4 fix: ignore fixer tool configurations that are missing patterns
Danny Hooper <hooper@google.com>
parents: 42654
diff changeset
  1429
  $ printf "foo" > foo
2987d015aba4 fix: ignore fixer tool configurations that are missing patterns
Danny Hooper <hooper@google.com>
parents: 42654
diff changeset
  1430
  $ printf "bar" > bar
2987d015aba4 fix: ignore fixer tool configurations that are missing patterns
Danny Hooper <hooper@google.com>
parents: 42654
diff changeset
  1431
  $ hg add -q
2987d015aba4 fix: ignore fixer tool configurations that are missing patterns
Danny Hooper <hooper@google.com>
parents: 42654
diff changeset
  1432
  $ hg fix --debug --working-dir --config "fix.nopattern:command=echo fixed"
2987d015aba4 fix: ignore fixer tool configurations that are missing patterns
Danny Hooper <hooper@google.com>
parents: 42654
diff changeset
  1433
  fixer tool has no pattern configuration: nopattern
2987d015aba4 fix: ignore fixer tool configurations that are missing patterns
Danny Hooper <hooper@google.com>
parents: 42654
diff changeset
  1434
  $ cat foo bar
2987d015aba4 fix: ignore fixer tool configurations that are missing patterns
Danny Hooper <hooper@google.com>
parents: 42654
diff changeset
  1435
  foobar (no-eol)
43220
d3d1a3afe7aa fix: warn when a fixer doesn't have a configured command
Martin von Zweigbergk <martinvonz@google.com>
parents: 43058
diff changeset
  1436
  $ hg fix --debug --working-dir --config "fix.nocommand:pattern=foo.bar"
d3d1a3afe7aa fix: warn when a fixer doesn't have a configured command
Martin von Zweigbergk <martinvonz@google.com>
parents: 43058
diff changeset
  1437
  fixer tool has no command configuration: nocommand
42655
2987d015aba4 fix: ignore fixer tool configurations that are missing patterns
Danny Hooper <hooper@google.com>
parents: 42654
diff changeset
  1438
2987d015aba4 fix: ignore fixer tool configurations that are missing patterns
Danny Hooper <hooper@google.com>
parents: 42654
diff changeset
  1439
  $ cd ..
2987d015aba4 fix: ignore fixer tool configurations that are missing patterns
Danny Hooper <hooper@google.com>
parents: 42654
diff changeset
  1440
43058
808a57a08470 fix: add :enabled sub-config for fixer tools
Danny Hooper <hooper@google.com>
parents: 42938
diff changeset
  1441
Tools can be disabled. Disabled tools do nothing but print a debug message.
808a57a08470 fix: add :enabled sub-config for fixer tools
Danny Hooper <hooper@google.com>
parents: 42938
diff changeset
  1442
808a57a08470 fix: add :enabled sub-config for fixer tools
Danny Hooper <hooper@google.com>
parents: 42938
diff changeset
  1443
  $ hg init disabled
808a57a08470 fix: add :enabled sub-config for fixer tools
Danny Hooper <hooper@google.com>
parents: 42938
diff changeset
  1444
  $ cd disabled
808a57a08470 fix: add :enabled sub-config for fixer tools
Danny Hooper <hooper@google.com>
parents: 42938
diff changeset
  1445
808a57a08470 fix: add :enabled sub-config for fixer tools
Danny Hooper <hooper@google.com>
parents: 42938
diff changeset
  1446
  $ printf "foo\n" > foo
808a57a08470 fix: add :enabled sub-config for fixer tools
Danny Hooper <hooper@google.com>
parents: 42938
diff changeset
  1447
  $ hg add -q
808a57a08470 fix: add :enabled sub-config for fixer tools
Danny Hooper <hooper@google.com>
parents: 42938
diff changeset
  1448
  $ hg fix --debug --working-dir --config "fix.disabled:command=echo fixed" \
808a57a08470 fix: add :enabled sub-config for fixer tools
Danny Hooper <hooper@google.com>
parents: 42938
diff changeset
  1449
  >                              --config "fix.disabled:pattern=foo" \
808a57a08470 fix: add :enabled sub-config for fixer tools
Danny Hooper <hooper@google.com>
parents: 42938
diff changeset
  1450
  >                              --config "fix.disabled:enabled=false"
808a57a08470 fix: add :enabled sub-config for fixer tools
Danny Hooper <hooper@google.com>
parents: 42938
diff changeset
  1451
  ignoring disabled fixer tool: disabled
808a57a08470 fix: add :enabled sub-config for fixer tools
Danny Hooper <hooper@google.com>
parents: 42938
diff changeset
  1452
  $ cat foo
808a57a08470 fix: add :enabled sub-config for fixer tools
Danny Hooper <hooper@google.com>
parents: 42938
diff changeset
  1453
  foo
808a57a08470 fix: add :enabled sub-config for fixer tools
Danny Hooper <hooper@google.com>
parents: 42938
diff changeset
  1454
808a57a08470 fix: add :enabled sub-config for fixer tools
Danny Hooper <hooper@google.com>
parents: 42938
diff changeset
  1455
  $ cd ..
808a57a08470 fix: add :enabled sub-config for fixer tools
Danny Hooper <hooper@google.com>
parents: 42938
diff changeset
  1456
42654
22c4bd7d1cbf fix: add a test case around the effect of cwd on pattern matching
Danny Hooper <hooper@google.com>
parents: 42653
diff changeset
  1457
Test that we can configure a fixer to affect all files regardless of the cwd.
22c4bd7d1cbf fix: add a test case around the effect of cwd on pattern matching
Danny Hooper <hooper@google.com>
parents: 42653
diff changeset
  1458
The way we invoke matching must not prohibit this.
22c4bd7d1cbf fix: add a test case around the effect of cwd on pattern matching
Danny Hooper <hooper@google.com>
parents: 42653
diff changeset
  1459
22c4bd7d1cbf fix: add a test case around the effect of cwd on pattern matching
Danny Hooper <hooper@google.com>
parents: 42653
diff changeset
  1460
  $ hg init affectallfiles
22c4bd7d1cbf fix: add a test case around the effect of cwd on pattern matching
Danny Hooper <hooper@google.com>
parents: 42653
diff changeset
  1461
  $ cd affectallfiles
22c4bd7d1cbf fix: add a test case around the effect of cwd on pattern matching
Danny Hooper <hooper@google.com>
parents: 42653
diff changeset
  1462
22c4bd7d1cbf fix: add a test case around the effect of cwd on pattern matching
Danny Hooper <hooper@google.com>
parents: 42653
diff changeset
  1463
  $ mkdir foo bar
22c4bd7d1cbf fix: add a test case around the effect of cwd on pattern matching
Danny Hooper <hooper@google.com>
parents: 42653
diff changeset
  1464
  $ printf "foo" > foo/file
22c4bd7d1cbf fix: add a test case around the effect of cwd on pattern matching
Danny Hooper <hooper@google.com>
parents: 42653
diff changeset
  1465
  $ printf "bar" > bar/file
22c4bd7d1cbf fix: add a test case around the effect of cwd on pattern matching
Danny Hooper <hooper@google.com>
parents: 42653
diff changeset
  1466
  $ printf "baz" > baz_file
22c4bd7d1cbf fix: add a test case around the effect of cwd on pattern matching
Danny Hooper <hooper@google.com>
parents: 42653
diff changeset
  1467
  $ hg add -q
22c4bd7d1cbf fix: add a test case around the effect of cwd on pattern matching
Danny Hooper <hooper@google.com>
parents: 42653
diff changeset
  1468
22c4bd7d1cbf fix: add a test case around the effect of cwd on pattern matching
Danny Hooper <hooper@google.com>
parents: 42653
diff changeset
  1469
  $ cd bar
22c4bd7d1cbf fix: add a test case around the effect of cwd on pattern matching
Danny Hooper <hooper@google.com>
parents: 42653
diff changeset
  1470
  $ hg fix --working-dir --config "fix.cooltool:command=echo fixed" \
43226
5272bd7e7517 tests: add test showing that fixer patterns are currently relative to $PWD
Martin von Zweigbergk <martinvonz@google.com>
parents: 43220
diff changeset
  1471
  >                      --config "fix.cooltool:pattern=glob:**"
42654
22c4bd7d1cbf fix: add a test case around the effect of cwd on pattern matching
Danny Hooper <hooper@google.com>
parents: 42653
diff changeset
  1472
  $ cd ..
22c4bd7d1cbf fix: add a test case around the effect of cwd on pattern matching
Danny Hooper <hooper@google.com>
parents: 42653
diff changeset
  1473
22c4bd7d1cbf fix: add a test case around the effect of cwd on pattern matching
Danny Hooper <hooper@google.com>
parents: 42653
diff changeset
  1474
  $ cat foo/file
22c4bd7d1cbf fix: add a test case around the effect of cwd on pattern matching
Danny Hooper <hooper@google.com>
parents: 42653
diff changeset
  1475
  fixed
22c4bd7d1cbf fix: add a test case around the effect of cwd on pattern matching
Danny Hooper <hooper@google.com>
parents: 42653
diff changeset
  1476
  $ cat bar/file
22c4bd7d1cbf fix: add a test case around the effect of cwd on pattern matching
Danny Hooper <hooper@google.com>
parents: 42653
diff changeset
  1477
  fixed
22c4bd7d1cbf fix: add a test case around the effect of cwd on pattern matching
Danny Hooper <hooper@google.com>
parents: 42653
diff changeset
  1478
  $ cat baz_file
22c4bd7d1cbf fix: add a test case around the effect of cwd on pattern matching
Danny Hooper <hooper@google.com>
parents: 42653
diff changeset
  1479
  fixed
22c4bd7d1cbf fix: add a test case around the effect of cwd on pattern matching
Danny Hooper <hooper@google.com>
parents: 42653
diff changeset
  1480
22c4bd7d1cbf fix: add a test case around the effect of cwd on pattern matching
Danny Hooper <hooper@google.com>
parents: 42653
diff changeset
  1481
  $ cd ..
42756
ed0da6e0d6ee fix: allow tools to use :linerange, but also run if a file is unchanged
Danny Hooper <hooper@google.com>
parents: 42673
diff changeset
  1482
ed0da6e0d6ee fix: allow tools to use :linerange, but also run if a file is unchanged
Danny Hooper <hooper@google.com>
parents: 42673
diff changeset
  1483
Tools should be able to run on unchanged files, even if they set :linerange.
ed0da6e0d6ee fix: allow tools to use :linerange, but also run if a file is unchanged
Danny Hooper <hooper@google.com>
parents: 42673
diff changeset
  1484
This includes a corner case where deleted chunks of a file are not considered
ed0da6e0d6ee fix: allow tools to use :linerange, but also run if a file is unchanged
Danny Hooper <hooper@google.com>
parents: 42673
diff changeset
  1485
changes.
ed0da6e0d6ee fix: allow tools to use :linerange, but also run if a file is unchanged
Danny Hooper <hooper@google.com>
parents: 42673
diff changeset
  1486
ed0da6e0d6ee fix: allow tools to use :linerange, but also run if a file is unchanged
Danny Hooper <hooper@google.com>
parents: 42673
diff changeset
  1487
  $ hg init skipclean
ed0da6e0d6ee fix: allow tools to use :linerange, but also run if a file is unchanged
Danny Hooper <hooper@google.com>
parents: 42673
diff changeset
  1488
  $ cd skipclean
ed0da6e0d6ee fix: allow tools to use :linerange, but also run if a file is unchanged
Danny Hooper <hooper@google.com>
parents: 42673
diff changeset
  1489
ed0da6e0d6ee fix: allow tools to use :linerange, but also run if a file is unchanged
Danny Hooper <hooper@google.com>
parents: 42673
diff changeset
  1490
  $ printf "a\nb\nc\n" > foo
ed0da6e0d6ee fix: allow tools to use :linerange, but also run if a file is unchanged
Danny Hooper <hooper@google.com>
parents: 42673
diff changeset
  1491
  $ printf "a\nb\nc\n" > bar
ed0da6e0d6ee fix: allow tools to use :linerange, but also run if a file is unchanged
Danny Hooper <hooper@google.com>
parents: 42673
diff changeset
  1492
  $ printf "a\nb\nc\n" > baz
ed0da6e0d6ee fix: allow tools to use :linerange, but also run if a file is unchanged
Danny Hooper <hooper@google.com>
parents: 42673
diff changeset
  1493
  $ hg commit -Aqm "base"
ed0da6e0d6ee fix: allow tools to use :linerange, but also run if a file is unchanged
Danny Hooper <hooper@google.com>
parents: 42673
diff changeset
  1494
ed0da6e0d6ee fix: allow tools to use :linerange, but also run if a file is unchanged
Danny Hooper <hooper@google.com>
parents: 42673
diff changeset
  1495
  $ printf "a\nc\n" > foo
ed0da6e0d6ee fix: allow tools to use :linerange, but also run if a file is unchanged
Danny Hooper <hooper@google.com>
parents: 42673
diff changeset
  1496
  $ printf "a\nx\nc\n" > baz
ed0da6e0d6ee fix: allow tools to use :linerange, but also run if a file is unchanged
Danny Hooper <hooper@google.com>
parents: 42673
diff changeset
  1497
42938
a2dffe68b4ea tests: stabilize test-fix.t on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 42893
diff changeset
  1498
  $ cat >> print.py <<EOF
a2dffe68b4ea tests: stabilize test-fix.t on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 42893
diff changeset
  1499
  > import sys
a2dffe68b4ea tests: stabilize test-fix.t on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 42893
diff changeset
  1500
  > for a in sys.argv[1:]:
a2dffe68b4ea tests: stabilize test-fix.t on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 42893
diff changeset
  1501
  >    print(a)
a2dffe68b4ea tests: stabilize test-fix.t on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 42893
diff changeset
  1502
  > EOF
a2dffe68b4ea tests: stabilize test-fix.t on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 42893
diff changeset
  1503
42756
ed0da6e0d6ee fix: allow tools to use :linerange, but also run if a file is unchanged
Danny Hooper <hooper@google.com>
parents: 42673
diff changeset
  1504
  $ hg fix --working-dir foo bar baz \
42938
a2dffe68b4ea tests: stabilize test-fix.t on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 42893
diff changeset
  1505
  >        --config "fix.changedlines:command=\"$PYTHON\" print.py \"Line ranges:\"" \
a2dffe68b4ea tests: stabilize test-fix.t on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 42893
diff changeset
  1506
  >        --config 'fix.changedlines:linerange="{first} through {last}"' \
43226
5272bd7e7517 tests: add test showing that fixer patterns are currently relative to $PWD
Martin von Zweigbergk <martinvonz@google.com>
parents: 43220
diff changeset
  1507
  >        --config 'fix.changedlines:pattern=glob:**' \
42756
ed0da6e0d6ee fix: allow tools to use :linerange, but also run if a file is unchanged
Danny Hooper <hooper@google.com>
parents: 42673
diff changeset
  1508
  >        --config 'fix.changedlines:skipclean=false'
ed0da6e0d6ee fix: allow tools to use :linerange, but also run if a file is unchanged
Danny Hooper <hooper@google.com>
parents: 42673
diff changeset
  1509
ed0da6e0d6ee fix: allow tools to use :linerange, but also run if a file is unchanged
Danny Hooper <hooper@google.com>
parents: 42673
diff changeset
  1510
  $ cat foo
ed0da6e0d6ee fix: allow tools to use :linerange, but also run if a file is unchanged
Danny Hooper <hooper@google.com>
parents: 42673
diff changeset
  1511
  Line ranges:
ed0da6e0d6ee fix: allow tools to use :linerange, but also run if a file is unchanged
Danny Hooper <hooper@google.com>
parents: 42673
diff changeset
  1512
  $ cat bar
ed0da6e0d6ee fix: allow tools to use :linerange, but also run if a file is unchanged
Danny Hooper <hooper@google.com>
parents: 42673
diff changeset
  1513
  Line ranges:
ed0da6e0d6ee fix: allow tools to use :linerange, but also run if a file is unchanged
Danny Hooper <hooper@google.com>
parents: 42673
diff changeset
  1514
  $ cat baz
ed0da6e0d6ee fix: allow tools to use :linerange, but also run if a file is unchanged
Danny Hooper <hooper@google.com>
parents: 42673
diff changeset
  1515
  Line ranges:
ed0da6e0d6ee fix: allow tools to use :linerange, but also run if a file is unchanged
Danny Hooper <hooper@google.com>
parents: 42673
diff changeset
  1516
  2 through 2
ed0da6e0d6ee fix: allow tools to use :linerange, but also run if a file is unchanged
Danny Hooper <hooper@google.com>
parents: 42673
diff changeset
  1517
ed0da6e0d6ee fix: allow tools to use :linerange, but also run if a file is unchanged
Danny Hooper <hooper@google.com>
parents: 42673
diff changeset
  1518
  $ cd ..
43962
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1519
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1520
Test various cases around merges. We were previously dropping files if they were
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1521
created on only the p2 side of the merge, so let's test permutations of:
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1522
*   added, was fixed
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1523
*   added, considered for fixing but was already good
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1524
*   added, not considered for fixing
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1525
*   modified, was fixed
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1526
*   modified, considered for fixing but was already good
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1527
*   modified, not considered for fixing
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1528
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1529
Before the bug was fixed where we would drop files, this test demonstrated the
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1530
following issues:
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1531
*   new_in_r1.ignored, new_in_r1_already_good.changed, and
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1532
>   mod_in_r1_already_good.changed were NOT in the manifest for the merge commit
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1533
*   mod_in_r1.ignored had its contents from r0, NOT r1.
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1534
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1535
We're also setting a named branch for every commit to demonstrate that the
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1536
branch is kept intact and there aren't issues updating to another branch in the
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1537
middle of fix.
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1538
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1539
  $ hg init merge_keeps_files
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1540
  $ cd merge_keeps_files
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1541
  $ for f in r0 mod_in_r1 mod_in_r2 mod_in_merge mod_in_child; do
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1542
  >   for c in changed whole ignored; do
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1543
  >     printf "hello\n" > $f.$c
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1544
  >   done
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1545
  >   printf "HELLO\n" > "mod_in_${f}_already_good.changed"
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1546
  > done
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1547
  $ hg branch -q r0
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1548
  $ hg ci -Aqm 'r0'
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1549
  $ hg phase -p
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1550
  $ make_test_files() {
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1551
  >   printf "world\n" >> "mod_in_$1.changed"
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1552
  >   printf "world\n" >> "mod_in_$1.whole"
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1553
  >   printf "world\n" >> "mod_in_$1.ignored"
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1554
  >   printf "WORLD\n" >> "mod_in_$1_already_good.changed"
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1555
  >   printf "new in $1\n" > "new_in_$1.changed"
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1556
  >   printf "new in $1\n" > "new_in_$1.whole"
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1557
  >   printf "new in $1\n" > "new_in_$1.ignored"
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1558
  >   printf "ALREADY GOOD, NEW IN THIS REV\n" > "new_in_$1_already_good.changed"
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1559
  > }
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1560
  $ make_test_commit() {
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1561
  >   make_test_files "$1"
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1562
  >   hg branch -q "$1"
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1563
  >   hg ci -Aqm "$2"
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1564
  > }
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1565
  $ make_test_commit r1 "merge me, pt1"
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1566
  $ hg co -q ".^"
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1567
  $ make_test_commit r2 "merge me, pt2"
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1568
  $ hg merge -qr 1
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1569
  $ make_test_commit merge "evil merge"
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1570
  $ make_test_commit child "child of merge"
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1571
  $ make_test_files wdir
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1572
  $ hg fix -r 'not public()' -w
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1573
  $ hg log -G -T'{rev}:{shortest(node,8)}: branch:{branch} desc:{desc}'
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1574
  @  8:c22ce900: branch:child desc:child of merge
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1575
  |
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1576
  o    7:5a30615a: branch:merge desc:evil merge
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1577
  |\
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1578
  | o  6:4e5acdc4: branch:r2 desc:merge me, pt2
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1579
  | |
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1580
  o |  5:eea01878: branch:r1 desc:merge me, pt1
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1581
  |/
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1582
  o  0:0c548d87: branch:r0 desc:r0
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1583
  
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1584
  $ hg files -r tip
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1585
  mod_in_child.changed
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1586
  mod_in_child.ignored
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1587
  mod_in_child.whole
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1588
  mod_in_child_already_good.changed
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1589
  mod_in_merge.changed
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1590
  mod_in_merge.ignored
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1591
  mod_in_merge.whole
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1592
  mod_in_merge_already_good.changed
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1593
  mod_in_mod_in_child_already_good.changed
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1594
  mod_in_mod_in_merge_already_good.changed
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1595
  mod_in_mod_in_r1_already_good.changed
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1596
  mod_in_mod_in_r2_already_good.changed
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1597
  mod_in_r0_already_good.changed
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1598
  mod_in_r1.changed
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1599
  mod_in_r1.ignored
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1600
  mod_in_r1.whole
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1601
  mod_in_r1_already_good.changed
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1602
  mod_in_r2.changed
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1603
  mod_in_r2.ignored
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1604
  mod_in_r2.whole
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1605
  mod_in_r2_already_good.changed
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1606
  new_in_child.changed
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1607
  new_in_child.ignored
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1608
  new_in_child.whole
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1609
  new_in_child_already_good.changed
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1610
  new_in_merge.changed
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1611
  new_in_merge.ignored
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1612
  new_in_merge.whole
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1613
  new_in_merge_already_good.changed
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1614
  new_in_r1.changed
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1615
  new_in_r1.ignored
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1616
  new_in_r1.whole
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1617
  new_in_r1_already_good.changed
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1618
  new_in_r2.changed
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1619
  new_in_r2.ignored
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1620
  new_in_r2.whole
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1621
  new_in_r2_already_good.changed
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1622
  r0.changed
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1623
  r0.ignored
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1624
  r0.whole
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1625
  $ for f in "$(hg files -r tip)"; do hg cat -r tip $f -T'{path}:\n{data}\n'; done
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1626
  mod_in_child.changed:
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1627
  hello
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1628
  WORLD
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1629
  
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1630
  mod_in_child.ignored:
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1631
  hello
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1632
  world
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1633
  
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1634
  mod_in_child.whole:
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1635
  HELLO
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1636
  WORLD
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1637
  
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1638
  mod_in_child_already_good.changed:
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1639
  WORLD
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1640
  
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1641
  mod_in_merge.changed:
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1642
  hello
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1643
  WORLD
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1644
  
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1645
  mod_in_merge.ignored:
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1646
  hello
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1647
  world
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1648
  
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1649
  mod_in_merge.whole:
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1650
  HELLO
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1651
  WORLD
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1652
  
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1653
  mod_in_merge_already_good.changed:
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1654
  WORLD
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1655
  
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1656
  mod_in_mod_in_child_already_good.changed:
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1657
  HELLO
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1658
  
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1659
  mod_in_mod_in_merge_already_good.changed:
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1660
  HELLO
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1661
  
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1662
  mod_in_mod_in_r1_already_good.changed:
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1663
  HELLO
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1664
  
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1665
  mod_in_mod_in_r2_already_good.changed:
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1666
  HELLO
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1667
  
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1668
  mod_in_r0_already_good.changed:
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1669
  HELLO
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1670
  
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1671
  mod_in_r1.changed:
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1672
  hello
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1673
  WORLD
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1674
  
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1675
  mod_in_r1.ignored:
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1676
  hello
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1677
  world
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1678
  
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1679
  mod_in_r1.whole:
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1680
  HELLO
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1681
  WORLD
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1682
  
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1683
  mod_in_r1_already_good.changed:
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1684
  WORLD
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1685
  
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1686
  mod_in_r2.changed:
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1687
  hello
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1688
  WORLD
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1689
  
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1690
  mod_in_r2.ignored:
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1691
  hello
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1692
  world
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1693
  
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1694
  mod_in_r2.whole:
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1695
  HELLO
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1696
  WORLD
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1697
  
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1698
  mod_in_r2_already_good.changed:
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1699
  WORLD
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1700
  
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1701
  new_in_child.changed:
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1702
  NEW IN CHILD
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1703
  
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1704
  new_in_child.ignored:
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1705
  new in child
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1706
  
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1707
  new_in_child.whole:
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1708
  NEW IN CHILD
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1709
  
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1710
  new_in_child_already_good.changed:
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1711
  ALREADY GOOD, NEW IN THIS REV
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1712
  
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1713
  new_in_merge.changed:
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1714
  NEW IN MERGE
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1715
  
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1716
  new_in_merge.ignored:
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1717
  new in merge
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1718
  
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1719
  new_in_merge.whole:
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1720
  NEW IN MERGE
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1721
  
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1722
  new_in_merge_already_good.changed:
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1723
  ALREADY GOOD, NEW IN THIS REV
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1724
  
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1725
  new_in_r1.changed:
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1726
  NEW IN R1
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1727
  
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1728
  new_in_r1.ignored:
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1729
  new in r1
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1730
  
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1731
  new_in_r1.whole:
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1732
  NEW IN R1
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1733
  
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1734
  new_in_r1_already_good.changed:
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1735
  ALREADY GOOD, NEW IN THIS REV
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1736
  
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1737
  new_in_r2.changed:
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1738
  NEW IN R2
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1739
  
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1740
  new_in_r2.ignored:
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1741
  new in r2
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1742
  
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1743
  new_in_r2.whole:
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1744
  NEW IN R2
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1745
  
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1746
  new_in_r2_already_good.changed:
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1747
  ALREADY GOOD, NEW IN THIS REV
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1748
  
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1749
  r0.changed:
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1750
  hello
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1751
  
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1752
  r0.ignored:
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1753
  hello
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1754
  
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1755
  r0.whole:
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1756
  hello
eebdd6709868 fix: fix handling of merge commits by using overlayworkingctx
Kyle Lippincott <spectral@google.com>
parents: 43948
diff changeset
  1757
  
48177
066cdec8f74f fix: add test to demonstrate how many times tools are executed
Danny Hooper <hooper@google.com>
parents: 47886
diff changeset
  1758
066cdec8f74f fix: add test to demonstrate how many times tools are executed
Danny Hooper <hooper@google.com>
parents: 47886
diff changeset
  1759
We should execute the fixer tools as few times as possible, because they might
066cdec8f74f fix: add test to demonstrate how many times tools are executed
Danny Hooper <hooper@google.com>
parents: 47886
diff changeset
  1760
be slow or expensive to execute. The inputs to each execution are effectively
066cdec8f74f fix: add test to demonstrate how many times tools are executed
Danny Hooper <hooper@google.com>
parents: 47886
diff changeset
  1761
the file path, file content, and line ranges. So, we should be able to re-use
066cdec8f74f fix: add test to demonstrate how many times tools are executed
Danny Hooper <hooper@google.com>
parents: 47886
diff changeset
  1762
results whenever those inputs are repeated. That saves a lot of work when
066cdec8f74f fix: add test to demonstrate how many times tools are executed
Danny Hooper <hooper@google.com>
parents: 47886
diff changeset
  1763
fixing chains of commits that all have the same file revision for a path being
066cdec8f74f fix: add test to demonstrate how many times tools are executed
Danny Hooper <hooper@google.com>
parents: 47886
diff changeset
  1764
fixed.
066cdec8f74f fix: add test to demonstrate how many times tools are executed
Danny Hooper <hooper@google.com>
parents: 47886
diff changeset
  1765
066cdec8f74f fix: add test to demonstrate how many times tools are executed
Danny Hooper <hooper@google.com>
parents: 47886
diff changeset
  1766
  $ hg init numberofinvocations
066cdec8f74f fix: add test to demonstrate how many times tools are executed
Danny Hooper <hooper@google.com>
parents: 47886
diff changeset
  1767
  $ cd numberofinvocations
066cdec8f74f fix: add test to demonstrate how many times tools are executed
Danny Hooper <hooper@google.com>
parents: 47886
diff changeset
  1768
066cdec8f74f fix: add test to demonstrate how many times tools are executed
Danny Hooper <hooper@google.com>
parents: 47886
diff changeset
  1769
  $ printf "bar1" > bar.log
066cdec8f74f fix: add test to demonstrate how many times tools are executed
Danny Hooper <hooper@google.com>
parents: 47886
diff changeset
  1770
  $ printf "baz1" > baz.log
066cdec8f74f fix: add test to demonstrate how many times tools are executed
Danny Hooper <hooper@google.com>
parents: 47886
diff changeset
  1771
  $ printf "foo1" > foo.log
066cdec8f74f fix: add test to demonstrate how many times tools are executed
Danny Hooper <hooper@google.com>
parents: 47886
diff changeset
  1772
  $ printf "qux1" > qux.log
066cdec8f74f fix: add test to demonstrate how many times tools are executed
Danny Hooper <hooper@google.com>
parents: 47886
diff changeset
  1773
  $ hg commit -Aqm "commit1"
066cdec8f74f fix: add test to demonstrate how many times tools are executed
Danny Hooper <hooper@google.com>
parents: 47886
diff changeset
  1774
066cdec8f74f fix: add test to demonstrate how many times tools are executed
Danny Hooper <hooper@google.com>
parents: 47886
diff changeset
  1775
  $ printf "bar2" > bar.log
066cdec8f74f fix: add test to demonstrate how many times tools are executed
Danny Hooper <hooper@google.com>
parents: 47886
diff changeset
  1776
  $ printf "baz2" > baz.log
066cdec8f74f fix: add test to demonstrate how many times tools are executed
Danny Hooper <hooper@google.com>
parents: 47886
diff changeset
  1777
  $ printf "foo2" > foo.log
066cdec8f74f fix: add test to demonstrate how many times tools are executed
Danny Hooper <hooper@google.com>
parents: 47886
diff changeset
  1778
  $ hg commit -Aqm "commit2"
066cdec8f74f fix: add test to demonstrate how many times tools are executed
Danny Hooper <hooper@google.com>
parents: 47886
diff changeset
  1779
066cdec8f74f fix: add test to demonstrate how many times tools are executed
Danny Hooper <hooper@google.com>
parents: 47886
diff changeset
  1780
  $ printf "bar3" > bar.log
066cdec8f74f fix: add test to demonstrate how many times tools are executed
Danny Hooper <hooper@google.com>
parents: 47886
diff changeset
  1781
  $ printf "baz3" > baz.log
066cdec8f74f fix: add test to demonstrate how many times tools are executed
Danny Hooper <hooper@google.com>
parents: 47886
diff changeset
  1782
  $ hg commit -Aqm "commit3"
066cdec8f74f fix: add test to demonstrate how many times tools are executed
Danny Hooper <hooper@google.com>
parents: 47886
diff changeset
  1783
066cdec8f74f fix: add test to demonstrate how many times tools are executed
Danny Hooper <hooper@google.com>
parents: 47886
diff changeset
  1784
  $ printf "bar4" > bar.log
066cdec8f74f fix: add test to demonstrate how many times tools are executed
Danny Hooper <hooper@google.com>
parents: 47886
diff changeset
  1785
066cdec8f74f fix: add test to demonstrate how many times tools are executed
Danny Hooper <hooper@google.com>
parents: 47886
diff changeset
  1786
  $ LOGFILE=$TESTTMP/log
066cdec8f74f fix: add test to demonstrate how many times tools are executed
Danny Hooper <hooper@google.com>
parents: 47886
diff changeset
  1787
  $ LOGGER=$TESTTMP/log.py
066cdec8f74f fix: add test to demonstrate how many times tools are executed
Danny Hooper <hooper@google.com>
parents: 47886
diff changeset
  1788
  $ cat >> $LOGGER <<EOF
066cdec8f74f fix: add test to demonstrate how many times tools are executed
Danny Hooper <hooper@google.com>
parents: 47886
diff changeset
  1789
  > # Appends the input file's name to the log file.
066cdec8f74f fix: add test to demonstrate how many times tools are executed
Danny Hooper <hooper@google.com>
parents: 47886
diff changeset
  1790
  > import sys
48293
7a4d187479b6 windows: use raw string in test log paths
Raphaël Gomès <rgomes@octobus.net>
parents: 48178
diff changeset
  1791
  > with open(r'$LOGFILE', 'a') as f:
48177
066cdec8f74f fix: add test to demonstrate how many times tools are executed
Danny Hooper <hooper@google.com>
parents: 47886
diff changeset
  1792
  >     f.write(sys.argv[1] + '\n')
066cdec8f74f fix: add test to demonstrate how many times tools are executed
Danny Hooper <hooper@google.com>
parents: 47886
diff changeset
  1793
  > sys.stdout.write(sys.stdin.read())
066cdec8f74f fix: add test to demonstrate how many times tools are executed
Danny Hooper <hooper@google.com>
parents: 47886
diff changeset
  1794
  > EOF
066cdec8f74f fix: add test to demonstrate how many times tools are executed
Danny Hooper <hooper@google.com>
parents: 47886
diff changeset
  1795
066cdec8f74f fix: add test to demonstrate how many times tools are executed
Danny Hooper <hooper@google.com>
parents: 47886
diff changeset
  1796
  $ hg fix --working-dir -r "all()" \
066cdec8f74f fix: add test to demonstrate how many times tools are executed
Danny Hooper <hooper@google.com>
parents: 47886
diff changeset
  1797
  >        --config "fix.log:command=\"$PYTHON\" \"$LOGGER\" {rootpath}" \
066cdec8f74f fix: add test to demonstrate how many times tools are executed
Danny Hooper <hooper@google.com>
parents: 47886
diff changeset
  1798
  >        --config "fix.log:pattern=glob:**.log"
066cdec8f74f fix: add test to demonstrate how many times tools are executed
Danny Hooper <hooper@google.com>
parents: 47886
diff changeset
  1799
066cdec8f74f fix: add test to demonstrate how many times tools are executed
Danny Hooper <hooper@google.com>
parents: 47886
diff changeset
  1800
  $ cat $LOGFILE | sort | uniq -c
48346
e6aecc37bfbf tests: fix test-fix on NetBSD
Thomas Klausner <wiz@gatalith.at>
parents: 48293
diff changeset
  1801
  \s*4 bar.log (re)
e6aecc37bfbf tests: fix test-fix on NetBSD
Thomas Klausner <wiz@gatalith.at>
parents: 48293
diff changeset
  1802
  \s*4 baz.log (re)
e6aecc37bfbf tests: fix test-fix on NetBSD
Thomas Klausner <wiz@gatalith.at>
parents: 48293
diff changeset
  1803
  \s*3 foo.log (re)
e6aecc37bfbf tests: fix test-fix on NetBSD
Thomas Klausner <wiz@gatalith.at>
parents: 48293
diff changeset
  1804
  \s*2 qux.log (re)
48177
066cdec8f74f fix: add test to demonstrate how many times tools are executed
Danny Hooper <hooper@google.com>
parents: 47886
diff changeset
  1805
066cdec8f74f fix: add test to demonstrate how many times tools are executed
Danny Hooper <hooper@google.com>
parents: 47886
diff changeset
  1806
  $ cd ..
48178
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1807
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1808
For tools that support line ranges, it's wrong to blindly re-use fixed file
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1809
content for the same file revision if it appears twice with different baserevs,
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1810
because the line ranges could be different. Since computing line ranges is
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1811
ambiguous, this isn't a matter of correctness, but it affects the usability of
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1812
this extension. It could maybe be simpler if baserevs were computed on a
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1813
per-file basis to make this situation impossible to construct.
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1814
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1815
In the following example, we construct two subgraphs with the same file
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1816
revisions, and fix different sub-subgraphs to get different baserevs and
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1817
different changed line ranges. The key precondition is that revisions 1 and 4
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1818
have the same file revision, and the key result is that their successors don't
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1819
have the same file content, because we want to fix different areas of that same
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1820
file revision's content.
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1821
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1822
  $ hg init differentlineranges
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1823
  $ cd differentlineranges
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1824
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1825
  $ printf "a\nb\n" > file.changed
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1826
  $ hg commit -Aqm "0 ab"
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1827
  $ printf "a\nx\n" > file.changed
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1828
  $ hg commit -Aqm "1 ax"
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1829
  $ hg remove file.changed
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1830
  $ hg commit -Aqm "2 removed"
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1831
  $ hg revert file.changed -r 0
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1832
  $ hg commit -Aqm "3 ab (reverted)"
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1833
  $ hg revert file.changed -r 1
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1834
  $ hg commit -Aqm "4 ax (reverted)"
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1835
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1836
  $ hg manifest --debug --template "{hash}\n" -r 0; \
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1837
  > hg manifest --debug --template "{hash}\n" -r 3
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1838
  418f692145676128d2fb518b027ddbac624be76e
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1839
  418f692145676128d2fb518b027ddbac624be76e
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1840
  $ hg manifest --debug --template "{hash}\n" -r 1; \
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1841
  > hg manifest --debug --template "{hash}\n" -r 4
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1842
  09b8b3ce5a507caaa282f7262679e6d04091426c
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1843
  09b8b3ce5a507caaa282f7262679e6d04091426c
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1844
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1845
  $ hg fix --working-dir -r 1+3+4
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1846
  3 new orphan changesets
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1847
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1848
  $ hg cat file.changed -r "successors(1)" --hidden
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1849
  a
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1850
  X
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1851
  $ hg cat file.changed -r "successors(4)" --hidden
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1852
  A
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1853
  X
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1854
f12a19d03d2c fix: reduce number of tool executions
Danny Hooper <hooper@google.com>
parents: 48177
diff changeset
  1855
  $ cd ..