Date: Fri, 7 Sep 2001 18:40:03 -0700 (PDT) From: Salvo Bartolotta <bartequi@neomedia.it> To: freebsd-doc@freebsd.org Subject: Re: docs/24662: too many questions about source management bloat freebsd lists Message-ID: <200109080140.f881e3N80802@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR docs/24662; it has been noted by GNATS. From: Salvo Bartolotta <bartequi@neomedia.it> To: Murray Stokely <murray.stokely@windriver.com> Cc: freebsd-gnats-submit@FreeBSD.org, cvsupbugs@polstra.com Subject: Re: docs/24662: too many questions about source management bloat freebsd lists Date: Sat, 08 Sep 2001 03:30:17 +0200 (CEST) This message is in MIME format. ---MOQ999912617bf28d22212d6ba57727d5d15660290b8 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit Here is a patch, as promised. I exchanged a couple of e-mail messages with John Polstra on this subject a few months ago; I am sending him the draft so that he may also be able to spot any bugs and give suggestions. -- Salvo ---MOQ999912617bf28d22212d6ba57727d5d15660290b8 Content-Type: text/plain; name="patch"; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit Content-Disposition: inline; filename="patch" =================================================================== RCS file: /myjunk/home/ncvs/doc/en_US.ISO8859-1/books/handbook/mirrors/chapter.sgml,v retrieving revision 1.153 diff -u -r1.153 chapter.sgml --- chapter.sgml 2001/09/05 00:29:19 1.153 +++ chapter.sgml 2001/09/08 00:22:40 @@ -3910,6 +3910,213 @@ </varlistentry> </variablelist> </sect2> + + <sect2> + <sect2info> + <authorgroup> + <author> + <firstname>Salvo</firstname> + <surname>Bartolotta</surname> + <contrib>Contributed by </contrib> + </author> + </authorgroup> + </sect2info> + + <title>Advanced Points</title> + + <sect3> + <title>Introduction</title> + + <para>If you have visited <ulink url="http://www.polstra.com">John Polstra's site</ulink> + and read + <ulink url="http://www.polstra.com/projects/freeware/CVSup/faq.html">his FAQ</ulink>, + you may probably have noticed Question 12 & 13.</para> + + <para>When updating any collection of sources (eg <filename>/usr/ports</filename>), + &man.cvsup.1; makes use of the related checkouts file in order to + perform the updating process in the most efficient and correct way. + In this example (<filename>/usr/ports</filename>), the related checkouts + file is <filename>/usr/sup/ports-all/checkouts.cvs:.</filename> if + your base is <filename>/usr</filename>.</para> + + <para>A checkouts file contains information on the current status of your + sources -- in a way, a sort of "photograph". This significant information + enables cvsup to retrieve updates most effectively. Further, and maybe + more important, it enables cvsup to correctly manage your sources by + locally deleting any files no longer present in the repository, thus + leaving no stale files on your system. In fact, without a checkouts file, + cvsup would NOT know which files your collection was composed of (cf + &man.cvsup.1; and the fallback method for details); as a result, it + could NOT delete on your system those files no longer present in the + repository. These files would remain on your system (stale files), and + might cause you subtle build failures or other trouble. For example, + this problem is likely to occur if you first update your ports + collection several weeks after you have got(ten) your installation + CDs.</para> + + <para>It is therefore recommended that you adopt the two-step procedure + outlined in the Cvsup FAQ (cf Q12, Q13); later, you will be given + interesting and instructive concrete examples.</para> + </sect3> + <sect3> + <title>An useful python script: cvsupchk</title> + + <para>Alternatively, in order to examine your sources for inconsistencies, + you may wish to utilize the cvsupchk python script; which script is + currently found in <filename>/usr/ports/net/cvsup/work/cvsup-16.1/contrib/cvsupchk</filename>, + together with a nice <filename>README</filename>. Prerequisites:</para> + + <orderedlist> + <listitem> + <para><literal>/usr/ports/net/cvsup</literal> &prompt.root; <userinput> make extract</userinput></para> + </listitem> + + <listitem> + <para>python (also found in the ports collection :-))</para> + </listitem> + + <listitem> + <para>a checkouts file for your collection of sources.</para> + </listitem> + </orderedlist> + + <para>If you are updating your sources for the very first time, of course + you do not have a checkouts file. After installing python and updating + your sources (eg <filename>/usr/ports</filename>), you can check them + thus:</para> + + <screen>&prompt.user; <filename>/path/to/</filename><userinput>cvsupchk -d /usr -c /usr/sup/ports-all/checkouts.cvs:. | more</userinput></screen> + + <para>If you want to check your RELENG_4 sources:</para> + + <screen>&prompt.user; <filename>/path/to/</filename><userinput>cvsupchk -d /usr -c /usr/sup/src-all/checkouts.cvs:RELENG_4 | more</userinput></screen> + + <para>In each case, cvsupchk will inspect your sources for inconsistencies + by utilizing the information contained in the related checkouts file. + Such anomalies as deleted files being present (aka stale files), missing + checked out files, extra RCS files, and dead directories, will be + printed to standard output.</para> + + <para>In the next section, we will provide important, typical examples of + source updating; which examples will show you the role of checkouts + files and the dangers of negligent source management.</para> + </sect3> + + <sect3> + <title>Examples of more advanced source management</title> + + <sect4> + <title>How to safely change tags when updating <literal>src-all.</literal></title> + + <para>If you specify eg tag=A in your supfile, cvsup will create a + checkouts file called <filename>checkouts.cvs:A</filename>: for + instance, if tag=RELENG_4, a checkouts file called + <filename>checkouts.cvs:RELENG_4</filename> is generated. This file + will be used to retrieve and/or store identification information + on your 4-STABLE sources.</para> + + <para>When tracking <literal>src-all</literal>, if you wish to pass from tag=A to tag=B + (A less/greater than B not making any difference) and if your + checkouts file is <filename>checkouts.cvs:A</filename>, the + following actions should be performed:</para> + + <orderedlist> + <listitem> + <para>&prompt.root; <userinput>mv checkouts.cvs:A checkouts.cvs:B</userinput> + (This provides the subsequent step with the appropriate + checkouts file)</para> + </listitem> + + <listitem> + <para>write a supfile whose collection line reads:</para> + <programlisting>src-all tag=B</programlisting> + </listitem> + + <listitem> + <para>cvsup your sources using the new supfile.</para> + </listitem> + </orderedlist> + + <para>Cvsup will look for <filename>checkouts.cvs:B</filename> -- in + that the target is B; that is, cvsup will make use of the information + contained therein to correctly manage your sources.</para> + + <para>The benefits:</para> + + <itemizedlist> + <listitem> + <para>the sources are dealt with correctly (in particular, no + stale files)</para> + </listitem> + + <listitem> + <para>less load is placed on the server, in that cvsup operates + in the most efficient way.</para> + </listitem> + </itemizedlist> + + <para>For example, A=RELENG_4, B=. The period in "B=." means -CURRENT. + This is a rather typical update, from 4-STABLE to -CURRENT. While it + is straightforward to "downgrade" your sources (eg from -CURRENT to + -STABLE), downgrading a system is quite another matter. You are + STRONGLY advised not to attempt such an operation, unless you know + exactly what you are doing.</para> + </sect4> + + <sect4> + <title>Updating to the same tag as of a different date</title> + + <para>If you wish to switch from "tag=A" to "tag=A" as of a different + GMT date (say, "date=D"), you will execute the following:</para> + + <orderedlist> + <listitem> + <para>write a supfile whose collection line reads:</para> + <programlisting>src-all tag=A date=D</programlisting> + </listitem> + + <listitem> + <para>update your sources using the new supfile</para> + </listitem> + </orderedlist> + + <para>Whether the new date precedes that of the last synch operation + with tag=A or not, it is immaterial. For example, in order to + specify the date "August 27, 2000, 10:00:00 GMT" you write the + line:</para> + + <programlisting>src-all tag=RELENG_4 date=2000.08.27.10.00.00</programlisting> + + <para>N.B. The format of a date is rigid. You have to specify all + the components of the date: century (19 for the 19th or 20 for the + 20th), year, month, day, hour, minutes, seconds -- as shown in the + above example. For more information, please see &man.cvsup.1;.</para> + + <para>Whether or not a date is specified, the checkouts file is called + <filename>checkouts.cvs:A</filename> (eg + <filename>checkouts.cvs:RELENG_4</filename>). As a result, no + particular action is needed in order to revert to the previous state: + you have to modify the date in the supfile, and csvup again.</para> + </sect4> + + <sect4> + <title>Updating your ports collection for the first time</title> + + <para>Since ports are tagged "." (ie -CURRENT), you can correctly "sync" + them for the first time by adding the date keyword (cf &man.cvsup.1; + for the exact format): you should specify a date as close as possible + to that of "shipping" of your ports tree. After cvsup has correctly + created the ports checkouts file, which is precisely the goal of + this first special synch operation, the date field must be removed; + all subsequent updates will be carried out smoothly.</para> + + <para>If you have been reading the apparently nit-picking remarks in + these sections, you will probably have recognized the potential for + scr^Wtrouble in a source updating process. A number of people have + actually run into problems. You have been warned. :-)</para> + </sect4> + </sect3> + </sect2> </sect1> <sect1 id="mirrors-afs"> ---MOQ999912617bf28d22212d6ba57727d5d15660290b8-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-doc" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200109080140.f881e3N80802>