hgbook

changeset 108:e0b961975c5e

First bit of concepts chapter.
author Bryan O'Sullivan <bos@serpentine.com>
date Thu Nov 09 10:11:31 2006 -0800 (2006-11-09)
parents a0d7e11db169
children 1b67dc96f27a
files en/00book.tex en/Makefile en/concepts.tex en/filelog.svg
line diff
     1.1 --- a/en/00book.tex	Tue Oct 24 11:25:56 2006 -0700
     1.2 +++ b/en/00book.tex	Thu Nov 09 10:11:31 2006 -0800
     1.3 @@ -37,9 +37,9 @@
     1.4  
     1.5  \include{preface}
     1.6  \include{intro}
     1.7 -%\include{concepts}
     1.8  \include{tour-basic}
     1.9  \include{tour-merge}
    1.10 +\include{concepts}
    1.11  \include{daily}
    1.12  \include{hook}
    1.13  \include{template}
     2.1 --- a/en/Makefile	Tue Oct 24 11:25:56 2006 -0700
     2.2 +++ b/en/Makefile	Thu Nov 09 10:11:31 2006 -0800
     2.3 @@ -21,6 +21,7 @@
     2.4  	tour-merge.tex
     2.5  
     2.6  image-sources := \
     2.7 +	filelog.svg \
     2.8  	kdiff3.png \
     2.9  	mq-stack.svg \
    2.10  	tour-history.svg \
     3.1 --- a/en/concepts.tex	Tue Oct 24 11:25:56 2006 -0700
     3.2 +++ b/en/concepts.tex	Thu Nov 09 10:11:31 2006 -0800
     3.3 @@ -1,131 +1,38 @@
     3.4 -\chapter{Basic Concepts}
     3.5 +\chapter{Behind the scenes}
     3.6  \label{chap:concepts}
     3.7  
     3.8 -This chapter introduces some of the basic concepts behind distributed
     3.9 -version control systems such as Mercurial.
    3.10 +Unlike many revision control systems, the concepts upon which
    3.11 +Mercurial is built are simple enough that it's easy to understand how
    3.12 +the software really works.  Knowing this certainly isn't necessary,
    3.13 +but I find it useful to have a ``mental model'' of what's going on.
    3.14  
    3.15 -\section{Repository}
    3.16 -\label{sec:concepts:repo}
    3.17 -The repository is a directory where Mercurial stores the history for the
    3.18 -files under revision control.
    3.19 +\section{Tracking the history of a single file}
    3.20  
    3.21 -\subsection{Where?}
    3.22 -% where is this repository you speak of?
    3.23 -XXX
    3.24 +When Mercurial tracks modifications to a file, it stores the history
    3.25 +of that file in a metadata object called a \emph{filelog}.  Each entry
    3.26 +in the filelog contains enough information to reconstruct one revision
    3.27 +of the file that is being tracked.  Filelogs are stored as files in
    3.28 +the \sdirname{.hg/data} directory.  A filelog contains two kinds of
    3.29 +information: revision data, and an index to help Mercurial to find a
    3.30 +revision efficiently.  
    3.31  
    3.32 -\subsection{How?}
    3.33 -% How are the changes stored?
    3.34 -XXX
    3.35 -
    3.36 -\subsection{Structure}
    3.37 -\label{sec:concepts:structure}
    3.38 -% What's the structure of the repository?
    3.39 -A typical Mercurial repository is a directory which contains a checked out
    3.40 -working copy (see section~\ref{sec:concepts:workingcopy}) as well as
    3.41 -\sdirname{.hg} directory.  Figure~\ref{ex:concepts:dirlist} shows the
    3.42 -contents of a freshly created repository.  This repository does not contain
    3.43 -any revisions. Let's take a look at a repository that has history for
    3.44 -several files.
    3.45 -Figure~\ref{ex:concepts:dirlist2} shows the contents of a repository keeping
    3.46 -history on two files.  We see the checked out copies of the files
    3.47 -\filename{foo} and \filename{bar}, as well as the files containing their
    3.48 -histories \filename{foo.i} and \filename{bar.i}, respectively. Additionally,
    3.49 -we see the \filename{changelog.i} and \filename{00manifest.i} files. These
    3.50 -contain the repository-wide revision data, such as the commit message, and
    3.51 -the list of files in the repository during the commit.
    3.52 +For small files without much history, the revision data and index are
    3.53 +combined in a single file (with a ``\texttt{.i}'' suffix).  A file
    3.54 +that is large, or has a lot of history, has its filelog stored as
    3.55 +separate data (``\texttt{.d}'' suffix) and index (``\texttt{.i}''
    3.56 +suffix) files.  The correspondence between a file in the working
    3.57 +directory and the filelog that tracks its history in the repository is
    3.58 +illustrated in figure~\ref{fig:concepts:filelog}.
    3.59  
    3.60  \begin{figure}[ht]
    3.61 -  \interaction{concepts.dirlist}
    3.62 -  \caption{Contents of a freshly created repository}
    3.63 -  \label{ex:concepts:dirlist}
    3.64 +  \centering
    3.65 +  \grafix{filelog}
    3.66 +  \caption{Relationships between files in working directory and
    3.67 +    filelogs in repository}
    3.68 +  \label{fig:concepts:filelog}
    3.69  \end{figure}
    3.70  
    3.71 -\begin{figure}[ht]
    3.72 -  \interaction{concepts.dirlist2}
    3.73 -  \caption{Contents of a repository tracking two files}
    3.74 -  \label{ex:concepts:dirlist2}
    3.75 -\end{figure}
    3.76 -
    3.77 -\subsection{hgrc}
    3.78 -% .hg/hgrc
    3.79 -XXX
    3.80 -
    3.81 -\subsection{Creating a Repository}
    3.82 -% hg init
    3.83 -Creating a repository is quick and painless.  One uses the \hgcmd{init}
    3.84 -command as figure~\ref{ex:concepts:hginit} demonstrates.  The one argument
    3.85 -passed to the \hgcmd{init} command is the name of the repository. The name
    3.86 -can be any string usable as a directory name.
    3.87 -
    3.88 -\begin{caution}
    3.89 -If you do not specify a name of the repository, the current working
    3.90 -directory will be used instead.
    3.91 -\end{caution}
    3.92 -
    3.93 -\begin{figure}[ht]
    3.94 -  \interaction{concepts.hginit}
    3.95 -  \caption{Creating a new repository}
    3.96 -  \label{ex:concepts:hginit}
    3.97 -\end{figure}
    3.98 -
    3.99 -\subsection{Remote Repositories}
   3.100 -\label{sec:concepts:remoterepo}
   3.101 -In addition to repositories stored on the local file system, Mercurial
   3.102 -supports so called \emph{remote repositories}.  These remote repositories
   3.103 -can be accessed via several different methods.  See
   3.104 -section~\ref{sec:XXX:remotesetup} for instructions how to set up remote
   3.105 -repositories.
   3.106 -% XXX: reference the proper section!
   3.107 -
   3.108 -\subsubsection{SSH}
   3.109 -\label{sec:concepts:remoterepo:ssh}
   3.110 -Mercurial can use \command{ssh} to send and receive changes. The remote
   3.111 -repository is identified by an URL. The basic format for the URL is:
   3.112 -
   3.113 -\begin{verbatim}
   3.114 -ssh://[user@]host/path
   3.115 -\end{verbatim}
   3.116 -
   3.117 -Where \cmdargs{user} is optional, and the \cmdargs{path} is path to the
   3.118 -repository --- either an absolute or relative to the user's home directory
   3.119 ---- on the remote host with hostname: \cmdargs{host}.
   3.120 -
   3.121 -\begin{note}
   3.122 -If the path for the remote repository is absolute there will be two
   3.123 -consecutive slashes.  E.g., if the remote path is \dirname{/repos/hgbook},
   3.124 -the URL would look something like the following:
   3.125 -
   3.126 -\begin{verbatim}
   3.127 -ssh://someuser@remotebox//repos/hgbook
   3.128 -\end{verbatim}
   3.129 -
   3.130 -Relative paths have only one slash and are relative to the user's home
   3.131 -directory.
   3.132 -\end{note}
   3.133 -
   3.134 -\subsubsection{HTTP \& HTTPS}
   3.135 -\label{sec:concepts:remoterepo:http}
   3.136 -The other protocol supported is HTTP as well as HTTPS.  The repository URL
   3.137 -is very much like that of the \command{ssh}.
   3.138 -
   3.139 -\begin{verbatim}
   3.140 -http://[user@]remotebox/path
   3.141 -\end{verbatim}
   3.142 -
   3.143 -Just as before, the username is optional.
   3.144 -% XXX: is it optional for both push & pull or just for pull?
   3.145 -This time however, the path is relative to the HTTP server root.  
   3.146 -
   3.147 -\section{Working Copy}
   3.148 -\label{sec:concepts:workingcopy}
   3.149 -XXX
   3.150 -
   3.151 -\section{Revisions}
   3.152 -\label{sec:concepts:revs}
   3.153 -XXX
   3.154 -
   3.155  %%% Local Variables: 
   3.156  %%% mode: latex
   3.157  %%% TeX-master: "00book"
   3.158  %%% End:
   3.159 -
     4.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2 +++ b/en/filelog.svg	Thu Nov 09 10:11:31 2006 -0800
     4.3 @@ -0,0 +1,371 @@
     4.4 +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
     4.5 +<!-- Created with Inkscape (http://www.inkscape.org/) -->
     4.6 +<svg
     4.7 +   xmlns:dc="http://purl.org/dc/elements/1.1/"
     4.8 +   xmlns:cc="http://web.resource.org/cc/"
     4.9 +   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    4.10 +   xmlns:svg="http://www.w3.org/2000/svg"
    4.11 +   xmlns="http://www.w3.org/2000/svg"
    4.12 +   xmlns:xlink="http://www.w3.org/1999/xlink"
    4.13 +   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
    4.14 +   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
    4.15 +   width="744.09448819"
    4.16 +   height="1052.3622047"
    4.17 +   id="svg2"
    4.18 +   sodipodi:version="0.32"
    4.19 +   inkscape:version="0.44.1"
    4.20 +   sodipodi:docname="filelog.svg">
    4.21 +  <defs
    4.22 +     id="defs4">
    4.23 +    <marker
    4.24 +       inkscape:stockid="Arrow1Mend"
    4.25 +       orient="auto"
    4.26 +       refY="0.0"
    4.27 +       refX="0.0"
    4.28 +       id="Arrow1Mend"
    4.29 +       style="overflow:visible;">
    4.30 +      <path
    4.31 +         id="path3128"
    4.32 +         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
    4.33 +         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
    4.34 +         transform="scale(0.4) rotate(180) translate(10,0)" />
    4.35 +    </marker>
    4.36 +    <linearGradient
    4.37 +       id="linearGradient2887">
    4.38 +      <stop
    4.39 +         style="stop-color:#91cfcf;stop-opacity:1;"
    4.40 +         offset="0"
    4.41 +         id="stop2889" />
    4.42 +      <stop
    4.43 +         style="stop-color:aqua;stop-opacity:0;"
    4.44 +         offset="1"
    4.45 +         id="stop2891" />
    4.46 +    </linearGradient>
    4.47 +    <linearGradient
    4.48 +       id="linearGradient2795">
    4.49 +      <stop
    4.50 +         style="stop-color:#ccc;stop-opacity:1;"
    4.51 +         offset="0"
    4.52 +         id="stop2797" />
    4.53 +      <stop
    4.54 +         style="stop-color:#ccc;stop-opacity:0;"
    4.55 +         offset="1"
    4.56 +         id="stop2799" />
    4.57 +    </linearGradient>
    4.58 +    <linearGradient
    4.59 +       inkscape:collect="always"
    4.60 +       xlink:href="#linearGradient2795"
    4.61 +       id="linearGradient3170"
    4.62 +       gradientUnits="userSpaceOnUse"
    4.63 +       gradientTransform="translate(121.2183,94.95434)"
    4.64 +       x1="81.322357"
    4.65 +       y1="404.34424"
    4.66 +       x2="201.52036"
    4.67 +       y2="373.03967" />
    4.68 +    <linearGradient
    4.69 +       inkscape:collect="always"
    4.70 +       xlink:href="#linearGradient2887"
    4.71 +       id="linearGradient3172"
    4.72 +       gradientUnits="userSpaceOnUse"
    4.73 +       gradientTransform="translate(0,12)"
    4.74 +       x1="62.634491"
    4.75 +       y1="503.3392"
    4.76 +       x2="248.49242"
    4.77 +       y2="462.94327" />
    4.78 +    <linearGradient
    4.79 +       inkscape:collect="always"
    4.80 +       xlink:href="#linearGradient2795"
    4.81 +       id="linearGradient3174"
    4.82 +       gradientUnits="userSpaceOnUse"
    4.83 +       gradientTransform="matrix(1.001035,0,0,0.653159,236.7075,153.0415)"
    4.84 +       x1="81.322357"
    4.85 +       y1="404.34424"
    4.86 +       x2="201.52036"
    4.87 +       y2="373.03967" />
    4.88 +    <linearGradient
    4.89 +       inkscape:collect="always"
    4.90 +       xlink:href="#linearGradient2887"
    4.91 +       id="linearGradient3176"
    4.92 +       gradientUnits="userSpaceOnUse"
    4.93 +       gradientTransform="translate(0,12)"
    4.94 +       x1="62.634491"
    4.95 +       y1="503.3392"
    4.96 +       x2="248.49242"
    4.97 +       y2="462.94327" />
    4.98 +    <linearGradient
    4.99 +       inkscape:collect="always"
   4.100 +       xlink:href="#linearGradient2795"
   4.101 +       id="linearGradient3208"
   4.102 +       gradientUnits="userSpaceOnUse"
   4.103 +       gradientTransform="matrix(1.001035,0,0,0.653159,236.7075,153.0415)"
   4.104 +       x1="81.322357"
   4.105 +       y1="404.34424"
   4.106 +       x2="201.52036"
   4.107 +       y2="373.03967" />
   4.108 +    <linearGradient
   4.109 +       inkscape:collect="always"
   4.110 +       xlink:href="#linearGradient2887"
   4.111 +       id="linearGradient3210"
   4.112 +       gradientUnits="userSpaceOnUse"
   4.113 +       gradientTransform="translate(0,12)"
   4.114 +       x1="62.634491"
   4.115 +       y1="503.3392"
   4.116 +       x2="248.49242"
   4.117 +       y2="462.94327" />
   4.118 +    <linearGradient
   4.119 +       inkscape:collect="always"
   4.120 +       xlink:href="#linearGradient2795"
   4.121 +       id="linearGradient3212"
   4.122 +       gradientUnits="userSpaceOnUse"
   4.123 +       gradientTransform="translate(121.2183,94.95434)"
   4.124 +       x1="81.322357"
   4.125 +       y1="404.34424"
   4.126 +       x2="201.52036"
   4.127 +       y2="373.03967" />
   4.128 +    <linearGradient
   4.129 +       inkscape:collect="always"
   4.130 +       xlink:href="#linearGradient2887"
   4.131 +       id="linearGradient3214"
   4.132 +       gradientUnits="userSpaceOnUse"
   4.133 +       gradientTransform="translate(0,12)"
   4.134 +       x1="62.634491"
   4.135 +       y1="503.3392"
   4.136 +       x2="248.49242"
   4.137 +       y2="462.94327" />
   4.138 +    <linearGradient
   4.139 +       inkscape:collect="always"
   4.140 +       xlink:href="#linearGradient2795"
   4.141 +       id="linearGradient3256"
   4.142 +       gradientUnits="userSpaceOnUse"
   4.143 +       gradientTransform="translate(121.2183,94.95434)"
   4.144 +       x1="81.322357"
   4.145 +       y1="404.34424"
   4.146 +       x2="201.52036"
   4.147 +       y2="373.03967" />
   4.148 +    <linearGradient
   4.149 +       inkscape:collect="always"
   4.150 +       xlink:href="#linearGradient2887"
   4.151 +       id="linearGradient3258"
   4.152 +       gradientUnits="userSpaceOnUse"
   4.153 +       gradientTransform="translate(0,12)"
   4.154 +       x1="62.634491"
   4.155 +       y1="503.3392"
   4.156 +       x2="248.49242"
   4.157 +       y2="462.94327" />
   4.158 +    <linearGradient
   4.159 +       inkscape:collect="always"
   4.160 +       xlink:href="#linearGradient2795"
   4.161 +       id="linearGradient3260"
   4.162 +       gradientUnits="userSpaceOnUse"
   4.163 +       gradientTransform="matrix(1.001035,0,0,0.653159,236.7075,153.0415)"
   4.164 +       x1="81.322357"
   4.165 +       y1="404.34424"
   4.166 +       x2="201.52036"
   4.167 +       y2="373.03967" />
   4.168 +    <linearGradient
   4.169 +       inkscape:collect="always"
   4.170 +       xlink:href="#linearGradient2887"
   4.171 +       id="linearGradient3262"
   4.172 +       gradientUnits="userSpaceOnUse"
   4.173 +       gradientTransform="translate(0,12)"
   4.174 +       x1="62.634491"
   4.175 +       y1="503.3392"
   4.176 +       x2="248.49242"
   4.177 +       y2="462.94327" />
   4.178 +  </defs>
   4.179 +  <sodipodi:namedview
   4.180 +     id="base"
   4.181 +     pagecolor="#ffffff"
   4.182 +     bordercolor="#666666"
   4.183 +     borderopacity="1.0"
   4.184 +     gridtolerance="10000"
   4.185 +     guidetolerance="10"
   4.186 +     objecttolerance="10"
   4.187 +     inkscape:pageopacity="0.0"
   4.188 +     inkscape:pageshadow="2"
   4.189 +     inkscape:zoom="0.98994949"
   4.190 +     inkscape:cx="455.8122"
   4.191 +     inkscape:cy="520"
   4.192 +     inkscape:document-units="px"
   4.193 +     inkscape:current-layer="layer1"
   4.194 +     inkscape:window-width="906"
   4.195 +     inkscape:window-height="620"
   4.196 +     inkscape:window-x="5"
   4.197 +     inkscape:window-y="49" />
   4.198 +  <metadata
   4.199 +     id="metadata7">
   4.200 +    <rdf:RDF>
   4.201 +      <cc:Work
   4.202 +         rdf:about="">
   4.203 +        <dc:format>image/svg+xml</dc:format>
   4.204 +        <dc:type
   4.205 +           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
   4.206 +      </cc:Work>
   4.207 +    </rdf:RDF>
   4.208 +  </metadata>
   4.209 +  <g
   4.210 +     inkscape:label="Layer 1"
   4.211 +     inkscape:groupmode="layer"
   4.212 +     id="layer1">
   4.213 +    <rect
   4.214 +       style="opacity:1;fill:#abadf8;fill-opacity:1;stroke:#595959;stroke-width:0.86781615;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
   4.215 +       id="rect3180"
   4.216 +       width="234.48758"
   4.217 +       height="199.13225"
   4.218 +       x="322.67767"
   4.219 +       y="351.75531" />
   4.220 +    <rect
   4.221 +       style="opacity:1;fill:#a2f69c;fill-opacity:1;stroke:#595959;stroke-width:0.86781615;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
   4.222 +       id="rect3178"
   4.223 +       width="234.48756"
   4.224 +       height="199.13223"
   4.225 +       x="72.664886"
   4.226 +       y="351.75531" />
   4.227 +    <g
   4.228 +       id="g3144"
   4.229 +       transform="translate(34,0.71578)">
   4.230 +      <g
   4.231 +         id="g2940">
   4.232 +        <rect
   4.233 +           style="fill:url(#linearGradient3260);fill-opacity:1;stroke:black;stroke-width:0.80860078;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
   4.234 +           id="rect2914"
   4.235 +           width="185.04932"
   4.236 +           height="39.587399"
   4.237 +           x="311.53635"
   4.238 +           y="395.04291" />
   4.239 +        <text
   4.240 +           xml:space="preserve"
   4.241 +           style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman"
   4.242 +           x="323.72824"
   4.243 +           y="416.7626"
   4.244 +           id="text2918"><tspan
   4.245 +             sodipodi:role="line"
   4.246 +             id="tspan2920"
   4.247 +             x="323.72824"
   4.248 +             y="416.7626"
   4.249 +             style="font-family:Courier">.hg/data/README.i</tspan></text>
   4.250 +      </g>
   4.251 +      <g
   4.252 +         transform="translate(3.79093e-5,-80.1853)"
   4.253 +         id="g2945">
   4.254 +        <g
   4.255 +           id="g2955">
   4.256 +          <rect
   4.257 +             y="475.44327"
   4.258 +             x="63.134491"
   4.259 +             height="39.395935"
   4.260 +             width="184.85793"
   4.261 +             id="rect2947"
   4.262 +             style="fill:url(#linearGradient3262);fill-opacity:1;stroke:black;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
   4.263 +          <text
   4.264 +             id="text2949"
   4.265 +             y="498.35123"
   4.266 +             x="75.230644"
   4.267 +             style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman"
   4.268 +             xml:space="preserve"><tspan
   4.269 +               style="font-family:Courier"
   4.270 +               y="498.35123"
   4.271 +               x="75.230644"
   4.272 +               id="tspan2951"
   4.273 +               sodipodi:role="line">README</tspan></text>
   4.274 +        </g>
   4.275 +      </g>
   4.276 +      <path
   4.277 +         inkscape:connection-end="#g2940"
   4.278 +         inkscape:connection-start="#g2945"
   4.279 +         inkscape:connector-type="polyline"
   4.280 +         id="path2960"
   4.281 +         d="M 248.49245,414.91131 L 311.13205,414.88123"
   4.282 +         style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-opacity:1" />
   4.283 +    </g>
   4.284 +    <g
   4.285 +       id="g3156"
   4.286 +       transform="translate(34,0.71578)">
   4.287 +      <g
   4.288 +         transform="translate(116,0)"
   4.289 +         id="g2831">
   4.290 +        <rect
   4.291 +           style="fill:url(#linearGradient3256);fill-opacity:1;stroke:black;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
   4.292 +           id="rect1906"
   4.293 +           width="184.85793"
   4.294 +           height="60.609138"
   4.295 +           x="195.96959"
   4.296 +           y="465.46356" />
   4.297 +        <g
   4.298 +           id="g2803"
   4.299 +           transform="translate(-0.893671,1.833581)">
   4.300 +          <text
   4.301 +             id="text1884"
   4.302 +             y="483.92801"
   4.303 +             x="208.95944"
   4.304 +             style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman"
   4.305 +             xml:space="preserve"><tspan
   4.306 +               style="font-family:Courier"
   4.307 +               y="483.92801"
   4.308 +               x="208.95944"
   4.309 +               id="tspan1886"
   4.310 +               sodipodi:role="line">.hg/data/src/hello.c.d</tspan></text>
   4.311 +          <text
   4.312 +             id="text1888"
   4.313 +             y="507.79309"
   4.314 +             x="208.95944"
   4.315 +             style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman"
   4.316 +             xml:space="preserve"><tspan
   4.317 +               style="font-family:Courier"
   4.318 +               y="507.79309"
   4.319 +               x="208.95944"
   4.320 +               id="tspan1890"
   4.321 +               sodipodi:role="line">.hg/data/src/hello.c.i</tspan></text>
   4.322 +        </g>
   4.323 +      </g>
   4.324 +      <g
   4.325 +         id="g2907">
   4.326 +        <rect
   4.327 +           style="fill:url(#linearGradient3258);fill-opacity:1;stroke:black;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
   4.328 +           id="rect2843"
   4.329 +           width="184.85793"
   4.330 +           height="39.395935"
   4.331 +           x="63.134491"
   4.332 +           y="475.44327" />
   4.333 +        <text
   4.334 +           xml:space="preserve"
   4.335 +           style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman"
   4.336 +           x="75.230644"
   4.337 +           y="498.35123"
   4.338 +           id="text2847"><tspan
   4.339 +             sodipodi:role="line"
   4.340 +             id="tspan2849"
   4.341 +             x="75.230644"
   4.342 +             y="498.35123"
   4.343 +             style="font-family:Courier">src/hello.c</tspan></text>
   4.344 +      </g>
   4.345 +      <path
   4.346 +         inkscape:connection-end="#g2831"
   4.347 +         inkscape:connection-start="#g2907"
   4.348 +         inkscape:connector-type="polyline"
   4.349 +         id="path2962"
   4.350 +         d="M 248.49242,495.37535 L 311.46959,495.53401"
   4.351 +         style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-opacity:1" />
   4.352 +    </g>
   4.353 +    <text
   4.354 +       xml:space="preserve"
   4.355 +       style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman"
   4.356 +       x="96.476799"
   4.357 +       y="373.96353"
   4.358 +       id="text3216"><tspan
   4.359 +         sodipodi:role="line"
   4.360 +         id="tspan3218"
   4.361 +         x="96.476799"
   4.362 +         y="373.96353">Working directory</tspan></text>
   4.363 +    <text
   4.364 +       xml:space="preserve"
   4.365 +       style="font-size:12px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman"
   4.366 +       x="344.92493"
   4.367 +       y="373.96353"
   4.368 +       id="text3228"><tspan
   4.369 +         sodipodi:role="line"
   4.370 +         id="tspan3230"
   4.371 +         x="344.92493"
   4.372 +         y="373.96353">Repository</tspan></text>
   4.373 +  </g>
   4.374 +</svg>