Move authors to the wine-user.sgml.
[wine] / documentation / cvs-regression.sgml
1   <chapter id="cvs-regression">
2     <title>How to do regression testing using CVS</title>
3
4     <para>
5       A problem that can happen sometimes is 'it used to work
6       before, now it doesn't anymore...'. Here is a step by step
7       procedure to try to pinpoint when the problem occurred. This is
8       <emphasis>NOT</emphasis> for casual users.
9     </para>
10
11     <orderedlist>
12       <listitem>
13         <para>
14           Get the <quote>full CVS</quote> archive from winehq. This archive is
15           the CVS tree but with the tags controlling the versioning
16           system. It's a big file (> 40 meg) with a name like
17           wine-cvsdirs-&lt;last update date> (it's more than 100mb
18           when uncompressed, you can't very well do this with
19           small, old computers or slow Internet connections).
20         </para>
21       </listitem>
22       <listitem>
23         <para>
24           untar it into a repository directory:
25           <screen>
26 cd /home/gerard
27 tar -zxf cvs-dirs-2003-01-15.tar.gz
28 mv wine repository
29           </screen>
30         </para>
31       </listitem>
32       <listitem>
33         <para>
34           extract a new destination directory. This directory must
35           not be in a subdirectory of the repository else
36           <command>cvs</command> will think it's part of the
37           repository and deny you an extraction in the repository:
38           <screen>
39 cd /home/gerard
40 mv wine wine_current (-> this protects your current wine sandbox, if any)
41 export CVSROOT=/home/gerard/repository
42 cd /home/gerard
43 cvs -d $CVSROOT checkout wine
44           </screen>
45         </para>
46         <para>
47           Note that it's not possible to do a checkout at a given
48           date; you always do the checkout for the last date where
49           the wine-cvsdirs-xxx snapshot was generated.
50         </para>
51         <para>
52           Note also that it is possible to do all this with a direct
53           CVS connection, of course. The full CVS file method is less
54           painful for the Winehq CVS server and probably a bit faster
55           if you don't have a very good net connection.
56         </para>
57         <note>
58           <para>
59             If you use CVS directly from the winehq.com server, do not
60             forget to add to your <filename>.cvsrc</filename> file:
61           </para>
62           <screen>
63 cvs -z 3
64 update -dPA
65 diff -u
66           </screen>
67          </note>
68       </listitem>
69       <listitem>
70         <para>
71           you will have now in the <filename>~/wine</filename>
72           directory an image of the CVS tree, on the client side.
73           Now update this image to the date you want:
74           <screen>
75 cd /home/gerard/wine
76 cvs -d $CVSROOT update -D "2002-06-01 CST"   
77           </screen>
78         </para>
79         <para>
80           The date format is <literal>YYYY-MM-DD HH:MM:SS</literal>.
81           Using the CST date format ensure that you will be able to
82           extract patches in a way that will be compatible with the
83           wine-cvs archive
84           <ulink url="http://www.winehq.com/hypermail/wine-cvs">
85           http://www.winehq.com/hypermail/wine-cvs</ulink>
86         </para>
87         <para>
88           Many messages will inform you that more recent files have
89           been deleted to set back the client cvs tree to the date
90           you asked, for example:
91           <screen>
92 cvs update: tsx11/ts_xf86dga2.c is no longer in the repository
93           </screen>
94         </para>
95         <para>
96           <command>cvs update</command> is not limited to upgrade to
97           a <emphasis>newer</emphasis> version as I have believed for
98           far too long :-(
99         </para>
100       </listitem>
101       <listitem>
102         <para>
103           Now proceed as for a normal update:
104         </para>
105         <screen>
106 ./configure
107 make depend && make
108         </screen>
109         <para>
110           If any non-programmer reads this, the fastest method to get
111           at the point where the problem occurred is to use a binary
112           search, that is, if the problem occurred in 1999, start at
113           mid-year, then is the problem is already here, back to 1st
114           April, if not, to 1st October, and so on.
115         </para>
116         <para>
117           If you have lot of hard disk free space (a full compile currently
118           takes 400 Mb), copy the oldest known working version before
119           updating it, it will save time if you need to go back. (it's
120           better to <command>make distclean</command> before going back in
121           time, so you have to make everything if you don't backup the older
122           version)
123         </para>
124         <para>
125           When you have found the day where the problem happened, continue
126           the search using the wine-cvs archive (sorted by date) and a
127           more precise cvs update including hour, minute, second :
128           <screen>
129 cvs -d $CVSROOT update -D "2002-06-01 15:17:25 CST"
130           </screen>
131           This will allow you to find easily the exact patch that did it.
132         </para>
133       </listitem>
134       <listitem>
135         <para>
136           If you find the patch that is the cause of the problem, you have
137           almost won; report about it to
138           <ulink url="http://bugs.winehq.com/">Wine Bugzilla</ulink>
139           or subscribe to wine-devel and post it there. There is a chance
140           that the author
141           will jump in to suggest a fix; or there is always the possibility
142           to look hard at the patch until it is coerced to reveal where is
143           the bug :-) 
144         </para>
145       </listitem>
146     </orderedlist>
147   </chapter>
148
149   <!-- Keep this comment at the end of the file
150   Local variables:
151   mode: sgml
152   sgml-parent-document:("wine-devel.sgml" "set" "book" "part" "chapter" "")
153   End:
154   -->