docs/tutorial/draft.md
changeset 3376 aad37ffd7d58
child 4618 803d32f4e498
equal deleted inserted replaced
3375:1cb549cd6236 3376:aad37ffd7d58
       
     1 ---
       
     2 author: Boris Feld <boris.feld@octobus.net>
       
     3 title: Changeset evolution
       
     4 date: June 23, 2017
       
     5 ---
       
     6 
       
     7 # Why Evolve is the future? (TO CHANGE)
       
     8 
       
     9 Use hexagon or drop all of themes
       
    10 Use old names
       
    11 Replace hg amend by commit --amend
       
    12 
       
    13 Flow
       
    14 
       
    15 Basic - Feature - Tool / instability - command semantic
       
    16 
       
    17 Basic (local amend + local rebase)
       
    18 
       
    19 Stabilization -> Evolution
       
    20 
       
    21 Feature
       
    22 
       
    23 # Local amend
       
    24 
       
    25 ## Amending commits
       
    26 
       
    27 We all makes mistake:
       
    28 
       
    29 ~~~graphviz
       
    30     digraph G {
       
    31         rankdir="BT";
       
    32         graph[splines=polyline];
       
    33         node[fixedsize=true, width=1, height=1, style="filled", fillcolor="#7F7FFF"];
       
    34 
       
    35         // Revisions
       
    36         node[group=main];
       
    37         Parent -> "Fx bug[case";
       
    38     }
       
    39 ~~~
       
    40 
       
    41 ## Some times pass
       
    42 
       
    43 ## Urgent Amend needed
       
    44 
       
    45 But it's easy to fix the fix:
       
    46 
       
    47 ~~~ {.sh}
       
    48 hg commit --amend -m "Fix bug"
       
    49 ~~~
       
    50 
       
    51 ~~~graphviz
       
    52     digraph G {
       
    53         rankdir="BT";
       
    54         graph[splines=polyline];
       
    55         node[fixedsize=true, width=1, height=1, style="filled", fillcolor="#7F7FFF"];
       
    56 
       
    57         // Revisions
       
    58         node[group=main];
       
    59         Parent -> "Fix bug";
       
    60     }
       
    61 ~~~
       
    62 
       
    63 ## So easy to do something wrong
       
    64 
       
    65 But wait you had local changes! And they get incorporated into the amend.
       
    66 
       
    67 ## Too bad
       
    68 
       
    69 It's too late, they are gone!
       
    70 
       
    71 <img src="https://media1.giphy.com/media/vMiCDfoKdJP0c/giphy.gif">
       
    72 
       
    73 ## HARD
       
    74 
       
    75 UNbundle, get the rev, strip
       
    76 
       
    77 ## Never without Evolve!
       
    78 
       
    79 <img src="https://media3.giphy.com/media/EVbEdEW3kuu0o/giphy.gif">
       
    80 
       
    81 
       
    82 ## Let's try again!
       
    83 
       
    84 ~~~graphviz
       
    85     digraph G {
       
    86         rankdir="BT";
       
    87         graph[splines=polyline];
       
    88         node[fixedsize=true, width=1, height=1, style="filled", fillcolor="#7F7FFF"];
       
    89 
       
    90         // Revisions
       
    91         node[group=main];
       
    92         Parent -> "Fx bug";
       
    93     }
       
    94 ~~~
       
    95 
       
    96 ## Evolve powa
       
    97 
       
    98 With evolve this time:
       
    99 
       
   100 ~~~ {.sh}
       
   101 hg commit --amend -m "Fix bug"
       
   102 ~~~
       
   103 
       
   104 ~~~graphviz
       
   105     digraph G {
       
   106         rankdir="BT";
       
   107         graph[splines=polyline];
       
   108         node[fixedsize=true, width=1, height=1, style="filled", fillcolor="#7F7FFF"];
       
   109 
       
   110         // Revisions
       
   111         node[group=main];
       
   112         Parent -> "Fix bug";
       
   113     }
       
   114 ~~~
       
   115 
       
   116 ## Ok what the difference?
       
   117 
       
   118 <pre class="shell_output">
       
   119 $> hg log -G
       
   120 @  <span style="color:olive;">changeset:   3:467de638a224</span>
       
   121 |  tag:         tip
       
   122 |  parent:      0:852811e0e2a8
       
   123 |  user:        Boris Feld &lt;boris.feld@octobus.net&gt;
       
   124 |  date:        Wed Jun 21 14:15:55 2017 +0200
       
   125 |  summary:     Fix bug
       
   126 |
       
   127 o  <span style="color:olive;">changeset:   0:852811e0e2a8</span>
       
   128    user:        Boris Feld &lt;boris.feld@octobus.net&gt;
       
   129    date:        Wed Jun 21 14:15:55 2017 +0200
       
   130    summary:     Root
       
   131 
       
   132 </pre>
       
   133 
       
   134 ## The difference
       
   135 
       
   136 <pre class="shell_output">
       
   137 $> hg log -G --hidden
       
   138 @  <span style="color:olive;">changeset:   3:467de638a224</span>
       
   139 |  tag:         tip
       
   140 |  parent:      0:852811e0e2a8
       
   141 |  user:        Boris Feld &lt;boris.feld@octobus.net&gt;
       
   142 |  date:        Wed Jun 21 14:15:55 2017 +0200
       
   143 |  summary:     Fix bug
       
   144 |
       
   145 | x  <span style="color:olive;">changeset:   2:614cb09cc83d</span>
       
   146 | |  user:        Boris Feld &lt;boris.feld@octobus.net&gt;
       
   147 | |  date:        Wed Jun 21 14:15:55 2017 +0200
       
   148 | |  summary:     temporary amend commit for e46245132d3d
       
   149 | |
       
   150 | x  <span style="color:olive;">changeset:   1:e46245132d3d</span>
       
   151 |/   user:        Boris Feld &lt;boris.feld@octobus.net&gt;
       
   152 |    date:        Wed Jun 21 14:15:55 2017 +0200
       
   153 |    summary:     Fx bug
       
   154 |
       
   155 o  <span style="color:olive;">changeset:   0:852811e0e2a8</span>
       
   156    user:        Boris Feld &lt;boris.feld@octobus.net&gt;
       
   157    date:        Wed Jun 21 14:15:55 2017 +0200
       
   158    summary:     Root
       
   159 
       
   160 </pre>
       
   161 
       
   162 ## Perf impact
       
   163 
       
   164 No strip == no cache bust, == faster
       
   165 
       
   166 # Local rebase
       
   167 
       
   168 ## You are working on your branch
       
   169 
       
   170 ~~~graphviz
       
   171     digraph G {
       
   172         rankdir="LR";
       
   173         graph[splines=polyline];
       
   174         node[fixedsize=true, width=1, height=1, style="filled", fillcolor="#7F7FFF"];
       
   175 
       
   176         // Revisions
       
   177         node[group=feature];
       
   178         Parent -> "Feature";
       
   179     }
       
   180 ~~~
       
   181 
       
   182 ## More work
       
   183 
       
   184 ~~~graphviz
       
   185     digraph G {
       
   186         rankdir="LR";
       
   187         graph[splines=polyline];
       
   188         node[fixedsize=true, width=1, height=1, style="filled", fillcolor="#7F7FFF"];
       
   189 
       
   190         // Revisions
       
   191         node[group=feature];
       
   192         Parent -> "Feature" -> "Feature 2";
       
   193     }
       
   194 ~~~
       
   195 
       
   196 ## Pull
       
   197 
       
   198 ~~~graphviz
       
   199     digraph G {
       
   200         rankdir="LR";
       
   201         graph[splines=polyline];
       
   202         node[fixedsize=true, width=1, height=1, style="filled", fillcolor="#7F7FFF"];
       
   203 
       
   204         // Revisions
       
   205         node[group=main];
       
   206         Parent -> "Trunk" -> "Trunk 2";
       
   207 
       
   208         node[group=feature];
       
   209         Parent -> "Feature" -> "Feature 2";
       
   210     }
       
   211 ~~~
       
   212 
       
   213 ## Time to rebase
       
   214 
       
   215 ~~~graphviz
       
   216     digraph G {
       
   217         rankdir="LR";
       
   218         graph[splines=polyline];
       
   219         node[fixedsize=true, width=1, height=1, style="filled", fillcolor="#7F7FFF"];
       
   220 
       
   221         // Revisions
       
   222         node[group=main];
       
   223         Parent -> "Trunk" -> "Trunk 2";
       
   224 
       
   225         node[group=feature];
       
   226         "Trunk 2" -> "Feature" -> "Feature 2";
       
   227     }
       
   228 ~~~
       
   229 
       
   230 ## Without evolve
       
   231 
       
   232 <pre class="shell_output">
       
   233 @  <span style="color:olive;">changeset:   6:105f743d81c8</span>
       
   234 |  tag:         tip
       
   235 |  user:        Boris Feld &lt;boris.feld@octobus.net&gt;
       
   236 |  date:        Wed Jun 21 14:47:48 2017 +0200
       
   237 |  summary:     Feature2
       
   238 |
       
   239 o  <span style="color:olive;">changeset:   5:3966a515e569</span>
       
   240 |  user:        Boris Feld &lt;boris.feld@octobus.net&gt;
       
   241 |  date:        Wed Jun 21 14:47:48 2017 +0200
       
   242 |  summary:     Feature
       
   243 |
       
   244 o  <span style="color:olive;">changeset:   4:bd3d94325819</span>
       
   245 |  user:        Boris Feld &lt;boris.feld@octobus.net&gt;
       
   246 |  date:        Wed Jun 21 14:47:49 2017 +0200
       
   247 |  summary:     Trunk2
       
   248 |
       
   249 o  <span style="color:olive;">changeset:   3:120d3e4ce8b7</span>
       
   250 |  user:        Boris Feld &lt;boris.feld@octobus.net&gt;
       
   251 |  date:        Wed Jun 21 14:47:49 2017 +0200
       
   252 |  summary:     Trunk
       
   253 |
       
   254 o  <span style="color:olive;">changeset:   2:36db121866a2</span>
       
   255 |  user:        Boris Feld &lt;boris.feld@octobus.net&gt;
       
   256 ~  date:        Wed Jun 21 14:47:48 2017 +0200
       
   257    summary:     Parent
       
   258 
       
   259 </pre>
       
   260 
       
   261 ## With evolve
       
   262 
       
   263 <pre style="font-size: 0.25em !important;">
       
   264 @  <span style="color:olive;">changeset:   10:2c1a992b87c3</span>
       
   265 |  tag:         tip
       
   266 |  user:        Boris Feld &lt;boris.feld@octobus.net&gt;
       
   267 |  date:        Wed Jun 21 14:50:39 2017 +0200
       
   268 |  summary:     Feature2
       
   269 |
       
   270 o  <span style="color:olive;">changeset:   9:751113c206d0</span>
       
   271 |  user:        Boris Feld &lt;boris.feld@octobus.net&gt;
       
   272 |  date:        Wed Jun 21 14:50:39 2017 +0200
       
   273 |  summary:     Feature
       
   274 |
       
   275 o  <span style="color:olive;">changeset:   8:9f9f3db01630</span>
       
   276 |  user:        Boris Feld &lt;boris.feld@octobus.net&gt;
       
   277 |  date:        Wed Jun 21 14:50:39 2017 +0200
       
   278 |  summary:     Trunk2
       
   279 |
       
   280 o  <span style="color:olive;">changeset:   7:a5e9a3060e20</span>
       
   281 |  parent:      4:32253567b531
       
   282 |  user:        Boris Feld &lt;boris.feld@octobus.net&gt;
       
   283 |  date:        Wed Jun 21 14:50:39 2017 +0200
       
   284 |  summary:     Trunk
       
   285 |
       
   286 | x  <span style="color:olive;">changeset:   6:a57f1852d740</span>
       
   287 | |  branch:      feature
       
   288 | |  user:        Boris Feld &lt;boris.feld@octobus.net&gt;
       
   289 | |  date:        Wed Jun 21 14:50:39 2017 +0200
       
   290 | |  summary:     Feature2
       
   291 | |
       
   292 | x  <span style="color:olive;">changeset:   5:896dc0771e5e</span>
       
   293 |/   branch:      feature
       
   294 |    user:        Boris Feld &lt;boris.feld@octobus.net&gt;
       
   295 |    date:        Wed Jun 21 14:50:39 2017 +0200
       
   296 |    summary:     Feature
       
   297 |
       
   298 o  <span style="color:olive;">changeset:   4:32253567b531</span>
       
   299 |  user:        Boris Feld &lt;boris.feld@octobus.net&gt;
       
   300 ~  date:        Wed Jun 21 14:50:39 2017 +0200
       
   301    summary:     Parent
       
   302 
       
   303 </pre>
       
   304 
       
   305 # How does it works?
       
   306 
       
   307 ## It's smart
       
   308 
       
   309 <img src="https://media2.giphy.com/media/ZThQqlxY5BXMc/giphy.gif">
       
   310 
       
   311 ## Does Evolve only stores more changesets? (CHANGE)
       
   312 
       
   313 ## Not only
       
   314 
       
   315 Remember our amend?
       
   316 
       
   317 <div class='graph' style='display: flex ;align-items: stretch ;flex-flow: row wrap ; align-items: center;'>
       
   318 <div class='left' style='order:1; width: 50%'>
       
   319 ~~~graphviz
       
   320     digraph G {
       
   321         rankdir="BT";
       
   322         node[fixedsize=true, width=1, height=1, style="filled", fillcolor="#7F7FFF"];
       
   323 
       
   324         // Revisions
       
   325         node[group=main];
       
   326         Parent -> "Fx bug";
       
   327     }
       
   328 ~~~
       
   329 </div>
       
   330 
       
   331 <div class='right' style='order:2; width: 50%'>
       
   332 
       
   333 ~~~graphviz
       
   334     digraph G {
       
   335         rankdir="BT";
       
   336         graph[splines=polyline];
       
   337         node[fixedsize=true, width=1, height=1, style="filled", fillcolor="#7F7FFF"];
       
   338 
       
   339         // Revisions
       
   340         node[group=main];
       
   341         Parent -> "Fix bug";
       
   342     }
       
   343 ~~~
       
   344 </div>
       
   345 </div>
       
   346 
       
   347 ## More revisions
       
   348 
       
   349 <div class='graph' style='display: flex ;align-items: stretch ;flex-flow: row wrap ; align-items: center;'>
       
   350 <div class='left' style='order:1; width: 50%'>
       
   351 ~~~graphviz
       
   352     digraph G {
       
   353         rankdir="BT";
       
   354         graph[splines=polyline];
       
   355         node[fixedsize=true, width=1, height=1, style="filled", fillcolor="#7F7FFF"];
       
   356 
       
   357         // Revisions
       
   358         node[group=main];
       
   359         Parent -> "Fx bug";
       
   360     }
       
   361 ~~~
       
   362 </div>
       
   363 
       
   364 <div class='right' style='order:2; width: 50%'>
       
   365 
       
   366 ~~~graphviz
       
   367     digraph G {
       
   368         rankdir="BT";
       
   369         graph[splines=polyline];
       
   370         node[fixedsize=true, width=1, height=1, style="filled", fillcolor="#7F7FFF"];
       
   371 
       
   372         // Revisions
       
   373         node[group=main];
       
   374         Parent -> "Fix bug";
       
   375         node[group=obsolete];
       
   376         Parent -> "Fx bug";
       
   377     }
       
   378 ~~~
       
   379 </div>
       
   380 </div>
       
   381 
       
   382 ## But hidden
       
   383 
       
   384 <div class='graph' style='display: flex ;align-items: stretch ;flex-flow: row wrap ; align-items: center;'>
       
   385 <div class='left' style='order:1; width: 50%'>
       
   386 ~~~graphviz
       
   387     digraph G {
       
   388         rankdir="BT";
       
   389         graph[splines=polyline];
       
   390         node[fixedsize=true, width=1, height=1, style="filled", fillcolor="#7F7FFF"];
       
   391 
       
   392         // Revisions
       
   393         node[group=main];
       
   394         Parent -> "Fx bug";
       
   395     }
       
   396 ~~~
       
   397 </div>
       
   398 
       
   399 <div class='right' style='order:2; width: 50%'>
       
   400 
       
   401 ~~~graphviz
       
   402     digraph G {
       
   403         rankdir="BT";
       
   404         graph[splines=polyline];
       
   405         node[fixedsize=true, width=1, height=1, style="filled", fillcolor="#7F7FFF"];
       
   406 
       
   407         // Revisions
       
   408         node[group=main];
       
   409         Parent -> "Fix bug";
       
   410         node[group=obsolete, style="dotted, filled", fillcolor="#DFDFFF"];
       
   411         Parent -> "Fx bug";
       
   412     }
       
   413 ~~~
       
   414 </div>
       
   415 </div>
       
   416 
       
   417 ## Here is the smartness (change word)!
       
   418 
       
   419 ~~~graphviz
       
   420     digraph G {
       
   421         rankdir="BT";
       
   422         node[fixedsize=true, width=1, height=1, style="filled", fillcolor="#7F7FFF"];
       
   423 
       
   424         // Revisions
       
   425         node[group=main];
       
   426         Parent -> "Fix bug";
       
   427         node[group=obsolete, style="dotted, filled", fillcolor="#DFDFFF"];
       
   428         Parent -> "Fx bug";
       
   429 
       
   430         // Obsolescence links
       
   431         edge[dir=back, style=dotted, arrowtail=dot];
       
   432         "Fx bug" -> "Fix bug";
       
   433     }
       
   434 ~~~
       
   435 
       
   436 ## Obs markers
       
   437 
       
   438 Obs markers stores the relation between a changeset and its evolutions.
       
   439 
       
   440 XXX: Speak about META
       
   441 
       
   442 ~~~graphviz
       
   443     digraph G {
       
   444         rankdir="BT";
       
   445         node[fixedsize=true, width=1, height=1, style="filled", fillcolor="#7F7FFF"];
       
   446 
       
   447         node[group=obsolete, style="dotted, filled" fillcolor="#DFDFFF"];
       
   448         edge[dir=back, style=dotted, arrowtail=dot];
       
   449         "Predecessor" -> "Successor";
       
   450 
       
   451         "Successor" [style="filled", fillcolor="#7F7FFF"];
       
   452     }
       
   453 ~~~
       
   454 
       
   455 
       
   456 # Phases
       
   457 
       
   458 ## 3 phases
       
   459 
       
   460 Changesets can be in one of three phases:
       
   461 
       
   462 * Public
       
   463 * Draft
       
   464 * Secrets
       
   465 
       
   466 ## Public
       
   467 
       
   468 The public phase holds changesets that have been exchanged publicly.
       
   469 
       
   470 Changesets in the public phase are expected to remain in your repository history and are said to be immutable.
       
   471 
       
   472 ## Drafts
       
   473 
       
   474 The draft phase holds changesets that are not yet considered a part of the repository's permanent history.
       
   475 
       
   476 You can safely rewrite them.
       
   477 
       
   478 New commits are in the draft phase by default.
       
   479 
       
   480 ## Secrets (hide)
       
   481 
       
   482 The secret phase holds changesets that you do not want to exchange with other repositories.
       
   483 
       
   484 Secret changesets are hidden from remote peers and will not be included in push operations.
       
   485 
       
   486 Manual operations or extensions may move a changeset into the secret phase.
       
   487 
       
   488 ## Representation
       
   489 
       
   490 ~~~graphviz
       
   491     digraph G {
       
   492         rankdir="BT";
       
   493         graph[splines=polyline];
       
   494         node[fixedsize=true, width=1, height=1, style="filled", fillcolor="#7F7FFF"];
       
   495 
       
   496         // Revisions
       
   497         node[group=main];
       
   498         Public -> Draft -> Secret;
       
   499 
       
   500         Draft [shape="pentagon"];
       
   501         Secret [shape="square"];
       
   502     }
       
   503 ~~~
       
   504 
       
   505 # Instability (add sub-titles, obsolete -> orphan, etc...)
       
   506 
       
   507 ## Obsolete
       
   508 
       
   509 ~~~graphviz
       
   510     digraph G {
       
   511         rankdir="BT";
       
   512         graph[splines=polyline];
       
   513         node[fixedsize=true, style="filled", width=1, height=1, fillcolor="#7F7FFF", shape="pentagon"];
       
   514 
       
   515 
       
   516         node[group=main];
       
   517         Root -> New;
       
   518         node[group=obsolete];
       
   519         Root -> Obsolete;
       
   520 
       
   521         // Obsolescence links
       
   522         edge[dir=back, style=dotted, arrowtail=dot];
       
   523         Obsolete -> New;
       
   524 
       
   525         Obsolete [fillcolor="#DFDFFF"];
       
   526         Root[shape="circle"];
       
   527     }
       
   528 ~~~
       
   529 
       
   530 ## Unstable
       
   531 
       
   532 ~~~graphviz
       
   533     digraph G {
       
   534         rankdir="BT";
       
   535         graph[splines=polyline];
       
   536         node[fixedsize=true, style="filled", width=1, height=1, fillcolor="#7F7FFF", shape="pentagon"];
       
   537 
       
   538         node[group=main];
       
   539         Root -> New;
       
   540         node[group=obsolete];
       
   541         Root -> Obsolete -> Unstable;
       
   542 
       
   543         // Obsolescence links
       
   544         edge[dir=back, style=dotted, arrowtail=dot];
       
   545         Obsolete -> New;
       
   546 
       
   547         Obsolete [fillcolor="#DFDFFF"];
       
   548         Unstable [fillcolor="#FF3535"];
       
   549         Root[shape="circle"];
       
   550     }
       
   551 ~~~
       
   552 
       
   553 ## Bumped
       
   554 
       
   555 ## Divergent
       
   556 
       
   557 ~~~graphviz
       
   558     digraph G {
       
   559         rankdir="BT";
       
   560         graph[splines=polyline];
       
   561         node[fixedsize=true, style="filled", width=1, height=1, fillcolor="#7F7FFF", shape="pentagon"];
       
   562 
       
   563         Root -> Base;
       
   564         Root -> Divergent1;
       
   565         Root -> Divergent2;
       
   566 
       
   567         // Obsolescence links
       
   568         edge[dir=back, style=dotted, arrowtail=dot];
       
   569         Base -> Divergent1;
       
   570         Base -> Divergent2;
       
   571 
       
   572         Base [shape="pentagon", fillcolor="#DFDFFF"];
       
   573         Divergent1 [fillcolor="#FF3535"];
       
   574         Divergent2 [fillcolor="#FF3535"];
       
   575         Root[shape="circle"];
       
   576     }
       
   577 ~~~
       
   578 
       
   579 # Topic
       
   580 
       
   581 # CHANGE TITLE (LATER IN THE FLOW)
       
   582 
       
   583 ## Log on obsolete
       
   584 
       
   585 <pre style="font-size: 0.25em;">
       
   586 $> hg log -G
       
   587 o  <span style="color:olive;">changeset:   10:2c1a992b87c3</span>
       
   588 |  tag:         tip
       
   589 |  user:        Boris Feld &lt;boris.feld@octobus.net&gt;
       
   590 |  date:        Wed Jun 21 14:50:39 2017 +0200
       
   591 |  summary:     Feature2
       
   592 |
       
   593 o  <span style="color:olive;">changeset:   9:751113c206d0</span>
       
   594 |  user:        Boris Feld &lt;boris.feld@octobus.net&gt;
       
   595 |  date:        Wed Jun 21 14:50:39 2017 +0200
       
   596 |  summary:     Feature
       
   597 |
       
   598 o  <span style="color:olive;">changeset:   8:9f9f3db01630</span>
       
   599 |  user:        Boris Feld &lt;boris.feld@octobus.net&gt;
       
   600 |  date:        Wed Jun 21 14:50:39 2017 +0200
       
   601 |  summary:     Trunk2
       
   602 |
       
   603 o  <span style="color:olive;">changeset:   7:a5e9a3060e20</span>
       
   604 |  parent:      4:32253567b531
       
   605 |  user:        Boris Feld &lt;boris.feld@octobus.net&gt;
       
   606 |  date:        Wed Jun 21 14:50:39 2017 +0200
       
   607 |  summary:     Trunk
       
   608 |
       
   609 | @  <span style="color:olive;">changeset:   6:a57f1852d740</span>
       
   610 | |  branch:      feature
       
   611 | |  user:        Boris Feld &lt;boris.feld@octobus.net&gt;
       
   612 | |  date:        Wed Jun 21 14:50:39 2017 +0200
       
   613 | |  summary:     Feature2
       
   614 | |
       
   615 | x  <span style="color:olive;">changeset:   5:896dc0771e5e</span>
       
   616 |/   branch:      feature
       
   617 |    user:        Boris Feld &lt;boris.feld@octobus.net&gt;
       
   618 |    date:        Wed Jun 21 14:50:39 2017 +0200
       
   619 |    summary:     Feature
       
   620 |
       
   621 o  <span style="color:olive;">changeset:   4:32253567b531</span>
       
   622 |  user:        Boris Feld &lt;boris.feld@octobus.net&gt;
       
   623 ~  date:        Wed Jun 21 14:50:39 2017 +0200
       
   624    summary:     Parent
       
   625 
       
   626 </pre>
       
   627 
       
   628 ## Log with hidden
       
   629 
       
   630 <pre style="font-size: 0.25em;">
       
   631 $ hg log -G --hidden
       
   632 @  <span style="color:olive;">changeset:   10:2c1a992b87c3</span>
       
   633 |  tag:         tip
       
   634 |  user:        Boris Feld &lt;boris.feld@octobus.net&gt;
       
   635 |  date:        Wed Jun 21 14:50:39 2017 +0200
       
   636 |  summary:     Feature2
       
   637 |
       
   638 o  <span style="color:olive;">changeset:   9:751113c206d0</span>
       
   639 |  user:        Boris Feld &lt;boris.feld@octobus.net&gt;
       
   640 |  date:        Wed Jun 21 14:50:39 2017 +0200
       
   641 |  summary:     Feature
       
   642 |
       
   643 o  <span style="color:olive;">changeset:   8:9f9f3db01630</span>
       
   644 |  user:        Boris Feld &lt;boris.feld@octobus.net&gt;
       
   645 |  date:        Wed Jun 21 14:50:39 2017 +0200
       
   646 |  summary:     Trunk2
       
   647 |
       
   648 o  <span style="color:olive;">changeset:   7:a5e9a3060e20</span>
       
   649 |  parent:      4:32253567b531
       
   650 |  user:        Boris Feld &lt;boris.feld@octobus.net&gt;
       
   651 |  date:        Wed Jun 21 14:50:39 2017 +0200
       
   652 |  summary:     Trunk
       
   653 |
       
   654 | x  <span style="color:olive;">changeset:   6:a57f1852d740</span>
       
   655 | |  branch:      feature
       
   656 | |  user:        Boris Feld &lt;boris.feld@octobus.net&gt;
       
   657 | |  date:        Wed Jun 21 14:50:39 2017 +0200
       
   658 | |  summary:     Feature2
       
   659 | |
       
   660 | x  <span style="color:olive;">changeset:   5:896dc0771e5e</span>
       
   661 |/   branch:      feature
       
   662 |    user:        Boris Feld &lt;boris.feld@octobus.net&gt;
       
   663 |    date:        Wed Jun 21 14:50:39 2017 +0200
       
   664 |    summary:     Feature
       
   665 |
       
   666 o  <span style="color:olive;">changeset:   4:32253567b531</span>
       
   667 |  user:        Boris Feld &lt;boris.feld@octobus.net&gt;
       
   668 ~  date:        Wed Jun 21 14:50:39 2017 +0200
       
   669    summary:     Parent
       
   670 
       
   671 </pre>
       
   672 
       
   673 ## Obslog
       
   674 
       
   675 Behold our savior Obslog!
       
   676 
       
   677 ## Obslog
       
   678 
       
   679 <pre class="shell_output">
       
   680 $> hg obslog -r 3
       
   681 o  <span style="color:olive;">c4414d4a5955</span> <span style="color:blue;">(3)</span> Fix bug
       
   682 |
       
   683 x  <span style="color:olive;">9b5b4aa63d51</span> <span style="color:blue;">(1)</span> Fx bug
       
   684      rewritten by <span style="color:green;">Boris Feld &lt;boris.feld@octobus.net&gt;</span> <span style="color:teal;">(Wed Jun 21 14:50:38 2017 +0200)</span> as <span style="color:olive;">c4414d4a5955</span>
       
   685 
       
   686 </pre>
       
   687 
       
   688 <pre class="shell_output">
       
   689 $> hg obslog -r 6 --all --hidden
       
   690 @  <span style="color:olive;">2c1a992b87c3</span> <span style="color:blue;">(10)</span> Feature2
       
   691 |
       
   692 x  <span style="color:olive;">a57f1852d740</span> <span style="color:blue;">(6)</span> Feature2
       
   693      rewritten by <span style="color:green;">Boris Feld &lt;boris.feld@octobus.net&gt;</span> <span style="color:teal;">(Wed Jun 21 14:50:39 2017 +0200)</span> as <span style="color:olive;">2c1a992b87c3</span>
       
   694 
       
   695 </pre>
       
   696 
       
   697 Obslog is your next best friend!
       
   698 
       
   699 ## Obslog
       
   700 
       
   701 <img src="https://media4.giphy.com/media/LxPsfUhFxwRRC/giphy.gif">
       
   702 
       
   703 # Evolve Basics behind the hood
       
   704 
       
   705 ## Amend
       
   706 
       
   707 <div class='graph' style='display: flex ;align-items: stretch ;flex-flow: row wrap ; align-items: center;'>
       
   708 <div class='left' style='order:1; width: 20%'>
       
   709 ~~~graphviz
       
   710     digraph G {
       
   711         rankdir="BT";
       
   712         graph[splines=polyline];
       
   713         node[fixedsize=true, width=1, height=1, style="filled", fillcolor="#7F7FFF", shape="pentagon"];
       
   714 
       
   715         // Revisions
       
   716         node[group=main];
       
   717         Root -> "A";
       
   718         Root [shape="circle"];
       
   719     }
       
   720 ~~~
       
   721 </div>
       
   722 
       
   723 <div class="middle" style='order:2; width: 60%'>
       
   724 To amend A:
       
   725 
       
   726     hg amend -m 'A1'
       
   727 </div>
       
   728 
       
   729 <div class='right' style='order:2; width: 20%'>
       
   730 ~~~graphviz
       
   731     digraph G {
       
   732         rankdir="BT";
       
   733         graph[splines=polyline];
       
   734         node[fixedsize=true, width=1, height=1, style="filled", fillcolor="#7F7FFF", shape="pentagon"];
       
   735 
       
   736         // Revisions
       
   737         node[group=main];
       
   738         Root -> "A1";
       
   739         node[group=obsolete, style="dotted, filled", fillcolor="#DFDFFF"];
       
   740         Root -> "A";
       
   741 
       
   742         // Obsolescence links
       
   743         edge[dir=back, style=dotted, arrowtail=dot];
       
   744         "A" -> "A1";
       
   745         Root [shape="circle"];
       
   746     }
       
   747 ~~~
       
   748 </div>
       
   749 </div>
       
   750 
       
   751 ## Amend bis
       
   752 
       
   753 It also works with:
       
   754 
       
   755     hg commit --amend -m 'A1'
       
   756 
       
   757 
       
   758 ## Prune
       
   759 
       
   760 <div class='graph' style='display: flex ;align-items: stretch ;flex-flow: row wrap ; align-items: center;'>
       
   761 <div class='left' style='order:1; width: 20%'>
       
   762 ~~~graphviz
       
   763     digraph G {
       
   764         rankdir="BT";
       
   765         graph[splines=polyline];
       
   766         node[fixedsize=true, width=1, height=1, style="filled", fillcolor="#7F7FFF", shape="pentagon"];
       
   767 
       
   768         // Revisions
       
   769         node[group=main];
       
   770         Root -> "A";
       
   771         Root [shape="circle"];
       
   772     }
       
   773 ~~~
       
   774 </div>
       
   775 
       
   776 <div class="middle" style='order:2; width: 60%'>
       
   777 
       
   778 To prune A:
       
   779 
       
   780     hg prune -r "desc(A)"
       
   781 </div>
       
   782 
       
   783 <div class='right' style='order:2; width: 20%'>
       
   784 ~~~graphviz
       
   785     digraph G {
       
   786         rankdir="BT";
       
   787         graph[splines=polyline];
       
   788         node[fixedsize=true, width=1, height=1, style="filled", fillcolor="#7F7FFF", shape="pentagon"];
       
   789 
       
   790         Root [shape="circle"];
       
   791 
       
   792         // Revisions
       
   793         node[group=obsolete, style="dotted, filled", fillcolor="#DFDFFF"];
       
   794         Root -> "A";
       
   795     }
       
   796 ~~~
       
   797 </div>
       
   798 </div>
       
   799 
       
   800 
       
   801 
       
   802 ## Rebase
       
   803 
       
   804 <div class='graph' style='display: flex ;align-items: stretch ;flex-flow: row wrap ; align-items: center;'>
       
   805 <div class='left' style='order:1; width: 20%'>
       
   806 ~~~graphviz
       
   807     digraph G {
       
   808         rankdir="BT";
       
   809         graph[splines=polyline];
       
   810         node[fixedsize=true, width=1, height=1, style="filled", fillcolor="#7F7FFF", shape="pentagon"];
       
   811 
       
   812         // Revisions
       
   813         node[group=branch];
       
   814         Root -> B;
       
   815         node[group=main];
       
   816         Root -> "A";
       
   817 
       
   818         Root [shape="circle"];
       
   819     }
       
   820 ~~~
       
   821 </div>
       
   822 
       
   823 <div class="middle" style='order:2; width: 60%'>
       
   824 
       
   825 In order to rebase A on top of B;
       
   826 
       
   827     hg rebase -r "desc(A)" -d "desc(B)"
       
   828 
       
   829 </div>
       
   830 
       
   831 <div class='right' style='order:2; width: 20%'>
       
   832 ~~~graphviz
       
   833     digraph G {
       
   834         rankdir="BT";
       
   835         graph[splines=polyline];
       
   836         node[fixedsize=true, width=1, height=1, style="filled", fillcolor="#7F7FFF", shape="pentagon"];
       
   837 
       
   838         // Revisions
       
   839         node[group=branch];
       
   840         Root -> B -> "A'";
       
   841 
       
   842         node[group=obsolete, style="dotted, filled", fillcolor="#DFDFFF"];
       
   843         Root -> "A";
       
   844 
       
   845         // Obsolescence links
       
   846         edge[dir=back, style=dotted, arrowtail=dot];
       
   847         "A" -> "A'";
       
   848 
       
   849         Root [shape="circle"];
       
   850     }
       
   851 ~~~
       
   852 </div>
       
   853 </div>
       
   854 
       
   855 
       
   856 # More advanced
       
   857 
       
   858 ## Fold
       
   859 
       
   860 <div class='graph' style='display: flex ;align-items: stretch ;flex-flow: row wrap ; align-items: center;'>
       
   861 <div class='left' style='order:1; width: 15%'>
       
   862 
       
   863 ~~~graphviz
       
   864     digraph G {
       
   865         rankdir="BT";
       
   866         graph[splines=polyline];
       
   867         node[fixedsize=true, width=1, height=1, style="filled", fillcolor="#7F7FFF", shape="pentagon"];
       
   868 
       
   869         // Revisions
       
   870         node[group=branch];
       
   871         Root -> A -> B;
       
   872 
       
   873         Root [shape="circle"];
       
   874     }
       
   875 ~~~
       
   876 </div>
       
   877 
       
   878 <div class="middle" style='order:2; width: 70%'>
       
   879 
       
   880 To fold A and B:
       
   881 
       
   882     hg fold -r "desc(A)" -r "desc(B)" -m "C"
       
   883 
       
   884 </div>
       
   885 
       
   886 <div class='right' style='order:2; width: 15%'>
       
   887 
       
   888 ~~~graphviz
       
   889     digraph G {
       
   890         rankdir="BT";
       
   891         graph[splines=polyline];
       
   892         node[fixedsize=true, width=1, height=1, style="filled", fillcolor="#7F7FFF", shape="pentagon"];
       
   893 
       
   894         // Revisions
       
   895         node[group=branch];
       
   896         Root -> C;
       
   897 
       
   898         node[group=obsolete, style="dotted, filled", fillcolor="#DFDFFF"];
       
   899         Root -> A -> B;
       
   900 
       
   901         // Obsolescence links
       
   902         edge[dir=back, style=dotted, arrowtail=dot];
       
   903         "A" -> "C";
       
   904         "B" -> "C";
       
   905 
       
   906         Root [shape="circle"];
       
   907     }
       
   908 ~~~
       
   909 
       
   910 </div>
       
   911 </div>
       
   912 
       
   913 
       
   914 ## Split
       
   915 
       
   916 <div class='graph' style='display: flex ;align-items: stretch ;flex-flow: row wrap ; align-items: center;'>
       
   917 <div class='left' style='order:1; width: 20%'>
       
   918 ~~~graphviz
       
   919     digraph G {
       
   920         rankdir="BT";
       
   921         graph[splines=polyline];
       
   922         node[fixedsize=true, width=1, height=1, style="filled", fillcolor="#7F7FFF", shape="pentagon"];
       
   923 
       
   924         // Revisions
       
   925         node[group=branch];
       
   926         Root -> A;
       
   927 
       
   928         Root [shape="circle"];
       
   929     }
       
   930 ~~~
       
   931 </div>
       
   932 
       
   933 <div class="middle" style='order:2; width: 60%'>
       
   934 
       
   935 Split in two:
       
   936 
       
   937     hg split -r "desc(A)"
       
   938 </div>
       
   939 
       
   940 <div class='right' style='order:2; width: 20%'>
       
   941 ~~~graphviz
       
   942     digraph G {
       
   943         rankdir="BT";
       
   944         graph[splines=polyline];
       
   945         node[fixedsize=true, width=1, height=1, style="filled", fillcolor="#7F7FFF", shape="pentagon"];
       
   946 
       
   947         // Revisions
       
   948         node[group=branch];
       
   949         Root -> B -> C;
       
   950 
       
   951         node[group=obsolete, style="dotted, filled", fillcolor="#DFDFFF"];
       
   952         Root -> A;
       
   953 
       
   954         // Obsolescence links
       
   955         edge[dir=back, style=dotted, arrowtail=dot];
       
   956         "A" -> "C";
       
   957         "A" -> "B";
       
   958 
       
   959         Root [shape="circle"];
       
   960     }
       
   961 ~~~
       
   962 </div>
       
   963 </div>
       
   964 
       
   965 
       
   966 # Warning zone
       
   967 
       
   968 ## Divergence
       
   969 
       
   970 ~~~graphviz
       
   971     digraph G {
       
   972         rankdir="BT";
       
   973         graph[splines=polyline];
       
   974         node[fixedsize=true, width=1, height=1, style="filled", fillcolor="#7F7FFF", shape="pentagon"];
       
   975 
       
   976         // Revisions
       
   977         node[group=branch];
       
   978         Root -> "A";
       
   979 
       
   980         Root [shape="circle"];
       
   981     }
       
   982 ~~~
       
   983 
       
   984 ## Divergence
       
   985 
       
   986 <div class='graph' style='display: flex ;align-items: stretch ;flex-flow: row wrap ; align-items: center;'>
       
   987 <div class='left' style='order:1; width: 30%'>
       
   988 ~~~graphviz
       
   989     digraph G {
       
   990         rankdir="BT";
       
   991         graph[splines=polyline];
       
   992         node[fixedsize=true, width=1, height=1, style="filled", fillcolor="#7F7FFF", shape="pentagon"];
       
   993 
       
   994         // Revisions
       
   995         node[group=branch];
       
   996         Root -> "B";
       
   997 
       
   998         node[group=obsolete, style="dotted, filled", fillcolor="#DFDFFF"];
       
   999         Root -> "A";
       
  1000 
       
  1001         // Obsolescence links
       
  1002         edge[dir=back, style=dotted, arrowtail=dot];
       
  1003         "A" -> "B";
       
  1004 
       
  1005         Root [shape="circle"];
       
  1006     }
       
  1007 ~~~
       
  1008 </div>
       
  1009 
       
  1010 <div class="middle" style='order:2; width: 70%'>
       
  1011 
       
  1012 First amend:
       
  1013 
       
  1014     hg amend -m B;
       
  1015 
       
  1016 </div>
       
  1017 </div>
       
  1018 
       
  1019 
       
  1020 ## Divergence 2
       
  1021 
       
  1022 <div class='graph' style='display: flex ;align-items: stretch ;flex-flow: row wrap ; align-items: center;'>
       
  1023 
       
  1024 <div class="middle" style='order:1; width: 70%'>
       
  1025 
       
  1026 Second amend:
       
  1027 
       
  1028     hg amend -m C
       
  1029 
       
  1030 </div>
       
  1031 
       
  1032 <div class='left' style='order:2; width: 30%'>
       
  1033 ~~~graphviz
       
  1034     digraph G {
       
  1035         rankdir="BT";
       
  1036         graph[splines=polyline];
       
  1037         node[fixedsize=true, width=1, height=1, style="filled", fillcolor="#7F7FFF", shape="pentagon"];
       
  1038 
       
  1039         Root;
       
  1040 
       
  1041         node[group=obsolete, style="dotted, filled", fillcolor="#DFDFFF"];
       
  1042         Root -> "A";
       
  1043 
       
  1044         // Revisions
       
  1045         node[group=branch, fillcolor="#7F7FFF", style="filled"];
       
  1046         Root -> "C";
       
  1047 
       
  1048         // Obsolescence links
       
  1049         edge[dir=back, style=dotted, arrowtail=dot];
       
  1050         "A" -> "C";
       
  1051 
       
  1052         Root [shape="circle"];
       
  1053     }
       
  1054 ~~~
       
  1055 </div>
       
  1056 </div>
       
  1057 
       
  1058 ## Result
       
  1059 
       
  1060 ~~~graphviz
       
  1061     digraph G {
       
  1062         rankdir="BT";
       
  1063         graph[splines=polyline];
       
  1064         node[fixedsize=true, style="filled", width=1, height=1, fillcolor="#7F7FFF", shape="pentagon"];
       
  1065 
       
  1066         node[group=main];
       
  1067         Root -> "B";
       
  1068         node[group=divergence];
       
  1069         Root -> "C";
       
  1070         node[group=obsolete, style="dotted, filled", fillcolor="#DFDFFF"];
       
  1071         Root -> "A";
       
  1072 
       
  1073         // Obsolescence links
       
  1074         edge[dir=back, style=dotted, arrowtail=dot];
       
  1075         A -> B;
       
  1076         A -> C;
       
  1077 
       
  1078         Root [shape="pentagon"];
       
  1079         B [fillcolor="#FF3535"];
       
  1080         C [fillcolor="#FF3535"];
       
  1081         Root[shape="circle"];
       
  1082     }
       
  1083 ~~~
       
  1084 
       
  1085 ## That's gonna hurt!
       
  1086 
       
  1087 # Stabilization
       
  1088 
       
  1089 ## Stabilization with amend
       
  1090 
       
  1091 ~~~graphviz
       
  1092     digraph G {
       
  1093         rankdir="BT";
       
  1094         graph[splines=polyline];
       
  1095         node[fixedsize=true, style="filled", width=1, height=1, fillcolor="#7F7FFF", shape="pentagon"];
       
  1096 
       
  1097         node[group=main];
       
  1098         Root -> "A'";
       
  1099         node[group=obsolete, style="dotted, filled", fillcolor="#DFDFFF"];
       
  1100         Root -> "A" -> B;
       
  1101 
       
  1102         // Obsolescence links
       
  1103         edge[dir=back, style=dotted, arrowtail=dot];
       
  1104         "A" -> "A'";
       
  1105 
       
  1106         B[fillcolor="#FF3535"];
       
  1107         Root[shape="circle"];
       
  1108     }
       
  1109 ~~~
       
  1110 
       
  1111 ## Evolve!
       
  1112 
       
  1113 <div class='graph' style='display: flex ;align-items: stretch ;flex-flow: row wrap ; align-items: center;'>
       
  1114 <div class="middle" style='order:2; width: 50%'>
       
  1115 
       
  1116 Stabilize repo:
       
  1117 
       
  1118     hg evolve --all
       
  1119 </div>
       
  1120 <div class='right' style='order:2; width: 50%'>
       
  1121 ~~~graphviz
       
  1122     digraph G {
       
  1123         rankdir="BT";
       
  1124         graph[splines=polyline];
       
  1125         node[fixedsize=true, style="filled", width=1, height=1, fillcolor="#7F7FFF", shape="pentagon"];
       
  1126 
       
  1127         node[group=main];
       
  1128         Root -> "A'" -> "B'";
       
  1129         node[group=obsolete, style="dotted, filled", fillcolor="#DFDFFF"];
       
  1130         Root -> "A" -> B;
       
  1131 
       
  1132         // Obsolescence links
       
  1133         edge[dir=back, style=dotted, arrowtail=dot];
       
  1134         "A" -> "A'";
       
  1135         "B" -> "B'";
       
  1136 
       
  1137         Root[shape="circle"];
       
  1138     }
       
  1139 ~~~
       
  1140 
       
  1141 </div>
       
  1142 </div>
       
  1143 
       
  1144 # Future is near!
       
  1145 
       
  1146 ## Effect-flag
       
  1147 
       
  1148 Remember our obs-markers?
       
  1149 
       
  1150 They are great for evolution, but how do you know what changed between two evolutions?
       
  1151 
       
  1152 ## Effect-flag
       
  1153 
       
  1154 Effect-flag are storing what changed between evolutions. You can view them with `obslog`, who else?
       
  1155 
       
  1156 ## Effect-flag
       
  1157 
       
  1158 Does the meta only changed?
       
  1159 
       
  1160 <pre class="shell_output">
       
  1161 o  <span style="color:olive;">5732d5ea6aa2</span> <span style="color:blue;">(2)</span> Fix bug
       
  1162 |
       
  1163 @  <span style="color:olive;">aa3cd7ee52fc</span> <span style="color:blue;">(1)</span> Fx bug
       
  1164      rewritten(description) by <span style="color:green;">Boris Feld &lt;boris.feld@octobus.net&gt;</span> <span style="color:teal;">(Wed Jun 21 15:49:54 2017 +0200)</span> as <span style="color:olive;">5732d5ea6aa2</span>
       
  1165 
       
  1166 </pre>
       
  1167 
       
  1168 ## Or did the code changed?
       
  1169 
       
  1170 <pre class="shell_output">
       
  1171 @  <span style="color:olive;">8f824718f3f7</span> <span style="color:blue;">(12)</span> Fix the build
       
  1172 |
       
  1173 x  <span style="color:olive;">f9310b4b05e1</span> <span style="color:blue;">(10)</span> Fix the build
       
  1174      rewritten(content) by <span style="color:green;">Boris Feld &lt;boris.feld@octobus.net&gt;</span> <span style="color:teal;">(Wed Jun 21 15:53:07 2017 +0200)</span> as <span style="color:olive;">8f824718f3f7</span>
       
  1175 
       
  1176 </pre>
       
  1177 
       
  1178 ## Or was rebased?
       
  1179 
       
  1180 <pre class="shell_output">
       
  1181 o  <span style="color:olive;">ab709059df38</span> <span style="color:blue;">(9)</span> Feature2
       
  1182 |
       
  1183 @  <span style="color:olive;">3d61cb9ab34f</span> <span style="color:blue;">(5)</span> Feature2
       
  1184      rewritten(branch, parent) by <span style="color:green;">Boris Feld &lt;boris.feld@octobus.net&gt;</span> <span style="color:teal;">(Wed Jun 21 15:53:06 2017 +0200)</span> as <span style="color:olive;">ab709059df38</span>
       
  1185 
       
  1186 </pre>
       
  1187 
       
  1188 ## Obslog
       
  1189 
       
  1190 <img src="https://media0.giphy.com/media/3oriO13KTkzPwTykp2/giphy.gif">
       
  1191 
       
  1192 ## Obsfate
       
  1193 
       
  1194 <pre class="shell_output">
       
  1195 o  8f824718f3f7
       
  1196 |
       
  1197 | x  f39472eb8519
       
  1198 | |    Obsfate: pruned by Boris Feld &lt;boris.feld@octobus.net&gt; (at 2017-06-21 15:53 +0200)
       
  1199 | |
       
  1200 | x  f9310b4b05e1
       
  1201 |/     Obsfate: rewritten by Boris Feld &lt;boris.feld@octobus.net&gt; as 8f824718f3f7 (at 2017-06-21 15:53 +0200)
       
  1202 |
       
  1203 o  ab709059df38
       
  1204 |
       
  1205 o  b0d7c614e47d
       
  1206 |
       
  1207 o  d61083b45bba
       
  1208 |
       
  1209 o  50ebd46e2452
       
  1210 |
       
  1211 | @  3d61cb9ab34f
       
  1212 | |    Obsfate: rewritten by Boris Feld &lt;boris.feld@octobus.net&gt; as ab709059df38 (at 2017-06-21 15:53 +0200)
       
  1213 | |
       
  1214 | x  1c6a75c00a45
       
  1215 |/     Obsfate: rewritten by Boris Feld &lt;boris.feld@octobus.net&gt; as b0d7c614e47d (at 2017-06-21 15:53 +0200)
       
  1216 |
       
  1217 o  c1bdb750ab80
       
  1218 |
       
  1219 o  39752c0e48a4
       
  1220 |
       
  1221 | x  36744bfd9d65
       
  1222 |/     Obsfate: rewritten by Boris Feld &lt;boris.feld@octobus.net&gt; as 39752c0e48a4 (at 2017-06-21 15:53 +0200)
       
  1223 |
       
  1224 o  7d12a4681f84
       
  1225 </pre>
       
  1226 
       
  1227 ## Obslog --patch
       
  1228 
       
  1229 <pre class="shell_output">
       
  1230 $> hg obslog --patch
       
  1231 x  <span style="color:olive;">19fb99aaa0d5</span> <span style="color:blue;">(3594)</span> obslog: add a patch option
       
  1232 |    rewritten(content) by <span style="color:green;">Pierre-Yves David &lt;pierre-yves.david@octobus.net&gt;</span> <span style="color:teal;">(Mon Jun 19 19:25:18 2017 +0200)</span> as <span style="color:olive;">81b01fe6db3b</span>
       
  1233 |      diff -r 19fb99aaa0d5 -r 81b01fe6db3b hgext3rd/evolve/obshistory.py
       
  1234 |      --- a/hgext3rd/evolve/obshistory.py  Mon Jun 19 19:00:36 2017 +0200
       
  1235 |      +++ b/hgext3rd/evolve/obshistory.py  Mon Jun 19 19:00:36 2017 +0200
       
  1236 |      @@ -105,6 +105,10 @@
       
  1237 |                   markerfm.plain('\n')
       
  1238 |
       
  1239 |                   # Patch
       
  1240 |      +
       
  1241 |      +# XXX-review: I find it a bit hacky always call showpatch and expect it to not
       
  1242 |      +# XXX-review: show anything without --patch. I would prefer and explicite condition for
       
  1243 |      +# XXX-review: calling showpatch.
       
  1244 |                   self.showpatch(ctx, matchfn)
       
  1245 |
       
  1246 |                   self.hunk[ctx.node()] = self.ui.popbuffer()
       
  1247 |      ...
       
  1248 |
       
  1249 | o  <span style="color:olive;">a788967aa800</span> <span style="color:blue;">(3593)</span> obslog: clarify some sorting code
       
  1250 | |
       
  1251 x |  <span style="color:olive;">4c2be5027b23</span>
       
  1252 |/     rewritten(user) by <span style="color:green;">Pierre-Yves David &lt;pierre-yves.david@octobus.net&gt;</span> <span style="color:teal;">(Mon Jun 19 19:00:54 2017 +0200)</span> as <span style="color:olive;">19fb99aaa0d5</span>
       
  1253 |        (No patch available yet, context is not local)
       
  1254 |
       
  1255 x  <span style="color:olive;">5d04c9bfac7e</span>
       
  1256 |    rewritten(description, user, date, parent, content) by <span style="color:green;">Pierre-Yves David &lt;pierre-yves.david@octobus.net&gt;</span> <span style="color:teal;">(Mon Jun 19 19:00:36 2017 +0200)</span> as <span style="color:olive;">4c2be5027b23, a788967aa800</span>
       
  1257 |      (No patch available yet, context is not local)
       
  1258 |
       
  1259 x  <span style="color:olive;">8ddfd687cf57</span> <span style="color:blue;">(3559)</span> obslog: add a patch option
       
  1260 |    rewritten(parent) by <span style="color:green;">Pierre-Yves David &lt;pierre-yves.david@octobus.net&gt;</span> <span style="color:teal;">(Mon Jun 19 18:59:02 2017 +0200)</span> as <span style="color:olive;">5d04c9bfac7e</span>
       
  1261 |      (No patch available yet, succ is unknown locally)
       
  1262 |
       
  1263 x  <span style="color:olive;">27d388000e90</span> <span style="color:blue;">(3541)</span> obslog: add a patch option
       
  1264      rewritten(content) by <span style="color:green;">Boris Feld &lt;boris.feld@octobus.net&gt;</span> <span style="color:teal;">(Mon Jun 19 18:40:16 2017 +0200)</span> as <span style="color:olive;">8ddfd687cf57</span>
       
  1265 </pre>
       
  1266 
       
  1267 
       
  1268 # Conclusion
       
  1269 
       
  1270 <div class='graph' style='display: flex ;align-items: stretch ;flex-flow: row wrap ; align-items: center;'>
       
  1271 <div class='left' style='order:1; width: 20%'>
       
  1272 ~~~graphviz
       
  1273  digraph G{}
       
  1274 ~~~
       
  1275 </div>
       
  1276 
       
  1277 <div class="middle" style='order:2; width: 60%'>
       
  1278 To stuff:
       
  1279 
       
  1280     hg
       
  1281 </div>
       
  1282 
       
  1283 <div class='right' style='order:2; width: 20%'>
       
  1284 ~~~graphviz
       
  1285  digraph G{}
       
  1286 ~~~
       
  1287 </div>
       
  1288 </div>