<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: | |
--> |