| <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 occured. This is | |
| <emphasis>NOT</emphasis> for casual users. | |
| </para> | |
| <orderedlist> | |
| <listitem> | |
| <para> | |
| Get the 'full cvs' 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 -zxfcvs-dirs-2000-05-20.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 "1999-06-01 EDT" | |
| </screen> | |
| </para> | |
| <para> | |
| The date format is <literal>YYYY-MM-DD HH:MM:SS</literal>. | |
| Using the EDT date format ensure that you will be able to | |
| extract patches in a way that will be compatible with the | |
| wine-cvs archive : http://www.winehq.com/hypermail/wine-cvs | |
| </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 occured is to use a binary | |
| search, that is, if the problem occured 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 takes | |
| currently 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 make distclean 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 "1999-06-01 15:17:25 EDT" | |
| </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 on <systemitem>comp.emulators.windows.wine</systemitem> | |
| or susbscribe 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-doc.sgml" "set" "book" "part" "chapter" "") | |
| End: | |
| --> |