changeset 42:9bc18f9d1f8e

Merged.
author Martin Geisler <mg@lazybytes.net>
date Thu, 20 Aug 2009 18:59:14 +0200
parents 75744fde3008 (current diff) cf8d03f1b3f0 (diff)
children 7d35f4a23514
files mercurial.tex
diffstat 1 files changed, 135 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial.tex
+++ b/mercurial.tex
@@ -739,15 +739,147 @@
 \subsection{Changing History}
 
 \begin{frame}{Moving Changesets Around}
-  The \hgext{rebase} extension
+  \tikzstyle{rev}+=[on chain, join, minimum size=5mm]
+  \tikzset{node distance=4mm and 6mm}
+
+  Tired of all those merges? Use the \hgext{rebase} extension!
+  \begin{itemize}
+  \item Revision graph:
+
+    \begin{tikzpicture}[start chain]
+      \node[rev] {$A$};
+      \node[rev] {$B$};
+      \node[rev] {$C$};
+      \begin{scope}[start branch=pulled]
+        \node<3->[rev,on chain=going below right] {$X$};
+        \node<3->[rev] {$Y$};
+        \node<3->[rev] {$Z$};
+      \end{scope}
+      \node<2->[rev] {$D$};
+      \node<2->[rev] {$E$};
+    \end{tikzpicture}
+
+  \item<4-> Merge:
+
+    \begin{tikzpicture}[start chain]
+      \node[rev] {$A$};
+      \node[rev] {$B$};
+      \node[rev] {$C$};
+      \begin{scope}[start branch=pulled]
+        \node[rev,on chain=going below right] {$X$};
+        \node[rev] {$Y$};
+        \node[rev] {$Z$};
+      \end{scope}
+      \node[rev] {$D$};
+      \node[rev] {$E$};
+      \begin{scope}[continue branch=pulled]
+        \node[rev,on chain=going above right,join=with chain-end] {$M$};
+      \end{scope}
+    \end{tikzpicture}
+
+  \item<5-> Rebase:
+
+    \begin{tikzpicture}[start chain]
+      \node[rev] {$A$};
+      \node[rev] {$B$};
+      \node[rev] {$C$};
+      \begin{scope}[start branch=pulled]
+        \node[rev,on chain=going below right] {$X$};
+        \node[rev] {$Y$};
+        \node[rev] {$Z$};
+        \node[rev] {$D'$};
+        \node[rev] {$E'$};
+      \end{scope}
+      \node[rev,join=by {black!30!white},opacity=0.3] {$D$};
+      \node[rev,join=by {black!30!white},opacity=0.3] {$E$};
+    \end{tikzpicture}
+
+  \item<6-> Beware: public changes should never be rebased.
+  \end{itemize}
 \end{frame}
 
 \begin{frame}{Maintaining Patch Series}
-  The \hgext{mq} extension
+  The \hgext{mq} extension makes it easy to maintain a patch series:
+
+  \begin{center}
+    \begin{tikzpicture}[start chain=stack going above, node distance=5mm]
+      \tikzstyle{rev}+=[on chain,join]
+      \tikzstyle{patch}=[rev, draw=green!50!black!50,
+        top color=white, bottom color=green!50!black!20]
+      \path[use as bounding box] (0,0) -- (0, 4.5);
+
+      \node[on chain] {$\vdots$};
+      \node[rev] {};
+      \node<2->[patch] {code};
+      \node<3->[patch] {test};
+      \node<4->[patch] {doc};
+
+      \draw<5->[->] ([xshift=-1cm] stack-3.center)
+        -- node[left, anchor=mid east] {\hgcmd{qpush}}
+                    ([xshift=-1cm] stack-5.center);
+      \draw<5->[->] ([xshift=1cm] stack-5.center)
+        -- node[right, anchor=mid west] {\hgcmd{qpop}}
+                    ([xshift=1cm] stack-3.center);
+    \end{tikzpicture}
+  \end{center}
+
 \end{frame}
 
 \begin{frame}{Editing History}
-  The \hgext{histedit} extension
+  \tikzstyle{rev}+=[on chain, minimum size=7mm]
+  \tikzstyle{squiggle}=[on chain, font=\large, red]
+  \tikzset{node distance=5mm}
+
+  The \hgext{histedit} extension lets you
+  \begin{itemize}[<+->]
+  \item reorder changesets:
+
+    \begin{tikzpicture}[start chain]
+      \node[rev] {$A$};
+      \node[rev,join] {$B$};
+      \node[rev,join] {$C$};
+      \node[squiggle] {$\rightsquigarrow$};
+      \node[rev] {$A$};
+      \node[rev,join] {$C'$};
+      \node[rev,join] {$B'$};
+    \end{tikzpicture}
+
+  \item fold changesets
+
+    \begin{tikzpicture}[start chain]
+      \node[rev] {$A$};
+      \node[rev,join] {$B$};
+      \node[rev,join] {$C$};
+      \node[squiggle] {$\rightsquigarrow$};
+      \node[rev] {$A$};
+      \node[rev,join] {$BC$};
+    \end{tikzpicture}
+
+  \item drop changesets
+
+    \begin{tikzpicture}[start chain]
+      \node[rev] {$A$};
+      \node[rev,join] {$B$};
+      \node[rev,join] {$C$};
+      \node[squiggle] {$\rightsquigarrow$};
+      \node[rev] {$A$};
+      \node[rev,join] {$C'$};
+    \end{tikzpicture}
+
+  \item edit changesets
+
+    \begin{tikzpicture}[start chain]
+      \node[rev] {$A$};
+      \node[rev,join] {$B$};
+      \node[rev,join] {$C$};
+      \node[squiggle] {$\rightsquigarrow$};
+      \node[rev] {$A$};
+      \node[rev,join] {$X$};
+      \node[rev,join] {$B'$};
+      \node[rev,join] {$C'$};
+    \end{tikzpicture}
+  \end{itemize}
+  Inspired by \hgcmd{git rebase -i}.
 \end{frame}
 
 \subsection{Migrating History}