|  | <chapter id="cvs-regression"> | 
|  | <title>How to do regression testing using CVS</title> | 
|  |  | 
|  | <para> | 
|  | written by Gerard Patel | 
|  | </para> | 
|  | <para> | 
|  | (Extracted from <filename>wine/documentation/bugreports</filename>) | 
|  | </para> | 
|  |  | 
|  | <para> | 
|  | A problem that can happen sometimes is 'it used to work | 
|  | before, now it doesn't anymore...'. Here is a step by step | 
|  | procedure to try to pinpoint when the problem occurred. This is | 
|  | <emphasis>NOT</emphasis> for casual users. | 
|  | </para> | 
|  |  | 
|  | <orderedlist> | 
|  | <listitem> | 
|  | <para> | 
|  | Get the <quote>full CVS</quote> archive from winehq. This archive is | 
|  | the CVS tree but with the tags controlling the versioning | 
|  | system. It's a big file (> 40 meg) with a name like | 
|  | wine-cvsdirs-<last update date> (it's more than 100mb | 
|  | when uncompressed, you can't very well do this with | 
|  | small, old computers or slow Internet connections). | 
|  | </para> | 
|  | </listitem> | 
|  | <listitem> | 
|  | <para> | 
|  | untar it into a repository directory: | 
|  | <screen> | 
|  | cd /home/gerard | 
|  | tar -zxf cvs-dirs-2003-01-15.tar.gz | 
|  | mv wine repository | 
|  | </screen> | 
|  | </para> | 
|  | </listitem> | 
|  | <listitem> | 
|  | <para> | 
|  | extract a new destination directory. This directory must | 
|  | not be in a subdirectory of the repository else | 
|  | <command>cvs</command> will think it's part of the | 
|  | repository and deny you an extraction in the repository: | 
|  | <screen> | 
|  | cd /home/gerard | 
|  | mv wine wine_current (-> this protects your current wine sandbox, if any) | 
|  | export CVSROOT=/home/gerard/repository | 
|  | cd /home/gerard | 
|  | cvs -d $CVSROOT checkout wine | 
|  | </screen> | 
|  | </para> | 
|  | <para> | 
|  | Note that it's not possible to do a checkout at a given | 
|  | date; you always do the checkout for the last date where | 
|  | the wine-cvsdirs-xxx snapshot was generated. | 
|  | </para> | 
|  | <para> | 
|  | Note also that it is possible to do all this with a direct | 
|  | CVS connection, of course. The full CVS file method is less | 
|  | painful for the Winehq CVS server and probably a bit faster | 
|  | if you don't have a very good net connection. | 
|  | </para> | 
|  | <note> | 
|  | <para> | 
|  | If you use CVS directly from the winehq.com server, do not | 
|  | forget to add to your <filename>.cvsrc</filename> file: | 
|  | </para> | 
|  | <screen> | 
|  | cvs -z 3 | 
|  | update -dPA | 
|  | diff -u | 
|  | </screen> | 
|  | </note> | 
|  | </listitem> | 
|  | <listitem> | 
|  | <para> | 
|  | you will have now in the <filename>~/wine</filename> | 
|  | directory an image of the CVS tree, on the client side. | 
|  | Now update this image to the date you want: | 
|  | <screen> | 
|  | cd /home/gerard/wine | 
|  | cvs -d $CVSROOT update -D "2002-06-01 CST" | 
|  | </screen> | 
|  | </para> | 
|  | <para> | 
|  | The date format is <literal>YYYY-MM-DD HH:MM:SS</literal>. | 
|  | Using the CST date format ensure that you will be able to | 
|  | extract patches in a way that will be compatible with the | 
|  | wine-cvs archive | 
|  | <ulink url="http://www.winehq.com/hypermail/wine-cvs"> | 
|  | http://www.winehq.com/hypermail/wine-cvs</ulink> | 
|  | </para> | 
|  | <para> | 
|  | Many messages will inform you that more recent files have | 
|  | been deleted to set back the client cvs tree to the date | 
|  | you asked, for example: | 
|  | <screen> | 
|  | cvs update: tsx11/ts_xf86dga2.c is no longer in the repository | 
|  | </screen> | 
|  | </para> | 
|  | <para> | 
|  | <command>cvs update</command> is not limited to upgrade to | 
|  | a <emphasis>newer</emphasis> version as I have believed for | 
|  | far too long :-( | 
|  | </para> | 
|  | </listitem> | 
|  | <listitem> | 
|  | <para> | 
|  | Now proceed as for a normal update: | 
|  | </para> | 
|  | <screen> | 
|  | ./configure | 
|  | make depend && make | 
|  | </screen> | 
|  | <para> | 
|  | If any non-programmer reads this, the fastest method to get | 
|  | at the point where the problem occurred is to use a binary | 
|  | search, that is, if the problem occurred in 1999, start at | 
|  | mid-year, then is the problem is already here, back to 1st | 
|  | April, if not, to 1st October, and so on. | 
|  | </para> | 
|  | <para> | 
|  | If you have lot of hard disk free space (a full compile currently | 
|  | takes 400 Mb), copy the oldest known working version before | 
|  | updating it, it will save time if you need to go back. (it's | 
|  | better to <command>make distclean</command> before going back in | 
|  | time, so you have to make everything if you don't backup the older | 
|  | version) | 
|  | </para> | 
|  | <para> | 
|  | When you have found the day where the problem happened, continue | 
|  | the search using the wine-cvs archive (sorted by date) and a | 
|  | more precise cvs update including hour, minute, second : | 
|  | <screen> | 
|  | cvs -d $CVSROOT update -D "2002-06-01 15:17:25 CST" | 
|  | </screen> | 
|  | This will allow you to find easily the exact patch that did it. | 
|  | </para> | 
|  | </listitem> | 
|  | <listitem> | 
|  | <para> | 
|  | If you find the patch that is the cause of the problem, you have | 
|  | almost won; report about it to | 
|  | <ulink url="http://bugs.winehq.com/">Wine Bugzilla</ulink> | 
|  | or subscribe to wine-devel and post it there. There is a chance | 
|  | that the author | 
|  | will jump in to suggest a fix; or there is always the possibility | 
|  | to look hard at the patch until it is coerced to reveal where is | 
|  | the bug :-) | 
|  | </para> | 
|  | </listitem> | 
|  | </orderedlist> | 
|  | </chapter> | 
|  |  | 
|  | <!-- Keep this comment at the end of the file | 
|  | Local variables: | 
|  | mode: sgml | 
|  | sgml-parent-document:("wine-devel.sgml" "set" "book" "part" "chapter" "") | 
|  | End: | 
|  | --> |