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