\begin{frame}{The Underlying Model}
  A Mercurial changeset conceptually consist of:
  \begin{itemize}
  \item 0--2 parent changeset IDs:
    \begin{itemize}
    \item root changeset has no parents
    \item normal changesets have one parent
    \item merge changesets have two parents
    \end{itemize}
  \item date, username, commit message
  \item difference from first parent changeset
  \item changeset ID is computed as SHA-1 hash of the above
  \item makes it impossible to inject \alert{malicious code} on server
  \end{itemize}

  \begin{center}
    \begin{tikzpicture}[start chain]
      \tikzstyle{rev}+=[on chain, minimum size=5mm, font=\small]
      \tikzset{node distance=8mm and 10mm, on grid}

      \node[rev,join] {};
      \node[rev,join] {};
      \node[rev,join] (x) {};
      \node[rev,join=by join-nw, above right=of x] (y) {};
      \node[rev,join] (a) {};
      \node[rev,join=with x by join-sw, below right=of x] (z) {};
      \node[rev,join] {};
      \node[rev,join] {};
      \node[rev,join] (w) {};
      \node[rev,join=by join-es, above right=of w] (b) {};
      \node[rev,join] {};
      \draw[->] (a) to[out=0, in=150] (b);
    \end{tikzpicture}
  \end{center}
\end{frame}
