tests/test-rollback.t
author A. S. Budden <abudden@gmail.com>
Fri, 30 Mar 2012 22:08:46 +0100
changeset 16324 46b991a1f428
parent 15623 fc8c7a5ccc4a
child 16901 5b89700cce30
permissions -rw-r--r--
record: allow splitting of hunks by manually editing patches It is possible that unrelated changes in a file are on sequential lines. The current record extension does not allow these to be committed independently. An example use case for this is in software development for deeply embedded real-time systems. In these environments, it is not always possible to use a debugger (due to time-constraints) and hence inline UART-based printing is often used. When fixing a bug in a module, it is often convenient to add a large number of 'printf's (linked to the UART via a custom fputc) to the module in order to work out what is going wrong. printf is a very slow function (and also variadic so somewhat frowned upon by the MISRA standard) and hence it is highly undesirable to commit these lines to the repository. If only a partial fix is implemented, however, it is desirable to commit the fix without deleting all of the printf lines. This is also simplifies removal of the printf lines as once the final fix is committed, 'hg revert' does the rest. It is likely that the printf lines will be very near the actual fix, so being able to split the hunk is very useful in this case. There were two alternatives I considered for the user interface. One was to manually edit the patch, the other to allow a hunk to be split into individual lines for consideration. The latter option would require a significant refactor of the record module and is less flexible. While the former is potentially more complicated to use, this is a feature that is likely to only be used in certain exceptional cases (such as the use case proposed above) and hence I felt that the complexity would not be a considerable issue. I've also written a follow-up patch that refactors the 'prompt' code to base everything on the choices variable. This tidies up and clarifies the code a bit (removes constructs like 'if ret == 7' and removes the 'e' option from the file scope options as it's not relevant there. It's not really a necessity, so I've excluded it from this submission for now, but I can send it separately if there's a desire and it's on bitbucket (see below) in the meantime. Possible future improvements include: * Tidying up the 'prompt' code to base everything on the choices variable. This would allow entries to be removed from the prompt as currently 'e' is offered even for entire file patches, which is currently unsupported. * Allowing the entire file (or even multi-file) patch to be edited manually: this would require quite a large refactor without much benefit, so I decided to exclude it from the initial submission. * Allow the option to retry if a patch fails to apply (this is what Git does). This would require quite a bit of refactoring given the current 'hg record' implementation, so it's debatable whether it's worth it. Output is similar to existing record user interface except that an additional option ('e') exists to allow manual editing of the patch. This opens the user's configured editor with the patch. A comment is added to the bottom of the patch explaining what to do (based on Git's one). A large proportion of the changeset is test-case changes to update the options reported by record (Ynesfdaq? instead of Ynsfdaq?). Functional changes are in record.py and there are some new test cases in test-record.t.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
15446
c5c9ca3719f9 tests: use 'hghave serve' to guard tests that requires serve daemon management
Mads Kiilerich <mads@kiilerich.com>
parents: 15187
diff changeset
     1
  $ "$TESTDIR/hghave" serve || exit 80
c5c9ca3719f9 tests: use 'hghave serve' to guard tests that requires serve daemon management
Mads Kiilerich <mads@kiilerich.com>
parents: 15187
diff changeset
     2
15108
4c1ec0fe59d6 test-rollback: tinker a bit to make it easier to add more tests.
Greg Ward <greg@gerg.ca>
parents: 13959
diff changeset
     3
setup repo
13956
ffb5c09ba822 tests: remove redundant mkdir
Martin Geisler <mg@lazybytes.net>
parents: 13446
diff changeset
     4
  $ hg init t
12485
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
     5
  $ cd t
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
     6
  $ echo a > a
15108
4c1ec0fe59d6 test-rollback: tinker a bit to make it easier to add more tests.
Greg Ward <greg@gerg.ca>
parents: 13959
diff changeset
     7
  $ hg commit -Am'add a'
4c1ec0fe59d6 test-rollback: tinker a bit to make it easier to add more tests.
Greg Ward <greg@gerg.ca>
parents: 13959
diff changeset
     8
  adding a
12485
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
     9
  $ hg verify
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
    10
  checking changesets
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
    11
  checking manifests
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
    12
  crosschecking files in changesets and manifests
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
    13
  checking files
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
    14
  1 files, 1 changesets, 1 total revisions
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
    15
  $ hg parents
15108
4c1ec0fe59d6 test-rollback: tinker a bit to make it easier to add more tests.
Greg Ward <greg@gerg.ca>
parents: 13959
diff changeset
    16
  changeset:   0:1f0dee641bb7
12485
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
    17
  tag:         tip
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
    18
  user:        test
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
    19
  date:        Thu Jan 01 00:00:00 1970 +0000
15108
4c1ec0fe59d6 test-rollback: tinker a bit to make it easier to add more tests.
Greg Ward <greg@gerg.ca>
parents: 13959
diff changeset
    20
  summary:     add a
12485
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
    21
  
15108
4c1ec0fe59d6 test-rollback: tinker a bit to make it easier to add more tests.
Greg Ward <greg@gerg.ca>
parents: 13959
diff changeset
    22
4c1ec0fe59d6 test-rollback: tinker a bit to make it easier to add more tests.
Greg Ward <greg@gerg.ca>
parents: 13959
diff changeset
    23
rollback to null revision
12485
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
    24
  $ hg status
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
    25
  $ hg rollback
13446
1e497df514e2 rollback: clarifies the message about the reverted state (issue2628)
Gilles Moris <gilles.moris@free.fr>
parents: 13185
diff changeset
    26
  repository tip rolled back to revision -1 (undo commit)
1e497df514e2 rollback: clarifies the message about the reverted state (issue2628)
Gilles Moris <gilles.moris@free.fr>
parents: 13185
diff changeset
    27
  working directory now based on revision -1
12485
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
    28
  $ hg verify
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
    29
  checking changesets
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
    30
  checking manifests
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
    31
  crosschecking files in changesets and manifests
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
    32
  checking files
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
    33
  0 files, 0 changesets, 0 total revisions
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
    34
  $ hg parents
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
    35
  $ hg status
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
    36
  A a
5814
dd5a501cb97f restore branch after rollback (issue 902)
Alexandre Vassalotti <mercurial-bugs@selenic.com>
parents: 2227
diff changeset
    37
15108
4c1ec0fe59d6 test-rollback: tinker a bit to make it easier to add more tests.
Greg Ward <greg@gerg.ca>
parents: 13959
diff changeset
    38
Two changesets this time so we rollback to a real changeset
4c1ec0fe59d6 test-rollback: tinker a bit to make it easier to add more tests.
Greg Ward <greg@gerg.ca>
parents: 13959
diff changeset
    39
  $ hg commit -m'add a again'
4c1ec0fe59d6 test-rollback: tinker a bit to make it easier to add more tests.
Greg Ward <greg@gerg.ca>
parents: 13959
diff changeset
    40
  $ echo a >> a
4c1ec0fe59d6 test-rollback: tinker a bit to make it easier to add more tests.
Greg Ward <greg@gerg.ca>
parents: 13959
diff changeset
    41
  $ hg commit -m'modify a'
12485
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
    42
15108
4c1ec0fe59d6 test-rollback: tinker a bit to make it easier to add more tests.
Greg Ward <greg@gerg.ca>
parents: 13959
diff changeset
    43
Test issue 902 (current branch is preserved)
12485
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
    44
  $ hg branch test
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
    45
  marked working directory as branch test
15615
41885892796e branch: warn on branching
Matt Mackall <mpm@selenic.com>
parents: 15187
diff changeset
    46
  (branches are permanent and global, did you want a bookmark?)
12485
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
    47
  $ hg rollback
15108
4c1ec0fe59d6 test-rollback: tinker a bit to make it easier to add more tests.
Greg Ward <greg@gerg.ca>
parents: 13959
diff changeset
    48
  repository tip rolled back to revision 0 (undo commit)
4c1ec0fe59d6 test-rollback: tinker a bit to make it easier to add more tests.
Greg Ward <greg@gerg.ca>
parents: 13959
diff changeset
    49
  working directory now based on revision 0
12485
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
    50
  $ hg branch
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
    51
  default
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
    52
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
    53
Test issue 1635 (commit message saved)
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
    54
  $ cat .hg/last-message.txt ; echo
15108
4c1ec0fe59d6 test-rollback: tinker a bit to make it easier to add more tests.
Greg Ward <greg@gerg.ca>
parents: 13959
diff changeset
    55
  modify a
12485
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
    56
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
    57
Test rollback of hg before issue 902 was fixed
9934
720f70b720d3 commit: save commit message so it's not destroyed by rollback.
Greg Ward <greg-hg@gerg.ca>
parents: 6058
diff changeset
    58
12485
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
    59
  $ hg commit -m "test3"
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
    60
  $ hg branch test
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
    61
  marked working directory as branch test
15615
41885892796e branch: warn on branching
Matt Mackall <mpm@selenic.com>
parents: 15187
diff changeset
    62
  (branches are permanent and global, did you want a bookmark?)
12485
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
    63
  $ rm .hg/undo.branch
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
    64
  $ hg rollback
15108
4c1ec0fe59d6 test-rollback: tinker a bit to make it easier to add more tests.
Greg Ward <greg@gerg.ca>
parents: 13959
diff changeset
    65
  repository tip rolled back to revision 0 (undo commit)
15130
3d44e68360a6 rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents: 15108
diff changeset
    66
  named branch could not be reset: current branch is still 'test'
15108
4c1ec0fe59d6 test-rollback: tinker a bit to make it easier to add more tests.
Greg Ward <greg@gerg.ca>
parents: 13959
diff changeset
    67
  working directory now based on revision 0
12485
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
    68
  $ hg branch
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
    69
  test
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
    70
15131
7c26ce9edbd2 rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents: 15130
diff changeset
    71
working dir unaffected by rollback: do not restore dirstate et. al.
7c26ce9edbd2 rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents: 15130
diff changeset
    72
  $ hg log --template '{rev}  {branch}  {desc|firstline}\n'
7c26ce9edbd2 rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents: 15130
diff changeset
    73
  0  default  add a again
7c26ce9edbd2 rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents: 15130
diff changeset
    74
  $ hg status
7c26ce9edbd2 rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents: 15130
diff changeset
    75
  M a
7c26ce9edbd2 rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents: 15130
diff changeset
    76
  $ hg bookmark foo
7c26ce9edbd2 rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents: 15130
diff changeset
    77
  $ hg commit -m'modify a again'
7c26ce9edbd2 rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents: 15130
diff changeset
    78
  $ echo b > b
7c26ce9edbd2 rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents: 15130
diff changeset
    79
  $ hg commit -Am'add b'
7c26ce9edbd2 rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents: 15130
diff changeset
    80
  adding b
7c26ce9edbd2 rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents: 15130
diff changeset
    81
  $ hg log --template '{rev}  {branch}  {desc|firstline}\n'
7c26ce9edbd2 rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents: 15130
diff changeset
    82
  2  test  add b
7c26ce9edbd2 rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents: 15130
diff changeset
    83
  1  test  modify a again
7c26ce9edbd2 rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents: 15130
diff changeset
    84
  0  default  add a again
7c26ce9edbd2 rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents: 15130
diff changeset
    85
  $ hg update default
7c26ce9edbd2 rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents: 15130
diff changeset
    86
  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
7c26ce9edbd2 rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents: 15130
diff changeset
    87
  $ hg bookmark bar
7c26ce9edbd2 rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents: 15130
diff changeset
    88
  $ cat .hg/undo.branch ; echo
7c26ce9edbd2 rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents: 15130
diff changeset
    89
  test
15183
59e8bc22506e rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents: 15131
diff changeset
    90
  $ hg rollback -f
15131
7c26ce9edbd2 rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents: 15130
diff changeset
    91
  repository tip rolled back to revision 1 (undo commit)
7c26ce9edbd2 rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents: 15130
diff changeset
    92
  $ hg id -n
7c26ce9edbd2 rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents: 15130
diff changeset
    93
  0
7c26ce9edbd2 rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents: 15130
diff changeset
    94
  $ hg branch
7c26ce9edbd2 rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents: 15130
diff changeset
    95
  default
7c26ce9edbd2 rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents: 15130
diff changeset
    96
  $ cat .hg/bookmarks.current ; echo
7c26ce9edbd2 rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents: 15130
diff changeset
    97
  bar
7c26ce9edbd2 rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents: 15130
diff changeset
    98
  $ hg bookmark --delete foo
7c26ce9edbd2 rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents: 15130
diff changeset
    99
12485
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
   100
rollback by pretxncommit saves commit message (issue 1635)
9934
720f70b720d3 commit: save commit message so it's not destroyed by rollback.
Greg Ward <greg-hg@gerg.ca>
parents: 6058
diff changeset
   101
12485
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
   102
  $ echo a >> a
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
   103
  $ hg --config hooks.pretxncommit=false commit -m"precious commit message"
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
   104
  transaction abort!
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
   105
  rollback completed
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
   106
  abort: pretxncommit hook exited with status * (glob)
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
   107
  [255]
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
   108
  $ cat .hg/last-message.txt ; echo
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
   109
  precious commit message
13185
c6e00dfcdcb8 tests: clean up test-rollback.t
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12642
diff changeset
   110
c6e00dfcdcb8 tests: clean up test-rollback.t
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12642
diff changeset
   111
same thing, but run $EDITOR
c6e00dfcdcb8 tests: clean up test-rollback.t
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12642
diff changeset
   112
12642
bb35840e965c tests: remove the last traces of $HGTMP
Mads Kiilerich <mads@kiilerich.com>
parents: 12485
diff changeset
   113
  $ cat > editor << '__EOF__'
12485
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
   114
  > #!/bin/sh
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
   115
  > echo "another precious commit message" > "$1"
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
   116
  > __EOF__
12642
bb35840e965c tests: remove the last traces of $HGTMP
Mads Kiilerich <mads@kiilerich.com>
parents: 12485
diff changeset
   117
  $ chmod +x editor
bb35840e965c tests: remove the last traces of $HGTMP
Mads Kiilerich <mads@kiilerich.com>
parents: 12485
diff changeset
   118
  $ HGEDITOR="'`pwd`'"/editor hg --config hooks.pretxncommit=false commit 2>&1
12485
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
   119
  transaction abort!
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
   120
  rollback completed
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
   121
  note: commit message saved in .hg/last-message.txt
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
   122
  abort: pretxncommit hook exited with status * (glob)
12642
bb35840e965c tests: remove the last traces of $HGTMP
Mads Kiilerich <mads@kiilerich.com>
parents: 12485
diff changeset
   123
  [255]
bb35840e965c tests: remove the last traces of $HGTMP
Mads Kiilerich <mads@kiilerich.com>
parents: 12485
diff changeset
   124
  $ cat .hg/last-message.txt
12485
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
   125
  another precious commit message
8fdc11fec6ae tests: unify test-rollback
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
   126
13958
71f51cc71652 hgweb: detect change based on changelog size too
Martin Geisler <mg@lazybytes.net>
parents: 13957
diff changeset
   127
test rollback on served repository
71f51cc71652 hgweb: detect change based on changelog size too
Martin Geisler <mg@lazybytes.net>
parents: 13957
diff changeset
   128
71f51cc71652 hgweb: detect change based on changelog size too
Martin Geisler <mg@lazybytes.net>
parents: 13957
diff changeset
   129
  $ hg commit -m "precious commit message"
71f51cc71652 hgweb: detect change based on changelog size too
Martin Geisler <mg@lazybytes.net>
parents: 13957
diff changeset
   130
  $ hg serve -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
71f51cc71652 hgweb: detect change based on changelog size too
Martin Geisler <mg@lazybytes.net>
parents: 13957
diff changeset
   131
  $ cat hg.pid >> $DAEMON_PIDS
71f51cc71652 hgweb: detect change based on changelog size too
Martin Geisler <mg@lazybytes.net>
parents: 13957
diff changeset
   132
  $ cd ..
71f51cc71652 hgweb: detect change based on changelog size too
Martin Geisler <mg@lazybytes.net>
parents: 13957
diff changeset
   133
  $ hg clone http://localhost:$HGPORT u
71f51cc71652 hgweb: detect change based on changelog size too
Martin Geisler <mg@lazybytes.net>
parents: 13957
diff changeset
   134
  requesting all changes
71f51cc71652 hgweb: detect change based on changelog size too
Martin Geisler <mg@lazybytes.net>
parents: 13957
diff changeset
   135
  adding changesets
71f51cc71652 hgweb: detect change based on changelog size too
Martin Geisler <mg@lazybytes.net>
parents: 13957
diff changeset
   136
  adding manifests
71f51cc71652 hgweb: detect change based on changelog size too
Martin Geisler <mg@lazybytes.net>
parents: 13957
diff changeset
   137
  adding file changes
15131
7c26ce9edbd2 rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents: 15130
diff changeset
   138
  added 3 changesets with 2 changes to 1 files (+1 heads)
15108
4c1ec0fe59d6 test-rollback: tinker a bit to make it easier to add more tests.
Greg Ward <greg@gerg.ca>
parents: 13959
diff changeset
   139
  updating to branch default
13958
71f51cc71652 hgweb: detect change based on changelog size too
Martin Geisler <mg@lazybytes.net>
parents: 13957
diff changeset
   140
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
71f51cc71652 hgweb: detect change based on changelog size too
Martin Geisler <mg@lazybytes.net>
parents: 13957
diff changeset
   141
  $ cd u
71f51cc71652 hgweb: detect change based on changelog size too
Martin Geisler <mg@lazybytes.net>
parents: 13957
diff changeset
   142
  $ hg id default
15131
7c26ce9edbd2 rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents: 15130
diff changeset
   143
  068774709090
13958
71f51cc71652 hgweb: detect change based on changelog size too
Martin Geisler <mg@lazybytes.net>
parents: 13957
diff changeset
   144
71f51cc71652 hgweb: detect change based on changelog size too
Martin Geisler <mg@lazybytes.net>
parents: 13957
diff changeset
   145
now rollback and observe that 'hg serve' reloads the repository and
71f51cc71652 hgweb: detect change based on changelog size too
Martin Geisler <mg@lazybytes.net>
parents: 13957
diff changeset
   146
presents the correct tip changeset:
71f51cc71652 hgweb: detect change based on changelog size too
Martin Geisler <mg@lazybytes.net>
parents: 13957
diff changeset
   147
71f51cc71652 hgweb: detect change based on changelog size too
Martin Geisler <mg@lazybytes.net>
parents: 13957
diff changeset
   148
  $ hg -R ../t rollback
15131
7c26ce9edbd2 rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents: 15130
diff changeset
   149
  repository tip rolled back to revision 1 (undo commit)
15108
4c1ec0fe59d6 test-rollback: tinker a bit to make it easier to add more tests.
Greg Ward <greg@gerg.ca>
parents: 13959
diff changeset
   150
  working directory now based on revision 0
13958
71f51cc71652 hgweb: detect change based on changelog size too
Martin Geisler <mg@lazybytes.net>
parents: 13957
diff changeset
   151
  $ hg id default
15131
7c26ce9edbd2 rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents: 15130
diff changeset
   152
  791dd2169706
15183
59e8bc22506e rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents: 15131
diff changeset
   153
59e8bc22506e rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents: 15131
diff changeset
   154
update to older changeset and then refuse rollback, because
59e8bc22506e rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents: 15131
diff changeset
   155
that would lose data (issue2998)
59e8bc22506e rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents: 15131
diff changeset
   156
  $ cd ../t
59e8bc22506e rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents: 15131
diff changeset
   157
  $ hg -q update
59e8bc22506e rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents: 15131
diff changeset
   158
  $ rm `hg status -un`
59e8bc22506e rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents: 15131
diff changeset
   159
  $ template='{rev}:{node|short}  [{branch}]  {desc|firstline}\n'
59e8bc22506e rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents: 15131
diff changeset
   160
  $ echo 'valuable new file' > b
59e8bc22506e rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents: 15131
diff changeset
   161
  $ echo 'valuable modification' >> a
59e8bc22506e rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents: 15131
diff changeset
   162
  $ hg commit -A -m'a valuable change'
59e8bc22506e rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents: 15131
diff changeset
   163
  adding b
59e8bc22506e rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents: 15131
diff changeset
   164
  $ hg update 0
59e8bc22506e rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents: 15131
diff changeset
   165
  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
59e8bc22506e rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents: 15131
diff changeset
   166
  $ hg rollback
15187
0292f88d3b86 rollback: use a hint for force
Matt Mackall <mpm@selenic.com>
parents: 15183
diff changeset
   167
  abort: rollback of last commit while not checked out may lose data
0292f88d3b86 rollback: use a hint for force
Matt Mackall <mpm@selenic.com>
parents: 15183
diff changeset
   168
  (use -f to force)
15183
59e8bc22506e rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents: 15131
diff changeset
   169
  [255]
59e8bc22506e rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents: 15131
diff changeset
   170
  $ hg tip -q
59e8bc22506e rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents: 15131
diff changeset
   171
  2:4d9cd3795eea
59e8bc22506e rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents: 15131
diff changeset
   172
  $ hg rollback -f
59e8bc22506e rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents: 15131
diff changeset
   173
  repository tip rolled back to revision 1 (undo commit)
59e8bc22506e rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents: 15131
diff changeset
   174
  $ hg status
59e8bc22506e rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents: 15131
diff changeset
   175
  $ hg log --removed b   # yep, it's gone
59e8bc22506e rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents: 15131
diff changeset
   176
59e8bc22506e rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents: 15131
diff changeset
   177
same again, but emulate an old client that doesn't write undo.desc
59e8bc22506e rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents: 15131
diff changeset
   178
  $ hg -q update
59e8bc22506e rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents: 15131
diff changeset
   179
  $ echo 'valuable modification redux' >> a
59e8bc22506e rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents: 15131
diff changeset
   180
  $ hg commit -m'a valuable change redux'
59e8bc22506e rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents: 15131
diff changeset
   181
  $ rm .hg/undo.desc
59e8bc22506e rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents: 15131
diff changeset
   182
  $ hg update 0
59e8bc22506e rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents: 15131
diff changeset
   183
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
59e8bc22506e rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents: 15131
diff changeset
   184
  $ hg rollback
59e8bc22506e rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents: 15131
diff changeset
   185
  rolling back unknown transaction
59e8bc22506e rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents: 15131
diff changeset
   186
  $ cat a
59e8bc22506e rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents: 15131
diff changeset
   187
  a