makepatch man page on DragonFly

Man page or keyword search:  
man Server   44335 pages
apropos Keyword Search (all sections)
Output format
DragonFly logo
[printable version]

MAKEPATCH(1)	      User Contributed Perl Documentation	  MAKEPATCH(1)

NAME
       makepatch - create script to update a source tree

SYNOPSIS
       makepatch [ options ] old-src new-src

Introduction
       Traditionally, source trees are updated with the patch program,
       processing patch information that is generated by the diff program.
       Although diff and patch do a very good job at patching file contents,
       most versions do not handle creating and deleting files and
       directories, and adjusting of file modes and time stamps. Newer
       versions of diff and patch seem to be able to create files, and very
       new versions of patch can remove files. But that's about it.

       Another typical problem is that patch kits are typically downloaded
       from the Internet, or transmitted via electronic mail. It is often
       desirable to verify the correctness of a patch kit before even
       attempting to apply it.

       The makepatch package is designed to overcome these limitations.

DESCRIPTION
       The makepatch package contains two Perl programs: makepatch and
       applypatch.

       makepatch will generate a patch kit from two source trees. It traverses
       the source directory and runs a diff on each pair of corresponding
       files, accumulating the output into a patch kit. It knows about the
       conventions for patch kits: if a file named "patchlevel.h" exists, it
       is handled first, so patch can check the version of the source tree.
       Also, to deal with the non-perfect versions of patch that are in use,
       it supplies ""Index:"" and ""Prereq:"" lines, so patch can correctly
       locate the files to patch, and it relocates the patch to the current
       directory to avoid problems with creating new files.

       The list of files can be specified in a so called MANIFEST file, but it
       can also be generated by recursively traversing the source tree. Files
       can be excluded using shell style wildcards and Perl regex patterns.

       But that is not it! makepatch also inserts some additional information
       in the patch kit for use by the applypatch program.

       It is important to emphasize that the generated patch kit is still
       valid input for patch. When used with patch, there are no verifications
       and problems may arise when new files need to be created. makepatch
       prepends a small shell script in front of the patch kit that creates
       the necessary files and directories for the patch process. If you can
       not run applypatch for some reason, you can run the patch kit as a
       shell script to prepare the source directory for the patching process.

       The applypatch program will do the following:

       ·   It will extensively verify that the patch kit is complete and not
	   corrupted during transfer.

       ·   It will apply some heuristics to verify that the directory in which
	   the patch will be applied does indeed contain the expected sources.

       ·   It creates files and directories as necessary.

       ·   It applies the patch by running the patch program.

       ·   Upon completion, obsolete files, directories and ".orig" files are
	   removed, file modes of new files are set, and the timestamps of all
	   patched files are adjusted.

       Note that applypatch only requires the patch program. It does not rely
       on a shell or shell tools. This makes it possible to apply patches on
       non-Unix systems.

General usage
       Suppose you have an archive `"pkg-1.6.tar.gz"' containing the sources
       for package `"pkg"' version 1.6, and a directory tree `"pkg-1.7"'
       containing the sources for version 1.7. The following command will
       generate a patch kit that updates the 1.6 sources into their 1.7
       versions:

	   makepatch pkg-1.6.tar.gz pkg-1.7 > pkg-1.6-1.7.patch

       To apply this script, go to the directory containing the 1.6 sources
       and feed the script to applypatch:

	   cd old/pkg-1.6
	   applypatch pkg-1.6-1.7.patch

       applypatch will verify that it is executing in the right place and make
       all necessary updates.

       By default, makepatch will provide a few lines of progress information,
       for example:

	   Extracting pkg-1.6.tar.gz to /tmp/mp21575.d/old...
	   Manifest MANIFEST for pkg-1.6 contains 1083 files.
	   Manifest MANIFEST for pkg-1.7 contains 1292 files.
	   Processing the filelists ...
	   Collecting patches ...
	     266 files need to be patched.
	     216 files and 8 directories need to be created.
	     7 files need to be removed.

       applypatch will provide no feedback information by default.

Makepatch arguments
       makepatch requires two arguments: old_src and new_src.

       old-src
	   This is the name of either a single file or a directory that
	   contains copies of the older version of the target files; in other
	   words, copies of the files prior to any modifications.

	   Alternatively, it may be the name of an archive that holds the
	   files to be processed. Allowable archive formats are gzipped tar
	   (name ends in "".tar.gz"" or "".tgz""), bzipped tar (name ends in
	   "".tar.bz2""), plain tar (name ends in "".tar"" and zip (name ends
	   in "".zip"").

       new-src
	   This is the name of either a single file or a directory that
	   contains copies of the newer version of the target files; in other
	   words, copies of the files after the modifications have been made.

	   Alternatively, it may be the name of an archive that holds the
	   files to be processed.

       The patch script generated by makepatch will take care of creating new
       files and directories, update existing files, and remove files and
       directories that are no longer present in the new-src directory.

MANIFEST files
       The purpose of a manifest file is to provide the list of files that
       constitute a package. Manifest files are traditionally called
       ""MANIFEST"" and reside in the top level directory of the package.

       Although there is no formal standard for the contents of manifest
       files, makepatch uses the following rules:

       ·   If the second line from the manifest file looks like a separator
	   line (e.g. it is empty, or contains only dashes), it is discarded
	   and so is the first line.

       ·   Empty lines and lines that start with a "#" are ignored.

       ·   If there are multiple space-separated "words" on a line, the first
	   word is considered to be the filename.

   Default treatment
       By default, makepatch looks for files named ""MANIFEST"" in the top
       level directories of the old and the new source trees. If these files
       (or one of them) are found, they are used.  If no manifest file could
       be found, the package is assumed to consist of all files in the
       directory.

       The default name of the default manifest file can be modified with the
       command line option ""-automanifest"", see Section "Command line
       options".

   Explicitly naming of manifest files
       Command line options ""-oldmanifest"" and ""-newmanifest"" can be used
       to explicitly designate old and new manifest files. Option
       ""-manifest"" is a short way to set one manifest file for both the old
       and new source trees.

   Suppress manifest file processing
       Command line option ""-nomanifest"" can be used to suppress all
       manifest file processing. The package is assumed to consist of all
       files in the source directories.

Makepatch options
       makepatch takes several options to control its behaviour. Options are
       usually specified on the command line, but makepatch can take options
       from three sources in the following order:

       ·   Environment variable MAKEPATCHINIT.

	   When this environment variable is set its contents are considered
	   to be command line options that are processed upon startup. All
	   normal options are allowed, plus one: -rcfile filename. Option
	   -rcfile can be used to specify an alternate option file, see below.

       ·   Options files.

	   makepatch first tries to process a file named /etc/makepatchrc.
	   (This is a Unix-ism.)  It is okay if this file is missing.

	   Next, makepatch will process a file named .makepatchrc in the
	   user's home directory, if it exists.

	   After processing this file, makepatch will process a file named
	   .makepatchrc in the current directory, if it exists. An alternative
	   name for this file can be specified with option -rcfile in
	   environment variable MAKEPATCHINIT. This is the only way to specify
	   an alternative options file name.

	   In all option files, empty lines and lines starting with ";" or "#"
	   are ignored. All other lines are considered to contain options
	   exactly as if they had been supplied on the command line.

       ·   The command line.

Command line options
       Options are matched case insensitive, and may be abbreviated to
       uniqueness.

       -description text
	   Provide a descriptive text for this patch. Multiple -description
	   options may be supplied.

	   If no description is provided, the program try to guess one. This
	   is usually possible if both directories are simple names, e.g.
	   '"pkg-1.16"'. If no description can be determined, the program will
	   ask for one.

       -diff cmd
	   If specified, cmd is the command to be used to generate the
	   differences between the two versions of the files.  If not
	   specified, this command defaults to ""diff -c"".

	   For best results, only use ""diff -c"" or ""diff -u"".  In any
	   case, it must produce either context or unified diff output.

       -patchlevel pfile
	   If specified, pfile indicates an alternate file that is to be used
	   in lieu of "patchlevel.h".

       -automanifest mfile
	   makepatch will automatically use manifest files of the given name
	   if they appear in the directories. The default name is "MANIFEST".

       -nomanifest
	   Suppress using manifest files.

       -manifest mfile
	   If specified, mfile indicates the name of the manifest file which
	   consists of a list of the files contained in both the old and the
	   new directories.

       -oldmanifest omfile
	   If specified, omfile indicates the name of the manifest file which
	   consists of a list of the files contained in the old directory.
	   This option is designed to be used in conjunction with the
	   -newmanifest option.	 Note that the old and new directories must
	   still be indicated.

       -newmanifest nmfile
	   If specified, nmfile indicates the name of the manifest file which
	   consists of a list of the files contained in the new directory.
	   This option is designed to be used in conjunction with the
	   -oldmanifest option.	 Note that the old and new directories must
	   still be indicated.

       -[no]recurse
	   makepatch recurses through directories by default. Option
	   -norecurse prevents recursion beyond the initial directories.

       -[no]follow
	   If set, symbolic links to directories are traversed as if they were
	   real directories.

       -infocmd command
	   If specified, the output of running command will be added before
	   each patch chunk. command will undergo the following substitutions
	   first: %oP will be replaced by the name of the old file, %nP will
	   be replaced by the name of the new file. "%%" will be replaced by a
	   single "%"; other "%" sequences may be added in future versions.
	   When a new file is being created, the name of the new file will be
	   supplied for both %oP and %nP.

	   Note that %oP and %nP are modeled after the "%" sequences of find
	   -printf.

       -exclude pattern
	   If specified, files that match the shell pattern pattern will be
	   excluded. Only wildcard characters "*" and "?", and character
	   classes "[...]" are handled. Multiple -exclude options may be
	   supplied.

       -exclude-regex pattern
	   If specified, files and directories that match the Perl regular
	   expression pattern pattern will be excluded.	 Multiple
	   -exclude-regex options may be supplied.

       -[no]exclude-standard
	   Set by default. If set, a common set of files and directories are
	   ignored.

	   See also section "Standard Exclude Patterns".

       -[no]exclude-cvs
	   If set, files and directories that are usually part of version
	   control system CVS are excluded.

	   Also, ".cvsignore" files are honoured just like CVS does it.

	   See also section "Standard Exclude Patterns".

       -[no]exclude-rcs
	   If set, files and directories that are usually part of version
	   control system RCS are excluded.

	   See also section "Standard Exclude Patterns".

       -[no]exclude-sccs
	   If set, files and directories that are usually part of version
	   control system SCCS are excluded.

	   See also section "Standard Exclude Patterns".

       -[no]exclude-vc
	   Short for (re)setting -exclude-rcs, -exclude-cvs, and
	   -exclude-sccs.

       -[no]ignore-cvs-keywords
	   Differences in CVS keyword data (e.g. "Id", "Header", "Revision")
	   are ignored, provided there are no other differences in the same
	   hunk.  This option passes a very hairy regex to the
	   --ignore-matching-lines option of the diff program, and hence
	   requires GNU diff. This restriction may be lifted in a future
	   version.

       -[no]ignore-rcs-keywords
	   Same as -[no]ignore-cvs-keywords.

       -extract pattern=command
	   Define additional extraction rules for archives. If the name of the
	   source or destination matches the Perl pattern, the command is
	   executed with the archive on standard input and the current
	   directory set to the location where the files must be extracted.
	   Multiple -extract options may be supplied. User defined rules
	   override built-in rules.

	   Builtin rules are:

	       .+\.(tar\.gz|tgz)    => "gzip -d | tar xpf -"
	       .+\.(tar\.bz2)	    => "bzip2 -d | tar xpf -"
	       .+\.tar		    => "tar xf -"
	       .+\.zip		    => "unzip -"

	   The patterns are implicitly anchored to the begin and end of the
	   filename.

       -[no]ident
	   If set, the program name and version is reported.

       -[no]verbose
	   This is set by default, making makepatch display information
	   concerning its activity to stderr.

       -[no]quiet
	   The opposite of -verbose. If set, this instructs makepatch to
	   suppress the display of activity information.

       -[no]help
	   If set, this causes a short help message to be displayed, after
	   which the program immediately exits.

Standard Exclude Patterns
       The following file patterns are always excluded:

	   *~ *.a *.bak *.BAK *.elc *.exe *.gz *.ln *.o *.obj
	   *.olb *.old *.orig *.rej *.so *.Z
	   .del-* .make.state .nse_depinfo core
	   tags TAGS

       Option -exclude-sccs adds:

	   p.* s.* SCCS

       Option -exclude-rcs adds:

	   ,* *,v RCS RCSLOG

       Option -exclude-cvs adds ".cvsignore" patterns, and:

	   .#* #* _$* *$ CVS CVS.adm cvslog.*

       Please let me know if I missed some.

Environment variables
       MAKEPATCHINIT
	   When this environment variable is set its contents is considered to
	   be command line options that are processed upon startup. All normal
	   options are allowed, plus one: -rcfile filename. If -rcfile is
	   specified, the file is read and all lines of it are considered to
	   contain option settings as described in section "Makepatch
	   options".

       TMPDIR
	   "TMPDIR" can be used to designate the area where temporary files
	   are placed. It defaults to "/usr/tmp".

       TEMP
	   "TEMP" can be used as an alternative to "TMPDIR".

Examples
       Suppose you have a directory tree `"pkg-1.6"' containing the sources
       for package `"pkg"' version 1.6, and a directory tree `"pkg-1.7"'
       containing the sources for version 1.7. The following command will
       generate a patch kit that updates the 1.6 sources into their 1.7
       versions:

	   makepatch pkg-1.6 pkg-1.7 > pkg-1.6-1.7.patch

       To apply this script, go to the pkg-1.6 directory and feed the script
       to applypatch:

	   cd old/pkg-1.6
	   applypatch pkg-1.6-1.7.patch

       applypatch will verify that it is executing in the right place and make
       all necessary updates.

       This is one way to generate and use manifest files:

	   (cd pkg-1.6; find . -type f -print > OLDMANIFEST)

	   (cd pkg-1.7; find . -type f -print > NEWMANIFEST)

	   makepatch \
	     -oldmanifest pkg-1.6/OLDMANIFEST \
	     -newmanifest pkg-1.7/NEWMANIFEST \
	     pkg-1.6 pkg-1.7 > pkg-1.6-1.7.diff

Bugs and restrictions
       Much of the job of makepatch is processing file names. makepatch has
       been tested extensively on Unix systems, but it is not guaranteed to
       work on other systems.

       applypatch is repeatedly reported to correctly process makepatch
       generated patch kits on modern 32-bit Windows systems as well.

       makepatch does not know about symbolic links.  These will be treated
       like plain files.

       Wrong results can be generated if the file lists that are used or
       generated use different path separators.

SEE ALSO
       applypatch(1), diff(1), patch(1), perl(1), rm(1).

AUTHOR AND CREDITS
       Johan Vromans (jvromans@squirrel.nl) wrote the program, with a little
       help and inspiration from: Jeffery Small, Ulrich Pfeifer, Nigel
       Metheringham, Julian Yip, Tim Bunce, Gurusamy Sarathy, Hugo van der
       Sanden, Rob Browning, Joshua Pritikin, and others.

COPYRIGHT AND DISCLAIMER
       This program is Copyright 1992,2004,2006 by Squirrel Consultancy. All
       rights reserved.

       This program is free software; you can redistribute it and/or modify it
       under the terms of either: a) the GNU General Public License as
       published by the Free Software Foundation; either version 1, or (at
       your option) any later version, or b) the "Artistic License" which
       comes with Perl.

       This program is distributed in the hope that it will be useful, but
       WITHOUT ANY WARRANTY; without even the implied warranty of
       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See either the GNU
       General Public License or the Artistic License for more details.

perl v5.20.2			  2012-10-26			  MAKEPATCH(1)
[top]

List of man pages available for DragonFly

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net