annotate ja/concepts.tex @ 781:93d19b27859c

started concepts.tex
author Yoshiki Yazawa <yaz@honeyplanet.jp>
date Tue, 12 May 2009 17:49:11 +0900
parents b2d447356c42
children 43556decb81f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
1 %\chapter{Behind the scenes}
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
2 \chapter{$BIqBfN"(B}
56
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
3 \label{chap:concepts}
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
4
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
5 %Unlike many revision control systems, the concepts upon which
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
6 %Mercurial is built are simple enough that it's easy to understand how
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
7 %the software really works. Knowing this certainly isn't necessary,
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
8 %but I find it useful to have a ``mental model'' of what's going on.
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
9
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
10 $BB?$/$N%j%S%8%g%s%3%s%H%m!<%k%7%9%F%`$H0c$C$F!$(B Mercurial$B$NF0:n$N4pK\$H$J$C(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
11 $B$F$$$k%3%s%;%W%H$rM}2r$9$k$3$H$OMF0W$$!%(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
12 $B$3$l$rM}2r$9$k$3$H$OI,$:$7$bI,MW$G$O$J$$$,!$I.<T$O!$2?$,5/$-$F$$$k$N$+$K(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
13 $B$D$$$F%b%G%k$r0U<1$7$F$$$k$3$H$OM-MQ$G$"$k$H9M$($F$$$k!%(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
14
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
15 %This understanding gives me confidence that Mercurial has been
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
16 %carefully designed to be both \emph{safe} and \emph{efficient}. And
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
17 %just as importantly, if it's easy for me to retain a good idea of what
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
18 %the software is doing when I perform a revision control task, I'm less
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
19 %likely to be surprised by its behaviour.
56
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
20
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
21 $B$3$N$3$H$rM}2r$7$?8e$G!$I.<T$O(BMercurial$B$,(B\emph{$B0BA4(B}$B$H(B\emph{$B8zN((B}$B$r<B8=$9(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
22 $B$k$h$&$KCm0U?<$/@_7W$5$l$F$$$k$H3N?.$9$k$K;j$C$?!%(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
23 $B$^$?!$=EMW$JE@$H$7$F!$%j%S%8%g%s%3%s%H%m!<%k$NA`:n$r9T$&:]$K%=%U%H%&%'%"(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
24 $B$,2?$r$9$k$N$+$r5-21$KN1$a$F$*$/$3$H$K$h$C$F!$IT0U$N5sF0$G6C$/$3$H$,>/$J(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
25 $B$/$J$C$?!%(B
109
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
26
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
27 %In this chapter, we'll initially cover the core concepts behind
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
28 %Mercurial's design, then continue to discuss some of the interesting
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
29 %details of its implementation.
112
2fcead053b7a More. Concept. Fun.
Bryan O'Sullivan <bos@serpentine.com>
parents: 111
diff changeset
30
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
31 $B$3$N>O$G$O$^$:(BMercurial$B$N@_7W$N%3%"%3%s%;%W%H$r%+%P!<$9$k!%$=$7$F<BAu>e$N(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
32 $B$$$/$D$+$N6=L#?<$$E@$N>\:Y$K$D$$$F5DO@$9$k!%(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
33
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
34 %\section{Mercurial's historical record}
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
35 \section{Mercurial$B$NMzNr5-O?(B}
109
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
36
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
37 %\subsection{Tracking the history of a single file}
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
38 \subsection{$B%U%!%$%kMzNr$NDI@W(B}
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
39
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
40 %When Mercurial tracks modifications to a file, it stores the history
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
41 %of that file in a metadata object called a \emph{filelog}. Each entry
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
42 %in the filelog contains enough information to reconstruct one revision
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
43 %of the file that is being tracked. Filelogs are stored as files in
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
44 %the \sdirname{.hg/store/data} directory. A filelog contains two kinds
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
45 %of information: revision data, and an index to help Mercurial to find
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
46 %a revision efficiently.
56
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
47
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
48 Mercurial$B$O%U%!%$%k$X$NJQ99$rDI@W$9$k;~!$%U%!%$%k$NMzNr$r(B\emph{filelog}$B$H(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
49 $B8F$P$l$k%a%?%G!<%?%*%V%8%'%/%H$K3JG<$9$k!%%U%!%$%k%m%0Fb$N3F!9$N%(%s%H%j(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
50 $B$O!$DI@WBP>]$N%U%!%$%k$N%j%S%8%g%s$r:F7z$9$k$N$K==J,$J>pJs$r;}$D!%%U%!%$(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
51 $B%k%m%0$O(B\sdirname{.hg/store/data}$B%G%#%l%/%H%j$K%U%!%$%k$H$7$FJ]B8$5$l$k!%(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
52 $B%U%!%$%k%m%0$O%j%S%8%g%s%G!<%?$H(BMercurial$B$,%j%S%8%g%s$r8zN(E*$K8+$D$1$i$l(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
53 $B$k$h$&$K$9$k$?$a$N%$%s%G%C%/%9$N(B2$B<oN`$N>pJs$r;}$D!%(B
56
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
54
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
55 %A file that is large, or has a lot of history, has its filelog stored
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
56 %in separate data (``\texttt{.d}'' suffix) and index (``\texttt{.i}''
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
57 %suffix) files. For small files without much history, the revision
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
58 %data and index are combined in a single ``\texttt{.i}'' file. The
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
59 %correspondence between a file in the working directory and the filelog
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
60 %that tracks its history in the repository is illustrated in
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
61 %figure~\ref{fig:concepts:filelog}.
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
62
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
63 $B%5%$%:$NBg$-$J%U%!%$%k$d!$KDBg$JMzNr$r;}$D%U%!%$%k$O!$%G!<%?$,(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
64 (``\texttt{.d}'' suffix) $B$*$h$S%$%s%G%C%/%9(B (``\texttt{.i}'' suffix)$B$N%U%!(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
65 $B%$%k$KJ,3d$5$l$?(Bfilelog$B$r;}$D!%%5%$%:$,>.$5$/!$MzNr$NBg$-$/$J$$%U%!%$%k$O(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
66 $B%j%S%8%g%s%G!<%?$H%$%s%G%C%/%9$,(B1$B$D$N(B``\texttt{.i}''$B%U%!%$%k$K7k9g$5$l$F(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
67 $B$$$k!%%o!<%-%s%0%G%#%l%/%H%jFb$N%U%!%$%k$H%j%]%8%H%jFb$NMzNr$rDI@W$9$k(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
68 filelog$B$H$NBP1~$r?^(B~\ref{fig:concepts:filelog}$B$K<($9!%(B
56
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
69
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
70 \begin{figure}[ht]
108
e0b961975c5e First bit of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 56
diff changeset
71 \centering
294
b2d447356c42 - completed cmdref.tex
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 293
diff changeset
72 % \grafix{filelog}
b2d447356c42 - completed cmdref.tex
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 293
diff changeset
73 \includegraphics{filelog}
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
74 % \caption{Relationships between files in working directory and
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
75 % filelogs in repository}
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
76 \caption{$B%o!<%-%s%0%G%#%l%/%H%jFb$N%U%!%$%k$H%j%]%8%H%j$N%U%!%$%k%m%0(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
77 $B$N4X78(B}
108
e0b961975c5e First bit of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 56
diff changeset
78 \label{fig:concepts:filelog}
56
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
79 \end{figure}
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
80
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
81 %\subsection{Managing tracked files}
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
82 \subsection{$BDI@W$5$l$F$$$k%U%!%$%k$N4IM}(B}
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
83
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
84 %Mercurial uses a structure called a \emph{manifest} to collect
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
85 %together information about the files that it tracks. Each entry in
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
86 %the manifest contains information about the files present in a single
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
87 %changeset. An entry records which files are present in the changeset,
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
88 %the revision of each file, and a few other pieces of file metadata.
109
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
89
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
90 Mercurial$B$O(B\emph{$B%^%K%U%'%9%H(B}$B$H8F$P$l$k9=B$$rMQ$$$F!$DI@W$9$Y$-%U%!%$%k(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
91 $B$N>pJs$r=8$a$F$$$k!%%^%K%U%'%9%HFb$N3F!9$N%(%s%H%j$O!$C10l$N%A%'%s%8%;%C(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
92 $B%HFb$KB8:_$9$k%U%!%$%k$N>pJs$r;}$C$F$$$k!%%(%s%H%j$O$I$N%U%!%$%k$,%A%'%s(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
93 $B%8%;%C%H$KB8:_$7$F$$$k$+!$$=$l$i$N%j%S%8%g%s$,2?$G$"$k$N$+$H$$$&>pJs$H!$(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
94 $B$$$/$D$+$NB>$N%U%!%$%k%a%?%G!<%?$r5-O?$7$F$$$k!%(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
95
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
96 %\subsection{Recording changeset information}
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
97 \subsection{$B%A%'%s%8%;%C%H>pJs$N5-O?(B}
109
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
98
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
99 %The \emph{changelog} contains information about each changeset. Each
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
100 %revision records who committed a change, the changeset comment, other
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
101 %pieces of changeset-related information, and the revision of the
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
102 %manifest to use.
109
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
103
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
104 \emph{changelog}$B$O3F!9$N%A%'%s%8%;%C%H$N>pJs$r;}$D!%3F!9$N%j%S%8%g%s5-O?(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
105 $B$O!$C/$,JQ99$r%3%_%C%H$7$?$N$+!$%A%'%s%8%;%C%H$N%3%a%s%H!$JQ99$K4XO"$7$?(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
106 $BB>$N>pJs!$;HMQ$5$l$k%^%K%U%'%9%H$N%j%S%8%g%s$r;}$D!%(B
109
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
107
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
108 %\subsection{Relationships between revisions}
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
109 \subsection{$B%j%S%8%g%s4V$N4X78(B}
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
110
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
111 %Within a changelog, a manifest, or a filelog, each revision stores a
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
112 %pointer to its immediate parent (or to its two parents, if it's a
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
113 %merge revision). As I mentioned above, there are also relationships
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
114 %between revisions \emph{across} these structures, and they are
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
115 %hierarchical in nature.
109
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
116
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
117 $B%A%'%s%8%m%0!$%^%K%U%'%9%H!$%U%!%$%k%m%0Fb$G!$3F!9$N%j%S%8%g%s$OD>@\$N?F(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
118 $B!J$"$k$$$O%^!<%8$N>l9g$O$=$NN>?F!K$X$N%]%$%s%?$r;}$D!%(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
119 $B$9$G$K=R$Y$?$h$&$K!$$3$N9=B$$K8=$l$k%j%S%8%g%s$N4V$K$O4X78$,$"$j!$K\<A(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
120 $BE*$K3,AXE*$G$"$k!%(B
109
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
121
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
122 %For every changeset in a repository, there is exactly one revision
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
123 %stored in the changelog. Each revision of the changelog contains a
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
124 %pointer to a single revision of the manifest. A revision of the
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
125 %manifest stores a pointer to a single revision of each filelog tracked
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
126 %when that changeset was created. These relationships are illustrated
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
127 %in figure~\ref{fig:concepts:metadata}.
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
128
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
129 $B%j%]%8%H%j$K$"$k$9$Y$F$N%A%'%s%8%;%C%H$O!$%A%'%s%8%m%0Fb$G@53N$K(B1$B$D$N%j%S(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
130 $B%8%g%s$r;}$D!%%A%'%s%8%m%0$N3F!9$N%j%S%8%g%s$O!$%^%K%U%'%9%H$NC10l$N%P!<(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
131 $B%8%g%s$X$N%]%$%s%?$r;}$D!%%^%K%U%'%9%H$N3F!9$N%j%S%8%g%s$O!$%A%'%s%8%;%C(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
132 $B%H$,@8@.$5$l$?;~$N%U%!%$%k%m%0$N3F!9$NC10l%j%S%8%g%s$X$N%]%$%s%?$r;}$D!%(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
133 $B$3$N4X78$r?^(B~\ref{fig:concepts:metadata}$B$K<($9!%(B
109
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
134
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
135 \begin{figure}[ht]
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
136 \centering
294
b2d447356c42 - completed cmdref.tex
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 293
diff changeset
137 \includegraphics{metadata}
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
138 % \caption{Metadata relationships}
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
139 \caption{$B%a%?%G!<%?$N4X78(B}
109
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
140 \label{fig:concepts:metadata}
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
141 \end{figure}
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
142
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
143 %As the illustration shows, there is \emph{not} a ``one to one''
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
144 %relationship between revisions in the changelog, manifest, or filelog.
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
145 %If the manifest hasn't changed between two changesets, the changelog
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
146 %entries for those changesets will point to the same revision of the
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
147 %manifest. If a file that Mercurial tracks hasn't changed between two
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
148 %changesets, the entry for that file in the two revisions of the
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
149 %manifest will point to the same revision of its filelog.
109
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
150
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
151 $B%$%i%9%H$G<($5$l$F$$$k$h$&$K!$%j%S%8%g%s$H%A%'%s%8%m%0!$%^%K%U%'%9%H$^$?(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
152 $B$O%U%!%$%k%m%0$N4V$K$O(B1$BBP#1$N4X78$O$J$$!%%^%K%U%'%9%H$,(B2$B$D$N%A%'%s%8%;%C(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
153 $B%H$N4V$GJQ2=$7$J$+$C$?>l9g$O!$%A%'%s%8%m%0Fb$G$3$l$i$N%A%'%s%8%;%C%H$rI=(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
154 $B$9%(%s%H%j$OF1$8%P!<%8%g%s$N%^%K%U%'%9%H$r<($9!%(BMercurial$B$,DI@W$9$k%U%!%$(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
155 $B%k$,!$(B2$B$D$N%A%'%s%8%;%C%H4V$GJQ2=$7$J$+$C$?>l9g$O!$(B 2$B$D$N%^%K%U%'%9%H$N%j(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
156 $B%S%8%g%s$G!$$=$N%U%!%$%k$r<($9%(%s%H%j$O%U%!%$%k%m%0$NF1$8%j%S%8%g%s$r<((B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
157 $B$9!%(B
109
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
158
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
159 %\section{Safe, efficient storage}
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
160 \section{$B0BA4$+$D8zN(E*$J%9%H%l!<%8(B}
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
161
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
162 %The underpinnings of changelogs, manifests, and filelogs are provided
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
163 %by a single structure called the \emph{revlog}.
109
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
164
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
165 $B%A%'%s%8%m%0!$%^%K%U%'%9%H!$%U%!%$%k%m%0$NEZBf$K;H$o$l$F$$$k$O6&DL$N(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
166 \emph{revlog}$B$H$$$&9=B$BN$G$"$k!%(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
167
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
168 %\subsection{Efficient storage}
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
169 \subsection{$B8zN(E*$J%9%H%l!<%8(B}
109
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
170
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
171 %The revlog provides efficient storage of revisions using a
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
172 %\emph{delta} mechanism. Instead of storing a complete copy of a file
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
173 %for each revision, it stores the changes needed to transform an older
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
174 %revision into the new revision. For many kinds of file data, these
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
175 %deltas are typically a fraction of a percent of the size of a full
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
176 %copy of a file.
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
177
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
178 revlog$B$O(B\emph{delta}$B5!9=$r;H$C$F%j%S%8%g%s$N8zN(E*$J5-21$rDs6!$9$k!%%U%!(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
179 $B%$%k$N3F!9$N%P!<%8%g%s$N40A4$J%3%T!<$rJ]B8$9$k$N$G$O$J$/!$8E$$%j%S%8%g%s(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
180 $B$r?7$7$$%P!<%8%g%s$XJQ49$9$k$N$KI,MW$JJQ99$rJ]B8$9$k!%B?$/$N%U%!%$%k%G!<(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
181 $B%?$KBP$7$F!$(B delta$B$OE57?E*$K$O%U%!%$%k$N%U%k%3%T!<$N(B1$B%Q!<%;%s%HL$K~$G$"$"(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
182 $B$k!%(B
109
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
183
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
184 %Some obsolete revision control systems can only work with deltas of
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
185 %text files. They must either store binary files as complete snapshots
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
186 %or encoded into a text representation, both of which are wasteful
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
187 %approaches. Mercurial can efficiently handle deltas of files with
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
188 %arbitrary binary contents; it doesn't need to treat text as special.
109
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
189
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
190 $B8E$$%j%S%8%g%s%3%s%H%m!<%k%7%9%F%`$N$$$/$D$+$O%F%-%9%H%U%!%$%k$N(Bdelta$B$KBP(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
191 $B$7$F$7$+5!G=$7$J$$!%$=$l$i$N%7%9%F%`$G$O%P%$%J%j%U%!%$%k$O40A4$J%9%J%C%W(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
192 $B%7%g%C%H$+!$%F%-%9%HI=8=$K%(%s%3!<%I$5$l$?7A<0$G$"$kI,MW$,$"$k!%$3$l$i$O(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
193 $B6&$KL5BL$NB?$$%"%W%m!<%A$G$"$k!%(B Mercurial$B$OG$0U$N%P%$%J%j%U%!%$%k$K$D$$(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
194 $B$F!$(Bdelta$B$r8zN(E*$K07$&$3$H$,$G$-!$%F%-%9%H$rFCJL07$$$9$kI,MW$,$J$$!%(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
195
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
196 %\subsection{Safe operation}
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
197 \subsection{$B0BA4$JF0:n(B}
121
9094c9fda8ec Start chapter on error recovery.
Bryan O'Sullivan <bos@serpentine.com>
parents: 116
diff changeset
198 \label{sec:concepts:txn}
109
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
199
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
200 %Mercurial only ever \emph{appends} data to the end of a revlog file.
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
201 %It never modifies a section of a file after it has written it. This
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
202 %is both more robust and efficient than schemes that need to modify or
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
203 %rewrite data.
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
204
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
205 Mercurial$B$O(Brevlog$B%U%!%$%k$NKvHx$K%G!<%?$N(B\emph{$BDI2C(B}$B$N$_$r9T$&!%0lEY=q$-(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
206 $B9~$^$l$?ItJ,$O8e$K$J$C$FJQ99$5$l$k$3$H$O$J$$!%$3$l$O%G!<%?$NJQ99$d:F=q$-(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
207 $B9~$_$r9T$&J}K!$h$j$b4h6/$+$D8zN(E*$G$"$k!%(B
109
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
208
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
209 %In addition, Mercurial treats every write as part of a
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
210 %\emph{transaction} that can span a number of files. A transaction is
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
211 %\emph{atomic}: either the entire transaction succeeds and its effects
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
212 %are all visible to readers in one go, or the whole thing is undone.
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
213 %This guarantee of atomicity means that if you're running two copies of
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
214 %Mercurial, where one is reading data and one is writing it, the reader
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
215 %will never see a partially written result that might confuse it.
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
216
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
217 $B2C$($F!$(BMercurial$B$O$"$i$f$k=q$-9~$_$rJ#?t$N%U%!%$%k$X$N(B\emph{$B%H%i%s%6%/%7%g(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
218 $B%s(B}$B$N0lIt$H8+$J$9!%%H%i%s%6%/%7%g%sA4BN$,@.8y$7!$FI$_=P$7B&$K0lEY$K7k2L$,(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
219 $B8+$($k>l9g$b!$$=$&$G$J$$>l9g$b%H%i%s%6%/%7%g%s$O(B\emph{$B%"%H%_%C%/(B}$B$G$"$k!%(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
220 $B$3$N%"%H%_%C%/@-$NJ]>Z$O!$(B 2$B$D$N(BMercurial$B$r!$JRJ}$O%G!<%?$NFI$_=P$7!$$b$&(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
221 $B0lJ}$O=q$-9~$_$G<B9T$7$F$$$k>l9g!$FI$_=P$7B&$K$O:.Mp$N860x$H$J$kItJ,E*$J(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
222 $B=q$-9~$_7k2L$O8+$($J$$$3$H$r0UL#$9$k!%(B
109
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
223
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
224 %The fact that Mercurial only appends to files makes it easier to
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
225 %provide this transactional guarantee. The easier it is to do stuff
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
226 %like this, the more confident you should be that it's done correctly.
109
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
227
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
228 Mercurial$B$O%U%!%$%k$KDI5-$N$_$r$9$k$3$H$G!$%H%i%s%6%/%7%g%s$NJ]>Z$rMF0W$K(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
229 $B$7$F$$$k!%J*;v$rC1=c2=$9$k$3$H$K$h$C$F!$=hM}$N@5$7$5$r3N<B$K$9$k$h$&$K$7(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
230 $B$F$$$k!%(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
231
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
232 %\subsection{Fast retrieval}
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
233 \subsection{$B9bB.$J<hF@(B}
109
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
234
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
235 %Mercurial cleverly avoids a pitfall common to all earlier
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
236 %revision control systems: the problem of \emph{inefficient retrieval}.
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
237 %Most revision control systems store the contents of a revision as an
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
238 %incremental series of modifications against a ``snapshot''. To
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
239 %reconstruct a specific revision, you must first read the snapshot, and
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
240 %then every one of the revisions between the snapshot and your target
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
241 %revision. The more history that a file accumulates, the more
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
242 %revisions you must read, hence the longer it takes to reconstruct a
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
243 %particular revision.
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
244
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
245 Mercurial$B$O$3$l$^$G$N%j%S%8%g%s%3%s%H%m!<%k%7%9%F%`$K6&DL$7$?Mn$H$77j$r(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
246 $B8-L@$KHr$1$F$$$k!%LdBj$@$C$?$N$O(B\emph{$BHs8zN(E*$J<hF@(B}$B$G$"$C$?!%(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
247 $BBgDq$N%j%S%8%g%s%3%s%H%m!<%k%7%9%F%`$O%j%S%8%g%s$NFbMF$r%9%J%C%W%7%g%C%H(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
248 $B$X$N0lO"$NJQ99$NA}J,$H$7$FJ]B8$7$F$$$k!%FCDj$N%j%S%8%g%s$r:F8=$9$k$?$a$K(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
249 $B$O$^$:%9%J%C%W%7%g%C%H$rFI$_9~$_!$$7$+$k8e$KL\E*$N%j%S%8%g%s$rFI$`I,MW$,(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
250 $B$"$C$?!%%U%!%$%k$X$NMzNr$,A}$($l$PA}$($k$[$IFI$_9~$^$J$1$l$P$J$i$J$$%j%S(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
251 $B%8%g%s$,B?$/$J$j!$FCDj$N%j%S%8%g%s$r:F8=$9$k$N$K;~4V$,$+$+$k$h$&$K$J$k!%(B
109
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
252
110
75c076c7a374 More concepts stuff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 109
diff changeset
253 \begin{figure}[ht]
75c076c7a374 More concepts stuff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 109
diff changeset
254 \centering
294
b2d447356c42 - completed cmdref.tex
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 293
diff changeset
255 \includegraphics{snapshot}
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
256 % \caption{Snapshot of a revlog, with incremental deltas}
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
257 \caption{$B:9J,$rMQ$$$?(Brevlog$B$N%9%J%C%W%7%g%C%H(B}
110
75c076c7a374 More concepts stuff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 109
diff changeset
258 \label{fig:concepts:snapshot}
75c076c7a374 More concepts stuff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 109
diff changeset
259 \end{figure}
75c076c7a374 More concepts stuff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 109
diff changeset
260
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
261 %The innovation that Mercurial applies to this problem is simple but
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
262 %effective. Once the cumulative amount of delta information stored
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
263 %since the last snapshot exceeds a fixed threshold, it stores a new
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
264 %snapshot (compressed, of course), instead of another delta. This
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
265 %makes it possible to reconstruct \emph{any} revision of a file
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
266 %quickly. This approach works so well that it has since been copied by
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
267 %several other revision control systems.
110
75c076c7a374 More concepts stuff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 109
diff changeset
268
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
269 Mercurial$B$G$O$3$NLdBj$rC1=c$@$,8z2LE*$JJ}K!$G2r7h$7$F$$$k!%A02s$K%9%J%C%W(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
270 $B%7%g%C%H$r:n@.$7$?;~E@$+$i$NN_@QE*$JA}J,$,0lDj$NogCM$r1[$($k$H!$?7$?$JA}(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
271 $BJ,$G$O$J$/!$?7$?$J%9%J%C%W%7%g%C%H$,J]B8$5$l$k!J$3$N%9%J%C%W%7%g%C%H$OL^(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
272 $BO@05=L$5$l$F$$$k!K!%$3$l$K$h$C$F(B\emph{$B$$$+$J$k(B}$B%j%S%8%g%s$b?WB.$K:F8=$5$l(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
273 $B$k!%$3$N%"%W%m!<%A$O0J8eB>$N%j%S%8%g%s%3%s%H%m!<%k%7%9%F%`$K%3%T!<$5$l$k(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
274 $B$[$I$&$^$/5!G=$7$F$$$k!%(B
109
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
275
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
276 %Figure~\ref{fig:concepts:snapshot} illustrates the idea. In an entry
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
277 %in a revlog's index file, Mercurial stores the range of entries from
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
278 %the data file that it must read to reconstruct a particular revision.
109
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
279
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
280 $B?^(B~\ref{fig:concepts:snapshot}$B$K35G0$r<($9!%(BMercurial$B$O(Brevlog$B$N%$%s%G%C%/(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
281 $B%9%U%!%$%k$N%(%s%H%j$KFCDj$N%j%S%8%g%s$r:F8=$9$k$N$KI,MW$J%G!<%?%U%!%$%k(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
282 $BFb$N$"$kHO0O$N%(%s%H%j$rJ]B8$9$k!%(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
283
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
284
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
285
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
286
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
287
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
288
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
289
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
290
109
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
291
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
292
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
293
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
294 %\subsubsection{Aside: the influence of video compression}
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
295 \subsubsection{$B$=$NB>(B: $B%S%G%*05=L$N1F6A(B}
109
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
296
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
297 %If you're familiar with video compression or have ever watched a TV
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
298 %feed through a digital cable or satellite service, you may know that
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
299 %most video compression schemes store each frame of video as a delta
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
300 %against its predecessor frame. In addition, these schemes use
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
301 %``lossy'' compression techniques to increase the compression ratio, so
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
302 %visual errors accumulate over the course of a number of inter-frame
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
303 %deltas.
112
2fcead053b7a More. Concept. Fun.
Bryan O'Sullivan <bos@serpentine.com>
parents: 111
diff changeset
304
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
305 %Because it's possible for a video stream to ``drop out'' occasionally
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
306 %due to signal glitches, and to limit the accumulation of artefacts
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
307 %introduced by the lossy compression process, video encoders
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
308 %periodically insert a complete frame (called a ``key frame'') into the
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
309 %video stream; the next delta is generated against that frame. This
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
310 %means that if the video signal gets interrupted, it will resume once
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
311 %the next key frame is received. Also, the accumulation of encoding
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
312 %errors restarts anew with each key frame.
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
313
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
314 %\subsection{Identification and strong integrity}
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
315 \subsection{$B<1JL$H6/$$0l4S@-(B}
110
75c076c7a374 More concepts stuff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 109
diff changeset
316
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
317 %Along with delta or snapshot information, a revlog entry contains a
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
318 %cryptographic hash of the data that it represents. This makes it
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
319 %difficult to forge the contents of a revision, and easy to detect
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
320 %accidental corruption.
110
75c076c7a374 More concepts stuff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 109
diff changeset
321
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
322 %Hashes provide more than a mere check against corruption; they are
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
323 %used as the identifiers for revisions. The changeset identification
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
324 %hashes that you see as an end user are from revisions of the
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
325 %changelog. Although filelogs and the manifest also use hashes,
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
326 %Mercurial only uses these behind the scenes.
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
327
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
328 %Mercurial verifies that hashes are correct when it retrieves file
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
329 %revisions and when it pulls changes from another repository. If it
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
330 %encounters an integrity problem, it will complain and stop whatever
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
331 %it's doing.
110
75c076c7a374 More concepts stuff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 109
diff changeset
332
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
333 %In addition to the effect it has on retrieval efficiency, Mercurial's
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
334 %use of periodic snapshots makes it more robust against partial data
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
335 %corruption. If a revlog becomes partly corrupted due to a hardware
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
336 %error or system bug, it's often possible to reconstruct some or most
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
337 %revisions from the uncorrupted sections of the revlog, both before and
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
338 %after the corrupted section. This would not be possible with a
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
339 %delta-only storage model.
115
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
340
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
341 %\section{Revision history, branching, and merging}
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
342 \section{$B%j%S%8%g%sMzNr!$%V%i%s%A!$%^!<%8(B}
115
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
343
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
344 %Every entry in a Mercurial revlog knows the identity of its immediate
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
345 %ancestor revision, usually referred to as its \emph{parent}. In fact,
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
346 %a revision contains room for not one parent, but two. Mercurial uses
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
347 %a special hash, called the ``null ID'', to represent the idea ``there
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
348 %is no parent here''. This hash is simply a string of zeroes.
115
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
349
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
350 %In figure~\ref{fig:concepts:revlog}, you can see an example of the
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
351 %conceptual structure of a revlog. Filelogs, manifests, and changelogs
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
352 %all have this same structure; they differ only in the kind of data
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
353 %stored in each delta or snapshot.
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
354
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
355 %The first revision in a revlog (at the bottom of the image) has the
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
356 %null ID in both of its parent slots. For a ``normal'' revision, its
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
357 %first parent slot contains the ID of its parent revision, and its
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
358 %second contains the null ID, indicating that the revision has only one
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
359 %real parent. Any two revisions that have the same parent ID are
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
360 %branches. A revision that represents a merge between branches has two
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
361 %normal revision IDs in its parent slots.
115
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
362
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
363 \begin{figure}[ht]
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
364 \centering
294
b2d447356c42 - completed cmdref.tex
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 293
diff changeset
365 \includegraphics{revlog}
115
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
366 \caption{}
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
367 \label{fig:concepts:revlog}
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
368 \end{figure}
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
369
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
370 %\section{The working directory}
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
371 \section{$B%o!<%-%s%0%G%#%l%/%H%j(B}
110
75c076c7a374 More concepts stuff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 109
diff changeset
372
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
373 %In the working directory, Mercurial stores a snapshot of the files
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
374 %from the repository as of a particular changeset.
113
a0f57b3e677e More concepts, this time working directory stuff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 112
diff changeset
375
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
376 %The working directory ``knows'' which changeset it contains. When you
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
377 %update the working directory to contain a particular changeset,
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
378 %Mercurial looks up the appropriate revision of the manifest to find
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
379 %out which files it was tracking at the time that changeset was
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
380 %committed, and which revision of each file was then current. It then
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
381 %recreates a copy of each of those files, with the same contents it had
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
382 %when the changeset was committed.
113
a0f57b3e677e More concepts, this time working directory stuff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 112
diff changeset
383
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
384 %The \emph{dirstate} contains Mercurial's knowledge of the working
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
385 %directory. This details which changeset the working directory is
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
386 %updated to, and all of the files that Mercurial is tracking in the
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
387 %working directory.
113
a0f57b3e677e More concepts, this time working directory stuff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 112
diff changeset
388
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
389 %Just as a revision of a revlog has room for two parents, so that it
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
390 %can represent either a normal revision (with one parent) or a merge of
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
391 %two earlier revisions, the dirstate has slots for two parents. When
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
392 %you use the \hgcmd{update} command, the changeset that you update to
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
393 %is stored in the ``first parent'' slot, and the null ID in the second.
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
394 %When you \hgcmd{merge} with another changeset, the first parent
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
395 %remains unchanged, and the second parent is filled in with the
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
396 %changeset you're merging with. The \hgcmd{parents} command tells you
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
397 %what the parents of the dirstate are.
113
a0f57b3e677e More concepts, this time working directory stuff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 112
diff changeset
398
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
399 %\subsection{What happens when you commit}
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
400 \subsection{$B%3%_%C%H;~$K2?$,5/$-$k$N$+(B}
113
a0f57b3e677e More concepts, this time working directory stuff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 112
diff changeset
401
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
402 %The dirstate stores parent information for more than just book-keeping
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
403 %purposes. Mercurial uses the parents of the dirstate as \emph{the
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
404 % parents of a new changeset} when you perform a commit.
113
a0f57b3e677e More concepts, this time working directory stuff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 112
diff changeset
405
a0f57b3e677e More concepts, this time working directory stuff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 112
diff changeset
406 \begin{figure}[ht]
a0f57b3e677e More concepts, this time working directory stuff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 112
diff changeset
407 \centering
294
b2d447356c42 - completed cmdref.tex
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 293
diff changeset
408 \includegraphics{wdir}
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
409 % \caption{The working directory can have two parents}
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
410 \caption{$B%o!<%-%s%0%G%#%l%/%H%j$O(B2$B$D$N?F$r;}$AF@$k(B}
113
a0f57b3e677e More concepts, this time working directory stuff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 112
diff changeset
411 \label{fig:concepts:wdir}
a0f57b3e677e More concepts, this time working directory stuff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 112
diff changeset
412 \end{figure}
a0f57b3e677e More concepts, this time working directory stuff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 112
diff changeset
413
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
414 %Figure~\ref{fig:concepts:wdir} shows the normal state of the working
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
415 %directory, where it has a single changeset as parent. That changeset
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
416 %is the \emph{tip}, the newest changeset in the repository that has no
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
417 %children.
113
a0f57b3e677e More concepts, this time working directory stuff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 112
diff changeset
418
a0f57b3e677e More concepts, this time working directory stuff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 112
diff changeset
419 \begin{figure}[ht]
a0f57b3e677e More concepts, this time working directory stuff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 112
diff changeset
420 \centering
294
b2d447356c42 - completed cmdref.tex
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 293
diff changeset
421 \includegraphics{wdir-after-commit}
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
422 % \caption{The working directory gains new parents after a commit}
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
423 \caption{$B%3%_%C%H8e!$%o!<%-%s%0%G%#%l%/%H%j$O?7$?$JN>?F$r;}$D(B}
113
a0f57b3e677e More concepts, this time working directory stuff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 112
diff changeset
424 \label{fig:concepts:wdir-after-commit}
a0f57b3e677e More concepts, this time working directory stuff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 112
diff changeset
425 \end{figure}
a0f57b3e677e More concepts, this time working directory stuff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 112
diff changeset
426
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
427 %It's useful to think of the working directory as ``the changeset I'm
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
428 %about to commit''. Any files that you tell Mercurial that you've
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
429 %added, removed, renamed, or copied will be reflected in that
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
430 %changeset, as will modifications to any files that Mercurial is
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
431 %already tracking; the new changeset will have the parents of the
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
432 %working directory as its parents.
113
a0f57b3e677e More concepts, this time working directory stuff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 112
diff changeset
433
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
434 %After a commit, Mercurial will update the parents of the working
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
435 %directory, so that the first parent is the ID of the new changeset,
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
436 %and the second is the null ID. This is shown in
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
437 %figure~\ref{fig:concepts:wdir-after-commit}. Mercurial doesn't touch
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
438 %any of the files in the working directory when you commit; it just
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
439 %modifies the dirstate to note its new parents.
110
75c076c7a374 More concepts stuff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 109
diff changeset
440
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
441 %\subsection{Creating a new head}
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
442 \subsection{$B?7$?$J%X%C%I$r:n$k(B}
113
a0f57b3e677e More concepts, this time working directory stuff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 112
diff changeset
443
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
444 %It's perfectly normal to update the working directory to a changeset
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
445 %other than the current tip. For example, you might want to know what
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
446 %your project looked like last Tuesday, or you could be looking through
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
447 %changesets to see which one introduced a bug. In cases like this, the
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
448 %natural thing to do is update the working directory to the changeset
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
449 %you're interested in, and then examine the files in the working
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
450 %directory directly to see their contents as they werea when you
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
451 %committed that changeset. The effect of this is shown in
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
452 %figure~\ref{fig:concepts:wdir-pre-branch}.
112
2fcead053b7a More. Concept. Fun.
Bryan O'Sullivan <bos@serpentine.com>
parents: 111
diff changeset
453
115
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
454 \begin{figure}[ht]
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
455 \centering
294
b2d447356c42 - completed cmdref.tex
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 293
diff changeset
456 \includegraphics{wdir-pre-branch}
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
457 % \caption{The working directory, updated to an older changeset}
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
458 \caption{$B8E$$%A%'%s%8%;%C%H$X$H99?7$5$l$?%o!<%-%s%0%G%#%l%/%H%j(B}
115
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
459 \label{fig:concepts:wdir-pre-branch}
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
460 \end{figure}
112
2fcead053b7a More. Concept. Fun.
Bryan O'Sullivan <bos@serpentine.com>
parents: 111
diff changeset
461
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
462 %Having updated the working directory to an older changeset, what
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
463 %happens if you make some changes, and then commit? Mercurial behaves
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
464 %in the same way as I outlined above. The parents of the working
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
465 %directory become the parents of the new changeset. This new changeset
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
466 %has no children, so it becomes the new tip. And the repository now
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
467 %contains two changesets that have no children; we call these
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
468 %\emph{heads}. You can see the structure that this creates in
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
469 %figure~\ref{fig:concepts:wdir-branch}.
112
2fcead053b7a More. Concept. Fun.
Bryan O'Sullivan <bos@serpentine.com>
parents: 111
diff changeset
470
2fcead053b7a More. Concept. Fun.
Bryan O'Sullivan <bos@serpentine.com>
parents: 111
diff changeset
471 \begin{figure}[ht]
2fcead053b7a More. Concept. Fun.
Bryan O'Sullivan <bos@serpentine.com>
parents: 111
diff changeset
472 \centering
294
b2d447356c42 - completed cmdref.tex
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 293
diff changeset
473 \includegraphics{wdir-branch}
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
474 % \caption{After a commit made while synced to an older changeset}
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
475 \caption{$B8E$$%A%'%s%8%;%C%H$KF14|Cf$K%3%_%C%H$,9T$o$l$?>l9g(B}
115
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
476 \label{fig:concepts:wdir-branch}
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
477 \end{figure}
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
478
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
479 %\begin{note}
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
480 % If you're new to Mercurial, you should keep in mind a common
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
481 % ``error'', which is to use the \hgcmd{pull} command without any
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
482 % options. By default, the \hgcmd{pull} command \emph{does not}
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
483 % update the working directory, so you'll bring new changesets into
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
484 % your repository, but the working directory will stay synced at the
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
485 % same changeset as before the pull. If you make some changes and
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
486 % commit afterwards, you'll thus create a new head, because your
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
487 % working directory isn't synced to whatever the current tip is.
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
488 %
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
489 % I put the word ``error'' in quotes because all that you need to do
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
490 % to rectify this situation is \hgcmd{merge}, then \hgcmd{commit}. In
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
491 % other words, this almost never has negative consequences; it just
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
492 % surprises people. I'll discuss other ways to avoid this behaviour,
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
493 % and why Mercurial behaves in this initially surprising way, later
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
494 % on.
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
495 %\end{note}
115
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
496
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
497 %\subsection{Merging heads}
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
498 \subsection{$B%X%C%I4V$N%^!<%8(B}
115
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
499
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
500 %When you run the \hgcmd{merge} command, Mercurial leaves the first
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
501 %parent of the working directory unchanged, and sets the second parent
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
502 %to the changeset you're merging with, as shown in
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
503 %figure~\ref{fig:concepts:wdir-merge}.
115
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
504
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
505 \begin{figure}[ht]
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
506 \centering
294
b2d447356c42 - completed cmdref.tex
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 293
diff changeset
507 \includegraphics{wdir-merge}
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
508 % \caption{Merging two heads}
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
509 \caption{2$B$D$N%X%C%I$N%^!<%8(B}
115
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
510 \label{fig:concepts:wdir-merge}
112
2fcead053b7a More. Concept. Fun.
Bryan O'Sullivan <bos@serpentine.com>
parents: 111
diff changeset
511 \end{figure}
2fcead053b7a More. Concept. Fun.
Bryan O'Sullivan <bos@serpentine.com>
parents: 111
diff changeset
512
115
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
513 Mercurial also has to modify the working directory, to merge the files
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
514 managed in the two changesets. Simplified a little, the merging
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
515 process goes like this, for every file in the manifests of both
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
516 changesets.
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
517 \begin{itemize}
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
518 \item If neither changeset has modified a file, do nothing with that
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
519 file.
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
520 \item If one changeset has modified a file, and the other hasn't,
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
521 create the modified copy of the file in the working directory.
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
522 \item If one changeset has removed a file, and the other hasn't (or
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
523 has also deleted it), delete the file from the working directory.
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
524 \item If one changeset has removed a file, but the other has modified
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
525 the file, ask the user what to do: keep the modified file, or remove
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
526 it?
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
527 \item If both changesets have modified a file, invoke an external
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
528 merge program to choose the new contents for the merged file. This
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
529 may require input from the user.
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
530 \item If one changeset has modified a file, and the other has renamed
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
531 or copied the file, make sure that the changes follow the new name
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
532 of the file.
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
533 \end{itemize}
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
534 There are more details---merging has plenty of corner cases---but
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
535 these are the most common choices that are involved in a merge. As
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
536 you can see, most cases are completely automatic, and indeed most
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
537 merges finish automatically, without requiring your input to resolve
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
538 any conflicts.
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
539
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
540 When you're thinking about what happens when you commit after a merge,
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
541 once again the working directory is ``the changeset I'm about to
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
542 commit''. After the \hgcmd{merge} command completes, the working
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
543 directory has two parents; these will become the parents of the new
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
544 changeset.
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
545
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
546 Mercurial lets you perform multiple merges, but you must commit the
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
547 results of each individual merge as you go. This is necessary because
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
548 Mercurial only tracks two parents for both revisions and the working
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
549 directory. While it would be technically possible to merge multiple
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
550 changesets at once, the prospect of user confusion and making a
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
551 terrible mess of a merge immediately becomes overwhelming.
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
552
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
553 %\section{Other interesting design features}
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
554 \section{$B@_7W$NB>$N6=L#?<$$E@(B}
110
75c076c7a374 More concepts stuff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 109
diff changeset
555
75c076c7a374 More concepts stuff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 109
diff changeset
556 In the sections above, I've tried to highlight some of the most
75c076c7a374 More concepts stuff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 109
diff changeset
557 important aspects of Mercurial's design, to illustrate that it pays
75c076c7a374 More concepts stuff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 109
diff changeset
558 careful attention to reliability and performance. However, the
75c076c7a374 More concepts stuff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 109
diff changeset
559 attention to detail doesn't stop there. There are a number of other
75c076c7a374 More concepts stuff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 109
diff changeset
560 aspects of Mercurial's construction that I personally find
75c076c7a374 More concepts stuff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 109
diff changeset
561 interesting. I'll detail a few of them here, separate from the ``big
75c076c7a374 More concepts stuff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 109
diff changeset
562 ticket'' items above, so that if you're interested, you can gain a
75c076c7a374 More concepts stuff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 109
diff changeset
563 better idea of the amount of thinking that goes into a well-designed
75c076c7a374 More concepts stuff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 109
diff changeset
564 system.
75c076c7a374 More concepts stuff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 109
diff changeset
565
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
566 %\subsection{Clever compression}
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
567 \subsection{$B8-$$05=L(B}
109
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
568
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
569 When appropriate, Mercurial will store both snapshots and deltas in
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
570 compressed form. It does this by always \emph{trying to} compress a
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
571 snapshot or delta, but only storing the compressed version if it's
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
572 smaller than the uncompressed version.
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
573
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
574 This means that Mercurial does ``the right thing'' when storing a file
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
575 whose native form is compressed, such as a \texttt{zip} archive or a
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
576 JPEG image. When these types of files are compressed a second time,
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
577 the resulting file is usually bigger than the once-compressed form,
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
578 and so Mercurial will store the plain \texttt{zip} or JPEG.
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
579
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
580 Deltas between revisions of a compressed file are usually larger than
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
581 snapshots of the file, and Mercurial again does ``the right thing'' in
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
582 these cases. It finds that such a delta exceeds the threshold at
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
583 which it should store a complete snapshot of the file, so it stores
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
584 the snapshot, again saving space compared to a naive delta-only
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
585 approach.
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
586
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
587 %\subsubsection{Network recompression}
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
588 \subsubsection{$B%M%C%H%o!<%/:F05=L(B}
109
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
589
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
590 %When storing revisions on disk, Mercurial uses the ``deflate''
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
591 %compression algorithm (the same one used by the popular \texttt{zip}
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
592 %archive format), which balances good speed with a respectable
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
593 %compression ratio. However, when transmitting revision data over a
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
594 %network connection, Mercurial uncompresses the compressed revision
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
595 %data.
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
596
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
597 %If the connection is over HTTP, Mercurial recompresses the entire
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
598 %stream of data using a compression algorithm that gives a better
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
599 %compression ratio (the Burrows-Wheeler algorithm from the widely used
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
600 %\texttt{bzip2} compression package). This combination of algorithm
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
601 %and compression of the entire stream (instead of a revision at a time)
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
602 %substantially reduces the number of bytes to be transferred, yielding
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
603 %better network performance over almost all kinds of network.
109
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
604
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
605 %(If the connection is over \command{ssh}, Mercurial \emph{doesn't}
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
606 %recompress the stream, because \command{ssh} can already do this
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
607 %itself.)
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
608
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
609 %\subsection{Read/write ordering and atomicity}
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
610 \subsection{$BFI$_=q$-$N=g=x$H%"%H%_%C%/@-(B}
109
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
611
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
612 %Appending to files isn't the whole story when it comes to guaranteeing
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
613 %that a reader won't see a partial write. If you recall
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
614 %figure~\ref{fig:concepts:metadata}, revisions in the changelog point to
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
615 %revisions in the manifest, and revisions in the manifest point to
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
616 %revisions in filelogs. This hierarchy is deliberate.
109
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
617
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
618 %A writer starts a transaction by writing filelog and manifest data,
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
619 %and doesn't write any changelog data until those are finished. A
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
620 %reader starts by reading changelog data, then manifest data, followed
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
621 %by filelog data.
109
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
622
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
623 %Since the writer has always finished writing filelog and manifest data
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
624 %before it writes to the changelog, a reader will never read a pointer
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
625 %to a partially written manifest revision from the changelog, and it will
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
626 %never read a pointer to a partially written filelog revision from the
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
627 %manifest.
109
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
628
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
629 %\subsection{Concurrent access}
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
630 \subsection{$BF1;~%"%/%;%9(B}
109
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
631
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
632 %The read/write ordering and atomicity guarantees mean that Mercurial
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
633 %never needs to \emph{lock} a repository when it's reading data, even
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
634 %if the repository is being written to while the read is occurring.
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
635 %This has a big effect on scalability; you can have an arbitrary number
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
636 %of Mercurial processes safely reading data from a repository safely
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
637 %all at once, no matter whether it's being written to or not.
109
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
638
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
639 %The lockless nature of reading means that if you're sharing a
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
640 %repository on a multi-user system, you don't need to grant other local
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
641 %users permission to \emph{write} to your repository in order for them
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
642 %to be able to clone it or pull changes from it; they only need
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
643 %\emph{read} permission. (This is \emph{not} a common feature among
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
644 %revision control systems, so don't take it for granted! Most require
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
645 %readers to be able to lock a repository to access it safely, and this
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
646 %requires write permission on at least one directory, which of course
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
647 %makes for all kinds of nasty and annoying security and administrative
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
648 %problems.)
109
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
649
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
650 %Mercurial uses locks to ensure that only one process can write to a
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
651 %repository at a time (the locking mechanism is safe even over
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
652 %filesystems that are notoriously hostile to locking, such as NFS). If
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
653 %a repository is locked, a writer will wait for a while to retry if the
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
654 %repository becomes unlocked, but if the repository remains locked for
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
655 %too long, the process attempting to write will time out after a while.
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
656 %This means that your daily automated scripts won't get stuck forever
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
657 %and pile up if a system crashes unnoticed, for example. (Yes, the
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
658 %timeout is configurable, from zero to infinity.)
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
659
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
660 %\subsubsection{Safe dirstate access}
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
661 \subsubsection{$B0BA4$J(Bdirstate$B%"%/%;%9(B}
109
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
662
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
663 %As with revision data, Mercurial doesn't take a lock to read the
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
664 %dirstate file; it does acquire a lock to write it. To avoid the
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
665 %possibility of reading a partially written copy of the dirstate file,
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
666 %Mercurial writes to a file with a unique name in the same directory as
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
667 %the dirstate file, then renames the temporary file atomically to
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
668 %\filename{dirstate}. The file named \filename{dirstate} is thus
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
669 %guaranteed to be complete, not partially written.
110
75c076c7a374 More concepts stuff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 109
diff changeset
670
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
671 %\subsection{Avoiding seeks}
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
672 \subsection{$B%7!<%/$N2sHr(B}
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
673
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
674 %Critical to Mercurial's performance is the avoidance of seeks of the
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
675 %disk head, since any seek is far more expensive than even a
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
676 %comparatively large read operation.
110
75c076c7a374 More concepts stuff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 109
diff changeset
677
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
678 Mercurial$B$N@-G=$K$O!$%G%#%9%/%X%C%I$N%7!<%/$rHr$1$k$3$H$,IT2D7g$G$"$k!%(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
679 $B%7!<%/$OBg5,LO$JFI$_=P$7A`:n$HHf3S$7$F$bHs>o$K9b$/$D$/!%(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
680
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
681 %This is why, for example, the dirstate is stored in a single file. If
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
682 %there were a dirstate file per directory that Mercurial tracked, the
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
683 %disk would seek once per directory. Instead, Mercurial reads the
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
684 %entire single dirstate file in one step.
109
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
685
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
686 $B$=$NM}M3$O!$Nc$($P!$(Bdirstate$B$O(B1$B$D$N%U%!%$%k$KJ]B8$5$l$F$$$k$?$a$G!$(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
687 Mercurial$B$,DI@W$7$F$$$k(Bdirstate$B%U%!%$%k$,%G%#%l%/%H%jKh$K$"$k(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
688 $B$H!$(BMercurial$B$O%G%#%l%/%H%jKh$K%7!<%/$r9T$&$3$H$K$J$k!%<B:]$K$O(BMercurial
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
689 $B$OA4BN$G0l$D$N(Bdirstate$B%U%!%$%k$r%o%s%9%F%C%W$GFI$`!%(B
109
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
690
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
691 %Mercurial also uses a ``copy on write'' scheme when cloning a
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
692 %repository on local storage. Instead of copying every revlog file
111
34b8b7a15ea1 More material.
Bryan O'Sullivan <bos@serpentine.com>
parents: 110
diff changeset
693
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
694 %from the old repository into the new repository, it makes a ``hard
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
695 %link'', which is a shorthand way to say ``these two names point to the
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
696 %same file''. When Mercurial is about to write to one of a revlog's
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
697 %files, it checks to see if the number of names pointing at the file is
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
698 %greater than one. If it is, more than one repository is using the
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
699 %file, so Mercurial makes a new copy of the file that is private to
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
700 %this repository.
111
34b8b7a15ea1 More material.
Bryan O'Sullivan <bos@serpentine.com>
parents: 110
diff changeset
701
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
702 Mercurial$B$O%j%]%8%H%j$r%m!<%+%k%9%H%l!<%8$K%/%m!<%s$9$k:]$K(B``$B%3%T!<%*%s%i(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
703 $B%$%H(B''$B<jK!$r;H$C$F$$$k!%(B
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
704
109
1b67dc96f27a Snapshot of concepts chapter.
Bryan O'Sullivan <bos@serpentine.com>
parents: 108
diff changeset
705
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
706 %A few revision control developers have pointed out that this idea of
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
707 %making a complete private copy of a file is not very efficient in its
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
708 %use of storage. While this is true, storage is cheap, and this method
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
709 %gives the highest performance while deferring most book-keeping to the
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
710 %operating system. An alternative scheme would most likely reduce
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
711 %performance and increase the complexity of the software, each of which
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
712 %is much more important to the ``feel'' of day-to-day use.
115
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
713
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
714 %\subsection{Other contents of the dirstate}
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
715 \subsection{dirstate$B$NB>$NFbMF(B}
115
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
716
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
717 %Because Mercurial doesn't force you to tell it when you're modifying a
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
718 %file, it uses the dirstate to store some extra information so it can
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
719 %determine efficiently whether you have modified a file. For each file
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
720 %in the working directory, it stores the time that it last modified the
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
721 %file itself, and the size of the file at that time.
115
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
722
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
723 %When you explicitly \hgcmd{add}, \hgcmd{remove}, \hgcmd{rename} or
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
724 %\hgcmd{copy} files, Mercurial updates the dirstate so that it knows
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
725 %what to do with those files when you commit.
115
b74102b56df5 Wow! Lots more work detailing the working directory, merging, etc.
Bryan O'Sullivan <bos@serpentine.com>
parents: 113
diff changeset
726
781
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
727 %When Mercurial is checking the states of files in the working
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
728 %directory, it first checks a file's modification time. If that has
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
729 %not changed, the file must not have been modified. If the file's size
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
730 %has changed, the file must have been modified. If the modification
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
731 %time has changed, but the size has not, only then does Mercurial need
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
732 %to read the actual contents of the file to see if they've changed.
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
733 %Storing these few extra pieces of information dramatically reduces the
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
734 %amount of data that Mercurial needs to read, which yields large
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
735 %performance improvements compared to other revision control systems.
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
736
93d19b27859c started concepts.tex
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 294
diff changeset
737 %%% Local Variables:
293
3b1291f24c0d - replaved latex-mode to yatex-mode
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 290
diff changeset
738 %%% mode: yatex
56
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
739 %%% TeX-master: "00book"
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
740 %%% End: