source: trunk/darcs/darcs.tex @ 406

Last change on this file since 406 was 89, checked in by nanardon, 18 years ago
  • small updates
  • Property svn:keywords set to Id
File size: 10.7 KB
Line 
1% $Id$
2\documentclass[blends,slideColor,colorBG,pdf,ps2pdf]{prosper}
3\usepackage[frenchb]{babel}
4\usepackage[T1]{fontenc}
5\usepackage{multicol}
6
7\title{Darcs}
8\subtitle{Des dépots et des patch}
9\author{Olivier Thauvin}
10\email{olivier.thauvin@aerov.jussieu.fr}
11\institution{
12  \includegraphics*[height=0.3\textheight]{darcs}
13}
14
15\NoFrenchBabelItemize
16
17\begin{document}
18    \maketitle
19
20    \part{Introduction}
21
22    \begin{slide}{Plan}
23    \begin{itemize}
24        \item{Présentation}
25        \item{Avant de commencer}
26        \item{Utilisation locale}
27        \item{Propagation des patchs}
28        \item{Organiser ses dépôts}
29        \item{Autour de darcs}
30    \end{itemize}
31    \end{slide}
32
33    \part{Présentation}
34
35    \begin{slide}{darcs}
36    \begin{itemize}
37    \item \url{http://darcs.net/}
38    \item code sous GPL
39    \item écrit en haskell (http://www.haskell.org)
40        \begin{itemize}
41            \item langage fonctionel pur
42            \item langage compilé
43        \end{itemize}
44    \item code sous\ldots darcs
45    \end{itemize}
46    \end{slide}
47
48    \begin{slide}{Pourquoi darcs ?}
49    \begin{itemize}
50        \item simple à mettre en place
51        \item simple à utiliser
52        \item travail en mode déconnecté
53        \item permet de "forker" facilement
54    \end{itemize}
55    \bigskip
56    \begin{itemize}
57        \item mal adapté aux gros dépôts
58        \item demande parfois énormément de temps CPU
59        \item ne permet pas (encore) de faire tout ce que d'autres VCS font
60    \end{itemize}
61    \end{slide}
62
63    \begin{slide}{Concept}
64    \begin{itemize}
65        \item VCS complètement décentralisé
66        \begin{itemize}
67            \item copie de travail = dépôt
68            \item chaque dépôt est une branche
69            \item techniquement, pas de dépôt central
70        \end{itemize}
71        \item le contenu est la résultante d'une série de patchs
72        \begin{itemize}
73            \item pas d'ordre strict dans les patchs
74            \item dépendences entre patch
75            \item échange des patchs entre les dépôts
76        \end{itemize}
77        \item un patch est un groupe de modifications
78    \end{itemize}
79    \end{slide}
80
81    \begin{slide}{Dans la pratique}
82    \begin{enumerate}
83        \item récupération des dernière modifications
84        \item travail sur le code et on enregistrement au fur et à mesure
85        \item séléction et envoi des modifications
86    \end{enumerate}
87    \end{slide}
88
89    \begin{slide}{Les patchs}
90    un patch:
91    \begin{itemize}
92        \item un id unique généré par darcs
93        \item un nom, identifiant
94        \item une description (optionnelle)
95        \item le nom (mail) de l'auteur
96        \item une signature gpg (optionelle)
97        \item une date
98        \item une série de modifications (le patch lui même)
99    \end{itemize}
100    \end{slide}
101
102    \begin{slide}{structure d'un dépôt}
103    Un seul répertoire \verb+_darcs+ à la racine
104
105    \begin{itemize}
106        \item \verb+current/+: l'arbre de référence (pristine tree)
107        %%\item \verb+inventories/+: FIXME
108        \item \verb+inventory+: la liste des patchs
109        \item \verb+patches/+: les patchs
110        \item \verb+prefs/+: les préférences utilisateur
111    \end{itemize}
112    \end{slide}
113
114    \part{Avant de commencer}
115
116    \begin{slide}{Création d'un dépôt}
117    Nouveau dépôt:
118
119    \verb+darcs initialize+
120
121    \bigskip
122    Depuis un dépôt existant
123    \begin{itemize}
124    \item \verb+darcs get+\\
125    \footnotesize{initialise un dépôt depuis un dépôt existant}
126
127    \item \verb+darcs put+\\
128    \footnotesize{copie le dépôt courant vers un nouveau dépôt}
129    \end{itemize}
130    \end{slide}
131   
132    \part{Utilisation locale}
133
134    \begin{slide}{Ajout/Suppression de fichiers}
135    \begin{itemize}
136        \item \verb+darcs add+
137        \item \verb+darcs remove+
138                \item \verb+darcs mv+
139    \end{itemize}
140    \bigskip
141    Ces opérations sont des patchs\\
142    \bigskip
143    Dans la pratique cela donne deux changements:
144    \begin{enumerate}
145        \item ajout/suppression du fichier
146        \item ajout/suppression du contenu
147    \end{enumerate}
148    \end{slide}
149
150    \begin{slide}{enregistrer}
151    \verb+darcs record+
152   
153    \bigskip
154    \begin{itemize}
155        \item chaque modification peut-être accéptée ou laissée
156        \item est purement local
157    \end{itemize}
158   
159    \bigskip
160    Choses à savoir:
161    \begin{itemize}
162        \item darcs gère les dépendances entre les modifications
163        \item il est possible de rajouter des dépendances explicites
164    \end{itemize}
165    \end{slide}
166
167    \begin{slide}{record: exemple}
168    \begin{tiny}
169    \begin{verbatim}
170$ darcs add prog.hs
171$ darcs record
172addfile ./prog.hs
173Shall I record this patch? (1/?) [ynWsfqadjkc], or ? for help: y
174hunk ./prog.hs 1
175+#!/usr/bin/runhaskell
176+
177[...]
178+    putStrLn "Hello World"
179+
180Shall I record this patch? (2/?) [ynWsfqadjkc], or ? for help: y
181What is the patch name? add prog.hs
182Do you want to add a long comment? [yn] n
183Finished recording patch 'add prog.hs'
184    \end{verbatim}
185    \end{tiny}
186    \end{slide}
187
188    \begin{slide}{Lister les changements}
189    \verb+darcs changes+
190    \begin{itemize}
191        \item listes les patchs dans du dépôt
192        \item peut afficher un sommaire, ou le patch complet
193    \end{itemize}
194
195    \bigskip
196    \verb+darcs diff+
197    Produit un diff entre la copie de travail et le dépôt.
198
199    \bigskip
200    \verb+darcs annotate+
201    Produit une sortie avec pour chaque ligne le patch d'origine.
202
203    \bigskip
204    \verb+darcs query+ \textit{commande}
205    \begin{itemize}
206        \item{manifest} liste les fichiers sous darcs
207        \item d'autres commandes dans le futur
208    \end{itemize}
209
210   \end{slide}
211
212    \begin{slide}{darcs changes: exemple}
213darcs changes
214\begin{tiny}
215\begin{verbatim}
216Sat Feb 11 15:43:38 CET 2006  Olivier Thauvin <olivier.thauvin@aerov.jussieu.fr>
217  * read config in /etc
218
219Sat Feb 11 14:50:25 CET 2006  Olivier Thauvin <olivier.thauvin@aerov.jussieu.fr>
220  * allow to change project passwd
221\end{verbatim}
222\end{tiny}
223darcs changes \verb+--+summary
224\begin{tiny}
225\begin{verbatim}
226Sat Feb 11 15:43:38 CET 2006  Olivier Thauvin <olivier.thauvin@aerov.jussieu.fr>
227  * read config in /etc
228
229    M ./www/index.php +1
230
231Sat Feb 11 14:50:25 CET 2006  Olivier Thauvin <olivier.thauvin@aerov.jussieu.fr>
232  * allow to change project passwd
233
234    M ./templates/showproject.tpl +18
235    M ./www/index.php +7
236\end{verbatim}
237\end{tiny}
238    \end{slide}
239
240    \begin{slide}{darcs diff: exemple}
241darcs diff
242\begin{tiny}
243\begin{verbatim}
244diff -rN old-tools/forge-addproject new-tools/forge-addproject
24511c11
246<     list($opt, $args) = getopt(array('d:' => 'd', 'u:' => 'u'));
247---
248>     list($opt, $args) = GetOptions(array('d:' => 'd', 'u:' => 'u'));
249\end{verbatim}
250\end{tiny}
251    \end{slide}
252
253    \begin{slide}{darcs annotate: exemple}
254\begin{tiny}
255\begin{verbatim}
256# File forgeq created by [add forgeq (query) script
257# Olivier Thauvin <olivier.thauvin@aerov.jussieu.fr>**20060205022127]  as ./forgeq
258# Following line added by [add forgeq (query) script
259# Olivier Thauvin <olivier.thauvin@aerov.jussieu.fr>**20060205022127]
260 #!/usr/bin/php
261# Following line added by [add forgeq (query) script
262# Olivier Thauvin <olivier.thauvin@aerov.jussieu.fr>**20060205022127]
263 <?php
264# Following line added by [query user-group-projet
265# Olivier Thauvin <olivier.thauvin@aerov.jussieu.fr>**20060206025410]
266
267# Following line added by [find path to modules
268# Olivier Thauvin <olivier.thauvin@aerov.jussieu.fr>**20060208035122]
269     include realpath(dirname(__FILE__)) . '/modules/commandline.inc';
270[...]
271\end{verbatim}
272\end{tiny}
273    \end{slide}
274
275        \begin{slide}{Revenir en arrière}
276        \begin{itemize}
277                \item \verb+rollback+
278
279                Créer un patch inverse d'un autre patch (annule un patch)
280
281                \item \verb+unrecord+
282
283                Efface un ou plusieurs patch(s), comme si le patch n'avait pas été pas enregistré
284
285                \item \verb+unpull+
286
287                Efface un ou plusieurs patch(s) et les modifications, comme si les
288                modifications n'avaient jamais existées
289
290        \end{itemize}
291
292        \bigskip
293        Seul \verb+rollback+ est utilisable lorsque le patch a été diffusé.
294        \end{slide}
295 
296    \part{Propagation des patchs}
297
298    \begin{slide}{Communiquer son travail}
299   
300    \begin{itemize}
301        \item \verb+darcs push+
302        \begin{itemize}
303            \item envois les patchs du dépôt vers un autre dépots
304            \item nécessite un droit d'écriture sur la destination
305            (ssh, dépôt local)
306        \end{itemize}
307        \item \verb+darcs send+
308        \begin{itemize}
309            \item envois un plusieurs patch par mail
310            \item support de gnupg
311            \item le patch peut être extrait dans un fichier "\verb+-o+"
312        \end{itemize}
313    \end{itemize}
314    \end{slide}
315
316    \begin{slide}{Récupérer le travail des autres}
317   
318    \begin{itemize}
319        \item \verb+darcs pull+
320        \begin{itemize}
321            \item récupère les patchs d'un dépôt et les applique localement
322        \end{itemize}
323
324        \item \verb+darcs apply+
325        \begin{itemize}
326            \item applique un patch créer par \verb+darcs send+
327        \end{itemize}
328    \end{itemize}
329    \end{slide}
330
331    \part{Organiser ses dépôts}
332
333    \begin{slide}{cas: travail en solitaire}
334    On veut juste avoir un historique des fichiers:
335    \bigskip
336    \begin{figure}[htb]
337    \includegraphics*[width=0.8\textwidth]{depots_solo}
338    \end{figure}
339    \end{slide}
340
341    \begin{slide}{cas: dépôt de référence}
342    Le dépôt de référence:
343    \begin{itemize}
344        \item décidé comme tel
345        \item peut-être accessible en lecture en anonyme
346        \item personne ne s'en sert comme copie de travail
347    \end{itemize}
348    \bigskip
349    \begin{figure}[htb]
350    \includegraphics*[width=0.8\textwidth]{depots}
351    \end{figure}
352    \end{slide}
353   
354    \begin{slide}{cas: plusieurs copies}
355    \begin{itemize}
356        \item depuis plusieurs machines
357        \item on veut juste une synchronisation
358    \end{itemize}
359    \bigskip
360    \begin{figure}[htb]
361    \includegraphics*[width=0.8\textwidth]{depots_p2p}
362    \end{figure}
363    \end{slide}
364
365    \begin{slide}{cas: la vraie vie}
366    \begin{figure}[htb]
367    \includegraphics*[width=0.8\textwidth]{depots_multi}
368    \end{figure}
369    \end{slide}
370
371    \part{Autour de darcs}
372
373    \begin{slide}{Web apps}
374    \begin{itemize}
375    \item DarcsWeb:
376
377    Visualiseur de dépôt darcs ecrit en python (inspiré de gitweb)
378
379    \bigskip
380    \item Trac:
381
382    Ensemble d'outils pour la gestion de code (wiki, bug report,
383    navigateur de code).
384
385    D'abord fait pour subversion, un patch pour darcs est en cours
386    d'intégration
387    \end{itemize}
388    \end{slide}
389
390    \begin{slide}{darcsweb}
391    \begin{figure}[htb]
392    \includegraphics[width=80mm]{darcsweb}
393    \end{figure}
394    \end{slide}
395
396    \part{Conclusion}
397    \begin{slide}{En résumé}
398    Darcs est jeune mais il fonctionne\\
399    La documentation est complète\\
400    Rends plus facile la gestion des branches
401
402    \bigskip
403    Questions ?
404    \end{slide}
405
406\end{document}
Note: See TracBrowser for help on using the repository browser.