docs/obs-concept.rst
author Pierre-Yves David <pierre-yves.david@logilab.fr>
Tue, 07 Aug 2012 14:08:31 +0200
changeset 429 079b231b8ea4
parent 357 b398e9c2dbd1
child 519 9825c7da5b54
permissions -rw-r--r--
obsolete: introduce an extension helper and use it this extension helper allow most of setup operation to be declared in place using decorator. This allow clear separation between independant part of the code. This is the first HUGE wave of changes related to this introduction. The goal is to have a clear distinction and documention of every part of this extension.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
     1
-----------------------------------------------------------
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
     2
Why Do We Need a New Concept
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
     3
-----------------------------------------------------------
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
     4
357
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
     5
Current DVCSes are great tools for forging a series of flawless
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
     6
changesets on your own. But they perform poorly when it comes to
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
     7
**sharing** some work in progress and **collaborating** on such work
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
     8
in progress.
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
     9
173
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
    10
When people forge a new version of a changeset they actually create a
192
706a3a57b567 docs: Merged obs-concept changes by hand.
Arne Babenhauserheide <bab@draketo.de>
parents: 191 186
diff changeset
    11
new changeset and get rid of the original changeset. Difficulties to
173
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
    12
collaborate mostly came from the way old content is *removed* from
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
    13
a repository.
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
    14
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
    15
Mercurial Approach: Strip
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
    16
-----------------------------------------------------
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
    17
173
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
    18
With the current version of mercurial, every changeset that exists in
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
    19
your repository is *visible* and *meaningful*. To delete old
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
    20
(rewritten) changesets, mercurial removes them from the repository
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
    21
storage with an operation called *strip*. After the *stripping*, the
357
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
    22
repository looks as if the changeset never existed.
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
    23
192
706a3a57b567 docs: Merged obs-concept changes by hand.
Arne Babenhauserheide <bab@draketo.de>
parents: 191 186
diff changeset
    24
This approach is simple and effective except for one big
173
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
    25
drawback: you can remove changesets from **your repository only**. If
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
    26
a stripped changeset exists in another repository it touches, it will
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
    27
show up again. This is because a shared changeset becomes
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
    28
part of a shared global history. Stripping a changeset from all
357
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
    29
repositories is at best impractical and in most case impossible.
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    30
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
    31
As consequence, **you can not rewrite something once you exchange it with
173
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
    32
others**. The old version will still exist along side the new one [#]_.
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    33
191
0f1b8119a281 Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents: 184
diff changeset
    34
Moreover stripping changesets creates backup bundles. This allows
0f1b8119a281 Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents: 184
diff changeset
    35
restoration of the deleted changesets, but the process is painful.
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
    36
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
    37
Finally, as the repository format is not optimized for deletion. stripping a
191
0f1b8119a281 Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents: 184
diff changeset
    38
changeset may be slow in some situations.
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    39
173
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
    40
To sum up, the strip approach is very simple but does not handle
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
    41
interaction with the outer world, which is very unfortunate for a
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
    42
*Distributed* VCS.
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
    43
357
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
    44
.. [#] various work around exists but they require their own workflows
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
    45
   which are distinct from the very elegant basic workflow of
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
    46
   Mercurial.
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
    47
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
    48
Git Approach: Overwrite Reference
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
    49
-----------------------------------------------------
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
    50
173
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
    51
The Git approach to repository structure is a bit more complex: there
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
    52
can be any amount of unrelated changesets in a repository, and **only
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
    53
changesets referenced by a git branch** are *visible* and
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
    54
*meaningful*.
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
    55
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    56
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
    57
.. warning:: add a schema::
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    58
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
    59
        C
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
    60
        | B---<foo>
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
    61
        |/
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
    62
        |
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
    63
        A
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
    64
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
    65
    Only B and A are visible.
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
    66
191
0f1b8119a281 Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents: 184
diff changeset
    67
This simplifies the process of getting rid of old changesets. You can
0f1b8119a281 Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents: 184
diff changeset
    68
just leave them in place and move the reference on the new one. You
192
706a3a57b567 docs: Merged obs-concept changes by hand.
Arne Babenhauserheide <bab@draketo.de>
parents: 191 186
diff changeset
    69
can then propagate this change by moving the git-branch on remote host
191
0f1b8119a281 Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents: 184
diff changeset
    70
with the newer version of the marker overwriting the older one.
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    71
191
0f1b8119a281 Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents: 184
diff changeset
    72
This approach goes a bit further but still has a major drawback:
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
    73
357
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
    74
Because you **overwrite** the git-branch, you have no conflict
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
    75
resolution. The last to act wins. This makes collaboration on multiple
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
    76
changesets difficult because you can't merge concurrent updates on a
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
    77
changeset.
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
    78
357
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
    79
Every overwrite is a forced operation where the operator says, "yes I
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
    80
want this to replace that". In highly distributed environments, a user
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
    81
may end up with conflicting references and no proper way to choose.
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
    82
191
0f1b8119a281 Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents: 184
diff changeset
    83
Because of this way to visualize a repository, git-branches are a core
0f1b8119a281 Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents: 184
diff changeset
    84
part of git, which makes the user interface more complicated and
192
706a3a57b567 docs: Merged obs-concept changes by hand.
Arne Babenhauserheide <bab@draketo.de>
parents: 191 186
diff changeset
    85
constrains moving through history.
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    86
357
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
    87
Finally, even if all older changesets still exist in the repository,
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
    88
accesing them is still painful.
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
    89
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
    90
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
    91
-----------------------------------------------------
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
    92
The Obsolete Marker Concept
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
    93
-----------------------------------------------------
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    94
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
    95
357
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
    96
As none of the concepts was powerful enough to fulfill the need of
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
    97
safely rewriting history, including easy sharing and collaboration on
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
    98
mutable history, we needed another one.
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    99
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   100
Basic concept
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
   101
-----------------------------------------------------
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   102
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   103
173
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
   104
Every history rewriting operation stores the information that old rewritten
192
706a3a57b567 docs: Merged obs-concept changes by hand.
Arne Babenhauserheide <bab@draketo.de>
parents: 191 186
diff changeset
   105
changeset is replaced by newer version in a given set of changesets.
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   106
191
0f1b8119a281 Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents: 184
diff changeset
   107
All basic history rewriting operation can create an appropriate obsolete marker.
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   108
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   109
163
92b073d13f2d more doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 161
diff changeset
   110
.. figure:: ./figures/example-1-update.*
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   111
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   112
    *Updating* a changeset
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   113
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   114
    Create one obsolete marker: ``([A'] obsolete A)``
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   115
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   116
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   117
163
92b073d13f2d more doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 161
diff changeset
   118
.. figure:: ./figures/example-2-split.*
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   119
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   120
    *Splitting* a changeset in multiple one
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   121
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   122
    Create one obsolete marker ``([B1, B2] obsolete B)]``
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   123
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   124
234
d32c07269dcd [doc] fix bad include
Pierre-Yves.David@ens-lyon.org
parents: 228
diff changeset
   125
.. figure:: ./figures/simple-3-merge.*
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   126
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   127
    *Merging* multiple changeset in a single one
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   128
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   129
    Create two obsolete markers ``([C] obsolete A), ([C] obsolete B)``
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   130
234
d32c07269dcd [doc] fix bad include
Pierre-Yves.David@ens-lyon.org
parents: 228
diff changeset
   131
.. figure:: ./figures/simple-4-reorder.*
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   132
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   133
    *Moving* changeset around
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   134
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   135
    Reordering those two changesets need two obsolete markers:
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   136
    ``([A'] obsolete A), ([B'] obsolete B)``
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   137
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   138
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   139
234
d32c07269dcd [doc] fix bad include
Pierre-Yves.David@ens-lyon.org
parents: 228
diff changeset
   140
.. figure:: ./figures/simple-5-delete.*
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   141
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   142
    *Removing* a changeset:
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   143
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   144
    One obselete marker ``([] obsolete B)``
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   145
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   146
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   147
To conclude, a single obsolete marker express a relation from **0..n** new
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   148
changesets to **1** old changeset.
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   149
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   150
Basic Usage
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
   151
-----------------------------------------------------
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   152
357
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
   153
Obsolete markers create a perpendicular history: **a versioned
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
   154
changeset graph**. This means that offers the same features we have
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
   155
for versioned files but applied to changeset:
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   156
191
0f1b8119a281 Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents: 184
diff changeset
   157
First: we can display a **coherent view** of the history graph in which only a
192
706a3a57b567 docs: Merged obs-concept changes by hand.
Arne Babenhauserheide <bab@draketo.de>
parents: 191 186
diff changeset
   158
single version of your changesets is displayed by the UI.
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   159
191
0f1b8119a281 Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents: 184
diff changeset
   160
Second, because obsolete changeset content is still **available**. You can 
173
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
   161
you can
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   162
192
706a3a57b567 docs: Merged obs-concept changes by hand.
Arne Babenhauserheide <bab@draketo.de>
parents: 191 186
diff changeset
   163
    * **browse** the content of your obsolete commits,
173
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
   164
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
   165
    * **compare** newer and older versions of a changeset,
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   166
192
706a3a57b567 docs: Merged obs-concept changes by hand.
Arne Babenhauserheide <bab@draketo.de>
parents: 191 186
diff changeset
   167
    * **restore** content of previously obsolete changesets.
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   168
173
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
   169
Finally, the obsolete marker can be **exchanged between
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
   170
repositories**. You are able to share the result on your history
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
   171
rewriting operations with other prople and **collaborate on the
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
   172
mutable part of the history**.
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   173
173
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
   174
Conflicting history rewriting operation can be detected and
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
   175
**resolved** as easily as conflicting changes on a file.
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   176
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   177
173
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
   178
Detecting and solving tricky situations
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
   179
-----------------------------------------------------
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   180
173
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
   181
History rewriting can lead to complex situations. The obsolete marker
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
   182
introduces a simple representation for this complex reality. But
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
   183
people using complex workflows will one day or another have to face
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
   184
the intrinsic complexity of some real-world situation.
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   185
192
706a3a57b567 docs: Merged obs-concept changes by hand.
Arne Babenhauserheide <bab@draketo.de>
parents: 191 186
diff changeset
   186
This section describes possible situations, defines precise sets of
173
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
   187
changesets involved in such situations and explains how the error
192
706a3a57b567 docs: Merged obs-concept changes by hand.
Arne Babenhauserheide <bab@draketo.de>
parents: 191 186
diff changeset
   188
cases can be resolved automatically using the available information.
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   189
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   190
173
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
   191
Obsolete changesets
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
   192
````````````````````
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   193
191
0f1b8119a281 Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents: 184
diff changeset
   194
Old changesets left behind by obsolete operation are called **obsolete**.
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   195
191
0f1b8119a281 Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents: 184
diff changeset
   196
With the current version of mercurial, this *obsolete* part is stripped from the
0f1b8119a281 Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents: 184
diff changeset
   197
repository before the end of every rewriting operation.
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   198
163
92b073d13f2d more doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 161
diff changeset
   199
.. figure:: ./figures/error-obsolete.*
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   200
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   201
    Rebasing `B` and `C` on `A` (as `B'`, `C'`)
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   202
357
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
   203
    This rebase operation added two obsolete markers from new
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
   204
    changesets to old changesets. These two old changesets are now
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
   205
    part of the *obsolete* part of the history.
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   206
192
706a3a57b567 docs: Merged obs-concept changes by hand.
Arne Babenhauserheide <bab@draketo.de>
parents: 191 186
diff changeset
   207
In most cases, the obsolete set will be fully hidden to both the UI and
173
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
   208
discovery, hence users do not have to care about them unless they want to
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
   209
audit history rewriting operations.
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   210
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   211
Unstable changesets
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
   212
```````````````````
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   213
357
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
   214
While exploring the possibilities of the obsolete marker a bit
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
   215
further, you may end up with *obsolete* changesets which have
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
   216
*non-obsolete* children. There is two common ways to achieve this:
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   217
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   218
* Pull a changeset based of an old version of a changeset [#]_.
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   219
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   220
* Use a partial rewriting operation. For example amend on a changeset with
192
706a3a57b567 docs: Merged obs-concept changes by hand.
Arne Babenhauserheide <bab@draketo.de>
parents: 191 186
diff changeset
   221
  children.
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   222
191
0f1b8119a281 Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents: 184
diff changeset
   223
*Non-obsolete* changeset based on *obsolete* one are called **unstable**
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   224
163
92b073d13f2d more doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 161
diff changeset
   225
.. figure:: ./figures/error-unstable.*
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   226
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   227
    Amend `A` into `A'` leaving `B` behind.
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   228
357
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
   229
    In this situation we cannot consider `B` as *obsolete*. But we
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
   230
    have all the necessary data to detect `B` as an *unstable* branch
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
   231
    of the history because its parent `A` is *obsolete*. In addition,
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
   232
    we have enough data to automatically resolve this instability: we
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
   233
    know that the new version of `B` parent (`A`) is `A'`. We can
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
   234
    deduce that we should rebase `B` on `A'` to get a stable history
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
   235
    again.
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   236
173
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
   237
Proper warnings should be issued when part of the history becomes
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
   238
unstable. The UI will be able to use the obsolete marker to
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
   239
automatically suggest a resolution to the user of even carry them out
357
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
   240
for them.
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   241
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   242
191
0f1b8119a281 Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents: 184
diff changeset
   243
XXX details on automatic resolution for
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   244
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   245
* movement
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   246
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   247
* handling deletion
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   248
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   249
* handling split on multiple head
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   250
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   251
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   252
.. [#] For this to happen one needs to explicitly enable exchange of draft
191
0f1b8119a281 Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents: 184
diff changeset
   253
       changesets. See phase help for details.
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   254
173
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
   255
The two parts of the obsolete set
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
   256
``````````````````````````````````````
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   257
173
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
   258
The previous section shows that there could be two kinds of *obsolete*
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
   259
changesets:
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   260
191
0f1b8119a281 Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents: 184
diff changeset
   261
* an *obsolete* changeset with no or *obsolete* only descendants is called **extinct**.
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   262
191
0f1b8119a281 Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents: 184
diff changeset
   263
* an *obsolete* changeset with *unstable* descendants is called **suspended**.
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   264
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   265
163
92b073d13f2d more doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 161
diff changeset
   266
.. figure:: ./figures/error-extinct.*
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   267
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   268
    Amend `A` and `C` leaving `B` behind.
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   269
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   270
    In this example we have two *obsolete* changesets: `C` with no *unstable*
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   271
    children is *extinct*. `A` with *unstable* descendant (`B`) is *suspended*.
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   272
    `B` is *unstable* as before.
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   273
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   274
357
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
   275
Because nothing outside the obsolete set default on *extinct*
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
   276
changesets, they can be safely hidden in the UI and even garbage
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
   277
collected. *Suspended* changesets have to stay visible and available
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
   278
until their unstable descendant are rewritten into stable version.
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   279
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   280
191
0f1b8119a281 Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents: 184
diff changeset
   281
Conflicting rewrites
192
706a3a57b567 docs: Merged obs-concept changes by hand.
Arne Babenhauserheide <bab@draketo.de>
parents: 191 186
diff changeset
   282
````````````````````
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   283
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   284
If people start to concurrently edit the same part of the history they will
191
0f1b8119a281 Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents: 184
diff changeset
   285
likely meet conflicting situations when a changeset has been rewritten in two
0f1b8119a281 Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents: 184
diff changeset
   286
different ways.
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   287
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   288
163
92b073d13f2d more doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 161
diff changeset
   289
.. figure:: ./figures/error-conflicting.*
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   290
191
0f1b8119a281 Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents: 184
diff changeset
   291
    Conflicting rewrite of `A` into `A'` and `A''`
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   292
173
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
   293
This kind of conflict is easy to detect with an obsolete marker
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
   294
because an obsolete changeset can have more than one new version. It
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
   295
may be seen as the multiple heads case. Mercurial warns you about this
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
   296
on pull. It is resolved the same way by a merge of A' and A'' that
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
   297
will keep the same parent than `A'` and `A''` with two obsolete
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   298
markers pointing to both `A` and `A'`
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   299
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   300
.. warning::  TODO: Add a schema of the resolution. (merge A' and A'' with A as
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   301
              ancestor and graft the result of A^)
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   302
173
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
   303
Allowing multiple new changesets to obsolete a single one allows to
192
706a3a57b567 docs: Merged obs-concept changes by hand.
Arne Babenhauserheide <bab@draketo.de>
parents: 191 186
diff changeset
   304
distinguish a split changeset from a history rewriting conflict.
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   305
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   306
Reliable history
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
   307
``````````````````````
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   308
357
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
   309
Obsolete markers help to smooth rewriting operation process. However
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
   310
they do not change the fact that **you should only rewrite the mutable
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
   311
part of the history**. The phase concept enforces this rule by
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
   312
explicitly defining a public immutable set of changesets. Rewriting
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
   313
operations refuse to work on public changesets, but there are still
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
   314
some corner cases where previously rewritten changesets are made
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
   315
public.
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   316
192
706a3a57b567 docs: Merged obs-concept changes by hand.
Arne Babenhauserheide <bab@draketo.de>
parents: 191 186
diff changeset
   317
Special rules apply for obsolete markers pointing to public changesets:
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   318
173
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
   319
* Public changesets are excluded from the obsolete set (public
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
   320
  changesets are never hidden or candidate to garbage collection)
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   321
357
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
   322
* *newer* version of a public changeset are called **latecomer** and
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
   323
  highlighted as an error case.
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   324
173
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
   325
Solving such an error is easy. Because we know what changeset a
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
   326
*latecomer* tries to rewrite, we can easily compute a smaller
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
   327
changeset containing only the change from the old *public* to the new
4d44a37d51d1 many fixes
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 166
diff changeset
   328
*latecomer*.
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   329
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   330
.. warning:: add a schema
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   331
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   332
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   333
Conclusion
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
   334
----------------
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   335
191
0f1b8119a281 Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents: 184
diff changeset
   336
The obsolete marker is a powerful concept that allows mercurial to safely handle
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   337
history rewriting operations. It is a new type of relation between Mercurial
191
0f1b8119a281 Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents: 184
diff changeset
   338
changesets which tracks the result of history rewriting operations.
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   339
191
0f1b8119a281 Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents: 184
diff changeset
   340
This concept is simple to define and provides a very solid base for:
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   341
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   342
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   343
- Very fast history rewriting operations,
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   344
191
0f1b8119a281 Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents: 184
diff changeset
   345
- auditable and reversible history rewriting process,
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   346
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   347
- clean final history,
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   348
191
0f1b8119a281 Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents: 184
diff changeset
   349
- sharing and collaborating on the mutable part of the history,
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   350
191
0f1b8119a281 Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents: 184
diff changeset
   351
- gracefully handling history rewriting conflicts,
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   352
357
b398e9c2dbd1 doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 234
diff changeset
   353
- various history rewriting UI's collaborating with an underlying common API.
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   354
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   355
.. list-table:: Comparison on solution [#]_
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   356
   :header-rows: 1
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   357
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   358
   * - Solution
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   359
     - Remove changeset locally
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   360
     - Works on any point of your history
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   361
     - Propagation
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   362
     - Collaboration
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   363
     - Speed
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   364
     - Access to older version
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   365
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   366
   * - Strip
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   367
     - `+`
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   368
     - `+`
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   369
     - \
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   370
     - \ 
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   371
     - \ 
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   372
     - `- -`
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   373
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   374
   * - Reference
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   375
     - `+`
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   376
     - \ 
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   377
     - `+`
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   378
     - \ 
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   379
     - `+`
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   380
     - `-`
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   381
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   382
   * - Obsolete
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   383
     - `+`
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   384
     - `+`
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   385
     - `++`
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   386
     - `++`
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   387
     - `+`
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   388
     - `+`
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   389
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   390
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   391
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   392
.. [#] To preserve good tradition in comparison table, an overwhelming advantage
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
   393
       goes to the defended solution.