| <chapter id="cvs-regression"> |
| <title>How to do regression testing using CVS</title> |
| |
| <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 |
| full-cvs-<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 full-cvs-2003-08-18.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 |
| 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 full-cvs-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: |
| --> |