
bos@26: \chapter*{Preface}
bos@26: \addcontentsline{toc}{chapter}{Preface}
bos@26: \label{chap:preface}
bos@26: 
bos@26: Distributed revision control is a relatively new territory, and has
bos@26: thus far grown due to people's willingness to strike out into
bos@26: ill-charted territory.
bos@26: 
bos@26: I am writing a book about distributed revision control because I
bos@26: believe that it is an important subject that deserves a field guide.
bos@26: I chose to write about Mercurial because it is the easiest tool to
bos@26: learn the terrain with, and yet it scales to the demands of real,
bos@26: challenging environments where many other revision control tools fail.
bos@26: 
bos@26: \section{This book is a work in progress}
bos@26: 
bos@26: I am releasing this book while I am still writing it, in the hope that
bos@26: it will prove useful to others.  I also hope that readers will
bos@26: contribute as they see fit.
bos@26: 
bos@200: \section{About the examples in this book}
bos@200: 
bos@200: This book takes an unusual approach to code samples.  Every example is
bos@200: ``live''---each one is actually the result of a shell script that
bos@200: executes the Mercurial commands you see.  Every time an image of the
bos@200: book is built from its sources, all the example scripts are
bos@200: automatically run, and their current results compared against their
bos@200: expected results.
bos@200: 
bos@200: The advantage of this approach is that the examples are always
bos@200: accurate; they describe \emph{exactly} the behaviour of the version of
bos@200: Mercurial that's mentioned at the front of the book.  If I update the
bos@200: version of Mercurial that I'm documenting, and the output of some
bos@200: command changes, the build fails.
bos@200: 
bos@200: There is a small disadvantage to this approach, which is that the
bos@200: dates and times you'll see in examples tend to be ``squashed''
bos@200: together in a way that they wouldn't be if the same commands were
bos@200: being typed by a human.  Where a human can issue no more than one
bos@200: command every few seconds, with any resulting timestamps
bos@200: correspondingly spread out, my automated example scripts run many
bos@200: commands in one second.
bos@200: 
bos@200: As an instance of this, several consecutive commits in an example can
bos@200: show up as having occurred during the same second.  You can see this
bos@200: occur in the \hgext{bisect} example in section~\ref{sec:undo:bisect},
bos@200: for instance.
bos@200: 
bos@200: So when you're reading examples, don't place too much weight on the
bos@200: dates or times you see in the output of commands.  But \emph{do} be
bos@200: confident that the behaviour you're seeing is consistent and
bos@200: reproducible.
bos@200: 
bos@26: \section{Colophon---this book is Free}
bos@26: 
bos@26: This book is licensed under the Open Publication License, and is
bos@26: produced entirely using Free Software tools.  It is typeset with
bos@26: \LaTeX{}; illustrations are drawn and rendered with
bos@26: \href{http://www.inkscape.org/}{Inkscape}.
bos@26: 
bos@26: The complete source code for this book is published as a Mercurial
bos@26: repository, at \url{http://hg.serpentine.com/mercurial/book}.
bos@26: 
bos@26: %%% Local Variables: 
bos@26: %%% mode: latex
bos@26: %%% TeX-master: "00book"
bos@26: %%% End: 




