svn commit: r45388 - head/en_US.ISO8859-1/books/porters-handbook/slow-porting
Mathieu Arnold
mat at FreeBSD.org
Fri Aug 1 08:15:23 UTC 2014
Author: mat (ports committer)
Date: Fri Aug 1 08:15:22 2014
New Revision: 45388
URL: http://svnweb.freebsd.org/changeset/doc/45388
Log:
Reword the patch creation section.
Reviewed by: wblock
Sponsored by: Absolight
Modified:
head/en_US.ISO8859-1/books/porters-handbook/slow-porting/chapter.xml
Modified: head/en_US.ISO8859-1/books/porters-handbook/slow-porting/chapter.xml
==============================================================================
--- head/en_US.ISO8859-1/books/porters-handbook/slow-porting/chapter.xml Fri Aug 1 04:43:37 2014 (r45387)
+++ head/en_US.ISO8859-1/books/porters-handbook/slow-porting/chapter.xml Fri Aug 1 08:15:22 2014 (r45388)
@@ -259,24 +259,95 @@
<para>In the preparation of the port, files that have been added
or changed can be recorded with &man.diff.1; for later feeding
to &man.patch.1;. Doing this with a typical file involves
- saving a copy of the original file before making any
- changes.</para>
+ saving a copy of the original file before making any changes
+ using a <filename>.orig</filename> suffix.</para>
<screen>&prompt.user; <userinput>cp <replaceable>file</replaceable> <replaceable>file</replaceable>.orig</userinput></screen>
- <sect2 xml:id="slow-patch-automatic">
- <title>Automatic Patch Generation</title>
+ <para>After all changes have been made, <command>cd</command> back
+ to the port directory. Use <command>make makepatch</command> to
+ generate updated patch files in the <filename>files</filename>
+ directory.</para>
+
+ <sect2 xml:id="slow-patch-rules">
+ <title>General Rules for Patching</title>
+
+ <para>Patch files are stored in <varname>PATCHDIR</varname>,
+ usually <filename>files/</filename>, from where they will be
+ automatically applied. All patches must be relative to
+ <varname>WRKSRC</varname>. Typically
+ <varname>WRKSRC</varname> is a subdirectory of
+ <varname>WRKDIR</varname>, the directory where the distfile is
+ extracted. Use <command>make -V WRKSRC</command> to see the
+ actual path. The patch names are to follow these
+ rules:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Avoid having more than one patch modify the same file.
+ For example, having both
+ <filename>patch-foobar.c</filename> and
+ <filename>patch-foobar.c2</filename> making changes to
+ <filename>${WRKSRC}/foobar.c</filename> makes them fragile
+ and difficult to debug.</para>
+ </listitem>
+
+ <listitem>
+ <para>When creating names for patch files, replace slashes
+ (<literal>/</literal>) with two underscores
+ (<literal>__</literal>). For example, to patch a file
+ named <filename>src/freeglut_joystick.c</filename>, name
+ the corresponding patch
+ <filename>patch-src__freeglut_joystick.c</filename>. Do
+ not name patches like <filename>patch-aa</filename> or
+ <filename>patch-ab</filename>. Always use the path and
+ file name in patch names. Using <command>make
+ makepatch</command> automatically generates the correct
+ names.</para>
+ </listitem>
+
+ <listitem>
+ <para>A patch may modify multiple files if the changes are
+ related and the patch is named appropriately. For
+ example,
+ <filename>patch-add-missing-stdlib.h</filename>.</para>
+ </listitem>
+
+ <listitem>
+ <para>Only use characters <literal>[-+._a-zA-Z0-9]</literal>
+ for naming patches. In particular, <emphasis>do not use
+ <literal>::</literal> as a path separator,</emphasis>
+ use <literal>__</literal> instead.</para>
+ </listitem>
+ </itemizedlist>
- <para>When all the files have been modified, use <command>make
- makepatch</command> from the port directory to write updated
- patch files to the <filename>files</filename> directory of the
- port.</para>
+
+ <para>Minimize the amount of non-functional whitespace changes
+ in patches. It is common in the Open Source world for
+ projects to share large amounts of a code base, but obey
+ different style and indenting rules. When taking a working
+ piece of functionality from one project to fix similar areas
+ in another, please be careful: the resulting patch may be full
+ of non-functional changes. It not only increases the size of
+ the ports repository but makes it hard to find out what
+ exactly caused the problem and what was changed at all.</para>
+
+ <para>If a file must be deleted, do it in the
+ <buildtarget>post-extract</buildtarget> target rather than as
+ part of the patch.</para>
</sect2>
<sect2 xml:id="slow-patch-manual">
<title>Manual Patch Generation</title>
+ <note>
+ <para>Manual patch creation is usually not necessary.
+ Automatic patch generation as described earlier in this
+ section is the preferred method. However, manual patching
+ may be required occasionally.</para>
+ </note>
+
<para>Patches are saved into files named
<filename>patch-*</filename> where
<replaceable>*</replaceable> indicates the pathname of the
@@ -292,44 +363,21 @@
<screen>&prompt.user; <userinput>diff -u <replaceable>file</replaceable>.orig <replaceable>file</replaceable> > patch-<replaceable>pathname-file</replaceable></userinput></screen>
<para>When generating patches for new, added files,
- <option>-N</option> is added to tell &man.diff.1; to treat the
+ <option>-N</option> is used to tell &man.diff.1; to treat the
non-existent original file as if it existed but was
empty:</para>
<screen>&prompt.user; <userinput>diff -u -N <replaceable>newfile</replaceable>.orig <replaceable>newfile</replaceable> > patch-<replaceable>pathname-newfile</replaceable></userinput></screen>
- <para>Patch files are stored in <varname>PATCHDIR</varname>
- (usually <filename class="directory">files/</filename>, from
- where they will be automatically applied. All patches must be
- relative to <varname>WRKSRC</varname> (generally the directory
- the port's tarball unpacks itself into, that being where the
- build is done). To make fixes and upgrades easier, avoid
- having more than one patch fix the same file (that is,
- <filename>patch-file</filename> and
- <filename>patch-file2</filename> both changing
- <filename>WRKSRC/foobar.c</filename>). Note that in the path
- of a patched file the <literal>/</literal> are to be replaced
- with two underscores <literal>__</literal>. For example, to
- patch a file named
- <filename>src/freeglut_joystick.c</filename>, the
- corresponding patch should be named
- <filename>patch-src__freeglut_joystick.c</filename>.</para>
-
- <para>Please only use characters
- <literal>[-+._a-zA-Z0-9]</literal> for naming patches. Do not
- use any other characters besides them. Do not name patches
- like <filename>patch-aa</filename> or
- <filename>patch-ab</filename>, always mention the path and
- file name in patch names.</para>
-
- <para>Do not put RCS strings in patches.
- <application>Subversion</application> will mangle them when we
- put the files into the ports tree, and when we check them out
- again, they will come out different and the patch will fail.
- RCS strings are surrounded by dollar
- (<literal>$</literal>) signs, and typically start with
- <literal>$Id</literal> or
- <literal>$RCS</literal>.</para>
+ <para>Do not add <literal>$FreeBSD$</literal> RCS strings in
+ patches. When patches are added to the
+ <application>Subversion</application> repository with
+ <command>svn add</command>, the
+ <literal>fbsd:nokeywords</literal> property is set to
+ <literal>yes</literal> automatically so keywords in the patch
+ are not modified when committed. The property can be added
+ manually with <command>svn propset fbsd:nokeywords yes
+ <replaceable>files...</replaceable></command>.</para>
<para>Using the recurse (<option>-r</option>) option to
&man.diff.1; to generate patches is fine, but please look at
@@ -348,26 +396,6 @@
</sect2>
- <sect2 xml:id="slow-patch-rules">
- <title>General Rules for Patching</title>
-
- <para>Try to minimize the amount of non-functional whitespace
- changes in patches. It is common in the Open Source world for
- projects to share large amounts of a code base, but obey
- different style and indenting rules. When taking a working
- piece of functionality from one project to fix similar areas
- in another, please be careful: the resulting line patch may be
- full of non-functional changes. It not only increases the
- size of the <application>Subversion</application> repository
- but makes it hard to find out what exactly caused the problem
- and what was changed at all.</para>
-
- <para>If a file must be deleted, do it in the
- <buildtarget>post-extract</buildtarget> target rather than as
- part of the patch.</para>
-
- </sect2>
-
<sect2 xml:id="slow-patch-automatic-replacements">
<title>Simple Automatic Replacements</title>
@@ -405,7 +433,7 @@ DOS2UNIX_FILES= util.c util.h</programli
DOS2UNIX_REGEX= .*\.([ch]|cpp)</programlisting>
<para>A similar option is <varname>DOS2UNIX_GLOB</varname>,
- which invokes <command>find</command> for each element listed
+ which runs <command>find</command> for each element listed
in it.</para>
<programlisting>USES= dos2unix
More information about the svn-doc-all
mailing list