Whamcloud - gitweb
add quilt
authorwangdi <wangdi>
Fri, 25 Jul 2003 09:29:51 +0000 (09:29 +0000)
committerwangdi <wangdi>
Fri, 25 Jul 2003 09:29:51 +0000 (09:29 +0000)
45 files changed:
lustre/kernel_patches/quilt/AUTHORS [new file with mode: 0644]
lustre/kernel_patches/quilt/BUGS [new file with mode: 0644]
lustre/kernel_patches/quilt/COPYING [new file with mode: 0644]
lustre/kernel_patches/quilt/Makefile.in [new file with mode: 0644]
lustre/kernel_patches/quilt/README [new file with mode: 0644]
lustre/kernel_patches/quilt/TODO [new file with mode: 0644]
lustre/kernel_patches/quilt/bash_completion [new file with mode: 0644]
lustre/kernel_patches/quilt/bin/guards.1 [new file with mode: 0644]
lustre/kernel_patches/quilt/bin/guards.in [new file with mode: 0755]
lustre/kernel_patches/quilt/bin/quilt.in [new file with mode: 0755]
lustre/kernel_patches/quilt/config/install-sh [new file with mode: 0644]
lustre/kernel_patches/quilt/configure.ac [new file with mode: 0644]
lustre/kernel_patches/quilt/doc/README.in [new file with mode: 0644]
lustre/kernel_patches/quilt/doc/docco.txt [new file with mode: 0644]
lustre/kernel_patches/quilt/lib/backup-files.c [new file with mode: 0644]
lustre/kernel_patches/quilt/po/Makefile [new file with mode: 0644]
lustre/kernel_patches/quilt/po/de.po [new file with mode: 0644]
lustre/kernel_patches/quilt/po/fr.po [new file with mode: 0644]
lustre/kernel_patches/quilt/po/quilt.pot [new file with mode: 0644]
lustre/kernel_patches/quilt/quilt.changes [new file with mode: 0644]
lustre/kernel_patches/quilt/quilt.spec.in [new file with mode: 0644]
lustre/kernel_patches/quilt/quilt/add.in [new file with mode: 0755]
lustre/kernel_patches/quilt/quilt/applied.in [new file with mode: 0755]
lustre/kernel_patches/quilt/quilt/delete.in [new file with mode: 0755]
lustre/kernel_patches/quilt/quilt/diff.in [new file with mode: 0755]
lustre/kernel_patches/quilt/quilt/files.in [new file with mode: 0755]
lustre/kernel_patches/quilt/quilt/fork.in [new file with mode: 0755]
lustre/kernel_patches/quilt/quilt/import.in [new file with mode: 0755]
lustre/kernel_patches/quilt/quilt/new.in [new file with mode: 0755]
lustre/kernel_patches/quilt/quilt/next.in [new file with mode: 0755]
lustre/kernel_patches/quilt/quilt/patches.in [new file with mode: 0755]
lustre/kernel_patches/quilt/quilt/pop.in [new file with mode: 0755]
lustre/kernel_patches/quilt/quilt/previous.in [new file with mode: 0755]
lustre/kernel_patches/quilt/quilt/push.in [new file with mode: 0755]
lustre/kernel_patches/quilt/quilt/refresh.in [new file with mode: 0755]
lustre/kernel_patches/quilt/quilt/remove.in [new file with mode: 0755]
lustre/kernel_patches/quilt/quilt/series.in [new file with mode: 0755]
lustre/kernel_patches/quilt/quilt/setup.in [new file with mode: 0755]
lustre/kernel_patches/quilt/quilt/top.in [new file with mode: 0755]
lustre/kernel_patches/quilt/quilt/unapplied.in [new file with mode: 0755]
lustre/kernel_patches/quilt/scripts/apatch.in [new file with mode: 0755]
lustre/kernel_patches/quilt/scripts/parse-patch.in [new file with mode: 0755]
lustre/kernel_patches/quilt/scripts/patchfns.in [new file with mode: 0644]
lustre/kernel_patches/quilt/scripts/rpatch.in [new file with mode: 0755]
lustre/kernel_patches/quilt/scripts/spec2series.in [new file with mode: 0755]

diff --git a/lustre/kernel_patches/quilt/AUTHORS b/lustre/kernel_patches/quilt/AUTHORS
new file mode 100644 (file)
index 0000000..745db37
--- /dev/null
@@ -0,0 +1,32 @@
+At the begining was the void. Then Andrew Morton <akpm@digeo.com> begun
+a collection of small scripts for patch management. The contributions
+came from Stephen Cameron <steve.cameron@hp.com>, Matt Reppert
+<arashi@arashi.yi.org> and Jeremy Fitzhardinge <jeremy@digeo.com>.
+
+Then, Andreas Gruenbacher <agruen@suse.de> came to cleanup, reorganize,
+document and speed up the code. He did also package it to rpm.
+
+Finally, Martin Quinson <Martin.Quinson@tuxfamily.org> did a debian
+package and came with several little patches.
+
+
+Andrew Morton <akpm@digeo.com>
+       Collection of scripts for patch management (patch-scripts).
+       
+Stephen Cameron <steve.cameron@hp.com>
+       Contributed pstatus.
+
+Matt Reppert <arashi@arashi.yi.org>
+Jeremy Fitzhardinge <jeremy@digeo.com>
+       Contributions to Andrew's scripts.
+
+Andreas Gruenbacher <agruen@suse.de>
+       Clean up, reorganize, speedups, documentation.
+       Package up as RPM.
+
+Gerd Knorr <kraxel@suse.de>
+       Contributed spec2series.
+
+Martin Quinson <Martin.Quinson@tuxfamily.org>
+       Several little patches.
+       Package up for Debian.
diff --git a/lustre/kernel_patches/quilt/BUGS b/lustre/kernel_patches/quilt/BUGS
new file mode 100644 (file)
index 0000000..0e30f43
--- /dev/null
@@ -0,0 +1,16 @@
+* Patch is less sensitive to the file names in the diff headers than
+  the scripts are. It tries both filenames specified and apparently
+  checks if the file exists. We only look at the `+++ file ...' header,
+  and ignore the other. Other than patch we cannot simply look at the
+  file system to determine which one is the imput file.
+
+* Patch destroys the backup files it generates if a file appears more
+  than once in a patch. This is the reason why we use the backup-files
+  utility instead.
+
+* quilt setup doesn't detect if the source file doesn't exist.
+
+* Blank and commented out lines in series file cause problems.
+
+* rpatch should only look at .pc/applied-patches, not at the series
+  file.
diff --git a/lustre/kernel_patches/quilt/COPYING b/lustre/kernel_patches/quilt/COPYING
new file mode 100644 (file)
index 0000000..d60c31a
--- /dev/null
@@ -0,0 +1,340 @@
+                   GNU GENERAL PUBLIC LICENSE
+                      Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+\f
+                   GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+\f
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+\f
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+\f
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                           NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
+\f
+           How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    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 the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/lustre/kernel_patches/quilt/Makefile.in b/lustre/kernel_patches/quilt/Makefile.in
new file mode 100644 (file)
index 0000000..6904a7c
--- /dev/null
@@ -0,0 +1,228 @@
+PACKAGE :=     @PACKAGE_NAME@
+VERSION :=     @PACKAGE_VERSION@
+RELEASE :=     @PACKAGE_RELEASE@
+PACKAGE_BUGREPORT := @PACKAGE_BUGREPORT@
+
+prefix :=      @prefix@
+exec_prefix := @exec_prefix@
+bindir :=      @bindir@
+libdir :=      @libdir@
+datadir :=     @datadir@
+mandir :=      $(datadir)/man
+docdir :=      $(datadir)/doc
+localedir :=   $(datadir)/locale
+etcdir :=      $(subst /usr/etc,/etc,$(prefix)/etc)
+
+QUILT_DIR =    $(datadir)/$(PACKAGE)
+SCRIPTS_DIR =  $(QUILT_DIR)/scripts
+LIB_DIR =      $(libdir)/$(PACKAGE)
+
+INSTALL :=     @INSTALL@
+PERL :=                @PERL@
+BASH :=                @BASH@
+SED :=         @SED@
+AWK :=         @AWK@
+DIFF :=                @DIFF@
+PATCH :=       @PATCH@
+MKTEMP :=      @MKTEMP@
+MSGFMT :=      @MSGFMT@
+DIFFSTAT :=    @DIFFSTAT@
+
+ifeq "$(MSGFMT)" ""
+MAKE_NLS :=    @true
+else
+MAKE_NLS :=    $(MAKE)
+endif
+
+CFLAGS :=      @CFLAGS@ -Wall
+
+ISODATE :=     $(shell date +%Y-%m-%d)
+
+#-----------------------------------------------------------------------
+DIRT +=                $(shell find -name '*~')
+DIRT +=                $(shell find -name '.\#*')
+
+SRC +=         COPYING AUTHORS TODO BUGS Makefile.in \
+               configure.ac config/install-sh \
+               quilt.spec.in \
+               bash_completion
+DIRT +=                quilt.spec
+
+BIN_IN :=      quilt guards
+BIN_SRC :=     $(BIN_IN:%=%.in)
+BIN :=         $(BIN_IN)
+SRC +=         $(BIN_SRC:%=bin/%)
+DIRT +=                $(BIN_IN:%=bin/%)
+
+QUILT_IN :=    add applied delete diff files import new next patches \
+               pop previous push refresh remove series setup top unapplied fork
+
+QUILT_SRC :=   $(QUILT_IN:%=%.in)
+QUILT :=       $(QUILT_IN)
+SRC +=         $(QUILT_SRC:%=quilt/%)
+DIRT +=                $(QUILT_IN:%=quilt/%)
+
+SCRIPTS_IN :=  apatch rpatch patchfns parse-patch spec2series
+SCRIPTS_SRC := $(SCRIPTS_IN:%=%.in)
+SCRIPTS :=     $(SCRIPTS_IN)
+SRC +=         $(SCRIPTS_SRC:%=scripts/%)
+DIRT +=                $(SCRIPTS_IN:%=scripts/%)
+
+LIB_SRC :=     backup-files.c
+LIB :=         backup-files
+SRC +=         $(LIB_SRC:%=lib/%)
+DIRT +=                lib/backup-files lib/backup-files.o
+
+DOC_IN :=      README
+DOC_SRC :=     $(DOC_IN:%=doc/%.in)
+DOC :=         $(DOC_IN)
+SRC +=         $(DOC_SRC) doc/docco.txt
+DIRT +=                $(DOC_IN:%=doc/%)
+
+MAN1 :=                bin/guards.1
+
+DEBIAN :=      changelog control copyright docs prerm rules 
+
+LINGUAS :=     fr de
+PO :=          Makefile quilt.pot $(LINGUAS:%=%.po)
+SRC +=         $(PO:%=po/%)
+DIRT +=         po/*.mo
+
+
+#-----------------------------------------------------------------------
+
+all : scripts
+       $(MAKE_NLS) -C po all BUILD_ROOT=$(BUILD_ROOT)
+
+scripts : $(BIN:%=bin/%) $(QUILT:%=quilt/%) $(SCRIPTS:%=scripts/%) \
+         $(LIB:%=lib/%) $(DOC:%=doc/%) $(MAN1)
+
+dist : clean $(PACKAGE)-$(VERSION).tar.gz
+
+snapshot : $(PACKAGE)-$(ISODATE).tar.bz2
+
+rpm : $(PACKAGE)-$(VERSION).tar.gz
+       rpmbuild -tb $<
+
+doc/README : doc/README.in
+       @echo README.in -> README
+       @while read line; do \
+               case "$$line" in \
+               '@REFERENCE''@') \
+                       $(MAKE) -s reference \
+                       ;; \
+               *) \
+                       echo $$line \
+                       ;; \
+               esac ; \
+       done 2>&1 < $< > $@
+
+.PHONY :: reference
+reference : $(QUILT:%=quilt/%)
+       @for i in $+; \
+       do \
+               echo "$$i >> README" >&2; \
+               echo; \
+               (bash -c ". scripts/patchfns ; . $$i -h"); \
+       done | \
+       sed -e '/^Usage: \?/ {s/^Usage: \?// ;}' \
+           -e 's/^/  /'
+
+bin/guards.1 : bin/guards
+       mkdir -p $$(dirname $@)
+       pod2man $< > $@
+
+$(PACKAGE)-$(VERSION).tar.gz : $(SRC) configure $(PACKAGE).spec
+       rm -f $(PACKAGE)-$(VERSION) $@
+       ln -s . $(PACKAGE)-$(VERSION)
+       tar chf - $(+:%=$(PACKAGE)-$(VERSION)/%) | gzip -9 > $@
+       rm -f $(PACKAGE)-$(VERSION)
+       @echo "File $@ created."
+
+$(PACKAGE)-$(ISODATE).tar.bz2 : $(SRC) configure $(PACKAGE).spec
+       rm -f $(PACKAGE)-$(ISODATE) $@
+       ln -s . $(PACKAGE)-$(ISODATE)
+       tar chf - $(+:%=$(PACKAGE)-$(ISODATE)/%) | bzip2 -9 > $@
+       rm -f $(PACKAGE)-$(ISODATE)
+       @echo "File $@ created."
+
+configure : configure.ac
+       autoconf
+
+$(PACKAGE).spec : $(PACKAGE).spec.in  Makefile \
+                 scripts/parse-patch
+       @echo "Generating spec file"
+       @sed -e 's/^\(Version:[ \t]*\).*/\1$(VERSION)/' \
+           -e 's/^\(Release:[ \t]\).*/\1$(RELEASE)/' \
+           < $< > $@
+       @perl -ne ' \
+               m/^(|-+)$$/ and next; \
+               ( \
+                 s/^(...) \s (...) \s (.\d) \s (\d\d:\d\d:\d\d) \s \
+                    ([A-Z]+|[-+]\d{4}) \s (\d\d\d\d) \s - \s (.+) \
+                  /* $$1 $$2 $$3 $$6 - $$7/x || \
+                 m/^(- |  )(?!\s)/ \
+                 and print \
+               ) or die "Syntax error in line $$. of changelog:\n$$_\n"; \
+       ' $(PACKAGE).changes \
+       | scripts/parse-patch -u changelog $@
+
+% : %.in
+       @echo "$< -> $@"
+       @sed -e 's:@LIB''@:$(LIB_DIR):g' \
+            -e 's:@QUILT''@:$(QUILT_DIR):g' \
+            -e 's:@SCRIPTS''@:$(SCRIPTS_DIR):g' \
+            -e 's:@PERL''@:$(PERL):g' \
+            -e 's:@BASH''@:$(BASH):g' \
+            -e 's:@SED''@:$(SED):g' \
+            -e 's:@AWK''@:$(AWK):g' \
+            -e 's:@DIFF''@:$(DIFF):g' \
+            -e 's:@PATCH''@:$(PATCH):g' \
+            -e 's:@MKTEMP''@:$(MKTEMP):g' \
+            -e 's:@PACKAGE_BUGREPORT''@:$(PACKAGE_BUGREPORT):g' \
+            -e 's:@VERSION''@:$(VERSION):g' \
+            -e 's:@RELEASE''@:$(RELEASE):g' \
+                -e 's:@DIFFSTAT''@:$(DIFFSTAT):g' \
+            $< > $@
+       @chmod --reference=$< $@
+
+Makefile : Makefile.in
+       @echo "Please run ./configure by hand"
+       @false
+
+install : scripts
+       @INSTALL@ -d $(BUILD_ROOT)$(bindir)
+       @INSTALL@ -m 755 $(BIN:%=bin/%) $(BUILD_ROOT)$(bindir)/
+
+       @INSTALL@ -d $(BUILD_ROOT)$(QUILT_DIR)
+       @INSTALL@ -m 755 $(QUILT:%=quilt/%) $(BUILD_ROOT)$(QUILT_DIR)/
+       
+       @INSTALL@ -d $(BUILD_ROOT)$(SCRIPTS_DIR)
+       @INSTALL@ -m 755 $(filter-out scripts/patchfns, \
+                                     $(SCRIPTS:%=scripts/%)) \
+                 $(BUILD_ROOT)$(SCRIPTS_DIR)
+       @INSTALL@ -m 644 scripts/patchfns $(BUILD_ROOT)$(SCRIPTS_DIR)
+
+       @INSTALL@ -d $(BUILD_ROOT)$(LIB_DIR)
+       @INSTALL@ -m 755 -s $(LIB:%=lib/%) $(BUILD_ROOT)$(LIB_DIR)/
+
+       @INSTALL@ -d $(BUILD_ROOT)$(docdir)/$(PACKAGE)
+       @INSTALL@ -m 644 doc/README $(BUILD_ROOT)$(docdir)/$(PACKAGE)/
+
+       @INSTALL@ -d $(BUILD_ROOT)$(mandir)/man1
+       @INSTALL@ -m 644 $(MAN1) $(BUILD_ROOT)$(mandir)/man1/
+       
+       $(MAKE_NLS) -C po install BUILD_ROOT=$(BUILD_ROOT) \
+               LINGUAS="$(LINGUAS)" localedir=$(localedir)
+
+       @INSTALL@ -d $(BUILD_ROOT)$(etcdir)
+       @INSTALL@ -d $(BUILD_ROOT)$(etcdir)/bash_completion.d
+       @INSTALL@ -m 644 bash_completion $(BUILD_ROOT)$(etcdir)/bash_completion.d/quilt
+
+clean :
+       rm -f $(DIRT)
+       rm -f po/*.mo
+       
+distclean : clean
+       rm -f config.log config.status Makefile
+       rm -rf autom4te.cache/
diff --git a/lustre/kernel_patches/quilt/README b/lustre/kernel_patches/quilt/README
new file mode 100644 (file)
index 0000000..2a4d1b3
--- /dev/null
@@ -0,0 +1 @@
+README.in -
diff --git a/lustre/kernel_patches/quilt/TODO b/lustre/kernel_patches/quilt/TODO
new file mode 100644 (file)
index 0000000..20c4be0
--- /dev/null
@@ -0,0 +1,128 @@
+This is my current list of open issues with the patch scripts. I would
+like to do the most intrusive changes before syncing up with the
+Savannah CVS. Of course, contributions are very welcome. It wouldn't
+hurt to know if you want to work on some of the issues in advance to
+avoid duplicate work, though :)
+
+       -- Andreas Gruenbacher <agruen@suse.de>
+
+
+General:
+
+       - Test if patches/ can be moved with environment variable as
+         planned.
+
+       - Abstract backup operations to/from the .pc/ directory, so that
+         optionally something like rcs can be used instead of
+         lib/backup-files?
+
+       - Add regression test suite; the scripts were broken often enough
+         already...
+
+       - Add a ~/.quiltrc that contains default options for individual
+         commands, similar to ~/.cvsrc. Also requires some more
+         negative options so that the effects of ~/.quiltrc can be
+         reversed.
+
+       - Add something similar to cvs diff, which scans all files for
+         changes that have not been folded back into their patches,
+         similar to:
+         `for p in $(quilt series); do quilt diff -z $p; done'?
+       
+       - Allow to add a directory? Then we could detect also new files
+         in the directory, without having to add them individually.
+
+       - Add option for creating hard links.
+
+       - Instead of passing around and storing in applied-patches the
+         short patch name (=patch file name with .dif .diff .patch .gz
+         .bz2 stripped), translate from short names to real file names
+         an the user interface, and work with full names internally.
+         This will simplify regexp matching in several functions.
+
+       - Support different diff/patch options for different patches.
+         (By specifying them in the series file?)
+
+Documentation:
+
+       - How to rediff with pushpatch -f / poppatch -f?
+
+       - How to import a new version of a patch?
+
+       - How to import a complete directory, before doing
+         wild changes? (This will also cause new files to end up in the
+         patch.)
+
+quilt refresh:
+
+       - Add an -m option similar to `cvs commit -m "..."' to simplify
+         keeping a change log in the patch documentation?
+       
+parse-patch:
+
+       - Handle SIGINT in parse-patch -u (in the part that moves the
+         temp file to the patch)?
+
+backup-files:
+
+       - Extend so that it can also copy files instead of hard linking,
+         and when hard links are not possible. Also add option to
+         disallow hard links on the original file (for patchadd).
+
+       - SIGINT handling?
+
+quilt import:
+
+       - Add option to replace the currently applied patch with a new
+         one, by backing out the topmost patch first.
+
+       - Diff -u the documentation of the old and new file, unless one
+         of them is empty. Let the user decide whether to keep the left
+         or the right documentation, or to merge them both. (-d{ona}?)
+
+quilt add:
+
+       - Add option for creating (or rather, leaving) hard links.
+
+
+quilt setup:
+       
+       - spec2series also prints -p1; omit.
+
+quilt patches:
+
+       - Add something so that it's possible to show a list of all
+         patches, with those patches marked that modify the
+         specified file.
+
+rpatch:
+
+       - If not removing the topmost patch, add checks if any files are
+         hidden by later patches. If so, refuse to remove patch! (Note
+         that poppatch takes care of that currently.)
+
+apatch:
+       
+       - Allow to add a patch in the middle of the applied series, and
+         inject the patch in its proper position in applied-patches.
+         Needs to check if any of the files in the patch are touched by
+         later patches.
+         
+touched_by_patch:
+
+       - Implement more of patch's filename heuristic: The following
+         file is not recognized, for example...
+
+       *** linux/drivers/parport/parport_cs.c.orig     Sun Jun 23 09:20:21 2002
+       --- linux/drivers/parport/parport_cs.c  Sun Jun 23 09:21:02 2002
+       ***************
+       *** 48,53 ****
+       --- 48,54 ----
+
+         #include <linux/parport.h>
+         #include <linux/parport_pc.h>
+       + #include <linux/major.h>
+
+         #include <pcmcia/version.h>
+         #include <pcmcia/cs_types.h>
+
diff --git a/lustre/kernel_patches/quilt/bash_completion b/lustre/kernel_patches/quilt/bash_completion
new file mode 100644 (file)
index 0000000..b26d8d4
--- /dev/null
@@ -0,0 +1,157 @@
+#-*- mode: shell-script;-*-
+
+# Programmed completion for bash to use quilt
+# Copyright 2003 Martin Quinson <martin.quinson@tuxfamily.org>
+
+# This file is part of the distribution of quilt, and is distributed under
+# the same licence than quilt itself
+
+have quilt &&
+_quilt()
+{
+    if [ "$(type -t patch_file_name)" != function ]
+    then
+        if ! [ -r /usr/share/quilt/scripts/patchfns ]
+       then
+         # Cannot read library /usr/share/quilt/scripts/patchfns
+         return 0
+       fi
+       . /usr/share/quilt/scripts/patchfns
+    fi
+                               
+    local i cur prev cmds patches pcount patch_nums
+
+    COMPREPLY=()
+    cur=${COMP_WORDS[COMP_CWORD]}
+    prev=${COMP_WORDS[COMP_CWORD-1]}
+
+    # commands (added to patches)
+    cmds='add applied delete diff files import new next patches pop \
+          previous push refresh remove series setup top unapplied'
+
+    patches=`cat_series`
+    pcount=`cat_series | wc -l`
+    patch_nums=`i=0; while [[ ++i -le $pcount ]] ; do echo $i; done `
+
+    if [[ $COMP_CWORD -eq 1 ]] ; then
+        # if no command were given, complete on commands
+       COMPREPLY=( $( compgen -W "$cmds -h" -- $cur ) )
+       return 0
+    else
+       # if we're completing for 'quilt -h', then just 
+        # complete on any valid command
+       if [ ${COMP_WORDS[1]} == -h ] ; then
+           COMPREPLY=( $( compgen -W "$cmds" -- $cur ) )
+            return 0
+       fi
+    fi
+    
+    # Complete depending on options
+    case ${COMP_WORDS[1]} in
+       add)
+          case $prev in
+            -p)
+               COMPREPLY=( $( compgen -W "$patches" -- $cur ) )
+               ;;
+            *)
+               _filedir 
+               COMPREPLY=( ${COMPREPLY[@]:-} $( compgen -W "-p -h" -- $cur ) )
+               ;;
+          esac
+          ;;
+       applied) 
+          COMPREPLY=( $( compgen -W "-n -h $patches" -- $cur ) )
+          ;;
+       delete) 
+          COMPREPLY=( $( compgen -W "$patches" -- $cur ) )
+          ;;
+       diff) 
+          case $prev in
+            -p)
+               COMPREPLY=( $( compgen -W "0 1" -- $cur ) )
+               ;;
+            -P|-c)
+               COMPREPLY=( $( compgen -W "$patches" -- $cur ) )
+               ;;
+            *)
+               _filedir 
+               COMPREPLY=( ${COMPREPLY[@]:-} $( compgen -W "-p -P -c -R -z -h" -- $cur ) )
+               ;;
+          esac
+          ;;
+       files)
+          COMPREPLY=( $( compgen -W "-v $patches" -- $cur ) )
+          ;;
+       import)
+          case $prev in
+            -p)
+               COMPREPLY=( $( compgen -W "0 1 2 3 4 5 6 7 8 9 10" -- $cur ) )
+               ;;
+            -n)
+               ;;
+            *)
+               _filedir 
+               COMPREPLY=( ${COMPREPLY[@]:-} $( compgen -W "-p -n -f -h" -- $cur ) )
+               ;;
+          esac
+          ;;
+       new)
+          ;;
+       next|previous)
+          COMPREPLY=( $( compgen -W "-n $patches" -- $cur ) )
+          ;;
+       patches)
+          _filedir 
+          COMPREPLY=( ${COMPREPLY[@]:-} $( compgen -W "-v -n -h" -- $cur ) )
+          ;;
+       pop)
+          COMPREPLY=( $( compgen -W "-a -f -R -q -v -h $patches $patch_nums" -- $cur ) )
+          ;;
+       push)
+          COMPREPLY=( $( compgen -W "-a -f -R -q -v -h --leave-rejects --interactive $patches $patch_nums" -- $cur ) )
+          ;;
+       refresh)
+          case $prev in
+            -p)
+               COMPREPLY=( $( compgen -W "0 1" -- $cur ) )
+               ;;
+            *)
+               COMPREPLY=( $( compgen -W "-p -f -h $patches" -- $cur ) )
+               ;;
+          esac
+          ;;
+       remove)
+          case $prev in
+            -p)
+               COMPREPLY=( $( compgen -W "$patches" -- $cur ) )
+               ;;
+            *)
+               _filedir 
+               COMPREPLY=( ${COMPREPLY[@]:-} $( compgen -W "-p -h" -- $cur ) )
+               ;;
+          esac
+          ;;
+        series)
+          COMPREPLY=( $( compgen -W "-n -v -h" -- $cur ) )
+          ;;
+        setup)
+          case $prev in
+            -d)
+               _filedir -d
+               ;;
+            *)
+               _filedir 
+               COMPREPLY=( ${COMPREPLY[@]:-} $( compgen -W "-d -h" -- $cur ) )
+               ;;
+          esac
+          ;;
+        top)
+          ;;
+        unapplied)
+          COMPREPLY=( $( compgen -W "-n -h $patches" -- $cur ) )
+          ;;
+    esac
+    return 0
+}
+[ "$have" ] && complete -F _quilt $filenames quilt
+
diff --git a/lustre/kernel_patches/quilt/bin/guards.1 b/lustre/kernel_patches/quilt/bin/guards.1
new file mode 100644 (file)
index 0000000..c0fa589
--- /dev/null
@@ -0,0 +1,174 @@
+.\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings.  \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote.  | will give a
+.\" real vertical bar.  \*(C+ will give a nicer C++.  Capital omega is used to
+.\" do unbreakable dashes and therefore won't be available.  \*(C` and \*(C'
+.\" expand to `' in nroff, nothing in troff, for use with C<>.
+.tr \(*W-|\(bv\*(Tr
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+.    ds -- \(*W-
+.    ds PI pi
+.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+.    ds L" ""
+.    ds R" ""
+.    ds C` ""
+.    ds C' ""
+'br\}
+.el\{\
+.    ds -- \|\(em\|
+.    ds PI \(*p
+.    ds L" ``
+.    ds R" ''
+'br\}
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD.  Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.if \nF \{\
+.    de IX
+.    tm Index:\\$1\t\\n%\t"\\$2"
+..
+.    nr % 0
+.    rr F
+.\}
+.\"
+.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
+.if n .na
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+.    \" fudge factors for nroff and troff
+.if n \{\
+.    ds #H 0
+.    ds #V .8m
+.    ds #F .3m
+.    ds #[ \f1
+.    ds #] \fP
+.\}
+.if t \{\
+.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.    ds #V .6m
+.    ds #F 0
+.    ds #[ \&
+.    ds #] \&
+.\}
+.    \" simple accents for nroff and troff
+.if n \{\
+.    ds ' \&
+.    ds ` \&
+.    ds ^ \&
+.    ds , \&
+.    ds ~ ~
+.    ds /
+.\}
+.if t \{\
+.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+.    \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.    \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.    \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.    ds : e
+.    ds 8 ss
+.    ds o a
+.    ds d- d\h'-1'\(ga
+.    ds D- D\h'-1'\(hy
+.    ds th \o'bp'
+.    ds Th \o'LP'
+.    ds ae ae
+.    ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "GUARDS 1"
+.TH GUARDS 1 "2003-07-25" "perl v5.8.0" "User Contributed Perl Documentation"
+.SH "NAME"
+guards \- select from a list of files guarded by conditions
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+\&\fIguards\fR [\-\-prefix=\fIdir\fR] [\-\-path=\fIdir2:dir2:...\fR]
+         [\-\-default=\fI0\fR|\fI1\fR] [\-\-check] [\-\-config=\fIfile\fR]
+         \fIsymbol\fR ...
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+The script reads a configuration file that may contain so-called guards, file
+names, and comments, and writes those file names that satisfy all guards to
+standard output. The script takes a list of symbols as its arguments. Each line
+in the ocnfiguration file is processed separately. Lines may start with a
+number of guards. The following guards are defined:
+.Sp
+.RS 4
++\fIxxx\fR Include the file(s) on this line if the symbol \fIxxx\fR is defined.
+.Sp
+\&\-\fIxxx\fR Exclude the file(s) on this line if the symbol \fIxxx\fR is defined.
+.Sp
++!\fIxxx\fR Include the file(s) on this line if the symbol \fIxxx\fR is not defined.
+.Sp
+\&\-!\fIxxx\fR Exclude the file(s) on this line if the symbol \fIxxx\fR is not defined.
+.Sp
+\&\- Exclude this file. Used to avoid spurious \fI\-\-check\fR messages.
+.RE
+.PP
+The guards are processed left to right. The last guard that matches determines
+if the file is included. If no guard is specified, the \fI\-\-default\fR
+setting determines if the file is included.
+.PP
+If no configuration file is specified, the script reads from standard input.
+.PP
+The \fI\-\-check\fR option is used to compare the specification file against the
+file system. If files are referenced in the specification that do not exist, or
+if files are not enlisted in the specification file warnings are printed. The
+\&\fI\-\-path\fR option can be used to specify which directory or directories to scan.
+Multiple directories are eparated by a colon (\f(CW\*(C`:\*(C'\fR) character. The
+\&\fI\-\-prefix\fR option specifies the location of the files.
+.SH "AUTHOR"
+.IX Header "AUTHOR"
+Andreas Gruenbacher <agruen@suse.de> (SuSE Linux \s-1AG\s0)
diff --git a/lustre/kernel_patches/quilt/bin/guards.in b/lustre/kernel_patches/quilt/bin/guards.in
new file mode 100755 (executable)
index 0000000..181268d
--- /dev/null
@@ -0,0 +1,246 @@
+#!@PERL@ -w
+
+#  This script is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License version 2 as
+#  published by the Free Software Foundation.
+#
+#  See the COPYING and AUTHORS files for more details.
+
+use FileHandle;
+use Getopt::Long;
+use strict;
+
+# Prototypes
+sub files_in($$);
+sub parse($$);
+sub help();
+
+sub slashme($) {
+    my ($dir) = @_;
+    $dir =~ s#([^/])$#$&/#; # append a slash if necessary
+    if ($dir eq './') {
+       return '';
+    } else {
+       return $dir;
+    }
+}
+
+# Generate a list of files in a directory
+#
+sub files_in($$) {
+    my ($dir, $path) = @_;
+    my $dh = new FileHandle;
+    my (@files, $file);
+
+
+    opendir $dh, length("$dir$path") ? "$dir$path" : '.'
+       or die "$dir$path: $!\n";
+    while ($file = readdir($dh)) {
+       next if $file =~ /^(\.|\.\.|\.#.*|CVS)$/;
+       if (-d "$dir$path$file") {
+               @files = (@files, files_in($dir, "$path$file/"));
+       } else {
+               #print "[$path$file]\n";
+               push @files, "$path$file";
+       }
+    }
+    closedir $dh;
+    return @files;
+}
+
+# Parse a configuration file
+# Callback called with ($patch, @guards) arguments
+#
+sub parse($$) {
+    my ($fh, $callback) = @_;
+
+    my $mode = 0;
+
+    while (<$fh>) {
+        my @guards = ();
+       s/(^|\s+)#.*//;
+       foreach my $token (split) {
+           if ($token =~ /^[-+]/) {
+               if ($mode == 1) {
+                   @guards = ();
+                   $mode = 0;
+               }
+               push @guards, $token;
+           } else {
+               $mode = 1;
+               #print "[" . join(",", @guards) . "] $patch\n";
+               &$callback($token, @guards);
+           }
+       }
+    }
+}
+
+# Command line options
+#
+my ($dir, $config, $default, $check) = ('', '-', 1, 0);
+my @path;
+
+# Help text
+#
+sub help() {
+    print "$0 - select from a list of files guarded by conditions\n";
+    print "SYNOPSIS: $0 [--prefix=dir] [--path=dir1:dir2:...]\n" .
+       "       [--default=0|1] [--check] [--config=file] symbol ...\n\n" .
+       "       (Default values: --path='" . join(':', @path) . "', " .
+               "--default=$default)\n";
+    exit 0;
+}
+
+# Parse command line options
+#
+Getopt::Long::Configure ("bundling");
+eval {
+    unless (GetOptions (
+       'd|prefix=s' => \$dir,
+       'c|config=s' => \$config,
+       'C|check' => \$check,
+       'p|path=s' => \@path,
+       'D|default=i' => \$default,
+       'h|help' => sub { help(); exit 0; })) {
+       help();
+       exit 1;
+    }
+};
+if ($@) {
+    print "$@";
+    help();
+    exit 1;
+}
+
+@path = ('.')
+    unless (@path);
+@path = split(/:/, join(':', @path));
+
+my $fh = ($config eq '-') ? \*STDIN : new FileHandle($config)
+    or die "$config: $!\n";
+
+$dir = slashme($dir);
+
+if ($check) {
+    # Check for duplicate files, or for files that are not referenced by
+    # the specification.
+
+    my $problems = 0;
+    my @files;
+
+    foreach (@path) {
+       @files = (@files, files_in($dir, slashme($_)));
+    }
+    my %files = map { $_ => 0 } @files;
+
+    parse($fh, sub {
+       my ($patch, @guards) = @_;
+       if (exists $files{$patch}) {
+           $files{$patch}++;
+       } else {
+           print "Not found: $dir$patch\n";
+           $problems++;
+       }});
+
+    $fh->close();
+
+    my ($file, $ref);
+    while (($file, $ref) = each %files) {
+       next if $ref == 1;
+
+       print "Unused: $file\n" if $ref == 0;
+       print "Multiple uses: $file\n" if $ref > 1;
+        $problems++;
+    }
+    exit $problems ? 1 : 0;
+
+} else {
+    # Generate a list of patches to apply.
+
+    my %symbols = map { $_ => 1 } @ARGV;
+
+    parse($fh, sub {
+       my ($patch, @guards) = @_;
+
+       my $selected;
+       if (@guards) {
+           # If the first guard is -xxx, the patch is included by default;
+           # if it is -xxx, the patch is excluded by default.
+           $selected = ($guards[0] =~ /^-/);
+
+           foreach (@guards) {
+               /^([-+])(!?)(.*)?/
+                   or die "Bad guard '$_'\n";
+
+               # Check if the guard matches
+               if (($2 eq '!' && !exists $symbols{$3}) ||
+                   ($2 eq ''  && ( $3 eq '' || exists $symbols{$3}))) {
+                   # Include or exclude
+                   $selected = ($1 eq '+');
+               }
+           }
+       } else {
+           # If there are no guards, use the specified default result.
+           $selected = $default;
+       }
+
+       print "$dir$patch\n"
+           if $selected;
+       });
+
+    $fh->close();
+
+    exit 0;
+}
+
+__END__
+
+=head1 NAME
+
+guards - select from a list of files guarded by conditions
+
+=head1 SYNOPSIS
+
+F<guards> [--prefix=F<dir>] [--path=F<dir2:dir2:...>]
+         [--default=I<0>|I<1>] [--check] [--config=F<file>]
+         I<symbol> ...
+
+=head1 DESCRIPTION
+
+The script reads a configuration file that may contain so-called guards, file
+names, and comments, and writes those file names that satisfy all guards to
+standard output. The script takes a list of symbols as its arguments. Each line
+in the ocnfiguration file is processed separately. Lines may start with a
+number of guards. The following guards are defined:
+
+=over
+
++I<xxx> Include the file(s) on this line if the symbol I<xxx> is defined.
+
+-I<xxx> Exclude the file(s) on this line if the symbol I<xxx> is defined.
+
++!I<xxx> Include the file(s) on this line if the symbol I<xxx> is not defined.
+
+-!I<xxx> Exclude the file(s) on this line if the symbol I<xxx> is not defined.
+
+- Exclude this file. Used to avoid spurious I<--check> messages.
+
+=back
+
+The guards are processed left to right. The last guard that matches determines
+if the file is included. If no guard is specified, the I<--default>
+setting determines if the file is included.
+
+If no configuration file is specified, the script reads from standard input.
+
+The I<--check> option is used to compare the specification file against the
+file system. If files are referenced in the specification that do not exist, or
+if files are not enlisted in the specification file warnings are printed. The
+I<--path> option can be used to specify which directory or directories to scan.
+Multiple directories are eparated by a colon (C<:>) character. The
+I<--prefix> option specifies the location of the files.
+
+=head1 AUTHOR
+
+Andreas Gruenbacher <agruen@suse.de> (SuSE Linux AG)
+
diff --git a/lustre/kernel_patches/quilt/bin/quilt.in b/lustre/kernel_patches/quilt/bin/quilt.in
new file mode 100755 (executable)
index 0000000..872bfe9
--- /dev/null
@@ -0,0 +1,92 @@
+#! @BASH@
+
+#  This script is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License version 2 as
+#  published by the Free Software Foundation.
+#
+#  See the COPYING and AUTHORS files for more details.
+
+export TEXTDOMAIN=quilt
+
+usage()
+{
+
+       echo $"Usage: quilt command [-h] ..."
+       #echo $"Commands are:" $(
+       #       local command
+       #       for command in @QUILT@/*
+       #       do
+       #               if [ -f "$command" -a -x "$command" ]
+       #               then
+       #                       echo "${command#@QUILT@/}"
+       #               fi
+       #       done \
+       #       | sort
+       #)
+       echo $"Commands are:"
+       quilt_commands \
+       | sort \
+       | column | column -t \
+       | sed -e 's/^/\t/'
+       exit 1
+}
+
+quilt_commands()
+{
+       local command
+       for command in @QUILT@/*
+       do
+               if [ -f "$command" -a -x "$command" ]
+               then
+                       echo ${command##@QUILT@/}
+               fi
+       done
+}
+
+for arg in "$@"
+do
+       case $arg in
+       [^-]*)
+               if [ -z "$command" ]
+               then
+                       command="$arg"
+               else
+                       args[${#args[@]}]="$arg"
+               fi ;;
+       *)
+               args[${#args[@]}]="$arg" ;;
+       esac
+done
+
+if ! [ -f "@QUILT@/$command" -a -x "@QUILT@/$command" ]
+then
+       if [ -n "$command" ]
+       then
+               for arg in $(quilt_commands)
+               do
+                       case "$arg" in
+                       $command*)
+                               commands[${#commands[@]}]="$arg"
+                               ;;
+                       esac
+               done
+       fi
+
+       if [ ${#commands[@]} -eq 0 ]
+       then
+               usage
+       elif [ ${#commands[@]} -eq 1 ]
+       then
+               command="${commands[0]}"
+               unset commands
+       else
+               echo "$command :" "${commands[@]}" >&2
+               exit 1
+       fi
+fi
+
+set -- "${args[@]}"
+unset arg args
+
+#. @QUILT@/$command
+bash -c ". @QUILT@/$command" "quilt ${command##*/}" "$@"
diff --git a/lustre/kernel_patches/quilt/config/install-sh b/lustre/kernel_patches/quilt/config/install-sh
new file mode 100644 (file)
index 0000000..36f96f3
--- /dev/null
@@ -0,0 +1,276 @@
+#!/bin/sh
+#
+# install - install a program, script, or datafile
+# This comes from X11R5 (mit/util/scripts/install.sh).
+#
+# Copyright 1991 by the Massachusetts Institute of Technology
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of M.I.T. not be used in advertising or
+# publicity pertaining to distribution of the software without specific,
+# written prior permission.  M.I.T. makes no representations about the
+# suitability of this software for any purpose.  It is provided "as is"
+# without express or implied warranty.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.  It can only install one file at a time, a restriction
+# shared with many OS's install programs.
+
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+
+# put in absolute paths if you don't have them in your path; or use env. vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+transformbasename=""
+transform_arg=""
+instcmd="$mvprog"
+chmodcmd="$chmodprog 0755"
+chowncmd=""
+chgrpcmd=""
+stripcmd=""
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=""
+dst=""
+dir_arg=""
+
+while [ x"$1" != x ]; do
+    case $1 in
+       -c) instcmd=$cpprog
+           shift
+           continue;;
+
+       -d) dir_arg=true
+           shift
+           continue;;
+
+       -m) chmodcmd="$chmodprog $2"
+           shift
+           shift
+           continue;;
+
+       -o) chowncmd="$chownprog $2"
+           shift
+           shift
+           continue;;
+
+       -g) chgrpcmd="$chgrpprog $2"
+           shift
+           shift
+           continue;;
+
+       -s) stripcmd=$stripprog
+           shift
+           continue;;
+
+       -t=*) transformarg=`echo $1 | sed 's/-t=//'`
+           shift
+           continue;;
+
+       -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
+           shift
+           continue;;
+
+       *)  if [ x"$src" = x ]
+           then
+               src=$1
+           else
+               # this colon is to work around a 386BSD /bin/sh bug
+               :
+               dst=$1
+           fi
+           shift
+           continue;;
+    esac
+done
+
+if [ x"$src" = x ]
+then
+       echo "$0: no input file specified" >&2
+       exit 1
+else
+       :
+fi
+
+if [ x"$dir_arg" != x ]; then
+       dst=$src
+       src=""
+
+       if [ -d "$dst" ]; then
+               instcmd=:
+               chmodcmd=""
+       else
+               instcmd=$mkdirprog
+       fi
+else
+
+# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
+# might cause directories to be created, which would be especially bad
+# if $src (and thus $dsttmp) contains '*'.
+
+       if [ -f "$src" ] || [ -d "$src" ]
+       then
+               :
+       else
+               echo "$0: $src does not exist" >&2
+               exit 1
+       fi
+
+       if [ x"$dst" = x ]
+       then
+               echo "$0: no destination specified" >&2
+               exit 1
+       else
+               :
+       fi
+
+# If destination is a directory, append the input filename; if your system
+# does not like double slashes in filenames, you may need to add some logic
+
+       if [ -d "$dst" ]
+       then
+               dst=$dst/`basename "$src"`
+       else
+               :
+       fi
+fi
+
+## this sed command emulates the dirname command
+dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+
+# Make sure that the destination directory exists.
+#  this part is taken from Noah Friedman's mkinstalldirs script
+
+# Skip lots of stat calls in the usual case.
+if [ ! -d "$dstdir" ]; then
+defaultIFS='
+       '
+IFS="${IFS-$defaultIFS}"
+
+oIFS=$IFS
+# Some sh's can't handle IFS=/ for some reason.
+IFS='%'
+set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
+IFS=$oIFS
+
+pathcomp=''
+
+while [ $# -ne 0 ] ; do
+       pathcomp=$pathcomp$1
+       shift
+
+       if [ ! -d "$pathcomp" ] ;
+        then
+               $mkdirprog "$pathcomp"
+       else
+               :
+       fi
+
+       pathcomp=$pathcomp/
+done
+fi
+
+if [ x"$dir_arg" != x ]
+then
+       $doit $instcmd "$dst" &&
+
+       if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dst"; else : ; fi &&
+       if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dst"; else : ; fi &&
+       if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dst"; else : ; fi &&
+       if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dst"; else : ; fi
+else
+
+# If we're going to rename the final executable, determine the name now.
+
+       if [ x"$transformarg" = x ]
+       then
+               dstfile=`basename "$dst"`
+       else
+               dstfile=`basename "$dst" $transformbasename |
+                       sed $transformarg`$transformbasename
+       fi
+
+# don't allow the sed command to completely eliminate the filename
+
+       if [ x"$dstfile" = x ]
+       then
+               dstfile=`basename "$dst"`
+       else
+               :
+       fi
+
+# Make a couple of temp file names in the proper directory.
+
+       dsttmp=$dstdir/#inst.$$#
+       rmtmp=$dstdir/#rm.$$#
+
+# Trap to clean up temp files at exit.
+
+       trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0
+       trap '(exit $?); exit' 1 2 13 15
+
+# Move or copy the file name to the temp name
+
+       $doit $instcmd "$src" "$dsttmp" &&
+
+# and set any options; do chmod last to preserve setuid bits
+
+# If any of these fail, we abort the whole thing.  If we want to
+# ignore errors from any of these, just make sure not to ignore
+# errors from the above "$doit $instcmd $src $dsttmp" command.
+
+       if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dsttmp"; else :;fi &&
+       if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dsttmp"; else :;fi &&
+       if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dsttmp"; else :;fi &&
+       if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dsttmp"; else :;fi &&
+
+# Now remove or move aside any old file at destination location.  We try this
+# two ways since rm can't unlink itself on some systems and the destination
+# file might be busy for other reasons.  In this case, the final cleanup
+# might fail but the new file should still install successfully.
+
+{
+       if [ -f "$dstdir/$dstfile" ]
+       then
+               $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null ||
+               $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null ||
+               {
+                 echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
+                 (exit 1); exit
+               }
+       else
+               :
+       fi
+} &&
+
+# Now rename the file to the real destination.
+
+       $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
+
+fi &&
+
+# The final little trick to "correctly" pass the exit status to the exit trap.
+
+{
+       (exit 0); exit
+}
diff --git a/lustre/kernel_patches/quilt/configure.ac b/lustre/kernel_patches/quilt/configure.ac
new file mode 100644 (file)
index 0000000..2b1a90c
--- /dev/null
@@ -0,0 +1,235 @@
+dnl Process this file with autoconf to produce a configure script.
+AC_INIT([quilt],[0.24],[quilt-dev@nongnu.org])
+AC_CONFIG_AUX_DIR(config)
+AC_PREREQ(2.53)
+AC_REVISION ($Revision: 1.1.2.1 $)
+
+PACKAGE_RELEASE=1
+AC_SUBST(PACKAGE_RELEASE)
+
+dnl Setup for backup-files compilation
+AC_HEADER_STDC
+AC_CHECK_FUNCS([mkdir])
+AC_CHECK_FUNCS([rmdir])
+AC_CHECK_FUNCS([strchr])
+AC_CHECK_FUNCS([strerror])
+AC_CHECK_FUNCS([strrchr])
+AC_C_CONST
+AC_FUNC_STAT
+
+AC_PROG_INSTALL
+
+AC_SYS_INTERPRETER
+if test "$interpval" != yes ; then
+       AC_MSG_WARN([no
+
+bash/perl scripts may not be invoked correctly due to problems with your 
+systems implementation of #! being either broken or non-existant.
+])
+fi
+
+dnl Check for Bourne-Again Shell
+AC_ARG_WITH(bash, AC_HELP_STRING(
+    [--with-bash], [name of the bash executable to use]),
+    [
+       BASH="$withval"
+       AC_SUBST(BASH)
+       AC_MSG_NOTICE([Using bash executable $BASH])
+    ],[
+       AC_PATH_PROG(BASH, bash)
+    ])
+if test -z "$BASH" ; then
+    AC_MSG_ERROR([Please specify the location of bash with the option '--with-bash'])
+fi
+
+# It would be nice not to have to use backticks, but too many retarded sh
+# implementations still don't support $( )
+# BEWARE:  There is a distinct possibility that we are currently running under
+# bash in this configure script (/bin/sh being a symlink to /bin/bash).  Even
+# though the result /could/ be available to us directly as $BASH_VERSION we
+# don't want to use, or trust it, incase the user is specifying a different
+# bash executable.
+if `$BASH -c '[[ "$BASH_VERSION" \< "2.04" ]]'` ; then
+    AC_MSG_ERROR([
+$PACKAGE_NAME requires at least version 2.04 of bash, you can download a current
+version of bash from ftp.gnu.org
+])
+fi
+
+dnl Check for Perl
+AC_ARG_WITH(perl, AC_HELP_STRING(
+    [--with-perl], [name of the Perl executable to use]),
+    [
+       PERL="$withval"
+       AC_SUBST(PERL)
+       AC_MSG_NOTICE([Using Perl executable $PERL])
+    ],[
+       AC_PATH_PROGS(PERL, [perl perl5])
+    ])
+if test -z "$PERL" ; then
+    AC_MSG_ERROR([Please specify the location of Perl with the option '--with-perl'])
+fi
+
+dnl Check for sed
+AC_ARG_WITH(sed, AC_HELP_STRING(
+    [--with-sed], [name of the sed executable to use]),
+    [
+       SED="$withval"
+       AC_SUBST(SED)
+       AC_MSG_NOTICE([Using sed executable $SED])
+    ],[
+       SED="sed"
+       AC_SUBST(SED)
+    ])
+
+dnl Check for awk
+AC_ARG_WITH(awk, AC_HELP_STRING(
+    [--with-awk], [name of the awk executable to use]),
+    [
+       AWK="$withval"
+       AC_SUBST(AWK)
+       AC_MSG_NOTICE([Using awk executable $AWK])
+    ],[
+       AC_PATH_PROGS(AWK, [gawk awk])
+    ])
+
+dnl Test for awk features that may be mising?
+
+if test -z "$PERL" ; then
+    AC_MSG_ERROR([Please specify the location of Perl with the option '--with-perl'])
+fi
+
+dnl Checks for mktemp (for creating temporary files and directories)
+AC_ARG_WITH(mktemp, AC_HELP_STRING(
+    [--with-mktemp], [name of the mktemp executable to use (or 'none'
+                     to use a quilt internal mechanism)]),
+    [
+       MKTEMP="$withval"
+       AC_SUBST(MKTEMP)
+       AC_MSG_NOTICE([Using mktemp executable $MKTEMP])
+    ],[
+       AC_PATH_PROG(MKTEMP, mktemp)
+    ])
+if test -z "$MKTEMP" -o "$MKTEMP" = "none" ; then
+    MKTEMP=internal_mktemp
+else
+    AC_MSG_CHECKING(whether $MKTEMP -d works)
+    if tempdir=`$MKTEMP -d /tmp/$PACKAGE_NAME.XXXXXX 2>/dev/null` && \
+       rmdir "$tempdir" ; then
+       AC_MSG_RESULT(yes)
+    else
+       AC_MSG_RESULT(no)
+       AC_MSG_ERROR([
+'$MKTEMP -d' does not create temporary directories.
+If you don't have a version of mktemp that can create directories, you
+can specify '--with-mktemp=none' and $PACKAGE_NAME will use its own
+internal tempfile generation mechanism.
+])
+    fi
+fi
+
+dnl Check for diff
+AC_ARG_WITH(diff, AC_HELP_STRING(
+    [--with-diff], [name of the diff executable to use]),
+    [
+       DIFF="$withval"
+       AC_SUBST(DIFF)
+       AC_MSG_NOTICE([Using diff executable $DIFF])
+    ],[
+       AC_PATH_PROG(DIFF, diff)
+    ])
+if test -z "$DIFF"; then
+    AC_MSG_ERROR([Please specify the location of diff with the option '--with-diff'])
+fi
+
+dnl Check for patch
+AC_ARG_WITH(patch, AC_HELP_STRING(
+    [--with-patch], [name of the patch executable to use]),
+    [
+       PATCH="$withval"
+       AC_SUBST(PATCH)
+       AC_MSG_NOTICE([Using patch executable $PATCH])
+    ],[
+       AC_PATH_PROG(PATCH, patch)
+    ])
+if test -z "$PATCH"; then
+    AC_MSG_ERROR([Please specify the location of patch with the option '--with-patch'])
+fi
+
+# Sun's patch is a mess, issue a warning.  But we are going to continue with
+# the build because you might just be lucky.
+AC_MSG_CHECKING([whether $PATCH will work])
+if $PATCH -v 2>&1 | grep -q "Sun" >/dev/null 2>&1; then
+       AC_MSG_RESULT(no)
+       AC_MSG_WARN([
+Sorry, you have a Sun version of patch which is notoriously buggy.  $PACKAGE_NAME
+may function correctly, or minor errors may occur due to Sun's patch tool.
+Please consider upgrading to GNU patch, if you already have GNU patch then you
+can supply its path with the '--with-patch=' option.
+])
+elif $PATCH --version 2>&1 | grep -q "patch 2.0" >/dev/null 2>&1; then
+       AC_MSG_RESULT(no)
+       AC_MSG_WARN([
+Sorry, the version of patch you are using can cause severe problems when a patch
+creates a directory.  $PACKAGE_NAME may well function correctly with this version
+of patch or small problems could creep in.
+Please consider upgrading your patch to a more recent version, if you already 
+have a more recent version of patch then you can supply its path with the 
+'--with-patch=' option.
+])
+else
+       AC_MSG_RESULT(yes)
+fi
+
+dnl Check for diffstat
+AC_ARG_WITH(diffstat, AC_HELP_STRING(
+    [--with-diffstat], [name of the diffstat executable to use]),
+    [
+       DIFFSTAT="$withval"
+       AC_SUBST(DIFFSTAT)
+       AC_MSG_NOTICE([Using diffstat executable $DIFFSTAT])
+    ],[
+       AC_PATH_PROG(DIFFSTAT, diffstat)
+    ])
+if test -z "$DIFFSTAT"; then
+    AC_MSG_WARN([
+diffstat does not appear to be in your path, this is not a fatal error however
+$PACKAGE_NAME has increased functionality if diffstat exists.  If you have diffstat
+you can specify the location the option '--with-diffstat'.
+])
+fi
+
+dnl Check for NLS
+AC_ARG_ENABLE(nls, AC_HELP_STRING(
+    [--enable-nls], [include natural language support]))
+if test "$enableval" != "no"; then
+    AC_PATH_PROG(MSGFMT, msgfmt)
+fi
+if test "$enableval" = "yes" -a -z "$MSGFMT" ; then
+    AC_MSG_ERROR([
+You do not appear to have msgfmt, which is part of the GNU Gettext package.  It
+is a required package as you chose the '--enable-nls' option to configure.
+You can download GNU Gettext from ftp.gnu.org
+])
+fi
+if test -z "$MSGFMT" ; then
+    AC_MSG_NOTICE([Building without natural language support])
+fi
+
+AC_CONFIG_FILES(Makefile)
+AC_OUTPUT
+
+dnl Print results
+AC_MSG_RESULT([])
+AC_MSG_RESULT([$PACKAGE_NAME version $PACKAGE_VERSION configured.])
+AC_MSG_RESULT([])
+AC_MSG_RESULT([Using '$prefix' for installation prefix.])
+
+# we don't need to see this just for the backup-files command
+# but we may as well spec it for the future
+#AC_MSG_RESULT([Using '$CC' for C compiler.])
+#AC_MSG_RESULT([Building with '$CFLAGS' for C compiler flags.])
+#AC_MSG_RESULT([Building with '$LIBS' for linker flags.])
+
+AC_MSG_RESULT([])
+AC_MSG_RESULT([Report bugs to $PACKAGE_BUGREPORT])
diff --git a/lustre/kernel_patches/quilt/doc/README.in b/lustre/kernel_patches/quilt/doc/README.in
new file mode 100644 (file)
index 0000000..83f252c
--- /dev/null
@@ -0,0 +1,115 @@
+The scripts in this package simplify working with a series of patches.
+The usual tasks like applying, refreshing and reversing are supported.
+
+docco.txt contains Adrew Morton's description of his suite of patch
+scripts. These scripts are based on Andrew's scripts, but include many
+changes. Please keep this in mind when reading Andrew's documentation.
+
+
+Concepts
+========
+
+(Please see docco.txt.)
+
+The scripts maintain a stack of patches, on top of which additional
+patches can be applied, and from with patches can be removed. The list of
+patches is kept in a file (searched for in this order in
+.pc/series, series, patches/series).
+
+The scripts keep meta information in the .pc/ directory. The .pc/
+directory contains:
+
+       .pc/applied-patches
+               The list of currently applied patches.
+
+       .pc/patch/.pc (for each applied patch)
+               A list of files modified by the patch.
+
+       .pc/patch/ (for each applied patch)
+               Copies of the files that the patch modifies,
+               before modifying. The original versions of
+               the files are needed for refreshing patches,
+               and for ensuring that removing a patch does
+               recreate the original file contents.
+
+
+Operation
+=========
+
+Patches to be applied must be listed in the series file.
+
+Patches are applied with pushpatch, and are removed with poppatch.
+
+Refpatch refreshes a patch.
+
+New patches can be added at the current position in the patch sequence
+with newpatch.
+
+Additional files to be modified can be added to a patch with patchadd.
+
+
+Installation
+============
+
+To start using the scripts the working directory must contain:
+
+       patches/
+               Patches to work with.
+
+       series (or patches/series)
+               List of patches in order of applying.
+
+The scripts will create the .pc/ directory that contains the meta
+information needed for managing the patches automatically.
+
+
+Series file
+===========
+
+The patches that are relevant for a project must be listed in the file
+series, which is searched for in .pc/, ./ and patches/ in this order.
+The patches will be applied in the order given. The series file has
+the following format:
+
+       # Comment
+       subdir/patch-file-name.patch [-pN]
+
+The location of patches is specified relative to the patches/ directory.
+Optionally a strip level (-p0, -p1, etc.) can be specified. When
+refreshing a patch, only levels 0 and 1 are supported.
+
+
+Command reference
+=================
+@REFERENCE@
+
+guards [--prefix=dir] [--path=dir1:dir2:...] [--default=0|1]
+       [--check] [--config=file] symbol ...
+
+  Convert a series file with conditional statements into a series
+  file as expected; see the guards(1) manual page.
+
+
+Helper files/scripts
+====================
+
+patchfns
+       A collection of functions.
+
+apatch
+       Add a patch. Used by pushpatch.
+
+rpatch
+       Remove a patch. Used by poppatch.
+
+parse-patch {-s|-u} section file [< replacement]
+       Select a %section from a patch (-s) or replace a
+       %section with the text from standard input (-u).
+
+touched-by-patch filename
+       Print a list of files modified by a patch file.
+
+backup-files
+       A simple utility that creates / restores / removes
+       backup files; this works around a patch bug (see BUGS).
+
diff --git a/lustre/kernel_patches/quilt/doc/docco.txt b/lustre/kernel_patches/quilt/doc/docco.txt
new file mode 100644 (file)
index 0000000..1860f13
--- /dev/null
@@ -0,0 +1,717 @@
+Patch management scripts
+Andrew Morton <akpm@digeo.com>
+18 October 2002
+
+This is a description of a bunch of shell scripts which I use for
+managing kernel patches.  They are quite powerful.  They can be used on
+projects other than the linux kernel.  They are easy to use, and fast.
+
+You end up doing a ton of recompiling with these scripts, because
+you're pushing and popping all the time.  ccache takes away the pain of
+all that.  http://ccache.samba.org/ - be sure to put the cache
+directory on the same fs as where you're working so that ccache can use
+hardlinks.
+
+The key philosophical concept is that your primary output is patches. 
+Not ".c" files, not ".h" files.  But patches.  So patches are the
+first-class object here.
+
+Installation
+============
+
+You place all the scripts somewhere in your path, or in
+/usr/lib/patch-scripts.
+
+Terminology
+===========
+
+The patch scripts require three special directories called "pc",
+"patches" and "txt".
+
+If the environment variable PATCHSCRIPTS is set, it is taken to to be
+the directory in which those three directories reside.  Typically, it
+would be a relative pathname.  So
+
+       setenv PATCHSCRIPTS ./i-put-them-here
+
+would tell the patch scripts to look in ./i-put-them-here/pc, etc.
+
+If PATCHSCRIPTS is not set, and the directory ./patch-scripts is
+present then the patch scripts will us ./patch-scripts/pc/,
+./patch-scripts/patches/ and ./patch-scripts/txt/.
+
+Otherwise, the patch scripts use ./pc, ./patches and ./txt.
+
+In this document, the symbol $P is used to describe the directory which
+holds the pc/, patches/ and txt/ directories, as determined by the
+above search.
+
+It is expected that $P will always expand to a relative path.
+
+Concepts
+========
+
+All work occurs with a single directory tree.  All commands are invoked
+within the root of that tree.  The scripts manage a "stack" of patches.
+
+Each patch is a changeset against the base tree plus the preceding patches.
+
+All patches are listed, in order, in the file ./series.  You manage the
+series file.  Lines in the series file which start with `#' are ignored.
+
+Any currently-applied patches are described in the file
+./applied-patches.  The patch scripts manage this file.
+
+Each patch affects a number of files in the tree.  These files are
+listed in a "patch control" file.  These .pc files live in the
+directory $P/pc/
+
+Patches are placed in the directory $P/patches/
+
+Documentation for the patches is placed in $P/txt/
+
+So for a particular patch "my-first-patch" the following will exist:
+
+- An entry "my-first-patch.patch" in ./series
+
+- An entry "my-first-patch" in ./applied-patches (if it's currently applied)
+
+- A file $P/pc/my-first-patch.pc which contains the names of the
+  files which my-first-patch modifies, adds or removes
+
+- A file $P/txt/my-first-patch.txt which contains the patch's
+  changelog.
+
+- A file $P/patches/my-first-patch.patch, which is the output of the
+  patch scripts.
+
+Operation
+=========
+
+When a patch "my-patch" is applied with apatch, or with pushpatch
+(which calls apatch), all the affected files (from $P/pc/my-patch.pc)
+are copied to files with ~my-patch appended.  So if $P/pc/my-patch.pc
+contained
+
+       kernel/sched.c
+       fs/inode.c
+
+then apatch will copy those files into kernel/sched.c~my-patch and
+fs/inode.c~my-patch.  It will then apply the patch to kernel/sched.c
+and fs/inode.c
+
+When a diff is regenerated by refpatch (which calls mpatch), the diff
+is made between kernel/sched.c and kernel/sched.c~my-patch.  How do the
+scripts know to use "~my-patch"?  Because my-patch is the current
+topmost patch.  It's the last line in ./applied-patches.
+
+In this way, the whole thing is stackable.  If you have four patches
+applied, say "patch-1", "patch-2", "patch-3" and "patch-4", and if
+patch-2 and patch-4 both touch kernel/sched.c then you will have:
+
+       kernel/sched.c~patch-2          Original copy, before patch-2
+       kernel/sched.c~patch-4          Copy before patch-4.  Contains changes
+                                       from patch-2
+       kernel/sched.c                  Current working copy.  Contains changes
+                                       from patch-4.
+
+This means that your diff headers contain "~patch-name" in them, which
+is convenient documentation.
+
+Walkthrough
+===========
+
+Let's start.
+
+Go into /usr/src/linux (or wherever)
+
+       mkdir pc patches txt
+
+Now let's generate a patch
+
+       fpatch my-patch kernel/sched.c
+
+OK, we've copied kernel/sched.c to kernel/sched.c~my-patch.  We've
+appended "my-patch" to ./applied-patches and we've put "kernel/sched.c"
+into the patch control file, pc/my-patch.pc.
+
+       Now edit kernel/sched.c a bit.
+
+Now we're ready to document the patch
+
+       Now write txt/my-patch.txt
+
+Now generate the patch
+
+       refpatch
+
+This will generate patches/my-patch.patch.  Take a look.
+
+Now remove the patch
+
+       poppatch
+
+applied-patches is now empty, and the patch is removed.
+
+Now let's add a file to my-patch and then generate my-second-patch:
+
+       Add "my-patch.patch" to ./series (no blank lines in that file please)
+
+       pushpatch
+
+OK, the patch is applied again.  Let's add another file
+
+       fpatch kernel/printk.c
+
+Note that here we gave fpatch a single argument.  So rather than
+opening a new patch, it adds kernel/printk.c to the existing topmost
+patch.  That's my-patch.
+
+       Edit kernel/printk.c
+
+Refresh my-patch (you end up running refpatch a lot)
+
+       refpatch
+
+Now start a second patch:
+
+       fpatch my-second-patch kernel/sched.c
+
+Now take a look at applied-patches.  Also do an `ls kernel/sched*'.
+
+       Edit kernel/sched.c, to make some changes for my-second-patch
+
+Generate my-second-patch:
+
+       refpatch
+
+Take a look in patches/my-second-patch.patch
+
+Don't forget to add "my-second-patch.patch" to the series file.
+
+And remove both patches:
+
+       poppatch
+       poppatch
+
+
+That's pretty much it, really.
+
+
+Command reference
+=================
+
+Generally, where any of these commands take a "patch-name", that can be
+of the form txt/patch-name.txt, patch-name.pc, just patch-name or
+whatever.  The scripts will strip off a leading "txt/", "patches/" or
+"pc/" and any trailing extension.  This is so you can do
+
+       apatch patches/a<tab>
+
+to conveniently use shell tabbing to select patch names.
+
+
+
+added-by-patch
+
+  Some internal thing.
+
+apatch [-f] patch-name
+
+  This is the low-level function which adds patches.  It does the
+  copying into ~-files and updates the applied-patches file.  It
+  applies the actual patch.
+
+  apatch will do a patch --dry-run first and will refuse to apply the
+  patch if the dryrun fails.
+
+  So when you are getting rejects you do this:
+
+       pushpatch               # This fails, due to rejects.  Drat.
+       apatch -f patch-name    # Force the patch
+  (or)  pushpatch -f           # Force the patch
+
+  OK, you've now applied patch-name, but you have rejects.  Go fix
+  those up and do
+
+       refpatch
+
+  And you're ready to move on.
+
+combine-series output-file
+
+  It incrementally combinediffs all the patches in series to make a
+  complete patch for the series.  Requires combinediff frmo patchutils.
+
+  See http://cyberelk.net/tim/patchutils/ (Don't download the
+  "experimental" patchutils - it seems to only have half of the
+  commands in it.  Go for "stable")
+
+cvs-take-patch
+
+  I forget.
+
+export_patch
+
+  export the patches listed in ./series to a set of files which
+  are named in such a way that the sort order is the same as the
+  order of the series file. 
+
+  Usage:  export_patch directory [prefix]
+
+  Example:
+       
+       Suppose ./series contains
+       
+       mango.patch
+       orange.patch
+       banana.patch
+       apple.patch
+       pear.patch
+
+       export_patch ../mypatches fruit 
+       
+       The patches would be copied to
+
+       ../mypatches/p00001_fruit_mango.patch
+       ../mypatches/p00002_fruit_orange.patch
+       ../mypatches/p00003_fruit_banana.patch
+       ../mypatches/p00003_fruit_banana.patch
+       ../mypatches/p00003_fruit_banana.patch
+
+       Named in this way, someone may easily apply them:
+
+       cat mypatches/p*fruit* | patch -p1
+
+       If prefix is omitted, the patchnames will be transformed
+       such that "original.patch" becomes "pXXXXX_original.patch".
+
+fpatch [patch-name] foo.c
+
+  If patch-name is given, fpatch will start a new patch which
+  modifies (or adds, or removes) the single file foo.c.  It updates
+  ./applied-patches and creates pc/patch-name.pc.  fpatch will copy
+  foo.c to foo.c~patch-name in preparation for edits of foo.c.
+
+  If patch-name is not given then fpatch will add foo.c to the
+  current topmost patch.  It will add "foo.c" to $P/pc/$(toppatch).pc. 
+  It will copy foo.c to foo.c~$(toppatch).
+
+import_patch
+
+  Imports a set of patch files, creating $P/pc, $P/txt, $P/patches and
+  ./series as necessary.  It also creates $P/txt/*.txt by stripping 
+  off the top of the patches (and removes any diffstat output it finds, 
+  so that it can eat refpatch output and export_patch output.)  The 
+  imported patch names are appended to the series file.
+
+  In creating the $P/txt/*.txt files, mail headers are stripped with 
+  formail, preserving the "From:" and "Subject:" lines.  "DESC" and
+  "EDESC" markers are added if they are not already present, using the
+  "From:" and "Subject:" lines for the DESC portion, if they are present.
+  (See "patchdesc" command, below, for more on these markers.)
+
+  Also, it can rename the patch file as it is imported by stripping out
+  a pattern.  This is useful if, as often is the case, you have patch 
+  sets with filenames designed to help sort the patches into the correct 
+  order, such as "p001_xxx_funky_stuff.patch" you can have it automatically
+  renamed to funky_stuff.patch on import, and let the series file manage
+  the ordering.
+
+  Import_patch will uncompress patches (*.Z, *.bz2, *.gz) as necessary.
+
+  Usage:
+
+  import_patch [-p pattern] patchfile ...
+
+  Example:
+
+       % ls ../fruit/p*patch
+       ../fruit/p00001_northern_apple.patch
+       ../fruit/p00001_tropical_mango.patch
+       ../fruit/p00002_northern_pear.patch
+       ../fruit/p00002_tropical_orange.patch
+       ../fruit/p00003_tropical_banana.patch
+       % import_patch -p 'p[0-9]*_tropical_' ../fruit/p*tropical*
+       Recreated pc/mango.pc
+       Recreated pc/orange.pc
+       Recreated pc/banana.pc
+       % import_patch -p 'p[0-9]*_northern_' ../fruit/p*northern*
+       Recreated pc/apple.pc
+       Recreated pc/pear.pc
+
+  Then you can "pushpatch; refpatch" 5 times.
+
+inpatch
+
+  List the names of ths files which are affected by the current
+  topmost patch.
+
+  This is basically
+
+       cat pc/$(toppatch).pc
+
+join-patch patchname
+
+  "joins" the named patch to the current topmost patch.
+
+  Use this when you want to merge two patches into one.  All the
+  files which `patchname' affects are added to pc/$(toppatch).pc (if
+  they are not already there) and patch `patchname' is applied.  The
+  top patch remains unchanged.  You'll need to run refpatch afterwards.
+
+mpatch
+
+  A low-level thing to generate patches
+
+new-kernel
+
+  Some thing I use for importing a new kernel from kernel.org
+
+p0-2-p1
+
+  Internal thing to convert patch -p0 form into patch -p1
+
+patchdesc
+
+  Generates a single-line description of a patch.
+
+  The txt/my-patch.txt files have the following format:
+
+  <start of file>
+  DESC
+  some short description
+  EDESC
+
+  The long description
+  <end of file>
+
+  I use
+
+       patchdesc $(cat series)
+
+  to generate short-form summaries of the patch series.
+
+patchfns
+
+  Internal utilities
+
+pcpatch
+
+  Standalone tool to generate a .pc file from a patch.
+
+  Say someone sends you "his-patch.diff".  What you do is:
+
+       cp ~/his-patch.diff patches/his-patch.patch
+       pcpatch his-patch
+
+  This generates $P/pc/his-patch.pc and you're all set.  Add
+  "his-patch.patch" to ./series in the right place and start pushing.
+
+p_diff
+
+  I forget
+
+poppatch
+
+  Remove one or more patches from the current stack.  This command
+  does *not* use the series file.  It works purely against
+  applied-patches.
+
+  Usage:
+
+       poppatch
+               Remove the topmost patch
+       poppatch 10
+               Remove ten patches
+       poppatch some-patch-name[.patch]
+               Remove patches until "some-patch-name" is top patch
+
+pstatus
+
+       Shows status of patches
+
+  Usage:
+       pstatus [patchfile ...]
+       
+       One line per patch is output showing:
+       1: Patch number in the series file
+       2: Whether the patch is currently applied
+       3: Name of patch
+       4: Status of the patch (needs pcpatch, changelog, refpatch)
+
+       If no patchfiles are specified, $P/patches/*.patch
+       are assumed.
+
+  Caveats:
+       A patch set which contains separate patches to add a file
+       and modify that same file may give spurious "Needs refpatch"
+       status for the patch which adds the file or the topmost patch.
+
+ptkdiff
+
+  Two modes:
+
+       ptkdiff -
+
+               Run tkdiff against all the file affected
+               by $(toppatch).  The diff is only for the changes made
+               by the top patch! ie: it's between "filename" and
+               "filename~toppatch-name".
+
+       ptkdiff filename
+
+               Just run tkdiff against that file,
+               showing the changes which are due to toppatch.
+
+pushpatch [-f]
+
+  Apply the next patch, from the series file.
+
+  This consults ./applied-patches to find out the top patch, then
+  consults ./series to find the next patch.  And pushes it.
+
+    pushpatch
+
+      Apply the next patch
+
+    pushpatch 10
+      Apply the next ten patches
+
+    pushpatch some-patch-name
+
+      Keep pushing patches until "some-patch-name" is toppatch
+
+    pushpatch -f
+
+      Push the next patch, ignoring rejects.
+
+refpatch
+
+    regnerates the topmost patch.  Reads all the affected files
+    from pc/$(toppatch).pc and diffs them against their tilde-files.
+
+    Also pastes into the patch your patch documentation and
+    generates a diffstat summary.
+
+removed-by-patch
+
+  Some thing.
+
+rename-patch
+
+  CVS rename for patches.
+
+rolled-up-patch
+
+  Bit of a hack.  Is designed to generate a rolled-up diff of all
+  currently-applied patches.  But it requires a ../linux-2.x.y tree to
+  diff against.  Needs to be redone.
+
+rpatch
+
+  Internal command
+
+split-patch
+
+  Some thing someone write to split patches up.  I don't use it.
+
+tag-series
+
+  Assuming you keep pc/*, patches/* and txt/* under CVS revision
+  control, tag-series allows you to tag a patchset's individual
+  components.  I use
+
+       tag-series s2_5_44-mm3 pc/2.5.44-mm3-series
+
+  which will attach the cvs tag "s2_5_44-mm3" to every .pc, .patch
+  and .txt file which is mentioned in the series file
+  "pc/2.5.44-mm3-series".
+
+  It will also tag pc/2.5.44-mm3-series, which is a bit redundant
+  given that I use a different series file for each patchset release..
+
+
+toppatch
+
+  Print the name of the topmost patch.  From ./applied-patches
+
+touched-by-patch patch-filename
+
+  List the names of files which are affected by a diff.
+
+unitdiff.py
+
+  Rasmus Andersen's script to convert a diff into minimum-context
+  form.  This form has a better chance of applying if you're getting
+  nasty rejects.  But patch can and will make mistakes when fed
+  small-context input.
+
+
+Work Practices
+==============
+
+I keep the kernel tree, the $P/pc/, $P/patches/ and $P/txt/ contents under
+CVS control.  This is important...
+
+I have several "series" files.  I keep these in $P/pc/foo-series and use
+
+       ln -s pc/foo-series series
+
+when I'm working on foo.
+
+If someone sends me a patch I'll do:
+
+       cp ~/whatever patches/his-patch.patch
+       pcpatch his-patch
+       apatch his-patch
+
+  If apatch fails then run `apatch -f his-patch' and fix the rejects.
+
+       refpatch
+
+  to clean up any fuzz.
+
+       poppatch
+       cvs add pc/his-patch.pc patches/his-patch.patch
+       cvs commit pc patches
+
+  Now edit ./series and place "his-patch.patch" in the appropriate place.
+
+
+If you're working on a particular patch (say, "dud-patch") and you
+balls something up, just run:
+
+       refpatch        # Generate the crap patch
+       poppatch        # Remove it all
+       rm patches/dud-patch.patch
+       cvs up patches/dud-patch.patch
+
+and all is well.
+
+
+Getting updates from Linus
+==========================
+
+What I do is to grab the latest -bk diff from
+http://www.kernel.org/pub/linux/kernel/people/dwmw2/bk-2.5/
+and do:
+
+       gzip -d < cs<tab> > patches/linus.patch
+       pcpatch linus
+       apatch linus | grep diff
+
+               Now fix up all the files which got deleted,
+               because there's something wrong with bitkeeper diffs:
+
+       cvs up -ko <missing files from the above diff>
+
+       apatch linus
+       $EDITOR linus/linus.txt
+       
+               Add the changeset number to txt/linus.txt
+
+       refpatch
+       poppatch
+
+  Now add "linus.patch" as the first entry in your ./series file and
+  start pushing your other patches on top of that.
+
+BUGS
+====
+
+Tons and tons.  The scripts are fragile, the error handling is ungraceful and
+if you do something silly you can end up in a pickle.
+
+Generally the scripts are very careful to not wreck your files or your
+patches.  But they can get the ./applied-patches and ~-files into an
+awkward state.
+
+Usually you can sort it out by copying the ~-files back onto the originals
+and removing the last line from ./applied-patches.  Or do a "refpatch ;
+poppatch ; rm patches/troublesome-patch.patch ; cvs up patches".
+
+If it's really bad, just blow away the entire tree and do a new CVS checkout.
+
+
+Working on non-kernel projects
+==============================
+
+Well it's the same thing.  Say you've downloaded a copy of util-linux
+and you want to make a change:
+
+       cd /usr/src
+       tar xvfz ~/util-linux.tar.gz
+       cd util-linux
+       mkdir pc patches txt
+       fpatch my-patch sys-utils/rdev.c
+       fpatch sys-utils/ipcs.8
+       <edit, edit>
+       refpatch
+       <ship patches/my-patch.patch>
+
+How to balls things up
+======================
+
+Well here's one way.  Suppose you have 20 patches applied, and three of
+them (say, "p1", "p6" and "p11") all modify "foo.c".
+
+Now you go and change foo.c.
+
+Well, to which patch does that change belong?  You need to decide. 
+Let's say you decide "p6".
+
+If you run `refpatch' when "p11" is toppatch then you lose.  The diff
+went into p11.
+
+What you can do is:
+
+1:
+       poppatch p6
+       <edit>
+       refpatch
+       pushpatch p11
+       <test>
+
+  (See why ccache is looking good?)
+
+or
+
+2:
+       <edit>
+       <test>
+       poppatch p6     <hope like hell that the other patches remove cleanly>
+       refpatch
+
+
+Another good way of ballsing up is to cheat.  Say "oh I just want to make
+this one-line change".  And "oh, and this one".
+
+Now you're getting in a mess.  It's much, much better to just use the system:
+
+       fpatch junk file1
+       fpatch file2
+       <edit>
+       <play>
+       refpatch
+       poppatch
+       rm pc/junk.pc patches/junk.patch
+
+Merging with -mm kernels
+========================
+
+Haven't tried this, but it should work:
+
+- Grab all the patches from broken-out/, place them in your $P/patches/
+
+- Copy my series file into ./series (or $P/pc/akpm-series and symlink it)
+
+- pushpatch 99
+
+And you're off and running.  The nice thing about this is that you can
+send me incremental diffs to diffs which I already have.
+
+Or whatever.  I'm fairly handy with diffs nowadays.  Rejects are
+expected.  I just prefer to have "one concept per diff".
+
diff --git a/lustre/kernel_patches/quilt/lib/backup-files.c b/lustre/kernel_patches/quilt/lib/backup-files.c
new file mode 100644 (file)
index 0000000..36996c7
--- /dev/null
@@ -0,0 +1,302 @@
+/*
+  File: backup-files.c
+
+  Copyright (C) 2003 Andreas Gruenbacher <agruen@suse.de>
+  SuSE Labs, SuSE Linux AG
+
+  This program is free software; you can redistribute it and/or
+  modify it under the terms of the GNU Library General Public
+  License as published by the Free Software Foundation; either
+  version 2 of the License, or (at your option) any later version.
+
+  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 the GNU
+  Library General Public License for more details.
+
+  You should have received a copy of the GNU Library General Public
+  License along with this library; if not, write to the Free Software
+  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+/*
+ * Create backup files of a list of files similar to GNU patch. A path
+ * name prefix and suffix for the backup file can be specified with the
+ * -B and -Z options.
+ */
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <errno.h>
+#include <string.h>
+
+const char *progname;
+
+enum { what_backup, what_restore, what_remove };
+
+const char *opt_prefix="", *opt_suffix="", *opt_file=NULL;
+int opt_silent=0, opt_what=what_backup;
+
+#define LINE_LENGTH 1024
+
+
+void
+usage(void)
+{
+       printf("Usage: %s [-B prefix] [-z suffix] [-f {filelist|-}] [-s] [-r|-x] filename ...\n"
+              "\n"
+              "\tCreate hard linked backup copies of a list of files\n"
+              "\tread from standard input.\n"
+              "\n"
+              "\t-r\tRestore the backup\n"
+              "\t-x\tRemove backup files and empty parent directories\n"
+              "\t-B\tPath name prefix for backup files\n"
+              "\t-z\tPath name suffix for backup files\n"
+              "\t-s\tSilent operation; only print error messages\n\n",
+              progname);
+}
+
+void
+create_parents(char *filename)
+{
+       struct stat st;
+       char *f = strchr(filename, '/');
+
+       if (f == NULL)
+               return;
+       *f = '\0';
+       if (stat(f, &st) != 0) {
+               while (f != NULL) {
+                       *f = '\0';
+                       mkdir(filename, 0777);
+                       *f = '/';
+                       f = strchr(f+1, '/');
+               }
+       } else {
+               *f = '/';
+       }
+}
+
+void
+remove_parents(char *filename)
+{
+       char *f, *g = NULL;
+
+       f = strrchr(filename, '/');
+       while ((f = strrchr(filename, '/')) != NULL) {
+               if (g != NULL)
+                       *g = '/';
+               g = f;
+               *f= '\0';
+               
+               rmdir(filename);
+       }
+       if (g != NULL)
+               *g = '/';
+}
+
+static int
+link_or_copy(const char *from, const char *to)
+{
+       char buffer[4096];
+       int from_fd, to_fd, error = 1;
+       size_t len;
+
+       if (link(from, to) == 0)
+               return 0;
+       if (errno != EXDEV && errno != EPERM && errno != EMLINK) {
+               fprintf(stderr, "Could not link file `%s' to `%s': %s\n",
+                      from, to, strerror(errno));
+               return 1;
+       }
+
+       if ((from_fd = open(from, O_RDONLY)) == -1) {
+               perror(from);
+               return 1;
+       }
+       if ((to_fd = open(to, O_WRONLY|O_TRUNC))) {
+               perror(to);
+               close(from_fd);
+               return 1;
+       }
+       while ((len = read(from_fd, buffer, sizeof(buffer))) > 0) {
+               if ((write(to_fd, buffer, len)) == -1) {
+                       perror(to);
+                       unlink(to);
+                       goto out;
+               }
+       }
+       if (len != 0) {
+               perror(from);
+               unlink(to);
+               goto out;
+       }
+
+       error = 0;
+out:
+       close(from_fd);
+       close(to_fd);
+
+       return error;
+}
+
+int
+process_file(char *file)
+{
+       char backup[LINE_LENGTH];
+
+       if (strlen(opt_prefix) + strlen(file) +
+           strlen(opt_suffix) >= sizeof(backup)) {
+               perror("Line buffer too small\n");
+               return 1;
+       }
+
+       snprintf(backup, sizeof(backup), "%s%s%s",
+                opt_prefix, file, opt_suffix);
+
+       if (opt_what == what_backup) {
+               struct stat st;
+               int new_file = (stat(file, &st) == -1 && errno == ENOENT);
+
+               unlink(backup);
+               create_parents(backup);
+               if (new_file) {
+                       int fd;
+
+                       if (!opt_silent)
+                               printf("New file %s\n", file);
+                       if ((fd = creat(backup, 0666)) == -1) {
+                               perror(backup);
+                               return 1;
+                       }
+                       close(fd);
+               } else {
+                       if (!opt_silent)
+                               printf("Copying %s\n", file);
+                       if (link_or_copy(file, backup) != 0)
+                               return 1;
+               }
+               return 0;
+       } else if (opt_what == what_restore) {
+               struct stat st;
+
+               create_parents(file);
+               if (stat(backup, &st) != 0) {
+                       perror(backup);
+                       return 1;
+               }
+               if (st.st_size == 0) {
+                       if (unlink(file) == 0 || errno == ENOENT) {
+                               if (!opt_silent)
+                                       printf("Removing %s\n", file);
+                               unlink(backup);
+                               remove_parents(backup);
+                       } else {
+                               perror(file);
+                               return 1;
+                       }
+               } else {
+                       if (!opt_silent)
+                               printf("Restoring %s\n", file);
+                       unlink(file);
+                       if (link(backup, file) == -1) {
+                               if (link_or_copy(backup, file) != 0)
+                                       return 1;
+                               unlink(backup);
+                               remove_parents(backup);
+                       }
+               }
+               return 0;
+       } else if (opt_what == what_remove) {
+               unlink(backup);
+               remove_parents(backup);
+               return 0;
+       } else
+               return 1;
+}
+
+int
+main(int argc, char *argv[])
+{
+       int opt, status=0;
+       
+       progname = argv[0];
+
+       while ((opt = getopt(argc, argv, "rxB:z:f:sh")) != -1) {
+               switch(opt) {
+                       case 'r':
+                               opt_what = what_restore;
+                               break;
+
+                       case 'x':
+                               opt_what = what_remove;
+                               break;
+
+                       case 'B':
+                               opt_prefix = optarg;
+                               break;
+                               
+                       case 'f':
+                               opt_file = optarg;
+                               break;
+
+                       case 'z':
+                               opt_suffix = optarg;
+                               break;
+
+                       case 's':
+                               opt_silent = 1;
+                               break;
+
+                       case 'h':
+                       default:
+                               usage();
+                               return 0;
+               }
+       }
+
+       if ((*opt_prefix == '\0' && *opt_suffix == '\0') ||
+           (opt_file == NULL && optind == argc)) {
+               usage();
+               return 1;
+       }
+
+       if (opt_file != NULL) {
+               FILE *file;
+               char line[LINE_LENGTH];
+
+               if (!strcmp(opt_file, "-")) {
+                       file = stdin;
+               } else {
+                       if ((file = fopen(opt_file, "r")) == NULL) {
+                               perror(opt_file);
+                               return 1;
+                       }
+               }
+
+               while (fgets(line, sizeof(line), file)) {
+                       char *l = strchr(line, '\0');
+
+                       if (l > line && *(l-1) == '\n')
+                               *(l-1) = '\0';
+                       if (*line == '\0')
+                               continue;
+                               
+                       if ((status = process_file(line)) != 0)
+                               return status;
+               }
+
+               if (file != stdin) {
+                       fclose(file);
+               }
+       }
+       for (; optind < argc; optind++) {
+               if ((status = process_file(argv[optind])) != 0)
+                       return status;
+       }
+
+       return status;
+}
diff --git a/lustre/kernel_patches/quilt/po/Makefile b/lustre/kernel_patches/quilt/po/Makefile
new file mode 100644 (file)
index 0000000..1840713
--- /dev/null
@@ -0,0 +1,35 @@
+QUILT_IN :=   add applied delete diff files import new next patches \
+              pop previous push refresh remove series setup top unapplied
+SCRIPTS_IN := apatch rpatch patchfns spec2series patchfns
+# scripts/parse-patch is perl based
+
+# LINGUAS = ...
+# localedir = ...
+
+all: $(LINGUAS:%=%.mo)
+
+%.mo : %.po
+       msgfmt --statistics -o $@ $<
+
+%.po : quilt.pot
+       msgmerge -o $@ $@ $^
+
+quilt.pot: $(QUILT_IN:%=../quilt/%.in) $(SCRIPTS_IN:%=../scripts/%.in) ../bin/quilt.in
+       rm -f quilt.pot; touch quilt.pot
+       for file in $+ ; do \
+         bash --dump-po-strings $$file \
+           |msguniq \
+           |msgcat --force-po -F - quilt.pot -o quilt.pot; \
+       done
+
+clean:
+       rm -f *.mo *~
+
+install: all
+       for lang in $(LINGUAS) ; do \
+               install -d $(BUILD_ROOT)$(localedir)/$$lang/LC_MESSAGES ; \
+               install -m 644 $$lang.mo \
+                   $(BUILD_ROOT)$(localedir)/$$lang/LC_MESSAGES/quilt.mo ; \
+       done
+
+.PHONY: install clean all
diff --git a/lustre/kernel_patches/quilt/po/de.po b/lustre/kernel_patches/quilt/po/de.po
new file mode 100644 (file)
index 0000000..9b60350
--- /dev/null
@@ -0,0 +1,903 @@
+# German quilt translation
+# Copyright (C) 2003 Free Software Foundation, Inc.
+# Andreas Gruenbacher <agruen@suse.de>, 2003.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: quilt 0.21\n"
+"PO-Revision-Date: 2003-02-15 22:15 +0100\n"
+"Last-Translator: Andreas Gruenbacher <agruen@suse.de>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../bin/quilt.in:14
+msgid "Usage: quilt command [-h] ..."
+msgstr "Verwendung: quilt befehl [-h] ..."
+
+#: ../bin/quilt.in:26
+msgid "Commands are:"
+msgstr "Folgende Befehle gibt es:"
+
+#: ../quilt/add.in:22
+msgid "Usage: quilt add [-p patch] {file} ..."
+msgstr "Verwendung: quilt add [-p patch] {datei} ..."
+
+#: ../quilt/add.in:25
+msgid ""
+"\n"
+"\n"
+"Add one or more files to the topmost or named patch.  Files must be\n"
+"added to the patch before being modified.  Files that are modified by\n"
+"patches on top of the specified patch cannot be added.\n"
+"\n"
+"-p patch\n"
+"\tPatch to add files to."
+msgstr ""
+"\n"
+"\n"
+"Fügt eine oder mehrere Dateien zum obersten oder angegebenen Patch\n"
+"hinzu. Dateien müssen einem Patch hinzugefügt werden, bevor sie\n"
+"verändert werden. Dateien können einem Patch nur hinzugefügt werden,\n"
+"solange sie von keinem Patch höher auf dem Stapel verändert werden.\n"
+"\n"
+"-p patch\n"
+"\tDer Patch, zu dem die Dateien hinzugefügt werden sollen."
+
+#: ../quilt/add.in:75 ../quilt/delete.in:69 ../quilt/files.in:74
+#: ../quilt/push.in:184 ../quilt/remove.in:75
+msgid "No patch applied"
+msgstr "Kein Patch angewandt"
+
+#: ../quilt/add.in:80 ../quilt/applied.in:70 ../quilt/refresh.in:113
+#: ../quilt/remove.in:80
+msgid "Patch $patch is not applied"
+msgstr "Patch $patch ist nicht angewandt"
+
+#: ../quilt/add.in:89
+msgid "File $file is already in patch $patch"
+msgstr "Datei $file ist bereits in Patch $patch enthalten"
+
+#: ../quilt/add.in:96 ../quilt/remove.in:97
+msgid "File $file modified by patch $next_patch"
+msgstr "Datei $file wird von Patch $next_patch verändert"
+
+#: ../quilt/add.in:104
+msgid "Failed to back up file $file"
+msgstr "Konnte Datei $file nicht sichern"
+
+#: ../quilt/add.in:124
+msgid "File $file added to patch $patch"
+msgstr "Datei $file zu Patch $patch hinzugefügt"
+
+#: ../quilt/applied.in:22
+#, fuzzy
+msgid "Usage: quilt applied [-n] [patch]"
+msgstr "Verwendung: quilt applied [patch]"
+
+#: ../quilt/applied.in:25
+#, fuzzy
+msgid ""
+"\n"
+"\n"
+"Print a list of applied patches.\n"
+"\n"
+"-n\tPrint patch file names instead of patch names.\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"Gibt den Namen des Patches vor dem obersten oder angegebenen\n"
+"Patch in der series-Datei aus.\n"
+"\n"
+"-n\tPatch-Dateinamen statt Patch-Namen ausgeben.\n"
+"\n"
+
+#: ../quilt/delete.in:22
+msgid "Usage: quilt delete [patch]"
+msgstr "Verwendung: quilt delete [patch]"
+
+#: ../quilt/delete.in:25
+msgid ""
+"\n"
+"\n"
+"Remove the specified or topmost patch from the series file.  If the\n"
+"patch is applied, quilt will attempt to remove it first. (Only the\n"
+"topmost patch can be removed right now.)"
+msgstr ""
+"\n"
+"\n"
+"Löscht den obersten oder angegebenen Patch aus der series-Datei. Falls\n"
+"dieser Patch angewandt ist, entfernt quilt ihn zuerst. (Momentan kann \n"
+"nur der oberste Patch entfernt werden.)"
+
+#: ../quilt/delete.in:75
+msgid "Patch $patch does not exist"
+msgstr "Patch $patch existiert nicht"
+
+#: ../quilt/delete.in:84
+msgid "Patch $patch is currently applied"
+msgstr "Patch $patch ist momentan angewandt"
+
+#: ../quilt/delete.in:90
+msgid "Failed to remove patch $patch"
+msgstr "Konnte Patch $patch nicht entfernen"
+
+#: ../quilt/diff.in:27
+msgid "Usage: quilt diff [-p n] [-c patch|-z] [-R] [-P patch] [file ...]"
+msgstr ""
+"Verwendung: quilt diff [-p n] [-c patch|-z] [-R] [-P patch] [datei ...]"
+
+#: ../quilt/diff.in:31
+#, fuzzy
+msgid ""
+"\n"
+"\n"
+"Produces a diff of the specified file(s) in the topmost or specified\n"
+"patch.  If no files are specified, all files that are modified are\n"
+"included.\n"
+"\n"
+"-p n\tCreate a -p n style patch (-p0 or -p1 are supported).\n"
+"\n"
+"-P patch\n"
+"\tCreate a diff for the specified patch.  (Defaults to the topmost\n"
+"\tpatch.)\n"
+"\n"
+"-c patch\n"
+"\tCreate a combined diff for all patches between this patch and\n"
+"\tthe patch specified with -P. A patch name of \\\"-\\\" is equivalent\n"
+"\tto specifying the first applied patch.\n"
+"\n"
+"-R\tCreate a reverse diff.\n"
+"\n"
+"-z\tWrite to standard output the changes that have been made\n"
+"\trelative to the topmost or specified patch.\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"Erzeugt ein Diff der angegebenen Dateien im obersten oder angegebenen\n"
+"Patch. Wenn keine Dateien angegeben sind, werden alle im Patch\n"
+"enthaltenen Dateien einbezogen.\n"
+"\n"
+"-p n\tErzeugt einen -p n Patch (n=0 oder n=1 wird unterstützt).\n"
+"\n"
+"-P patch\n"
+"\tErzeuge ein Diff für den angegebenen Patch. (Wenn nicht angegeben,\n"
+"\toberster Patch.)\n"
+"\n"
+"-c patch\n"
+"\tErzeuge ein kombiniertes Diff für alle Patches zwischen diesem und\n"
+"\tdem mit -P angegebenen Patch.\n"
+"\n"
+"-R\tErzeuge ein umgekehrtes Diff.\n"
+"\n"
+"-z\tÄnderungen relativ zum angewandten Patch ausgeben.\n"
+"\n"
+
+#: ../quilt/diff.in:132
+msgid "Options \\`-c patch' and \\`-z' cannot be combined."
+msgstr "Die Optionen \\`-c patch' and \\`-z' können nicht kombiniert werden."
+
+#: ../quilt/diff.in:141 ../quilt/refresh.in:106
+msgid "No patch seem to be applied"
+msgstr "Es ist kein Patch angewandt"
+
+#: ../quilt/diff.in:148
+msgid "Patch $last_patch is not applied"
+msgstr "Patch $last_patch ist nicht angewandt"
+
+#: ../quilt/diff.in:158
+msgid ""
+"Cannot diff patches with -p$opt_strip_level, please specify -p0 or -p1 "
+"instead"
+msgstr ""
+"Kann kein Diff mit -p$opt_strip_level erzeugen, bitte -p0 oder -p1 verwenden."
+
+#: ../quilt/diff.in:166
+msgid "refresh_patches_per_file failed."
+msgstr "Fehler in refresh_patches_per_file."
+
+#: ../quilt/diff.in:179
+msgid "Patch $opt_combine not applied before $last_patch."
+msgstr "Patch $opt_combine ist nicht vor Patch $last_patch angewandt."
+
+#: ../quilt/diff.in:213
+msgid "File $file is not being modified."
+msgstr "Datei $file wird nicht verändert."
+
+#: ../quilt/diff.in:230
+msgid "Cannot change into .pc/$last_patch"
+msgstr "Kann nicht in Verzeichnis .pc/$last_patch wechseln."
+
+#: ../quilt/diff.in:235
+msgid "Failed to copy files to temporary directory"
+msgstr "Konnte Dateien nicht in ein temporäres Verzeichnis kopieren"
+
+#: ../quilt/diff.in:240
+msgid "Cannot change to temporary directory"
+msgstr "Kann nicht in temporäres Verzeichnis wechseln"
+
+#: ../quilt/diff.in:257
+msgid "Failed to patch temporary files"
+msgstr "Konnte temporäre Dateien nicht patchen"
+
+#: ../quilt/diff.in:264
+msgid "Cannot change to source directory"
+msgstr "Kann nicht in Quellverzeichnis wechseln"
+
+#: ../quilt/diff.in:293 ../quilt/refresh.in:144
+msgid "Diff failed, aborting."
+msgstr "Diff fehlgeschlagen, Abbruch."
+
+#: ../quilt/diff.in:300
+msgid "More recent patches modify files in $last_patch."
+msgstr "Später angewandte Patches verändern Dateien von $last_patch."
+
+#: ../quilt/files.in:22
+msgid "Usage: quilt files [-v] [patch]"
+msgstr "Verwendung: quilt files [-v] [patch]"
+
+#: ../quilt/files.in:25
+msgid ""
+"\n"
+"\n"
+"Print the list of files that the topmost or specified patch changes.\n"
+"\n"
+"-v\tVerbose, more user friendly output.\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"Gibt eine Liste der Dateien aus, die der oberste oder angegebene Patch\n"
+"beinhaltet.\n"
+"\n"
+"-v\tAusführlichere, benutzerfreundliche Ausgabe.\n"
+"\n"
+
+#: ../quilt/files.in:83
+msgid "Patch is not applied (no verbose output)"
+msgstr "Patch ist nicht angewandt (keine ausführliche Ausgabe)"
+
+#: ../quilt/files.in:86
+msgid "Patch is not applied"
+msgstr "Patch ist nicht angewandt"
+
+#: ../quilt/import.in:22
+msgid "Usage: quilt import [-f] [-p num] [-n patch] [patchfile]"
+msgstr "Verwendung: quilt import [-f] [-p num] [-n patch] [patchdatei]"
+
+#: ../quilt/import.in:25
+msgid ""
+"\n"
+"\n"
+"Import an external patch.  If a patch file name is specified, the patch\n"
+"will be stored in this relative path in the patches/ directory.  Else,\n"
+"if an input file name is given this name is used as the patch name.\n"
+"\n"
+"-p num\n"
+"\tNumber of directory levels to strip when aplying (default=1)\n"
+"\n"
+"-n patch\n"
+"\tFile name relative to patches/ to use.\n"
+"\n"
+"-f\tOverwite/update existing patches.\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"Importiert einen Patch aus einer Datei. Ist ein Patch-Dateiname\n"
+"angegeben, so wird er Patch in diesem Pfad relativ zum\n"
+"patches/-Verzeichnis abgelegt. Sonst wird (wenn angegeben) der\n"
+"Patch-Dateiname verwendet.\n"
+"\n"
+"-p num\n"
+"\tAnzahl der Verzeichnisebenen, die beim Anwenden des Patches entfernt\n"
+"\twerden (Standardwert=1)\n"
+"\n"
+"-n patch\n"
+"\tPatch-Dateiname relativ zum patches/-Verzeichnis.\n"
+"\n"
+"-f\tBestehende Patches Ã¼berschreiben/aktualisieren.\n"
+"\n"
+
+#: ../quilt/import.in:97
+msgid "Please use -n to specify a patch file name."
+msgstr "Bitte -n verwenden, um einen Patch-Namen anzugeben."
+
+#: ../quilt/import.in:105
+msgid "Patch file name \\\"$patch_file\\\" contains whitespace."
+msgstr "Patch-Dateiname \\\"$patch_file\\\" enthält Leerstellen."
+
+#: ../quilt/import.in:111
+msgid "Patch $patch is applied."
+msgstr "Patch $patch ist angewandt."
+
+#: ../quilt/import.in:120
+msgid "Cannot read from standard input."
+msgstr "Kann nicht von der Standardeingabe lesen."
+
+#: ../quilt/import.in:129 ../quilt/import.in:138
+msgid "Cannot decompress file $input_file"
+msgstr "Kann Datei $input_file nicht dekomprimieren"
+
+#: ../quilt/import.in:146
+msgid "Cannot read from file $input_file"
+msgstr "Kann nicht von Datei $input_file lesen"
+
+#: ../quilt/import.in:155
+msgid "Patch $patch exists. Replace with -f."
+msgstr "Patch $patch existiert bereits. Ersetzen mit -f."
+
+#: ../quilt/import.in:162
+msgid "Updating %patch section of patch $patch"
+msgstr "Aktualisiere %patch-Abschnitt von Patch $patch"
+
+#: ../quilt/import.in:165
+msgid "Failed to update %patch section of patch $patch"
+msgstr "Konnte %patch-Abschnitt in Patch $patch nicht aktualisieren"
+
+#: ../quilt/import.in:169
+msgid "Replacing patch $patch with new version"
+msgstr "Ersetze Patch $patch durch neuere Version"
+
+#: ../quilt/import.in:172
+msgid "Failed to replace patch $patch"
+msgstr "Konnte Patch $patch nicht ersetzen"
+
+#: ../quilt/import.in:177
+msgid "Importing patch $patch (stored as $patch_file)"
+msgstr "Importiere Patch $patch (abgelegt als $patch_file)"
+
+#: ../quilt/import.in:184
+msgid "Failed to import patch $patch"
+msgstr "Konnte Patch $patch nicht importieren"
+
+#: ../quilt/import.in:194
+msgid "Failed to insert $patch in file series."
+msgstr "Konnte Patch $patch nicht in die series-Datei einfügen."
+
+#: ../quilt/new.in:22
+msgid "Usage: quilt new {patchname}"
+msgstr "Verwendung: new {patchname}"
+
+#: ../quilt/new.in:25
+msgid ""
+"\n"
+"\n"
+"Create a new patch with the specified file name, and insert it after the\n"
+"topmost patch in the patch series file.\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"Erzeugr einen neuen Patch mit dem angegebenen Dateinamen, und fügt\n"
+"ihn nach dem obersten Patch in die series-Datei ein.\n"
+"\n"
+
+#: ../quilt/new.in:67
+msgid "Patch $patch exists already"
+msgstr "Patch $patch existiert bereits"
+
+#: ../quilt/new.in:77
+msgid "Failed to create patch $patch"
+msgstr "Konnte Patch $patch nicht erzeugen"
+
+#: ../quilt/new.in:80
+msgid "Patch $patch is now on top"
+msgstr "Der oberste Patch ist jetzt $patch"
+
+#: ../quilt/next.in:22
+msgid "Usage: quilt next [patch]"
+msgstr "Verwendung: quilt next [patch]"
+
+#: ../quilt/next.in:25
+msgid ""
+"\n"
+"\n"
+"Print the name of the next patch after the specified or topmost patch in\n"
+"the series file.\n"
+"\n"
+"-n\tPrint patch file names instead of patch names.\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"Gibt den Namen des nächsten Patches nach dem obersten oder angegebenen\n"
+"Patch in der series-Datei aus.\n"
+"\n"
+"-n\tPatch-Dateinamen statt Patch-Namen ausgeben.\n"
+"\n"
+
+#: ../quilt/patches.in:22
+msgid "Usage: quilt patches {file}"
+msgstr "Verwendung: quilt patches {file}"
+
+#: ../quilt/patches.in:25
+msgid ""
+"\n"
+"\n"
+"Print the list of patches that modify the specified file.\n"
+"\n"
+"-n\tPrint the patch file names instead of the patch names.\n"
+"\n"
+"-v\tVerbose, more user friendly output.\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"Gibt die Liste der Patches aus, die die angegebene Datei verändern.\n"
+"\n"
+"-n\tPatch-Dateinamen statt Patch-Namen ausgeben.\n"
+"\n"
+"-v\tAusführlichere, benutzerfreundliche Ausgabe.\n"
+"\n"
+
+#: ../quilt/pop.in:22
+msgid "Usage: quilt pop [-afRqv] [num|patch]"
+msgstr "Verwendung: quilt pop [-afRqv] [num|patch]"
+
+#: ../quilt/pop.in:25
+msgid ""
+"\n"
+"\n"
+"Remove patch(es) from the current stack. A number of patches to remove,\n"
+"or a patch name can be specified. If a patch name is given, remove all\n"
+"patches applied on top of the named patch. If neither a number nor a\n"
+"patch name is specified, remove the next patch from the series file.\n"
+"\n"
+"-a\tRemove all applied patches.\n"
+"\n"
+"-f\tForce remove. The state before the patch(es) were applied will\n"
+"\tbe restored from backup files.\n"
+"\n"
+"-R\tRemove the patch with \\`patch -R' and check if the patch reverts\n"
+"\tall changes properly.\n"
+"\n"
+"-q\tQuiet operation.\n"
+"\n"
+"-v\tVerbose operation.\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"Entfernt Patches vom Stapel. Es kann eine Anzahl von Patches, die\n"
+"entfernt werden soll, oder der Name eines Patches angegeben werden.\n"
+"Wenn ein Name angegeben wird, werden alle Patches Ã¼ber dem angegebenen\n"
+"Patch entfernt. Wenn weder ein Patchname noch eine Nummer angegeben\n"
+"wird, wird der oberste Patch entfernt.\n"
+"\n"
+"-a\tAlle angewandten Patches entfernen.\n"
+"\n"
+"-f\tErzwungenes Entfernen. Der Zustand vor dem Anwenden das Patches wird\n"
+"\tüber die Sicherungsdateien wiederhergestellt.\n"
+"\n"
+"-R\tEntfernen Ã¼ber \\`patch -R'. Ãœberprüft auch, ob der\n"
+"\tAusgangszustand vor dem Anwenden des Patches wieder erreicht wird.\n"
+"\n"
+"-q\tWenige Meldungen ausgeben.\n"
+"\n"
+"-v\tViele Meldungen ausgeben.\n"
+"\n"
+
+#: ../quilt/pop.in:146
+msgid "Patch $stop_at_patch is not applied."
+msgstr "Patch $stop_at_patch ist nicht angewandt."
+
+#: ../quilt/pop.in:156
+msgid "No patch removed"
+msgstr "Kein Patch entfernt"
+
+#: ../quilt/pop.in:170 ../quilt/push.in:201
+msgid "Interrupted by user"
+msgstr "Unterbrechung durch Benutzer"
+
+#: ../quilt/pop.in:179 ../quilt/push.in:210
+msgid "No patches applied"
+msgstr "Keine Patches angewandt"
+
+#: ../quilt/pop.in:181 ../quilt/push.in:212
+msgid "Now at patch $patch"
+msgstr "Jetzt in Patch $patch"
+
+#: ../quilt/previous.in:22
+#, fuzzy
+msgid "Usage: quilt previous [-n] [patch]"
+msgstr "Verwendung: quilt previous [patch]"
+
+#: ../quilt/previous.in:25
+msgid ""
+"\n"
+"\n"
+"Print the name of the previous patch before the specified or topmost\n"
+"patch in the series file.\n"
+"\n"
+"-n\tPrint patch file names instead of patch names.\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"Gibt den Namen des Patches vor dem obersten oder angegebenen\n"
+"Patch in der series-Datei aus.\n"
+"\n"
+"-n\tPatch-Dateinamen statt Patch-Namen ausgeben.\n"
+"\n"
+
+#: ../quilt/push.in:21
+msgid "Usage: quilt push [-afqv] [--leave-rejects] [num|patch]"
+msgstr "Verwendung: quilt push [-afqv] [--leave-rejects] [num|patch]"
+
+#: ../quilt/push.in:24
+#, fuzzy
+msgid ""
+"\n"
+"\n"
+"Apply patch(es) from the series file.  A number of patches to apply, or\n"
+"a patch name can be specified.  If a patch name is given, apply all\n"
+"patches up to and including the named patch.  If neither a number nor a\n"
+"patch name is specified, apply the next patch from the series file.\n"
+"\n"
+"-a\tApply all patches in the series file.\n"
+"\n"
+"-f\tForce apply, even if the patch has rejects.\n"
+"\n"
+"-q\tQuiet operation.\n"
+"\n"
+"-v\tVerbose operation.\n"
+"\n"
+"--leave-rejects\n"
+"\tLeave around the reject files patch produced, even if the patch\n"
+"\tis not actually applied.\n"
+"\n"
+"--interactive\n"
+"\tAllow the patch utility to ask how to deal with conflicts. If\n"
+"\tthis option is not given, the option -f will be passed to the \n"
+"\tpatch program.\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"Patches in der series-Datei anwenden. Es kann eine Anzahl von Patches,\n"
+"die angewandt werden soll, oder der Name eines Patches angegeben werden.\n"
+"Wenn ein Name angegeben wird, werden alle Patches bis einschließlich zum\n"
+"angegebenen Patch angewandt. Wenn weder ein Patchname noch eine Nummer\n"
+"angegeben wird, wird der nächste Patch angewandt.\n"
+"\n"
+"-a\tAlle folgenden Patches anwenden.\n"
+"\n"
+"-f\tAnwenden erzwingen, solbst wenn dabei Fehler (Rejects) auftreten.\n"
+"\n"
+"-q\tWenige Meldungen ausgeben.\n"
+"\n"
+"-v\tViele Meldungen ausgeben.\n"
+"\n"
+"--leave-rejects\n"
+"\tReject-Dateien (von \\`patch') bestehen lassen, selbst wenn ein Patch\n"
+"\tnicht sauber angewandt werden kann.\n"
+"\t\n"
+
+#: ../quilt/push.in:86
+msgid "Patch $stop_at_patch not found in file series"
+msgstr "Patch $stop_at_patch in series-Datei nicht gefunden"
+
+#: ../quilt/push.in:162
+msgid "Patch $stop_at_patch is already applied."
+msgstr "Patch $stop_at_patch ist bereits angewandt."
+
+#: ../quilt/push.in:186
+msgid "File series fully applied, ends at patch $top"
+msgstr "series-Datei vollständig angewandt, endet in Patch $top"
+
+#: ../quilt/refresh.in:27
+msgid "Usage: quilt refresh [-p n] [-f] [patch]"
+msgstr "Verwendung: quilt refresh [-p n] [-f] [patch]"
+
+#: ../quilt/refresh.in:31
+msgid ""
+"\n"
+"\n"
+"Refreshes the specified patch, or the topmost patch by default.\n"
+"Documentation that comes before the actual patch in the patch file is\n"
+"retained.\n"
+"\n"
+"It is possible to refresh patches that are not on top.  If any patches\n"
+"on top of the patch to refresh modify the same files, the script aborts\n"
+"by default.  Patches can still be refreshed with -f.  In that case this\n"
+"script will print a warning for each shadowed file, changes by more\n"
+"recent patches will be ignored, and only changes in files that have not\n"
+"been modified by any more recent patches will end up in the specified\n"
+"patch.\n"
+"\n"
+"-p n\tCreate a -p n style patch (-p0 or -p1 supported).\n"
+"\t\n"
+"-f\tForce refresh, even if more recent patches modify\n"
+"\tsome of the same files.\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"Frischt den obersten oder angegebenen Patch auf. Dokumentation in der\n"
+"Patch-Datei, die vor dem eigentlichen Patch steht, bleibt dabei\n"
+"erhalten.\n"
+"\n"
+"Es können beliebige angewandte Patches aufgefrischt werden. Wenn\n"
+"Patches, die nach dem angegebenen Patch angewandt sind, dieselben\n"
+"Dateien verändern, die auch dieser Patch verändert, bricht dieses Script\n"
+"normalerweise ab. Mit der Option -f kann das Auffrischen trotzdem\n"
+"erzwungen werden. Dann wird für jede Datei, die später noch verändert\n"
+"wurde, eine Warnung ausgegeben, und nur Ã„nderungen in Dateien, die\n"
+"danach nicht von anderen Patches weiter verändert werden, werden beim\n"
+"Auffrischen berücksichtigt.\n"
+"\n"
+"-p n\tErzeugt einen -p n Patch (n=0 oder n=1 werden unterstützt).\n"
+"\t\n"
+"-f\tAuffrischen erzwingen, selbst wenn Patches Ã¼ber dem angegebenen Patch\n"
+"\teinige der selben Dateien verändern.\n"
+"\n"
+
+#: ../quilt/refresh.in:123
+msgid ""
+"Cannot refresh patches with -p$opt_strip_level, please specify -p0 or -p1 "
+"instead"
+msgstr ""
+"Kann Patches mit Level -p$opt_strip_level nicht auffrischen, bitte -p0 oder -"
+"p1 angeben"
+
+#: ../quilt/refresh.in:150
+msgid "More recent patches modify files in $patch. Enforce refresh with -f."
+msgstr ""
+"Später angewandte Patches verändern Dateien von $patch. Auffrischen mit -f "
+"erzwingen."
+
+#: ../quilt/refresh.in:157
+msgid "Nothing in patch $patch"
+msgstr "Patch $patch is leer"
+
+#: ../quilt/refresh.in:197
+msgid "Refreshed patch $patch"
+msgstr "Patch $patch aufgefrischt."
+
+#: ../quilt/remove.in:22
+msgid "Usage: quilt remove [-p patch] {file} ..."
+msgstr "Verwendung: quilt remove [-p patch] {datei} ..."
+
+#: ../quilt/remove.in:25
+msgid ""
+"\n"
+"\n"
+"Remove one or more files from the topmost or named patch.  Files that\n"
+"are modified by patches on top of the specified patch cannot be removed.\n"
+"\n"
+"-p patch\n"
+"\tPatch to remove files from.\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"Entfernt Dateien aus dem obersten oder angegebenen Patch. Dateien, die\n"
+"durch Patches Ã¼ber dem angegebenen Patch verändert werden, können nicht\n"
+"entfernt werden.\n"
+"\n"
+"-p patch\n"
+"\tPatch, aus dem Dateien entfernt werden sollen.\n"
+"\n"
+
+#: ../quilt/remove.in:89
+msgid "File $file is not in patch $patch"
+msgstr "Datei $file ist nicht in Patch $patch enthalten."
+
+#: ../quilt/remove.in:105
+msgid "Failed to remove file $file from patch $patch"
+msgstr "Konnte Datei $file nicht aus Patch $patch entfernen."
+
+#: ../quilt/remove.in:116
+msgid "File $file removed from patch $patch"
+msgstr "Datei $file aus Patch $patch entfernt."
+
+#: ../quilt/series.in:22
+msgid "Usage: quilt series [-v]"
+msgstr "Verwendung: quilt series [-v]"
+
+#: ../quilt/series.in:25
+msgid ""
+"\n"
+"\n"
+"Print the names of all patches in the series file.\n"
+"\n"
+"-n\tPrint patch file names instead patch names.\n"
+"\n"
+"-v\tVerbose, more user friendly output.\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"Gibt die Namen aller Dateien in der series-Datei aus.\n"
+"\n"
+"-n\tPatch-Dateinamen statt Patch-Namen ausgeben.\n"
+"\n"
+"-v\tAusführlichere, benutzerfreundliche Ausgabe.\n"
+"\n"
+
+#: ../quilt/setup.in:22
+msgid "Usage: quilt setup [-d sourcedir] {seriesfile|specfile}"
+msgstr "Verwendung: quilt setup [-d quellvz.] {seriesdatei|specdatei}"
+
+#: ../quilt/setup.in:25
+msgid ""
+"\n"
+"\n"
+"Initializes a source tree from a patch series file.  The patch series\n"
+"file must contain the name of the relevant tar archive, in addition to\n"
+"the list of patches.\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"Baut einen Quellen-Baum aus einer series-Datei auf. Die series-Datei\n"
+"muß neben der Liste der Patches auch den Namen der entsprechenden\n"
+"Tar-Datei enthalten.\n"
+"\n"
+
+#: ../quilt/setup.in:100
+msgid "Series file $series_file not found"
+msgstr "Seriendatei $series_file nicht gefunden"
+
+#: ../quilt/setup.in:118
+#, fuzzy
+msgid "create link patch $packagedir/patches to $source"
+msgstr "Kopiere Patch $source/$arg"
+
+#: ../quilt/setup.in:121
+#, fuzzy
+msgid "creat link of $series_file"
+msgstr "Kopiere Seriendatei"
+
+#: ../quilt/setup.in:131
+msgid "Directory $packagedir set up."
+msgstr "Verzeichnis $packagedir aufgebaut."
+
+#: ../quilt/top.in:22
+msgid "Usage: quilt top"
+msgstr "Verwendung: quilt top"
+
+#: ../quilt/top.in:25
+msgid ""
+"\n"
+"\n"
+"Print the name of the topmost patch on the current stack of applied\n"
+"patches.\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"Gibt den Namen des obersten Patches auf dem Stapel aus.\n"
+
+#: ../quilt/unapplied.in:22
+msgid "Usage: quilt unapplied [patch]"
+msgstr "Verwendung: quilt unapplied [patch]"
+
+#: ../quilt/unapplied.in:25
+msgid ""
+"\n"
+"\n"
+"Print a list of patches that are not applied, or all patches that follow\n"
+"the specified patch in the series file.\n"
+"\n"
+"-n\tPrint patch file names instead of patch names.\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"Gint eine Liste der Patches aus, die momentan nicht angewandt sind, bzw.\n"
+"eine Liste der Patches, die dem angegebenen Patch folgen.\n"
+"\n"
+"-n\tPatch-Dateinamen statt Patch-Namen ausgeben.\n"
+"\n"
+
+#: ../scripts/apatch.in:22
+msgid "Usage: $0 [-fqv] patchname"
+msgstr "Verwendung: $0 [-fqv] patchname"
+
+#: ../scripts/apatch.in:40
+msgid "Interrupted by user; patch $patch was not applied."
+msgstr "Unterbrechung durch Benutzer; Patch $patch wurde nicht angewandt."
+
+#: ../scripts/apatch.in:51 ../scripts/rpatch.in:113
+msgid "Patch file $patch_file appears to be empty"
+msgstr "Patch-Datei $patch_file scheint leer zu sein"
+
+#: ../scripts/apatch.in:80
+msgid "refresh_file_list failed"
+msgstr "Fehler in refresh_file_list"
+
+#: ../scripts/apatch.in:84
+msgid "Applying $patch"
+msgstr "Anwenden von $patch"
+
+#: ../scripts/apatch.in:87
+msgid "Patch $patch appears to be empty, applied"
+msgstr "Patch $patch scheint leer zu sein, angewandt"
+
+#: ../scripts/apatch.in:95
+msgid "Recreated file list for $patch"
+msgstr "Dateiliste für $patch aktualisiert"
+
+#: ../scripts/apatch.in:126
+msgid "Applied $patch (forced; needs refresh)"
+msgstr "Patch $patch angewandt (erzwungen, muß aufgefrischt werden (Refresh))"
+
+#: ../scripts/apatch.in:130
+msgid "Patch $patch does not apply (enforce with -f)"
+msgstr "Patch $patch läßt sich nicht anwenden (erzwingen mit -f)"
+
+#: ../scripts/apatch.in:186 ../scripts/rpatch.in:245
+msgid "The topmost patch $top needs to be refreshed first."
+msgstr "Der oberste Patch $top muss zuerst aufgefrischt werden (Refresh)."
+
+#: ../scripts/rpatch.in:22
+msgid "Usage: $0 [-fRq] patchname"
+msgstr "Verwendung: $0 [-fRq] patchname"
+
+#: ../scripts/rpatch.in:44
+msgid "Patch does not remove changes:"
+msgstr "Patch entfernt folgende Ã„nderungen nicht:"
+
+#: ../scripts/rpatch.in:102
+msgid "Interrupted by user; patch $patch was not removed."
+msgstr "Unterbrechung durch Benutzer; Patch $patch wurde nicht entfernt."
+
+#: ../scripts/rpatch.in:146
+msgid "Patch $patch appears to be empty, removed"
+msgstr "Patch $patch scheint leer zu sein, entfernt"
+
+#: ../scripts/rpatch.in:151
+msgid "Removing $patch"
+msgstr "Entferne $patch"
+
+#: ../scripts/rpatch.in:172
+msgid "Failed to create temporary files"
+msgstr "Konnte temporäres Verzeichnis nicht erstellen"
+
+#: ../scripts/rpatch.in:193
+msgid "Patch $patch does not remove (enforce with -f)"
+msgstr "Patch $patch kann nicht entfernt werden (erzwingen mit -f)"
+
+#: ../scripts/spec2series.in:100 ../scripts/spec2series.in:192
+msgid " done"
+msgstr " fertig"
+
+#~ msgid "Reading sources from $arg"
+#~ msgstr "Quellen werden von $arg gelesen"
+
+#~ msgid "Unpacking archive $source/$arg"
+#~ msgstr "Entpacke Archiv source/$arg"
+
+#~ msgid "Directory $packagedir exists already."
+#~ msgstr "Verzeichnis $packagedir existiert bereits."
+
+#~ msgid "File $packagedir exists."
+#~ msgstr "Datei $packagedir existiert."
+
+#, fuzzy
+#~ msgid "create link patch $source"
+#~ msgstr "Kopiere Patch $source/$arg"
+
+#, fuzzy
+#~ msgid "creat link of series file"
+#~ msgstr "Kopiere Seriendatei"
+
+#~ msgid ""
+#~ "\n"
+#~ "\n"
+#~ "Print a list of applied patches, or all patches up to and including the\n"
+#~ "specified patch in the file series.\n"
+#~ "\n"
+#~ "-n\tPrint patch file names instead of patch names."
+#~ msgstr ""
+#~ "\n"
+#~ "\n"
+#~ "Gibt eine Liste der angewandten Patches aus, oder eine Liste aller "
+#~ "Patches\n"
+#~ "vom Anfang der Serie bis zum angegebenen Patch.\n"
+#~ "\n"
+#~ "-n\tPatch-Dateinamen statt Patch-Namen ausgeben."
diff --git a/lustre/kernel_patches/quilt/po/fr.po b/lustre/kernel_patches/quilt/po/fr.po
new file mode 100644 (file)
index 0000000..c84de81
--- /dev/null
@@ -0,0 +1,907 @@
+# quilt french translation
+# Copyright (C) 2003 Free Software Foundation, Inc.
+# Martin Quinson <Martin.Quinson@tuxfamily.org>, 2003.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: quilt 0.22\n"
+"PO-Revision-Date: 2003-06-25 15:40+0200\n"
+"Last-Translator: Martin Quinson <Martin.Quinson@tuxfamily.org>\n"
+"Language-Team: French <traduc@traduc.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../bin/quilt.in:14
+msgid "Usage: quilt command [-h] ..."
+msgstr "Usage : quilt commande [-h] ..."
+
+#: ../bin/quilt.in:26
+msgid "Commands are:"
+msgstr "Les commandes sont :"
+
+#: ../quilt/add.in:22
+msgid "Usage: quilt add [-p patch] {file} ..."
+msgstr "Usage : quilt add [-p patch] {fichier} ..."
+
+#: ../quilt/add.in:25
+msgid ""
+"\n"
+"\n"
+"Add one or more files to the topmost or named patch.  Files must be\n"
+"added to the patch before being modified.  Files that are modified by\n"
+"patches on top of the specified patch cannot be added.\n"
+"\n"
+"-p patch\n"
+"\tPatch to add files to."
+msgstr ""
+"\n"
+"\n"
+"Ajoute un ou plusieurs fichiers au patch indiqué ou Ã  celui au sommet.\n"
+"Les fichiers doivent Ãªtre ajoutés au patch avant toute modification.\n"
+"Les fichiers modifiés par d'autres patches plus haut dans la pile ne\n"
+"peuvent pas Ãªtre ajoutés.\n"
+"\n"
+"-p patch\n"
+"\tPatch auquel les fichiers doivent Ãªtre ajoutés."
+
+#: ../quilt/add.in:75 ../quilt/delete.in:69 ../quilt/files.in:74
+#: ../quilt/push.in:184 ../quilt/remove.in:75
+msgid "No patch applied"
+msgstr "Aucun patch n'est appliqué"
+
+#: ../quilt/add.in:80 ../quilt/applied.in:70 ../quilt/refresh.in:113
+#: ../quilt/remove.in:80
+msgid "Patch $patch is not applied"
+msgstr "Le patch $patch n'est pas appliqué"
+
+#: ../quilt/add.in:89
+msgid "File $file is already in patch $patch"
+msgstr "Le fichier $file est déjà dans le patch $patch"
+
+#: ../quilt/add.in:96 ../quilt/remove.in:97
+msgid "File $file modified by patch $next_patch"
+msgstr "Le fichier $file est modifié par le patch $next_patch"
+
+#: ../quilt/add.in:104
+msgid "Failed to back up file $file"
+msgstr "Impossible de faire une copie de sécurité de $file"
+
+#: ../quilt/add.in:124
+msgid "File $file added to patch $patch"
+msgstr "Le fichier $file a Ã©té ajouté au patch $patch"
+
+#: ../quilt/applied.in:22
+#, fuzzy
+msgid "Usage: quilt applied [-n] [patch]"
+msgstr "Usage : quilt applied [patch]"
+
+#: ../quilt/applied.in:25
+#, fuzzy
+msgid ""
+"\n"
+"\n"
+"Print a list of applied patches.\n"
+"\n"
+"-n\tPrint patch file names instead of patch names.\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"Affiche le nom du patch avant celui spécifié (ou après celui au sommet)\n"
+"dans le fichier de série.\n"
+"\n"
+"-n\tAffiche le nom de fichier au lieu du nom de patch.\n"
+"\n"
+
+#: ../quilt/delete.in:22
+msgid "Usage: quilt delete [patch]"
+msgstr "Usage : quilt delete [patch]"
+
+#: ../quilt/delete.in:25
+msgid ""
+"\n"
+"\n"
+"Remove the specified or topmost patch from the series file.  If the\n"
+"patch is applied, quilt will attempt to remove it first. (Only the\n"
+"topmost patch can be removed right now.)"
+msgstr ""
+"\n"
+"\n"
+"Efface le patch spécifié (ou celui au sommet de la pile) de la série \n"
+"actuelle. Si le patch est appliqué, quilt tentera de le retirer avant.\n"
+"(Seul le patch au sommet peut Ãªtre retiré pour l'instant)."
+
+#: ../quilt/delete.in:75
+msgid "Patch $patch does not exist"
+msgstr "Le patch $patch n'existe pas"
+
+#: ../quilt/delete.in:84
+msgid "Patch $patch is currently applied"
+msgstr "Le patch $patch est appliqué"
+
+#: ../quilt/delete.in:90
+msgid "Failed to remove patch $patch"
+msgstr "Impossible de retirer le patch $patch"
+
+#: ../quilt/diff.in:27
+msgid "Usage: quilt diff [-p n] [-c patch|-z] [-R] [-P patch] [file ...]"
+msgstr "Usage : quilt diff [-p n] [-c patch|-z] [-R] [-P patch] [fichier ...]"
+
+#: ../quilt/diff.in:31
+#, fuzzy
+msgid ""
+"\n"
+"\n"
+"Produces a diff of the specified file(s) in the topmost or specified\n"
+"patch.  If no files are specified, all files that are modified are\n"
+"included.\n"
+"\n"
+"-p n\tCreate a -p n style patch (-p0 or -p1 are supported).\n"
+"\n"
+"-P patch\n"
+"\tCreate a diff for the specified patch.  (Defaults to the topmost\n"
+"\tpatch.)\n"
+"\n"
+"-c patch\n"
+"\tCreate a combined diff for all patches between this patch and\n"
+"\tthe patch specified with -P. A patch name of \\\"-\\\" is equivalent\n"
+"\tto specifying the first applied patch.\n"
+"\n"
+"-R\tCreate a reverse diff.\n"
+"\n"
+"-z\tWrite to standard output the changes that have been made\n"
+"\trelative to the topmost or specified patch.\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"Produit un diff du ou des fichiers spécifiés par le patch spécifié (ou Ã \n"
+"défaut, par le patch au sommet). Si aucun fichier n'est indiqué, tous les\n"
+"fichiers modifiés par ce patch sont inclus.\n"
+"\n"
+"-p n\tCrée un patch au style -p n (-p0 et -p1 sont possibles).\n"
+"\n"
+"-P patch\n"
+"\tCrée un diff pour ce patch (par défaut, le patch au sommet)\n"
+"\n"
+"-c patch\n"
+"\tCrée un diff combiné pour tous les patches se trouvant entre\n"
+"\tce patch et celui indiqué avec l'option -P.\n"
+"\n"
+"-R\tCrée un patch inversé.\n"
+"\n"
+"-z\tÉcrit sur la sortie standard les changements fait par rapport\n"
+"\tau patch spécifié.\n"
+"\n"
+
+#: ../quilt/diff.in:132
+msgid "Options \\`-c patch' and \\`-z' cannot be combined."
+msgstr "Les options \\`-c patch' et \\`-z' ne peuvent pas Ãªtre combinées."
+
+#: ../quilt/diff.in:141 ../quilt/refresh.in:106
+msgid "No patch seem to be applied"
+msgstr "Aucun patch ne semble appliqué"
+
+#: ../quilt/diff.in:148
+msgid "Patch $last_patch is not applied"
+msgstr "Le patch $last_patch ne semble pas appliqué"
+
+#: ../quilt/diff.in:158
+msgid ""
+"Cannot diff patches with -p$opt_strip_level, please specify -p0 or -p1 "
+"instead"
+msgstr ""
+"Impossible de créer des patches avec -p$opt_strip_level. Veuillez spécifier -"
+"p0 ou -p1 Ã  la place"
+
+#: ../quilt/diff.in:166
+msgid "refresh_patches_per_file failed."
+msgstr "refresh_patches_per_file a Ã©choué."
+
+#: ../quilt/diff.in:179
+msgid "Patch $opt_combine not applied before $last_patch."
+msgstr "Le patch $opt_combine n'est pas appliqué avant $last_patch."
+
+#: ../quilt/diff.in:213
+msgid "File $file is not being modified."
+msgstr "Le fichier $file n'est pas modifié."
+
+#: ../quilt/diff.in:230
+msgid "Cannot change into .pc/$last_patch"
+msgstr "Impossible d'entrer dans .pc/$last_patch"
+
+#: ../quilt/diff.in:235
+msgid "Failed to copy files to temporary directory"
+msgstr "Impossible de copier les fichiers dans le répertoire temporaire"
+
+#: ../quilt/diff.in:240
+msgid "Cannot change to temporary directory"
+msgstr "Impossible d'entrer dans le répertoire temporaire"
+
+#: ../quilt/diff.in:257
+msgid "Failed to patch temporary files"
+msgstr "Impossible de patcher les fichiers temporaires"
+
+#: ../quilt/diff.in:264
+msgid "Cannot change to source directory"
+msgstr "Impossible d'entrer dans le répertoire source"
+
+#: ../quilt/diff.in:293 ../quilt/refresh.in:144
+msgid "Diff failed, aborting."
+msgstr "Le diff a Ã©choué. Abandon."
+
+#: ../quilt/diff.in:300
+msgid "More recent patches modify files in $last_patch."
+msgstr "Un patch plus recent modifie des fichiers communs Ã  $last_patch."
+
+#: ../quilt/files.in:22
+msgid "Usage: quilt files [-v] [patch]"
+msgstr "Usage : quilt files [-v] [patch]"
+
+#: ../quilt/files.in:25
+msgid ""
+"\n"
+"\n"
+"Print the list of files that the topmost or specified patch changes.\n"
+"\n"
+"-v\tVerbose, more user friendly output.\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"Affiche la liste des fichiers modifiés par le patch spécifié (ou celui \n"
+"au sommet).\n"
+"\n"
+"-v\tAffichage verbeux, plus simple Ã  lire.\n"
+"\n"
+
+#: ../quilt/files.in:83
+msgid "Patch is not applied (no verbose output)"
+msgstr "Le patch n'est pas appliqué (affichage non verbeux)"
+
+#: ../quilt/files.in:86
+msgid "Patch is not applied"
+msgstr "Le patch n'est pas appliqué"
+
+#: ../quilt/import.in:22
+msgid "Usage: quilt import [-f] [-p num] [-n patch] [patchfile]"
+msgstr "Usage : quilt import [-f] [-p num] [-n patch] [fichier_de_patch]"
+
+#: ../quilt/import.in:25
+msgid ""
+"\n"
+"\n"
+"Import an external patch.  If a patch file name is specified, the patch\n"
+"will be stored in this relative path in the patches/ directory.  Else,\n"
+"if an input file name is given this name is used as the patch name.\n"
+"\n"
+"-p num\n"
+"\tNumber of directory levels to strip when aplying (default=1)\n"
+"\n"
+"-n patch\n"
+"\tFile name relative to patches/ to use.\n"
+"\n"
+"-f\tOverwite/update existing patches.\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"Importe un patch externe. Si le nom de fichier spécifié est un chemin, il\n"
+"est relatif au répertoire patches/. Si aucun nom de fichier n'est donné, le\n"
+"patch sera stocké dans un fichier du même nom que le fichier d'entrée.\n"
+"\n"
+"-p num\n"
+"\tNombre de niveaux de répertoires Ã  retirer lors de l'application du \n"
+"\tpatch (1 par défaut).\n"
+"\n"
+"-n patch\n"
+"\tNom de fichier (relatif Ã  patches/) Ã  utiliser.\n"
+"\n"
+"-f\tÉcrase/met Ã  jour les patchs existants.\n"
+"\n"
+
+#: ../quilt/import.in:97
+msgid "Please use -n to specify a patch file name."
+msgstr "Veuillez utiliser -n pour spécifier un nom de fichier de patch."
+
+#: ../quilt/import.in:105
+msgid "Patch file name \\\"$patch_file\\\" contains whitespace."
+msgstr "Le nom de fichier de patch \"$patch_file\" contient des espaces."
+
+#: ../quilt/import.in:111
+msgid "Patch $patch is applied."
+msgstr "Le patch $patch est appliqué."
+
+#: ../quilt/import.in:120
+msgid "Cannot read from standard input."
+msgstr "Impossible de lire depuis l'entrée standard."
+
+#: ../quilt/import.in:129 ../quilt/import.in:138
+msgid "Cannot decompress file $input_file"
+msgstr "Impossible de décompresser le fichier $input_file"
+
+#: ../quilt/import.in:146
+msgid "Cannot read from file $input_file"
+msgstr "Impossible de lire depuis le fichier $input_file"
+
+#: ../quilt/import.in:155
+msgid "Patch $patch exists. Replace with -f."
+msgstr "Le patch $patch existe. Utilisez -f pour le remplacer."
+
+#: ../quilt/import.in:162
+msgid "Updating %patch section of patch $patch"
+msgstr "Mise Ã  jour de la section %patch dans $patch"
+
+#: ../quilt/import.in:165
+msgid "Failed to update %patch section of patch $patch"
+msgstr "Impossible de mettre Ã  jour la section %patch du patch $patch"
+
+#: ../quilt/import.in:169
+msgid "Replacing patch $patch with new version"
+msgstr "Remplacement du patch $patch avec la nouvelle version"
+
+#: ../quilt/import.in:172
+msgid "Failed to replace patch $patch"
+msgstr "Impossible de remplacer le patch $patch"
+
+#: ../quilt/import.in:177
+msgid "Importing patch $patch (stored as $patch_file)"
+msgstr "Import du patch $patch (enregistré dans $patch_file)"
+
+#: ../quilt/import.in:184
+msgid "Failed to import patch $patch"
+msgstr "Impossible d'importer le patch $patch"
+
+#: ../quilt/import.in:194
+msgid "Failed to insert $patch in file series."
+msgstr "Impossible d'inserer $patch dans le fichier de série."
+
+#: ../quilt/new.in:22
+msgid "Usage: quilt new {patchname}"
+msgstr "Usage : quilt new {nom_de_patch}"
+
+#: ../quilt/new.in:25
+msgid ""
+"\n"
+"\n"
+"Create a new patch with the specified file name, and insert it after the\n"
+"topmost patch in the patch series file.\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"Crée un nouveau patch au nom spécifié, et l'insere après le patch\n"
+"au sommet dans le fichier de série.\n"
+"\n"
+
+#: ../quilt/new.in:67
+msgid "Patch $patch exists already"
+msgstr "Le patch $patch existe déjà"
+
+#: ../quilt/new.in:77
+msgid "Failed to create patch $patch"
+msgstr "Impossible de crée le patch $patch"
+
+#: ../quilt/new.in:80
+msgid "Patch $patch is now on top"
+msgstr "Le patch $patch est maintenant au sommet"
+
+#: ../quilt/next.in:22
+msgid "Usage: quilt next [patch]"
+msgstr "Usage : quilt next [patch]"
+
+#: ../quilt/next.in:25
+msgid ""
+"\n"
+"\n"
+"Print the name of the next patch after the specified or topmost patch in\n"
+"the series file.\n"
+"\n"
+"-n\tPrint patch file names instead of patch names.\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"Affiche le nom du patch après celui spécifié (ou après celui au sommet)\n"
+"dans le fichier de série.\n"
+"\n"
+"-n\tAffiche le nom de fichier au lieu du nom de patch.\n"
+"\n"
+
+#: ../quilt/patches.in:22
+msgid "Usage: quilt patches {file}"
+msgstr "Usage : quilt patches {fichier}"
+
+#: ../quilt/patches.in:25
+msgid ""
+"\n"
+"\n"
+"Print the list of patches that modify the specified file.\n"
+"\n"
+"-n\tPrint the patch file names instead of the patch names.\n"
+"\n"
+"-v\tVerbose, more user friendly output.\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"Affiche la liste des patches modifiant le fichier spécifié.\n"
+"\n"
+"-n\tAffiche les noms de fichier au lieu des noms de patch.\n"
+"\n"
+"-v\tAffichage verbeux, plus simple Ã  lire.\n"
+"\n"
+
+#: ../quilt/pop.in:22
+msgid "Usage: quilt pop [-afRqv] [num|patch]"
+msgstr "Usage : quilt pop [-afRqv] [num|patch]"
+
+#: ../quilt/pop.in:25
+msgid ""
+"\n"
+"\n"
+"Remove patch(es) from the current stack. A number of patches to remove,\n"
+"or a patch name can be specified. If a patch name is given, remove all\n"
+"patches applied on top of the named patch. If neither a number nor a\n"
+"patch name is specified, remove the next patch from the series file.\n"
+"\n"
+"-a\tRemove all applied patches.\n"
+"\n"
+"-f\tForce remove. The state before the patch(es) were applied will\n"
+"\tbe restored from backup files.\n"
+"\n"
+"-R\tRemove the patch with \\`patch -R' and check if the patch reverts\n"
+"\tall changes properly.\n"
+"\n"
+"-q\tQuiet operation.\n"
+"\n"
+"-v\tVerbose operation.\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"Retire un ou plusieurs patches de la pile. Il est possible de donner en\n"
+"argument un nombre de patch Ã  retirer ou un nom de patch. Dans ce dernier\n"
+"cas, tous les patches placés au dessus du patch Ã  retirer seront retirés\n"
+"eux aussi. Si aucun argument n'est spécifié, le patch au sommet est retiré.\n"
+"\n"
+"-a\tRetire tous les patches de la série.\n"
+"\n"
+"-f\tForce l'action. L'état des patches avant qu'ils ne soient retirés \n"
+"\tsera restoré depuis les fichiers de sauvegarde.\n"
+"\n"
+"-R\tRetire le patche avec \\`patch -R' et vérifie que cela retire \n"
+"\tproprement tous les changements.\n"
+"\n"
+"-q\tOpère silencieusement.\n"
+"\n"
+"-v\tOpère verbeusement.\n"
+"\n"
+
+#: ../quilt/pop.in:146
+msgid "Patch $stop_at_patch is not applied."
+msgstr "Le patch $stop_at_patch n'est pas appliqué."
+
+#: ../quilt/pop.in:156
+msgid "No patch removed"
+msgstr "Aucun patch retiré"
+
+#: ../quilt/pop.in:170 ../quilt/push.in:201
+msgid "Interrupted by user"
+msgstr "Interrompu par l'utilisateur"
+
+#: ../quilt/pop.in:179 ../quilt/push.in:210
+msgid "No patches applied"
+msgstr "Aucun patch n'est appliqué"
+
+#: ../quilt/pop.in:181 ../quilt/push.in:212
+msgid "Now at patch $patch"
+msgstr "Le patch $patch est maintenant au sommet"
+
+#: ../quilt/previous.in:22
+#, fuzzy
+msgid "Usage: quilt previous [-n] [patch]"
+msgstr "Usage : quilt previous [patch]"
+
+#: ../quilt/previous.in:25
+msgid ""
+"\n"
+"\n"
+"Print the name of the previous patch before the specified or topmost\n"
+"patch in the series file.\n"
+"\n"
+"-n\tPrint patch file names instead of patch names.\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"Affiche le nom du patch avant celui spécifié (ou après celui au sommet)\n"
+"dans le fichier de série.\n"
+"\n"
+"-n\tAffiche le nom de fichier au lieu du nom de patch.\n"
+"\n"
+
+#: ../quilt/push.in:21
+msgid "Usage: quilt push [-afqv] [--leave-rejects] [num|patch]"
+msgstr "Usage: quilt push [-afqv] [--leave-rejects] [num|patch]"
+
+#: ../quilt/push.in:24
+msgid ""
+"\n"
+"\n"
+"Apply patch(es) from the series file.  A number of patches to apply, or\n"
+"a patch name can be specified.  If a patch name is given, apply all\n"
+"patches up to and including the named patch.  If neither a number nor a\n"
+"patch name is specified, apply the next patch from the series file.\n"
+"\n"
+"-a\tApply all patches in the series file.\n"
+"\n"
+"-f\tForce apply, even if the patch has rejects.\n"
+"\n"
+"-q\tQuiet operation.\n"
+"\n"
+"-v\tVerbose operation.\n"
+"\n"
+"--leave-rejects\n"
+"\tLeave around the reject files patch produced, even if the patch\n"
+"\tis not actually applied.\n"
+"\n"
+"--interactive\n"
+"\tAllow the patch utility to ask how to deal with conflicts. If\n"
+"\tthis option is not given, the option -f will be passed to the \n"
+"\tpatch program.\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"Applique un ou plusieurs patches de la série. Il est possible de donner en\n"
+"argument un nombre de patch Ã  appliquer ou un nom de patch. Dans ce dernier\n"
+"cas, tous les patches placés au dessous du patch Ã  retirer seront appliqués\n"
+"eux aussi. Si aucun argument n'est spécifié, le prochain patch est\n"
+"appliqué.\n"
+"\n"
+"-a\tApplique tous les patches de la série.\n"
+"\n"
+"-f\tForce l'application, même si cela doit produire des rejets.\n"
+"\n"
+"-q\tOpère silencieusement.\n"
+"\n"
+"-v\tOpère verbeusement.\n"
+"\n"
+"--leave-rejects\n"
+"\tLaisse les fichiers de rejets produits, même si l'application du\n"
+"\tpatch a Ã©choué et qu'il n'est finalement pas appliqué.\n"
+"\n"
+"--interactive\n"
+"\tLaisse l'utilitaire patch demander comment résoudre les conflits.\n"
+"\tSi cette option n'est pas donnée, l'option -f sera passée au \n"
+"\tprogramme patch.\n"
+
+#: ../quilt/push.in:86
+msgid "Patch $stop_at_patch not found in file series"
+msgstr "Le patch $stop_at_patch est introuvable dans le fichier de série"
+
+#: ../quilt/push.in:162
+msgid "Patch $stop_at_patch is already applied."
+msgstr "Le patch $stop_at_patch est déjà appliqué."
+
+#: ../quilt/push.in:186
+msgid "File series fully applied, ends at patch $top"
+msgstr "La série est complètement appliquée. Le dernier patch est $top."
+
+#: ../quilt/refresh.in:27
+msgid "Usage: quilt refresh [-p n] [-f] [patch]"
+msgstr "Usage : quilt refresh [-p n] [-f] [patch]"
+
+#: ../quilt/refresh.in:31
+msgid ""
+"\n"
+"\n"
+"Refreshes the specified patch, or the topmost patch by default.\n"
+"Documentation that comes before the actual patch in the patch file is\n"
+"retained.\n"
+"\n"
+"It is possible to refresh patches that are not on top.  If any patches\n"
+"on top of the patch to refresh modify the same files, the script aborts\n"
+"by default.  Patches can still be refreshed with -f.  In that case this\n"
+"script will print a warning for each shadowed file, changes by more\n"
+"recent patches will be ignored, and only changes in files that have not\n"
+"been modified by any more recent patches will end up in the specified\n"
+"patch.\n"
+"\n"
+"-p n\tCreate a -p n style patch (-p0 or -p1 supported).\n"
+"\t\n"
+"-f\tForce refresh, even if more recent patches modify\n"
+"\tsome of the same files.\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"Rafraîchit un patch appliqué. Si aucun patch n'est spécifié, il s'agit de\n"
+"celui au sommet. La documentation au début du patch est conservée.\n"
+"\n"
+"Il est possible de rafraîchir un patch ne se trouvant pas au sommet. Dans\n"
+"ce cas et si un autre patch placé plus haut modifie les mêmes fichiers, ce\n"
+"script affiche ces patches conflictuels, ainsi que le nom du fichier sur\n"
+"lequel porte le conflit. \n"
+"\n"
+"Même en cas de conflit, il est possible de rafraîchir le patch en utilisant\n"
+"l'option -f. Le script affichera alors un message d'avertissement pour\n"
+"chaque fichier masqué de la sorte, et ignorera tout changement Ã  ces\n"
+"fichiers.\n"
+"\n"
+"-p n\tCrée un patch du style -p n (-p0 ou -p1)\n"
+"\n"
+"-f\tForce le rafraîchissement, même si des patches plus haut changent \n"
+"\tles mêmes fichiers.\n"
+
+#: ../quilt/refresh.in:123
+msgid ""
+"Cannot refresh patches with -p$opt_strip_level, please specify -p0 or -p1 "
+"instead"
+msgstr ""
+"Impossible de rafraîchir des patchs avec -p$opt_strip_level. Veuillez\n"
+"spécifier -p0 ou -p1 Ã  la place."
+
+#: ../quilt/refresh.in:150
+msgid "More recent patches modify files in $patch. Enforce refresh with -f."
+msgstr ""
+"Des fichiers plus récents modifient les mêmes fichiers que $patch.\n"
+"Forcez le rafraîchissement avec -f."
+
+#: ../quilt/refresh.in:157
+msgid "Nothing in patch $patch"
+msgstr "Le patch $patch ne contient rien"
+
+#: ../quilt/refresh.in:197
+msgid "Refreshed patch $patch"
+msgstr "Le patch $patch a Ã©té rafraichi."
+
+#: ../quilt/remove.in:22
+msgid "Usage: quilt remove [-p patch] {file} ..."
+msgstr "Usage : quilt remove [-p patch] {fichier} ..."
+
+#: ../quilt/remove.in:25
+msgid ""
+"\n"
+"\n"
+"Remove one or more files from the topmost or named patch.  Files that\n"
+"are modified by patches on top of the specified patch cannot be removed.\n"
+"\n"
+"-p patch\n"
+"\tPatch to remove files from.\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"Retire un ou plusieurs fichiers du patch au sommet ou du patch spécifié.\n"
+"Des fichiers modifiés par des patches plus haut dans la série ne peuvent\n"
+"pas Ãªtre retirés. \n"
+"\n"
+"-p patch\n"
+"\tPatch duquel les fichiers doivent Ãªtre retirés.\n"
+"\n"
+
+#: ../quilt/remove.in:89
+msgid "File $file is not in patch $patch"
+msgstr "Le fichier $file n'est pas dans le patch $patch."
+
+#: ../quilt/remove.in:105
+msgid "Failed to remove file $file from patch $patch"
+msgstr "Impossible d'enlever le fichier $file du patch $patch."
+
+#: ../quilt/remove.in:116
+msgid "File $file removed from patch $patch"
+msgstr "Le fichier $file a Ã©té enlevé du patch $patch."
+
+#: ../quilt/series.in:22
+msgid "Usage: quilt series [-v]"
+msgstr "Usage : quilt series [-v]"
+
+#: ../quilt/series.in:25
+msgid ""
+"\n"
+"\n"
+"Print the names of all patches in the series file.\n"
+"\n"
+"-n\tPrint patch file names instead patch names.\n"
+"\n"
+"-v\tVerbose, more user friendly output.\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"Affiche le nom de tous les patches de la série.\n"
+"\n"
+"-n\tAffiche les noms de fichier au lieu des noms de patch.\n"
+"\n"
+"-v\tAffichage verbeux, plus simple Ã  lire.\n"
+"\n"
+
+#: ../quilt/setup.in:22
+msgid "Usage: quilt setup [-d sourcedir] {seriesfile|specfile}"
+msgstr ""
+"Usage : quilt setup [-d répertoire_source] {fichier_séries|fichier_spec}"
+
+#: ../quilt/setup.in:25
+msgid ""
+"\n"
+"\n"
+"Initializes a source tree from a patch series file.  The patch series\n"
+"file must contain the name of the relevant tar archive, in addition to\n"
+"the list of patches.\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"Initialise une arborescence source depuis un fichier de série. Ce fichier "
+"doit contenir le nom de l'archive tar Ã  utiliser, ainsi que la liste des "
+"patches.\n"
+"\n"
+
+#: ../quilt/setup.in:100
+msgid "Series file $series_file not found"
+msgstr "Fichier de série $series_file introuvable"
+
+#: ../quilt/setup.in:118
+#, fuzzy
+msgid "create link patch $packagedir/patches to $source"
+msgstr "Copie du patch $source/$arg"
+
+#: ../quilt/setup.in:121
+#, fuzzy
+msgid "creat link of $series_file"
+msgstr "Copie du fichier de série"
+
+#: ../quilt/setup.in:131
+msgid "Directory $packagedir set up."
+msgstr "Le répertoire $packagedir est configuré."
+
+#: ../quilt/top.in:22
+msgid "Usage: quilt top"
+msgstr "Usage : quilt top"
+
+#: ../quilt/top.in:25
+msgid ""
+"\n"
+"\n"
+"Print the name of the topmost patch on the current stack of applied\n"
+"patches.\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"Affiche le nom du patch au sommet de la pile des patches actuellement\n"
+"appliqués.\n"
+"\n"
+
+#: ../quilt/unapplied.in:22
+msgid "Usage: quilt unapplied [patch]"
+msgstr "Usage : quilt unapplied [patch]"
+
+#: ../quilt/unapplied.in:25
+msgid ""
+"\n"
+"\n"
+"Print a list of patches that are not applied, or all patches that follow\n"
+"the specified patch in the series file.\n"
+"\n"
+"-n\tPrint patch file names instead of patch names.\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"Affiche la liste de tous les patches non appliqués, ou de tous les patches\n"
+"suivant celui indiqué en paramètre.\n"
+"\n"
+"-n\tAffiche les noms de fichier au lieu des noms de patch.\n"
+"\n"
+
+#: ../scripts/apatch.in:22
+msgid "Usage: $0 [-fqv] patchname"
+msgstr "Usage : $0 [-fqv] patchname"
+
+#: ../scripts/apatch.in:40
+msgid "Interrupted by user; patch $patch was not applied."
+msgstr "Interrompu par l'utilisateur ; le patch $patch n'a pas Ã©té appliqué."
+
+#: ../scripts/apatch.in:51 ../scripts/rpatch.in:113
+msgid "Patch file $patch_file appears to be empty"
+msgstr "Le fichier de patch $patch_file semble vide"
+
+#: ../scripts/apatch.in:80
+msgid "refresh_file_list failed"
+msgstr "refresh_file_list a Ã©choué."
+
+#: ../scripts/apatch.in:84
+msgid "Applying $patch"
+msgstr "Application de $patch"
+
+#: ../scripts/apatch.in:87
+msgid "Patch $patch appears to be empty, applied"
+msgstr "Le patch $patch semble vide. Il a Ã©té appliqué."
+
+#: ../scripts/apatch.in:95
+msgid "Recreated file list for $patch"
+msgstr "La liste des fichiers pour $patch a Ã©té recrée."
+
+#: ../scripts/apatch.in:126
+msgid "Applied $patch (forced; needs refresh)"
+msgstr "$patch a Ã©té appliqué (forcé ; vous devriez le rafraîchir)"
+
+#: ../scripts/apatch.in:130
+msgid "Patch $patch does not apply (enforce with -f)"
+msgstr ""
+"Le patch $patch ne s'applique pas proprement (forcez l'application avec -f)"
+
+#: ../scripts/apatch.in:186 ../scripts/rpatch.in:245
+msgid "The topmost patch $top needs to be refreshed first."
+msgstr "Le patch au sommet $top doit Ãªtre rafraichi au préalable."
+
+#: ../scripts/rpatch.in:22
+msgid "Usage: $0 [-fRq] patchname"
+msgstr "Usage: $0 [-fRq] nom_de_patch"
+
+#: ../scripts/rpatch.in:44
+msgid "Patch does not remove changes:"
+msgstr "Le patch d'enlève pas les changements :"
+
+#: ../scripts/rpatch.in:102
+msgid "Interrupted by user; patch $patch was not removed."
+msgstr "Interrompu par l'utilisateur ; le patch $patch n'a pas Ã©té retiré;"
+
+#: ../scripts/rpatch.in:146
+msgid "Patch $patch appears to be empty, removed"
+msgstr "Le patch $patch semble vide. Il a Ã©té retiré."
+
+#: ../scripts/rpatch.in:151
+msgid "Removing $patch"
+msgstr "Retrait de $patch"
+
+#: ../scripts/rpatch.in:172
+msgid "Failed to create temporary files"
+msgstr "Impossible de créer les fichiers temporaires"
+
+#: ../scripts/rpatch.in:193
+msgid "Patch $patch does not remove (enforce with -f)"
+msgstr "Le patch $patch ne se retire pas proprement (forcez avec -f)"
+
+#: ../scripts/spec2series.in:100 ../scripts/spec2series.in:192
+msgid " done"
+msgstr " fini"
+
+#~ msgid "Reading sources from $arg"
+#~ msgstr "Lecture des sources depuis $arg"
+
+#~ msgid "Unpacking archive $source/$arg"
+#~ msgstr "Désarchivage depuis $source/$arg"
+
+#~ msgid "Directory $packagedir exists already."
+#~ msgstr "Le répertoire $packagedir existe déjà."
+
+#~ msgid "File $packagedir exists."
+#~ msgstr "Le fichier $packagedir existe."
+
+#, fuzzy
+#~ msgid "create link patch $source"
+#~ msgstr "Copie du patch $source/$arg"
+
+#, fuzzy
+#~ msgid "creat link of series file"
+#~ msgstr "Copie du fichier de série"
+
+#~ msgid ""
+#~ "\n"
+#~ "\n"
+#~ "Print a list of applied patches, or all patches up to and including the\n"
+#~ "specified patch in the file series.\n"
+#~ "\n"
+#~ "-n\tPrint patch file names instead of patch names."
+#~ msgstr ""
+#~ "\n"
+#~ "\n"
+#~ "Affiche la liste des patches appliqués, ou la liste de tous les patches\n"
+#~ "jusqu'à celui passé en paramètre (inclus).\n"
+#~ "\n"
+#~ "-n\tAffiche les noms des fichiers de patch au lieu des noms de patch."
diff --git a/lustre/kernel_patches/quilt/po/quilt.pot b/lustre/kernel_patches/quilt/po/quilt.pot
new file mode 100644 (file)
index 0000000..c917b0b
--- /dev/null
@@ -0,0 +1,657 @@
+#: ../bin/quilt.in:14
+msgid "Usage: quilt command [-h] ..."
+msgstr ""
+
+#: ../bin/quilt.in:26
+msgid "Commands are:"
+msgstr ""
+
+#: ../quilt/add.in:22
+msgid "Usage: quilt add [-p patch] {file} ..."
+msgstr ""
+
+#: ../quilt/add.in:25
+msgid ""
+"\n"
+"\n"
+"Add one or more files to the topmost or named patch.  Files must be\n"
+"added to the patch before being modified.  Files that are modified by\n"
+"patches on top of the specified patch cannot be added.\n"
+"\n"
+"-p patch\n"
+"\tPatch to add files to."
+msgstr ""
+
+#: ../quilt/add.in:75 ../quilt/delete.in:69 ../quilt/files.in:74
+#: ../quilt/push.in:184 ../quilt/remove.in:75
+msgid "No patch applied"
+msgstr ""
+
+#: ../quilt/add.in:80 ../quilt/applied.in:70 ../quilt/refresh.in:113
+#: ../quilt/remove.in:80
+msgid "Patch $patch is not applied"
+msgstr ""
+
+#: ../quilt/add.in:89
+msgid "File $file is already in patch $patch"
+msgstr ""
+
+#: ../quilt/add.in:96 ../quilt/remove.in:97
+msgid "File $file modified by patch $next_patch"
+msgstr ""
+
+#: ../quilt/add.in:104
+msgid "Failed to back up file $file"
+msgstr ""
+
+#: ../quilt/add.in:124
+msgid "File $file added to patch $patch"
+msgstr ""
+
+#: ../quilt/applied.in:22
+msgid "Usage: quilt applied [-n] [patch]"
+msgstr ""
+
+#: ../quilt/applied.in:25
+msgid ""
+"\n"
+"\n"
+"Print a list of applied patches.\n"
+"\n"
+"-n\tPrint patch file names instead of patch names.\n"
+"\n"
+msgstr ""
+
+#: ../quilt/delete.in:22
+msgid "Usage: quilt delete [patch]"
+msgstr ""
+
+#: ../quilt/delete.in:25
+msgid ""
+"\n"
+"\n"
+"Remove the specified or topmost patch from the series file.  If the\n"
+"patch is applied, quilt will attempt to remove it first. (Only the\n"
+"topmost patch can be removed right now.)"
+msgstr ""
+
+#: ../quilt/delete.in:75
+msgid "Patch $patch does not exist"
+msgstr ""
+
+#: ../quilt/delete.in:84
+msgid "Patch $patch is currently applied"
+msgstr ""
+
+#: ../quilt/delete.in:90
+msgid "Failed to remove patch $patch"
+msgstr ""
+
+#: ../quilt/diff.in:27
+msgid "Usage: quilt diff [-p n] [-c patch|-z] [-R] [-P patch] [file ...]"
+msgstr ""
+
+#: ../quilt/diff.in:31
+msgid ""
+"\n"
+"\n"
+"Produces a diff of the specified file(s) in the topmost or specified\n"
+"patch.  If no files are specified, all files that are modified are\n"
+"included.\n"
+"\n"
+"-p n\tCreate a -p n style patch (-p0 or -p1 are supported).\n"
+"\n"
+"-P patch\n"
+"\tCreate a diff for the specified patch.  (Defaults to the topmost\n"
+"\tpatch.)\n"
+"\n"
+"-c patch\n"
+"\tCreate a combined diff for all patches between this patch and\n"
+"\tthe patch specified with -P. A patch name of \\\"-\\\" is equivalent\n"
+"\tto specifying the first applied patch.\n"
+"\n"
+"-R\tCreate a reverse diff.\n"
+"\n"
+"-z\tWrite to standard output the changes that have been made\n"
+"\trelative to the topmost or specified patch.\n"
+"\n"
+msgstr ""
+
+#: ../quilt/diff.in:132
+msgid "Options \\`-c patch' and \\`-z' cannot be combined."
+msgstr ""
+
+#: ../quilt/diff.in:141 ../quilt/refresh.in:106
+msgid "No patch seem to be applied"
+msgstr ""
+
+#: ../quilt/diff.in:148
+msgid "Patch $last_patch is not applied"
+msgstr ""
+
+#: ../quilt/diff.in:158
+msgid ""
+"Cannot diff patches with -p$opt_strip_level, please specify -p0 or -p1 "
+"instead"
+msgstr ""
+
+#: ../quilt/diff.in:166
+msgid "refresh_patches_per_file failed."
+msgstr ""
+
+#: ../quilt/diff.in:179
+msgid "Patch $opt_combine not applied before $last_patch."
+msgstr ""
+
+#: ../quilt/diff.in:213
+msgid "File $file is not being modified."
+msgstr ""
+
+#: ../quilt/diff.in:230
+msgid "Cannot change into .pc/$last_patch"
+msgstr ""
+
+#: ../quilt/diff.in:235
+msgid "Failed to copy files to temporary directory"
+msgstr ""
+
+#: ../quilt/diff.in:240
+msgid "Cannot change to temporary directory"
+msgstr ""
+
+#: ../quilt/diff.in:257
+msgid "Failed to patch temporary files"
+msgstr ""
+
+#: ../quilt/diff.in:264
+msgid "Cannot change to source directory"
+msgstr ""
+
+#: ../quilt/diff.in:293 ../quilt/refresh.in:144
+msgid "Diff failed, aborting."
+msgstr ""
+
+#: ../quilt/diff.in:300
+msgid "More recent patches modify files in $last_patch."
+msgstr ""
+
+#: ../quilt/files.in:22
+msgid "Usage: quilt files [-v] [patch]"
+msgstr ""
+
+#: ../quilt/files.in:25
+msgid ""
+"\n"
+"\n"
+"Print the list of files that the topmost or specified patch changes.\n"
+"\n"
+"-v\tVerbose, more user friendly output.\n"
+"\n"
+msgstr ""
+
+#: ../quilt/files.in:83
+msgid "Patch is not applied (no verbose output)"
+msgstr ""
+
+#: ../quilt/files.in:86
+msgid "Patch is not applied"
+msgstr ""
+
+#: ../quilt/import.in:22
+msgid "Usage: quilt import [-f] [-p num] [-n patch] [patchfile]"
+msgstr ""
+
+#: ../quilt/import.in:25
+msgid ""
+"\n"
+"\n"
+"Import an external patch.  If a patch file name is specified, the patch\n"
+"will be stored in this relative path in the patches/ directory.  Else,\n"
+"if an input file name is given this name is used as the patch name.\n"
+"\n"
+"-p num\n"
+"\tNumber of directory levels to strip when aplying (default=1)\n"
+"\n"
+"-n patch\n"
+"\tFile name relative to patches/ to use.\n"
+"\n"
+"-f\tOverwite/update existing patches.\n"
+"\n"
+msgstr ""
+
+#: ../quilt/import.in:97
+msgid "Please use -n to specify a patch file name."
+msgstr ""
+
+#: ../quilt/import.in:105
+msgid "Patch file name \\\"$patch_file\\\" contains whitespace."
+msgstr ""
+
+#: ../quilt/import.in:111
+msgid "Patch $patch is applied."
+msgstr ""
+
+#: ../quilt/import.in:120
+msgid "Cannot read from standard input."
+msgstr ""
+
+#: ../quilt/import.in:129 ../quilt/import.in:138
+msgid "Cannot decompress file $input_file"
+msgstr ""
+
+#: ../quilt/import.in:146
+msgid "Cannot read from file $input_file"
+msgstr ""
+
+#: ../quilt/import.in:155
+msgid "Patch $patch exists. Replace with -f."
+msgstr ""
+
+#: ../quilt/import.in:162
+msgid "Updating %patch section of patch $patch"
+msgstr ""
+
+#: ../quilt/import.in:165
+msgid "Failed to update %patch section of patch $patch"
+msgstr ""
+
+#: ../quilt/import.in:169
+msgid "Replacing patch $patch with new version"
+msgstr ""
+
+#: ../quilt/import.in:172
+msgid "Failed to replace patch $patch"
+msgstr ""
+
+#: ../quilt/import.in:177
+msgid "Importing patch $patch (stored as $patch_file)"
+msgstr ""
+
+#: ../quilt/import.in:184
+msgid "Failed to import patch $patch"
+msgstr ""
+
+#: ../quilt/import.in:194
+msgid "Failed to insert $patch in file series."
+msgstr ""
+
+#: ../quilt/new.in:22
+msgid "Usage: quilt new {patchname}"
+msgstr ""
+
+#: ../quilt/new.in:25
+msgid ""
+"\n"
+"\n"
+"Create a new patch with the specified file name, and insert it after the\n"
+"topmost patch in the patch series file.\n"
+"\n"
+msgstr ""
+
+#: ../quilt/new.in:67
+msgid "Patch $patch exists already"
+msgstr ""
+
+#: ../quilt/new.in:77
+msgid "Failed to create patch $patch"
+msgstr ""
+
+#: ../quilt/new.in:80
+msgid "Patch $patch is now on top"
+msgstr ""
+
+#: ../quilt/next.in:22
+msgid "Usage: quilt next [patch]"
+msgstr ""
+
+#: ../quilt/next.in:25
+msgid ""
+"\n"
+"\n"
+"Print the name of the next patch after the specified or topmost patch in\n"
+"the series file.\n"
+"\n"
+"-n\tPrint patch file names instead of patch names.\n"
+"\n"
+msgstr ""
+
+#: ../quilt/patches.in:22
+msgid "Usage: quilt patches {file}"
+msgstr ""
+
+#: ../quilt/patches.in:25
+msgid ""
+"\n"
+"\n"
+"Print the list of patches that modify the specified file.\n"
+"\n"
+"-n\tPrint the patch file names instead of the patch names.\n"
+"\n"
+"-v\tVerbose, more user friendly output.\n"
+"\n"
+msgstr ""
+
+#: ../quilt/pop.in:22
+msgid "Usage: quilt pop [-afRqv] [num|patch]"
+msgstr ""
+
+#: ../quilt/pop.in:25
+msgid ""
+"\n"
+"\n"
+"Remove patch(es) from the current stack. A number of patches to remove,\n"
+"or a patch name can be specified. If a patch name is given, remove all\n"
+"patches applied on top of the named patch. If neither a number nor a\n"
+"patch name is specified, remove the next patch from the series file.\n"
+"\n"
+"-a\tRemove all applied patches.\n"
+"\n"
+"-f\tForce remove. The state before the patch(es) were applied will\n"
+"\tbe restored from backup files.\n"
+"\n"
+"-R\tRemove the patch with \\`patch -R' and check if the patch reverts\n"
+"\tall changes properly.\n"
+"\n"
+"-q\tQuiet operation.\n"
+"\n"
+"-v\tVerbose operation.\n"
+"\n"
+msgstr ""
+
+#: ../quilt/pop.in:146
+msgid "Patch $stop_at_patch is not applied."
+msgstr ""
+
+#: ../quilt/pop.in:156
+msgid "No patch removed"
+msgstr ""
+
+#: ../quilt/pop.in:170 ../quilt/push.in:201
+msgid "Interrupted by user"
+msgstr ""
+
+#: ../quilt/pop.in:179 ../quilt/push.in:210
+msgid "No patches applied"
+msgstr ""
+
+#: ../quilt/pop.in:181 ../quilt/push.in:212
+msgid "Now at patch $patch"
+msgstr ""
+
+#: ../quilt/previous.in:22
+msgid "Usage: quilt previous [-n] [patch]"
+msgstr ""
+
+#: ../quilt/previous.in:25
+msgid ""
+"\n"
+"\n"
+"Print the name of the previous patch before the specified or topmost\n"
+"patch in the series file.\n"
+"\n"
+"-n\tPrint patch file names instead of patch names.\n"
+"\n"
+msgstr ""
+
+#: ../quilt/push.in:21
+msgid "Usage: quilt push [-afqv] [--leave-rejects] [num|patch]"
+msgstr ""
+
+#: ../quilt/push.in:24
+msgid ""
+"\n"
+"\n"
+"Apply patch(es) from the series file.  A number of patches to apply, or\n"
+"a patch name can be specified.  If a patch name is given, apply all\n"
+"patches up to and including the named patch.  If neither a number nor a\n"
+"patch name is specified, apply the next patch from the series file.\n"
+"\n"
+"-a\tApply all patches in the series file.\n"
+"\n"
+"-f\tForce apply, even if the patch has rejects.\n"
+"\n"
+"-q\tQuiet operation.\n"
+"\n"
+"-v\tVerbose operation.\n"
+"\n"
+"--leave-rejects\n"
+"\tLeave around the reject files patch produced, even if the patch\n"
+"\tis not actually applied.\n"
+"\n"
+"--interactive\n"
+"\tAllow the patch utility to ask how to deal with conflicts. If\n"
+"\tthis option is not given, the option -f will be passed to the \n"
+"\tpatch program.\n"
+"\n"
+msgstr ""
+
+#: ../quilt/push.in:86
+msgid "Patch $stop_at_patch not found in file series"
+msgstr ""
+
+#: ../quilt/push.in:162
+msgid "Patch $stop_at_patch is already applied."
+msgstr ""
+
+#: ../quilt/push.in:186
+msgid "File series fully applied, ends at patch $top"
+msgstr ""
+
+#: ../quilt/refresh.in:27
+msgid "Usage: quilt refresh [-p n] [-f] [patch]"
+msgstr ""
+
+#: ../quilt/refresh.in:31
+msgid ""
+"\n"
+"\n"
+"Refreshes the specified patch, or the topmost patch by default.\n"
+"Documentation that comes before the actual patch in the patch file is\n"
+"retained.\n"
+"\n"
+"It is possible to refresh patches that are not on top.  If any patches\n"
+"on top of the patch to refresh modify the same files, the script aborts\n"
+"by default.  Patches can still be refreshed with -f.  In that case this\n"
+"script will print a warning for each shadowed file, changes by more\n"
+"recent patches will be ignored, and only changes in files that have not\n"
+"been modified by any more recent patches will end up in the specified\n"
+"patch.\n"
+"\n"
+"-p n\tCreate a -p n style patch (-p0 or -p1 supported).\n"
+"\t\n"
+"-f\tForce refresh, even if more recent patches modify\n"
+"\tsome of the same files.\n"
+"\n"
+msgstr ""
+
+#: ../quilt/refresh.in:123
+msgid ""
+"Cannot refresh patches with -p$opt_strip_level, please specify -p0 or -p1 "
+"instead"
+msgstr ""
+
+#: ../quilt/refresh.in:150
+msgid "More recent patches modify files in $patch. Enforce refresh with -f."
+msgstr ""
+
+#: ../quilt/refresh.in:157
+msgid "Nothing in patch $patch"
+msgstr ""
+
+#: ../quilt/refresh.in:197
+msgid "Refreshed patch $patch"
+msgstr ""
+
+#: ../quilt/remove.in:22
+msgid "Usage: quilt remove [-p patch] {file} ..."
+msgstr ""
+
+#: ../quilt/remove.in:25
+msgid ""
+"\n"
+"\n"
+"Remove one or more files from the topmost or named patch.  Files that\n"
+"are modified by patches on top of the specified patch cannot be removed.\n"
+"\n"
+"-p patch\n"
+"\tPatch to remove files from.\n"
+"\n"
+msgstr ""
+
+#: ../quilt/remove.in:89
+msgid "File $file is not in patch $patch"
+msgstr ""
+
+#: ../quilt/remove.in:105
+msgid "Failed to remove file $file from patch $patch"
+msgstr ""
+
+#: ../quilt/remove.in:116
+msgid "File $file removed from patch $patch"
+msgstr ""
+
+#: ../quilt/series.in:22
+msgid "Usage: quilt series [-v]"
+msgstr ""
+
+#: ../quilt/series.in:25
+msgid ""
+"\n"
+"\n"
+"Print the names of all patches in the series file.\n"
+"\n"
+"-n\tPrint patch file names instead patch names.\n"
+"\n"
+"-v\tVerbose, more user friendly output.\n"
+"\n"
+msgstr ""
+
+#: ../quilt/setup.in:22
+msgid "Usage: quilt setup [-d sourcedir] {seriesfile|specfile}"
+msgstr ""
+
+#: ../quilt/setup.in:25
+msgid ""
+"\n"
+"\n"
+"Initializes a source tree from a patch series file.  The patch series\n"
+"file must contain the name of the relevant tar archive, in addition to\n"
+"the list of patches.\n"
+"\n"
+msgstr ""
+
+#: ../quilt/setup.in:100
+msgid "Series file $series_file not found"
+msgstr ""
+
+#: ../quilt/setup.in:118
+msgid "create link patch $packagedir/patches to $source"
+msgstr ""
+
+#: ../quilt/setup.in:121
+msgid "creat link of $series_file"
+msgstr ""
+
+#: ../quilt/setup.in:131
+msgid "Directory $packagedir set up."
+msgstr ""
+
+#: ../quilt/top.in:22
+msgid "Usage: quilt top"
+msgstr ""
+
+#: ../quilt/top.in:25
+msgid ""
+"\n"
+"\n"
+"Print the name of the topmost patch on the current stack of applied\n"
+"patches.\n"
+"\n"
+msgstr ""
+
+#: ../quilt/unapplied.in:22
+msgid "Usage: quilt unapplied [patch]"
+msgstr ""
+
+#: ../quilt/unapplied.in:25
+msgid ""
+"\n"
+"\n"
+"Print a list of patches that are not applied, or all patches that follow\n"
+"the specified patch in the series file.\n"
+"\n"
+"-n\tPrint patch file names instead of patch names.\n"
+"\n"
+msgstr ""
+
+#: ../scripts/apatch.in:22
+msgid "Usage: $0 [-fqv] patchname"
+msgstr ""
+
+#: ../scripts/apatch.in:40
+msgid "Interrupted by user; patch $patch was not applied."
+msgstr ""
+
+#: ../scripts/apatch.in:51 ../scripts/rpatch.in:113
+msgid "Patch file $patch_file appears to be empty"
+msgstr ""
+
+#: ../scripts/apatch.in:80
+msgid "refresh_file_list failed"
+msgstr ""
+
+#: ../scripts/apatch.in:84
+msgid "Applying $patch"
+msgstr ""
+
+#: ../scripts/apatch.in:87
+msgid "Patch $patch appears to be empty, applied"
+msgstr ""
+
+#: ../scripts/apatch.in:95
+msgid "Recreated file list for $patch"
+msgstr ""
+
+#: ../scripts/apatch.in:126
+msgid "Applied $patch (forced; needs refresh)"
+msgstr ""
+
+#: ../scripts/apatch.in:130
+msgid "Patch $patch does not apply (enforce with -f)"
+msgstr ""
+
+#: ../scripts/apatch.in:186 ../scripts/rpatch.in:245
+msgid "The topmost patch $top needs to be refreshed first."
+msgstr ""
+
+#: ../scripts/rpatch.in:22
+msgid "Usage: $0 [-fRq] patchname"
+msgstr ""
+
+#: ../scripts/rpatch.in:44
+msgid "Patch does not remove changes:"
+msgstr ""
+
+#: ../scripts/rpatch.in:102
+msgid "Interrupted by user; patch $patch was not removed."
+msgstr ""
+
+#: ../scripts/rpatch.in:146
+msgid "Patch $patch appears to be empty, removed"
+msgstr ""
+
+#: ../scripts/rpatch.in:151
+msgid "Removing $patch"
+msgstr ""
+
+#: ../scripts/rpatch.in:172
+msgid "Failed to create temporary files"
+msgstr ""
+
+#: ../scripts/rpatch.in:193
+msgid "Patch $patch does not remove (enforce with -f)"
+msgstr ""
+
+#: ../scripts/spec2series.in:100 ../scripts/spec2series.in:192
+msgid " done"
+msgstr ""
diff --git a/lustre/kernel_patches/quilt/quilt.changes b/lustre/kernel_patches/quilt/quilt.changes
new file mode 100644 (file)
index 0000000..de3dde6
--- /dev/null
@@ -0,0 +1,237 @@
+-------------------------------------------------------------------
+Sun Jul 20 00:31:53 CEST 2003 - agruen@suse.de
+
+- lib/backup-files.c: Copy files if hard linking is not possible,
+  e.g., because the backups go to a ram disc, etc.
+
+-------------------------------------------------------------------
+Wed 26 Jun 15:35:55 CEST 2003 - martin.quinson@tuxfamily.org
+
+- Add what needed to have inteligent bash completion when using quilt
+- Bump version to 0.24
+
+-------------------------------------------------------------------
+Wed 25 Jun 15:35:55 CEST 2003 - martin.quinson@tuxfamily.org
+
+- Make clean before dist to avoid to put cruft in tarballs
+- remove po/*mo on make clean
+- update fr.po
+- Fix a typo in push.in help message about --interactive
+
+-------------------------------------------------------------------
+Tue May 20 13:22:18 CEST 2003 - agruen@suse.de
+
+- Preserve permissions of files added with `quilt add'.
+
+-------------------------------------------------------------------
+Sun May 18 15:23:03 CEST 2003 - agruen@suse.de
+
+- Do not add the whole /usr/share/locale directory to the RPM
+  file list, but only the quilt message catalogs: Otherwise RPM
+  complains when uninstalling.
+
+-------------------------------------------------------------------
+Fri May 16 20:44:50 CEST 2003 - agruen@suse.de
+
+- Rename DIFF_OPTS environment variable to QUILT_DIFF_OPTS
+- Add ~/.quiltrc resource file (this file is sourced from
+  the patchfsn file, which is used by all commands).
+
+-------------------------------------------------------------------
+Fri Apr 11 17:17:35 CEST 2003 - agruen@suse.de
+
+- Apply patches with `patch -f' by default. Add --interactive
+  option top `quilt push' to allow applying patches without
+  `patch -f'.
+
+-------------------------------------------------------------------
+Wed Apr  9 12:08:47 CEST 2003 - agruen@suse.de
+
+- Remove awk hacks in Makefile.in with shell loop and sed hack:
+  The awk hack(s) didn't work for Martin Quinson.
+
+-------------------------------------------------------------------
+Wed Apr  9 04:00:52 CEST 2003 - agruen@suse.de
+
+- Never reorder files in patches. (Previously the file list
+  was run through (sort | uniq) to remove duplicate entries.)
+- Update test script to new format, and add regression test
+  cases.
+
+-------------------------------------------------------------------
+Wed Apr  9 02:38:30 CEST 2003 - agruen@suse.de
+
+- The change from Mar 24 caused empty lines to be removed in
+  patch descriptions.
+
+-------------------------------------------------------------------
+Mon Apr  7 16:03:55 CEST 2003 - agruen@suse.de
+
+- `head -1' and `tail -1' is non-standard and deprecated, and
+  does not work with coreutils-5.0 any longer.
+
+-------------------------------------------------------------------
+Sat Apr  5 22:17:44 CEST 2003 - agruen@suse.de
+
+- Improve error checking of `quilt diff'.
+
+-------------------------------------------------------------------
+Mon Mar 24 12:29:58 CET 2003 - agruen@suse.de
+
+- Update patch_description function used in `quilt refresh' to
+  recognize `====' lines. Without that, quilt thinks these
+  lines are part of the comments before the actual patch starts,
+  so those lines will accumulate.
+
+-------------------------------------------------------------------
+Sun Mar 23 21:37:20 CET 2003 - agruen@suse.de
+
+- Update test script to reflect recent patch format changes.
+
+-------------------------------------------------------------------
+Sat Mar 22 12:28:43 CET 2003 - agruen@suse.de
+
+- Also substitute @SED@ and @AWK@.
+- Some versions of sed don't like '\t'. Expand those in the
+  shell instead.
+
+-------------------------------------------------------------------
+Fri Mar 21 10:42:27 CET 2003 - agruen@suse.de
+
+- Bump version number to 0.23 (CVS tag VER_0_23).
+
+-------------------------------------------------------------------
+Fri Feb 14 15:53:52 CET 2003 - agruen@suse.de
+
+- A couple more I18N fixes, minor cleanups in status messages.
+- Remove "quilt guidiff" (obsolete).
+
+-------------------------------------------------------------------
+Fri Feb 14 14:10:39 CET 2003 - martin.quinson@tuxfamily.org
+
+- Implement i18n, along with the french l10n.
+- It was long enough that we didn't release, so bump the version number.
+
+-------------------------------------------------------------------
+Sat Feb  8 15:43:26 CET 2003 - agruen@suse.de
+
+- Merge James Rowe <Jay@jnrowe.uklinux.net>'s quilt-help.diff
+  patch that fixes several help messages.
+
+-------------------------------------------------------------------
+Thu Feb  6 01:22:52 CET 2003 - agruen@suse.de
+
+- Quilt refresh: Create sub-directories in patches directory
+  so that new patches in sub-directories can be added easily.
+
+-------------------------------------------------------------------
+Wed Feb  5 12:37:34 CET 2003 - agruen@suse.de
+
+- Quilt diff: If a patch has been force applied, quilt diff -z
+  will also have failures when generating the temporary files.
+  Ignore these failures in this case.
+- Add -R option to quilt diff to generate a a reverse patch.
+- Fix deleting the temporary directory (by using an absolute
+  instead of a relative path).
+
+-------------------------------------------------------------------
+Sun Feb  2 15:23:20 CET 2003 - agruen@suse.de
+
+- Make quilt setup recognize the "# Sourcedir:" directive.
+- Fix bug with spurious `Index:' lines in diff/refresh output.
+- Add --diff option to quilt diff that allows to specify a
+  different utility that diff to run files through. (That utility
+  is only called for files that contain differences, not for
+  files that are in a patches' file list but jave not been
+  changed.)
+
+-------------------------------------------------------------------
+Sat Feb  1 18:52:15 CET 2003 - agruen@suse.de
+
+- Integrate James Rowe's Autoconf setup (with a comple of
+  additional changes/fixes).
+- Add some messages in configure.ac.
+- Make distclean removes autoconf garbage. The configure script is
+  no source file. Add rule to create it when necessary.
+- Invoke configure in the RPM spec file.
+- Merge James Rowe's guidiff.
+
+-------------------------------------------------------------------
+Fri Jan 31 13:05:18 CET 2003 - agruen@suse.de
+
+- Add syntax highlighting tags for emacs and vim.
+- Move all scripts from lib/ to scripts/. Install lib/backup-files
+  in /usr/lib/quilt/, and install the scripts in
+  /usr/share/quilt/scripts/, so that no binaries are installed
+  under /usr/share.
+- Fix quoting strings for inclusion in regular expressions.
+- Change literal '@SUBST@' strings in Makefile to '@SUBST''@',
+  so that Autoconf won't mess them up later.
+
+-------------------------------------------------------------------
+Fri Jan 31 09:15:01 CET 2003 - Martin.Quinson@ens-lyon.fr
+
+- Change '#!@BASH@' to '#! @BASH@'. It can look a bit stupid, but
+  it's needed for maximal portability.
+
+-------------------------------------------------------------------
+Fri Jan 31 08:52:20 CET 2003 - Martin.Quinson@ens-lyon.fr
+
+- Fight lintian warnings (lintian is a tool to check debian
+  packages):
+- Remove the dependencies on essential packages diff, gzip,
+  debianutils
+- Format the copyright file properly
+- Remove the #! /bin/bash header from patchfns, since it's not an
+  executable script, but a stuff to be sourced by others.
+
+-------------------------------------------------------------------
+Thu Jan 30 23:56:21 CET 2003 - agruen@suse.de
+
+- Also substitute @MKTEMP@.
+- For improved scripting support, add -n option to scripts that
+  print patch names prints the patch file name instead. This
+  is useful for selecting which patches to grep, etc.
+
+-------------------------------------------------------------------
+Thu Jan 30 19:02:14 CET 2003 - agruen@suse.de
+
+- Allow a file list to be diffed to be passed to quilt diff. Add
+  -P option for specifying a patch different from the topmost
+  patch,
+
+-------------------------------------------------------------------
+Thu Jan 30 16:11:00 CET 2003 -  Martin.Quinson@ens-lyon.fr
+
+- Remove useless oldies. Missing functionnalities needs to be
+  reimplemented almost from the scratch due to the bunch of
+  changes to the core since those scripts were written.
+
+-------------------------------------------------------------------
+Thu Jan 30 13:25:51 CET 2003 - agruen@suse.de
+- Fix some regex quoting; use grep -E because we quote for extended
+  regexps. Filenames with "+^$" in it did not work in some places. 
+- Prepare for GNU Autoconf: substitute @PERL@, @BASH@, @DIFF@,
+  @PATCH@ in scripts.
+- Some cleanups in Makefile.
+- Move documentation to doc/.
+- Forgot to mention that the patches produced now contain
+  `Index: dir/filename' just before the diff output for each file.
+  This is required by POSIX, and is also used by diffstat.
+- Adjust patch_description documentation extraction function to
+  check for Index: lines.
+- Quilt refresh looses text before actual patch due to but in
+  patch_description function.
+
+-------------------------------------------------------------------
+Tue Jan 28 23:41:19 CET 2003 - agruen@suse.de
+
+- Add --leave-rejects option to quilt push and apatch, to
+  leave reject files around for inspection even if a patch
+  does not apply.
+
+-------------------------------------------------------------------
+Tue Jan 28 23:38:59 CET 2003 - agruen@suse.de
+
+- Restart change log at quilt-0.21. Let orderly development
+  begin :)
diff --git a/lustre/kernel_patches/quilt/quilt.spec.in b/lustre/kernel_patches/quilt/quilt.spec.in
new file mode 100644 (file)
index 0000000..5174fea
--- /dev/null
@@ -0,0 +1,58 @@
+#
+# spec file for quilt - patch management scripts
+#
+
+Name:          quilt
+Summary:       Scripts for working with series of patches
+License:       GPL
+Group:         Productivity/Text/Utilities
+Version:       0
+Release:       0
+Requires:      coreutils diffutils patch gzip bzip2 perl mktemp gettext
+Autoreqprov:   off
+Source:                quilt-%{version}.tar.gz
+BuildRoot:     %{_tmppath}/%{name}-%{version}-build
+
+%description
+The scripts allow to manage a series of patches by keeping
+track of the changes each patch makes. Patches can be
+applied, un-applied, refreshed, etc.
+
+The scripts are heavily based on Andrew Morton's patch scripts
+found at http://www.zip.com.au/~akpm/linux/patches/.
+
+Authors:
+--------
+    Andrew Morton <akpm@digeo.com>
+    Andreas Gruenbacher <agruen@suse.de>
+
+%prep
+%setup
+
+%build
+./configure
+make prefix=/usr BUILD_ROOT=$RPM_BUILD_ROOT
+
+%install
+rm -rf $RPM_BUILD_ROOT
+make install prefix=/usr BUILD_ROOT=$RPM_BUILD_ROOT
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%files
+%defattr(-, root, root)
+/usr/bin/guards
+/usr/bin/quilt
+
+/usr/share/quilt/
+/usr/lib/quilt/
+
+/usr/share/locale/*/LC_MESSAGES/quilt.mo
+
+%doc /usr/share/man/man1/guards.1.gz
+%doc doc/README
+
+%changelog
+# The changelog is filled in by "make spec".
+
diff --git a/lustre/kernel_patches/quilt/quilt/add.in b/lustre/kernel_patches/quilt/quilt/add.in
new file mode 100755 (executable)
index 0000000..5b1d932
--- /dev/null
@@ -0,0 +1,130 @@
+#! @BASH@
+
+#  This script is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License version 2 as
+#  published by the Free Software Foundation.
+#
+#  See the COPYING and AUTHORS files for more details.
+
+# Read in library functions
+if [ "$(type -t patch_file_name)" != function ]
+then
+       if ! [ -r @SCRIPTS@/patchfns ]
+       then
+               echo "Cannot read library @SCRIPTS@/patchfns" >&2
+               exit 1
+       fi
+       . @SCRIPTS@/patchfns
+fi
+
+usage()
+{
+       echo $"Usage: quilt add [-p patch] {file} ..."
+       if [ x$1 = x-h ]
+       then
+               echo $"
+
+Add one or more files to the topmost or named patch.  Files must be
+added to the patch before being modified.  Files that are modified by
+patches on top of the specified patch cannot be added.
+
+-p patch
+       Patch to add files to."
+
+               exit 0
+       else
+               exit 1
+       fi
+}
+
+options=`getopt -o p:h -- "$@"`
+
+if [ $? -ne 0 ]
+then
+       usage
+fi
+
+eval set -- "$options"
+
+while true
+do
+       case "$1" in
+       -p)
+               opt_patch=$2
+               shift 2 ;;
+       -h)
+               usage -h ;;
+       --)
+               shift
+               break ;;
+       esac
+done
+
+if [ $# -lt 1 ]
+then
+       usage
+fi
+
+patch=$(stripit $opt_patch)
+if [ -z "$patch" ]
+then
+       patch=$(top_patch)
+fi
+if [ -z "$patch" ]
+then
+       echo $"No patch applied"
+fi
+
+if ! is_applied $patch
+then
+       echo $"Patch $patch is not applied"
+       exit 1
+fi
+
+status=0
+for file in $*
+do
+       if file_in_patch $file $patch
+       then
+               echo $"File $file is already in patch $patch"
+               status=1
+               continue
+       fi
+       next_patch=$(next_patch_for_file $patch $file)
+       if [ -n "$next_patch" ]
+       then
+               echo $"File $file modified by patch $next_patch"
+               status=1
+               continue
+       fi
+
+       if ! @LIB@/backup-files -s -B .pc/$patch/ $file || \
+          ! echo $file >> $(pc_file_name $patch)
+       then
+               echo $"Failed to back up file $file" >&2
+               status=1
+               continue
+       fi
+
+       if [ -e $file ]
+       then
+               if [ "$(ls -dl $file | @AWK@ '{print $2}')" -gt 1 ]
+               then
+                       # We have a file with several hard links.
+                       # As the file may likely be modified by hand
+                       # now, create a copy to make sure nothing
+                       # happens to the original file.
+                       tmpfile=$(gen_tempfile $file) &&
+                       cp -fp $file $tmpfile &&
+                       mv -f $tmpfile $file
+                       rm -f $tmpfile
+               fi
+       fi
+
+       echo $"File $file added to patch $patch"
+done
+exit $status
+### Local Variables:
+### mode: shell-script
+### End:
+# vim:filetype=sh
diff --git a/lustre/kernel_patches/quilt/quilt/applied.in b/lustre/kernel_patches/quilt/quilt/applied.in
new file mode 100755 (executable)
index 0000000..4bffbd4
--- /dev/null
@@ -0,0 +1,86 @@
+#! @BASH@
+
+#  This script is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License version 2 as
+#  published by the Free Software Foundation.
+#
+#  See the COPYING and AUTHORS files for more details.
+
+# Read in library functions
+if [ "$(type -t patch_file_name)" != function ]
+then
+       if ! [ -r @SCRIPTS@/patchfns ]
+       then
+               echo "Cannot read library @SCRIPTS@/patchfns" >&2
+               exit 1
+       fi
+       . @SCRIPTS@/patchfns
+fi
+
+usage()
+{
+       echo $"Usage: quilt applied [-n] [patch]"
+       if [ x$1 = x-h ]
+       then
+               echo $"
+
+Print a list of applied patches.
+
+-n     Print patch file names instead of patch names.
+
+"
+
+               exit 0
+       else
+               exit 1
+       fi
+}
+
+options=`getopt -o nh -- "$@"`
+
+if [ $? -ne 0 ]
+then
+       usage
+fi
+
+eval set -- "$options"
+
+while true
+do
+       case "$1" in
+       -n)
+               opt_filenames=1
+               shift ;;
+       -h)
+               usage -h ;;
+       --)
+               shift
+               break ;;
+       esac
+done
+
+if [ $# -gt 1 ]
+then
+       usage
+elif [ $# -eq 1 ]
+then
+       patch=$(stripit $1)
+       if ! is_applied "$patch"
+       then
+               echo $"Patch $patch is not applied" >&2
+               exit 1
+       fi
+else
+       patch=$(top_patch)
+fi
+
+for patch in $(applied_before "$patch") $patch
+do
+       [ -n "$opt_filenames" ] && patch=$(patch_file_name $patch)
+       echo $patch
+done
+
+### Local Variables:
+### mode: shell-script
+### End:
+# vim:filetype=sh
diff --git a/lustre/kernel_patches/quilt/quilt/delete.in b/lustre/kernel_patches/quilt/quilt/delete.in
new file mode 100755 (executable)
index 0000000..cd4bdf8
--- /dev/null
@@ -0,0 +1,95 @@
+#! @BASH@
+
+#  This script is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License version 2 as
+#  published by the Free Software Foundation.
+#
+#  See the COPYING and AUTHORS files for more details.
+
+# Read in library functions
+if [ "$(type -t patch_file_name)" != function ]
+then
+       if ! [ -r @SCRIPTS@/patchfns ]
+       then
+               echo "Cannot read library @SCRIPTS@/patchfns" >&2
+               exit 1
+       fi
+       . @SCRIPTS@/patchfns
+fi
+
+usage()
+{
+       echo $"Usage: quilt delete [patch]"
+       if [ x$1 = x-h ]
+       then
+               echo $"
+
+Remove the specified or topmost patch from the series file.  If the
+patch is applied, quilt will attempt to remove it first. (Only the
+topmost patch can be removed right now.)"
+
+               exit 0
+       else
+               exit 1
+       fi
+}
+
+options=`getopt -o h -- "$@"`
+
+if [ $? -ne 0 ]
+then
+       usage
+fi
+
+eval set -- "$options"
+
+while true
+do
+       case "$1" in
+       -h)
+               usage -h ;;
+       --)
+               shift
+               break ;;
+       esac
+done
+
+if [ $# -gt 1 ]
+then
+       usage
+fi
+
+patch=$(stripit $1)
+
+if [ -z "$patch" ]
+then
+       patch="$(top_patch)"
+       if [ -z "$patch" ]
+       then
+               echo $"No patch applied"
+               exit 1
+       fi
+else
+       if ! patch_in_series $patch
+       then
+               echo $"Patch $patch does not exist"
+               exit 1
+       fi
+fi
+if is_applied $patch
+then
+       if [ "$patch" != "$(top_patch)" ] || \
+          ! @SCRIPTS@/rpatch -fq "$patch"
+       then
+               echo $"Patch $patch is currently applied"
+               exit 1
+       fi
+fi
+if ! remove_from_series $patch
+then
+       echo $"Failed to remove patch $patch"
+fi
+### Local Variables:
+### mode: shell-script
+### End:
+# vim:filetype=sh
diff --git a/lustre/kernel_patches/quilt/quilt/diff.in b/lustre/kernel_patches/quilt/quilt/diff.in
new file mode 100755 (executable)
index 0000000..8d721ec
--- /dev/null
@@ -0,0 +1,307 @@
+#! @BASH@
+
+#  This script is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License version 2 as
+#  published by the Free Software Foundation.
+#
+#  See the COPYING and AUTHORS files for more details.
+
+# Read in library functions
+if [ "$(type -t patch_file_name)" != function ]
+then
+       if ! [ -r @SCRIPTS@/patchfns ]
+       then
+               echo "Cannot read library @SCRIPTS@/patchfns" >&2
+               exit 1
+       fi
+       . @SCRIPTS@/patchfns
+fi
+
+usage()
+{
+       local redirect
+       if [ x$1 != x-h ]
+       then
+               redirect='>&2'
+       fi
+       echo $"Usage: quilt diff [-p n] [-c patch|-z] [-R] [-P patch] [file ...]" $redirect
+       
+       if [ x$1 = x-h ]
+       then
+               echo $"
+
+Produces a diff of the specified file(s) in the topmost or specified
+patch.  If no files are specified, all files that are modified are
+included.
+
+-p n   Create a -p n style patch (-p0 or -p1 are supported).
+
+-P patch
+       Create a diff for the specified patch.  (Defaults to the topmost
+       patch.)
+
+-c patch
+       Create a combined diff for all patches between this patch and
+       the patch specified with -P. A patch name of \"-\" is equivalent
+       to specifying the first applied patch.
+
+-R     Create a reverse diff.
+
+-z     Write to standard output the changes that have been made
+       relative to the topmost or specified patch.
+
+"
+               exit 0
+       else
+               exit 1
+       fi
+}
+
+do_diff()
+{
+       local file=$1 old_file=$2 new_file=$3
+
+       if [ -n "$opt_reverse" ]
+       then
+               local f=$new_file
+               new_file=$old_file
+               old_file=$f
+       fi
+       
+       if [ -n "$opt_diff" ]
+       then
+               if ! @DIFF@ -qN $old_file $new_file >/dev/null
+               then
+                       $opt_diff $old_file $new_file
+                       true
+               fi
+       else
+               diff_file $file $old_file $new_file
+       fi
+}
+
+die ()
+{
+       local status=$1
+       [ -n "$workdir" ] && rm -rf $workdir
+       exit $status
+}
+
+options=`getopt -o p:P:c:Rzh --long diff: -- "$@"`
+
+if [ $? -ne 0 ]
+then
+       usage
+fi
+
+eval set -- "$options"
+
+while true
+do
+       case "$1" in
+       -p)
+               opt_strip_level=$2
+               shift 2 ;;
+       -P)
+               last_patch=$(stripit $2)
+               shift 2 ;;
+       -c)
+               opt_combine=$(stripit $2)
+               shift 2 ;;
+       -R)
+               opt_reverse=1
+               shift ;;
+       -z)
+               opt_relative=1
+               shift ;;
+       -h)
+               usage -h ;;
+       --diff)
+               opt_diff=$2
+               shift 2 ;;
+       --)
+               shift
+               break ;;
+       esac
+done
+
+opt_files=( "$@" )
+
+if [ -n "$opt_combine" -a -n "$opt_relative" ]
+then
+       echo $"Options \`-c patch' and \`-z' cannot be combined."
+       die 1
+fi
+
+if [ -z "$last_patch" ]
+then
+       last_patch=$(top_patch)
+       if [ -z "$last_patch" ]
+       then
+               echo $"No patch seem to be applied" >&2
+               die 1
+       fi
+fi
+
+if ! is_applied "$last_patch"
+then
+       echo $"Patch $last_patch is not applied" >&2
+       die 1
+fi
+
+if [ -z "$opt_strip_level" ]
+then
+       opt_strip_level=$(patch_strip_level $last_patch)
+fi
+if [ "$opt_strip_level" != 0 -a "$opt_strip_level" != 1 ]
+then
+       echo $"Cannot diff patches with -p$opt_strip_level, please specify -p0 or -p1 instead" >&2
+       die 1
+fi
+
+if [ -n "$opt_combine" ]
+then
+       if ! refresh_patches_per_file
+       then
+               echo $"refresh_patches_per_file failed."
+               die 1
+       fi
+       
+       set -- $(patches_before $last_patch) $last_patch
+       if [ "x$opt_combine" != "x-" ]
+       then
+               while [ $# -ge 1 -a "$1" != "$opt_combine" ]
+               do
+                       shift
+               done
+               if [ $# -eq 0 ]
+               then
+                       echo $"Patch $opt_combine not applied before $last_patch."
+                       die 1
+               fi
+       fi
+       
+       while read file first garbage
+       do
+               if [ ${#opt_files[@]} -gt 0 ] && \
+                  ! in_array "$file" "${opt_files[@]}"
+               then
+                       continue
+               fi
+               patches[${#patches[@]}]="$first"
+               files[${#files[@]}]="$file"
+       done \
+       < <(modified_files -- "$@")
+else
+       for file in $(files_in_patch $last_patch)
+       do
+               if [ ${#opt_files[@]} -gt 0 ] && \
+                  ! in_array "$file" "${opt_files[@]}"
+               then
+                       continue
+               fi
+               files[${#files[@]}]="$file"
+       done
+fi
+
+if [ ${#opt_files[@]} -gt 0 ]
+then
+       for file in "${opt_files[@]}"
+       do
+               if ! in_array "$file" "${files[@]}"
+               then
+                       echo $"File $file is not being modified."
+               fi
+       done
+fi
+
+trap "die 1" SIGTERM
+
+if [ -n "$opt_relative" ]
+then
+       patch_file=$(patch_file_name $last_patch)
+       pc_file=$(pc_file_name $last_patch)
+       patch_args=$(patch_args $last_patch)
+       workdir=$(gen_tempfile -d $PWD/quilt)
+       pwd=$PWD
+
+       if ! cd .pc/$last_patch
+       then
+               echo $"Cannot change into .pc/$last_patch"
+               die 1
+       fi
+       if ! cp -l --parents "${files[@]}" $workdir/
+       then
+               echo $"Failed to copy files to temporary directory"
+               die 1
+       fi
+       if ! cd $workdir
+       then
+               echo $"Cannot change to temporary directory"
+               die 1
+       fi
+       
+       if [ -s $pwd/$patch_file ]
+       then
+               if ! cat_file $pwd/$patch_file \
+                    | @PATCH@ $patch_args --no-backup-if-mismatch \
+                            -E >/dev/null 2>/dev/null
+               then
+                       # If a patch was force applied (and therefore needs
+                       # refreshing), we know that patching the temporary
+                       # files won't succeed, either. So, ignore the error
+                       # in that particular case.
+                       
+                       if ! [ -e $pwd/$pc_file~refresh ]
+                       then
+                               echo $"Failed to patch temporary files"
+                               die 1
+                       fi
+               fi
+       fi
+       if ! cd $pwd
+       then
+               echo $"Cannot change to source directory"
+               die 1
+       fi
+fi
+
+for ((i=0; i<${#files[@]}; i++))
+do
+       file="${files[$i]}"
+       first_patch=${patches[$i]:-$last_patch}
+
+       next_patch=$(next_patch_for_file $last_patch $file)
+       if [ -z "$next_patch" ]
+       then
+               new_file="$file"
+       else
+               new_file="$(backup_file_name $next_patch $file)"
+               files_were_shadowed=1
+       fi
+
+       if [ -z "$opt_relative" ]
+       then
+               old_file=$(backup_file_name $first_patch $file)
+               do_diff $file $old_file $new_file
+       else
+               do_diff $file "$workdir/$file" $new_file
+       fi
+
+       if [ $? -ne 0 ]
+       then
+               echo $"Diff failed, aborting." >&2
+               die 1
+       fi
+done
+
+if [ -n "$files_were_shadowed" ]
+then
+       echo $"More recent patches modify files in $last_patch."
+       die 1
+fi
+die 0
+### Local Variables:
+### mode: shell-script
+### End:
+# vim:filetype=sh
diff --git a/lustre/kernel_patches/quilt/quilt/files.in b/lustre/kernel_patches/quilt/quilt/files.in
new file mode 100755 (executable)
index 0000000..796b9e2
--- /dev/null
@@ -0,0 +1,115 @@
+#! @BASH@
+
+#  This script is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License version 2 as
+#  published by the Free Software Foundation.
+#
+#  See the COPYING and AUTHORS files for more details.
+
+# Read in library functions
+if [ "$(type -t patch_file_name)" != function ]
+then
+       if ! [ -r @SCRIPTS@/patchfns ]
+       then
+               echo "Cannot read library @SCRIPTS@/patchfns" >&2
+               exit 1
+       fi
+       . @SCRIPTS@/patchfns
+fi
+
+usage()
+{
+       echo $"Usage: quilt files [-v] [patch]"
+       if [ x$1 = x-h ]
+       then
+               echo $"
+
+Print the list of files that the topmost or specified patch changes.
+
+-v     Verbose, more user friendly output.
+
+"
+               exit 0
+       else
+               exit 1
+       fi
+}
+
+options=`getopt -o vh -- "$@"`
+
+if [ $? -ne 0 ]
+then
+       usage
+fi
+
+eval set -- "$options"
+
+while true
+do
+       case "$1" in
+       -v)
+               opt_verbose=1
+               shift ;;
+       -h)
+               usage -h ;;
+       --)
+               shift
+               break ;;
+       esac
+done
+
+if [ $# -gt 1 ]
+then
+       usage
+fi
+opt_patch=$1
+
+if [ -n "$opt_patch" ]
+then
+       patch=$(stripit "$opt_patch")
+else
+       patch=$(top_patch)
+       if [ -z "$patch" ]
+       then
+               echo $"No patch applied" >&2
+               exit 1
+       fi
+fi
+
+if ! is_applied $patch
+then
+       if [ -n "$opt_verbose" ]
+       then
+               echo $"Patch is not applied (no verbose output)" >&2
+               opt_verbose=0
+       else
+               echo $"Patch is not applied" >&2
+       fi
+fi
+
+if [ -z "$opt_verbose" ]
+then
+       files_in_patch $patch
+else
+       for file in $(files_in_patch $patch)
+       do
+               status=" "
+               if [ -s $(backup_file_name $patch $file) ]
+               then
+                       if ! [ -s $file ]
+                       then
+                               status="-"
+                       fi
+               else
+                       if [ -s $file ]
+                       then
+                               status="+"
+                       fi
+               fi
+               echo "$status $file"
+       done
+fi
+### Local Variables:
+### mode: shell-script
+### End:
+# vim:filetype=sh
diff --git a/lustre/kernel_patches/quilt/quilt/fork.in b/lustre/kernel_patches/quilt/quilt/fork.in
new file mode 100755 (executable)
index 0000000..822036c
--- /dev/null
@@ -0,0 +1,98 @@
+#! @BASH@
+
+#  This script is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License version 2 as
+#  published by the Free Software Foundation.
+#
+#  See the COPYING and AUTHORS files for more details.
+
+# Read in library functions
+if [ "$(type -t patch_file_name)" != function ]
+then
+       if ! [ -r @SCRIPTS@/patchfns ]
+       then
+               echo "Cannot read library @SCRIPTS@/patchfns" >&2
+               exit 1
+       fi
+       . @SCRIPTS@/patchfns
+fi
+
+usage()
+{
+       echo $"Usage: quilt fork {new_patchname}"
+       if [ x$1 = x-h ]
+       then
+               echo $"
+ Fork the next patch in the series
+"
+               exit 0
+       else
+               exit 1
+       fi
+}
+
+options=`getopt -o h -- "$@"`
+
+if [ $? -ne 0 ]
+then
+       usage
+fi
+
+eval set -- "$options"
+
+while true
+do
+       case "$1" in
+       -h)
+               usage -h ;;
+       --)
+               shift
+               break ;;
+       esac
+done
+
+if [ $# -ne 1 ]
+then
+       usage
+fi
+
+patch_file=$(echo $1 | @SED@ -e 's/^'"$(quote_bre $P)"'patches\///')
+patch=$(stripit $patch_file)
+
+if patch_in_series $patch
+then
+       echo $"Patch $patch exists already, please change a new_name"
+       exit 1
+fi
+
+mkdir -p $(dirname $(pc_file_name $patch))
+rm -f $(pc_file_name $patch)
+
+next_patch=$(patches_after $(top_patch) | head -n 1)
+#copy the original patch to the cloned patch
+
+next_patch_file=$(patch_file_name $next_patch)
+next_pc=$(pc_file_name $next_patch)
+
+cp -f ${next_patch_file} patches/${patch_file}.patch
+
+#remove the original patch
+if [ -z next_patch ]  
+then
+       echo $"patch ended at $(top_patch)"
+       exit 1
+else
+       remove_from_series $next_patch
+fi
+
+#add the cloned patch to series
+if ! insert_in_series ${patch_file}.patch 
+then
+       echo $"Failed to fork patch $patch"
+       exit 1
+fi
+echo $"cloned $next_patch to $patch_file"
+### Local Variables:
+### mode: shell-script
+### End:
+# vim:filetype=sh
diff --git a/lustre/kernel_patches/quilt/quilt/import.in b/lustre/kernel_patches/quilt/quilt/import.in
new file mode 100755 (executable)
index 0000000..63b7470
--- /dev/null
@@ -0,0 +1,204 @@
+#! @BASH@
+
+#  This script is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License version 2 as
+#  published by the Free Software Foundation.
+#
+#  See the COPYING and AUTHORS files for more details.
+
+# Read in library functions
+if [ "$(type -t patch_file_name)" != function ]
+then
+       if ! [ -r @SCRIPTS@/patchfns ]
+       then
+               echo "Cannot read library @SCRIPTS@/patchfns" >&2
+               exit 1
+       fi
+       . @SCRIPTS@/patchfns
+fi
+
+usage()
+{
+       echo $"Usage: quilt import [-f] [-p num] [-n patch] [patchfile]"
+       if [ x$1 = x-h ]
+       then
+               echo $"
+
+Import an external patch.  If a patch file name is specified, the patch
+will be stored in this relative path in the patches/ directory.  Else,
+if an input file name is given this name is used as the patch name.
+
+-p num
+       Number of directory levels to strip when aplying (default=1)
+
+-n patch
+       File name relative to patches/ to use.
+
+-f     Overwite/update existing patches.
+
+"
+               exit 0
+       else
+               exit 1
+       fi
+}
+
+options=`getopt -o fn:p:h -- "$@"`
+
+if [ $? -ne 0 ]
+then
+        usage
+fi
+
+eval set -- "$options"
+
+while true
+do
+        case "$1" in
+        -n)
+               opt_patch=$(echo "$2" |
+                           @SED@ -e 's/^'"$(quote_bre $P)"'patches\///' \
+                                 -e 's/^\.pc\///')
+               shift 2 ;;
+       -p)
+               opt_strip=$2
+               shift 2 ;;
+       -f)
+               opt_force=1
+               shift ;;
+       -h)
+               usage -h ;;
+        --)
+                shift
+               break ;;
+        esac
+done
+
+if [ $# -eq 1 ]
+then
+       input_file=$1
+elif [ $# -gt 1 ]
+then
+        usage
+fi
+
+[ -n "$opt_strip" ] && patch_args="-p$opt_strip"
+
+if [ -n "$opt_patch" ]
+then
+       patch=$(stripit "$opt_patch")
+       patch_file="${P}patches/$opt_patch"
+else
+       patch="$(stripit "$input_file")"
+       if [ -n "$patch" ]
+       then
+               opt_patch="$patch.patch"
+       else
+               echo $"Please use -n to specify a patch file name."
+               exit 1
+       fi
+       patch_file="${P}patches/$opt_patch"
+fi
+
+if echo "$patch_file" | grep -q -e $'[ \t]'
+then
+       echo $"Patch file name \"$patch_file\" contains whitespace."
+       exit 1
+fi
+
+if is_applied $patch
+then
+       echo $"Patch $patch is applied."
+       exit 1
+fi
+
+case "$input_file" in
+'')
+       tmpfile=$(gen_tempfile)
+       if ! cat > $tmpfile
+       then
+               echo $"Cannot read from standard input."
+               rm -f $tmpfile
+               exit 1
+       fi
+       input_file=$tmpfile ;;
+*.gz)
+       tmpfile=$(gen_tempfile)
+       if ! gzip -cd "$input_file" > $tmpfile
+       then
+               echo $"Cannot decompress file $input_file"
+               rm -f $tmpfile
+               exit 1
+       fi
+       input_file=$tmpfile ;;
+*.bz2)
+       tmpfile=$(gen_tempfile)
+       if ! bzip2 -cd "$input_file" > $tmpfile
+       then
+               echo $"Cannot decompress file $input_file"
+               rm -f $tmpfile
+               exit
+       fi
+       input_file=$tmpfile ;;
+*)
+       if ! [ -r "$input_file" ]
+       then
+               echo $"Cannot read from file $input_file"
+               exit 1
+       fi
+esac
+
+if [ -e "$patch_file" ]
+then
+       if [ -z "$opt_force" ]
+       then
+               echo $"Patch $patch exists. Replace with -f."
+               exit 1
+       fi
+
+       if grep -q '^%patch$' "$patch_file" &&
+          ! grep -q '^%patch$' "$input_file"
+       then
+               echo $"Updating %patch section of patch $patch"
+               if ! @SCRIPTS@/parse-patch -u patch $patch_file < "$input_file"
+               then
+                       echo $"Failed to update %patch section of patch $patch"
+                       exit 1
+               fi
+       else
+               echo $"Replacing patch $patch with new version"
+               if ! cat "$input_file" > "$patch_file"
+               then
+                       echo $"Failed to replace patch $patch"
+                       exit 1
+               fi
+       fi
+else
+       echo $"Importing patch $patch (stored as $patch_file)"
+       if ! grep -q '^%patch$' "$input_file"
+       then
+               echo "%patch" >> "$patch_file"
+       fi
+       if ! cat "$input_file" >> "$patch_file"
+       then
+               echo $"Failed to import patch $patch"
+               exit 1
+       fi
+fi
+
+rm -rf .pc/$patch
+
+if ! patch_in_series $patch &&
+   ! insert_in_series $opt_patch "$patch_args"
+then
+       echo $"Failed to insert $patch in file series."
+fi
+
+if [ -n "$tmpfile" ]
+then
+       rm -f $tmpfile
+fi
+### Local Variables:
+### mode: shell-script
+### End:
+# vim:filetype=sh
diff --git a/lustre/kernel_patches/quilt/quilt/new.in b/lustre/kernel_patches/quilt/quilt/new.in
new file mode 100755 (executable)
index 0000000..bba2929
--- /dev/null
@@ -0,0 +1,85 @@
+#! @BASH@
+
+#  This script is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License version 2 as
+#  published by the Free Software Foundation.
+#
+#  See the COPYING and AUTHORS files for more details.
+
+# Read in library functions
+if [ "$(type -t patch_file_name)" != function ]
+then
+       if ! [ -r @SCRIPTS@/patchfns ]
+       then
+               echo "Cannot read library @SCRIPTS@/patchfns" >&2
+               exit 1
+       fi
+       . @SCRIPTS@/patchfns
+fi
+
+usage()
+{
+       echo $"Usage: quilt new {patchname}"
+       if [ x$1 = x-h ]
+       then
+               echo $"
+
+Create a new patch with the specified file name, and insert it after the
+topmost patch in the patch series file.
+
+"
+               exit 0
+       else
+               exit 1
+       fi
+}
+
+options=`getopt -o h -- "$@"`
+
+if [ $? -ne 0 ]
+then
+       usage
+fi
+
+eval set -- "$options"
+
+while true
+do
+       case "$1" in
+       -h)
+               usage -h ;;
+       --)
+               shift
+               break ;;
+       esac
+done
+
+if [ $# -ne 1 ]
+then
+       usage
+fi
+
+patch_file=$(echo $1 | @SED@ -e 's/^'"$(quote_bre $P)"'patches\///')
+patch=$(stripit $patch_file)
+
+if patch_in_series $patch
+then
+       echo $"Patch $patch exists already"
+       exit 1
+fi
+
+mkdir -p $(dirname $(pc_file_name $patch))
+rm -f $(pc_file_name $patch)
+
+if ! insert_in_series $patch_file || \
+   ! add_to_db $patch
+then
+       echo $"Failed to create patch $patch"
+       exit 1
+else
+       echo $"Patch $patch is now on top"
+fi
+### Local Variables:
+### mode: shell-script
+### End:
+# vim:filetype=sh
diff --git a/lustre/kernel_patches/quilt/quilt/next.in b/lustre/kernel_patches/quilt/quilt/next.in
new file mode 100755 (executable)
index 0000000..9e2ca64
--- /dev/null
@@ -0,0 +1,83 @@
+#! @BASH@
+
+#  This script is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License version 2 as
+#  published by the Free Software Foundation.
+#
+#  See the COPYING and AUTHORS files for more details.
+
+# Read in library functions
+if [ "$(type -t patch_file_name)" != function ]
+then
+       if ! [ -r @SCRIPTS@/patchfns ]
+       then
+               echo "Cannot read library @SCRIPTS@/patchfns" >&2
+               exit 1
+       fi
+       . @SCRIPTS@/patchfns
+fi
+
+usage()
+{
+       echo $"Usage: quilt next [patch]"
+       if [ x$1 = x-h ]
+       then
+               echo $"
+
+Print the name of the next patch after the specified or topmost patch in
+the series file.
+
+-n     Print patch file names instead of patch names.
+
+"
+               exit 0
+       else
+               exit 1
+       fi
+}
+
+options=`getopt -o nh -- "$@"`
+
+if [ $? -ne 0 ]
+then
+       usage
+fi
+
+eval set -- "$options"
+
+while true
+do
+       case "$1" in
+       -n)
+               opt_filenames=1
+               shift ;;
+       -h)
+               usage -h ;;
+       --)
+               shift
+               break ;;
+       esac
+done
+
+if [ $# -gt 1 ]
+then
+       usage
+elif [ $# -eq 1 ]
+then
+       patch=$(stripit $1)
+else
+       patch=$(top_patch)
+fi
+
+if [ -z "$patch" ]
+then
+       next=$(cat_series | head -n 1)
+else
+       next=$(patches_after $patch | head -n 1)
+fi
+[ -n "$opt_filenames" ] && next=$(patch_file_name $next)
+echo "$next"
+### Local Variables:
+### mode: shell-script
+### End:
+# vim:filetype=sh
diff --git a/lustre/kernel_patches/quilt/quilt/patches.in b/lustre/kernel_patches/quilt/quilt/patches.in
new file mode 100755 (executable)
index 0000000..fd1b1fa
--- /dev/null
@@ -0,0 +1,113 @@
+#! @BASH@
+
+#  This script is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License version 2 as
+#  published by the Free Software Foundation.
+#
+#  See the COPYING and AUTHORS files for more details.
+
+# Read in library functions
+if [ "$(type -t patch_file_name)" != function ]
+then
+       if ! [ -r @SCRIPTS@/patchfns ]
+       then
+               echo "Cannot read library @SCRIPTS@/patchfns" >&2
+               exit 1
+       fi
+       . @SCRIPTS@/patchfns
+fi
+
+usage()
+{
+       echo $"Usage: quilt patches {file}"
+       if [ x$1 = x-h ]
+       then
+               echo $"
+
+Print the list of patches that modify the specified file.
+
+-n     Print the patch file names instead of the patch names.
+
+-v     Verbose, more user friendly output.
+
+"
+               exit 0
+       else
+               exit 1
+       fi
+}
+
+scan_patches()
+{
+       local prefix=$1 file=$2
+       shift 2
+       local patch
+
+       for patch in $(modified_files $file -- "$@" \
+                      | cut -d $'\t' -f2)
+       do
+               [ -n "$opt_filenames" ] && patch=$(patch_file_name $patch)
+               
+               echo "$prefix$patch"
+       done
+}
+
+options=`getopt -o nvh -- "$@"`
+
+if [ $? -ne 0 ]
+then
+       usage
+fi
+
+eval set -- "$options"
+
+while true
+do
+       case "$1" in
+       -n)
+               opt_filenames=1
+               shift ;;
+       -v)
+               opt_verbose=1
+               shift ;;
+       -h)
+               usage -h ;;
+       --)
+               shift
+               break ;;
+       esac
+done
+
+if [ $# -ne 1 ]
+then
+       usage
+fi
+opt_file=$1
+
+if ! refresh_patches_per_file
+then
+       exit 1
+fi
+
+if [ -n "$opt_verbose" ]
+then
+       top=$(top_patch)
+       if [ -n "$top" ]
+       then
+               patches_before="$(patches_before $top)"
+               [ -n "$patches_before" ] &&
+                       scan_patches "+ " $opt_file $patches_before
+               scan_patches "= " $opt_file $top
+               patches_after="$(patches_after $top)"
+               [ -n "$patches_after" ] &&
+                       scan_patches "  " $opt_file $(patches_after $top)
+       else
+               scan_patches "  " $opt_file
+       fi
+else
+       scan_patches "" $opt_file
+fi
+### Local Variables:
+### mode: shell-script
+### End:
+# vim:filetype=sh
diff --git a/lustre/kernel_patches/quilt/quilt/pop.in b/lustre/kernel_patches/quilt/quilt/pop.in
new file mode 100755 (executable)
index 0000000..ecd6719
--- /dev/null
@@ -0,0 +1,186 @@
+#! @BASH@
+
+#  This script is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License version 2 as
+#  published by the Free Software Foundation.
+#
+#  See the COPYING and AUTHORS files for more details.
+
+# Read in library functions
+if [ "$(type -t patch_file_name)" != function ]
+then
+       if ! [ -r @SCRIPTS@/patchfns ]
+       then
+               echo "Cannot read library @SCRIPTS@/patchfns" >&2
+               exit 1
+       fi
+       . @SCRIPTS@/patchfns
+fi
+
+usage()
+{
+       echo $"Usage: quilt pop [-afRqv] [num|patch]"
+       if [ x$1 = x-h ]
+       then
+               echo $"
+
+Remove patch(es) from the current stack. A number of patches to remove,
+or a patch name can be specified. If a patch name is given, remove all
+patches applied on top of the named patch. If neither a number nor a
+patch name is specified, remove the next patch from the series file.
+
+-a     Remove all applied patches.
+
+-f     Force remove. The state before the patch(es) were applied will
+       be restored from backup files.
+
+-R     Remove the patch with \`patch -R' and check if the patch reverts
+       all changes properly.
+
+-q     Quiet operation.
+
+-v     Verbose operation.
+
+"
+               exit 0
+       else
+               exit 1
+       fi
+}
+
+list_patches()
+{
+       local n=0 patch
+       applied_patches \
+       | tac \
+       | if [ -n "$opt_all" ]
+       then
+               cat
+       else
+               while read patch
+               do
+                       if [ -n "$number" ]
+                       then
+                               if [ $n -eq $number ]
+                               then
+                                       break
+                               fi
+                               n=$[$n+1]
+                       fi
+                       if [ $patch = "$stop_at_patch" ]
+                       then
+                               break
+                       fi
+                       echo $patch
+               done
+       fi
+}
+
+options=`getopt -o fRqvah -- "$@"`
+
+if [ $? -ne 0 ]
+then
+        usage
+fi
+
+eval set -- "$options"
+
+while true
+do
+        case "$1" in
+        -f)
+                opt_force=1
+               unset opt_remove
+               shift ;;
+       -R)
+               opt_remove=1    # remove with patch -R; no tricks
+               unset opt_force
+               shift ;;
+        -q)
+                opt_quiet=1
+               shift ;;
+        -v)
+                opt_verbose=1
+               shift ;;
+       -a)
+               opt_all=1
+               shift ;;
+       -h)
+               usage -h ;;
+        --)
+                shift
+               break ;;
+        esac
+done
+
+if [ $# -gt 1 -o \( -n "$opt_all" -a $# -ne 0 \) ]
+then
+        usage
+fi
+
+if [ $# -eq 1 ]
+then
+       if is_numeric $1
+       then
+               number=$1
+       else
+               stop_at_patch=$(stripit $1)
+       fi
+else
+       [ -n "$opt_all" ] || number=1
+fi
+
+[ -n "$opt_force" ] &&
+       rpatch_options="$rpatch_options -f"
+[ -n "$opt_remove" ] &&
+       rpatch_options="$rpatch_options -R"
+[ -n "$opt_quiet" ] &&
+       rpatch_options="$rpatch_options -q"
+[ -n "$opt_verbose" ] &&
+       rpatch_options="$rpatch_options -v"
+
+if [ -n "$stop_at_patch" ]
+then
+       if ! is_applied $stop_at_patch
+       then
+               echo $"Patch $stop_at_patch is not applied."
+               exit 1
+       fi
+fi
+
+if ! patches=$(list_patches) 2>&1
+then
+       exit 1
+elif [ -z "$patches" ]
+then
+        echo $"No patch removed"
+       exit 0
+fi
+
+trap "interrupted=1" SIGINT
+
+for patch in $patches
+do
+       if ! @SCRIPTS@/rpatch $rpatch_options $patch
+       then
+               exit 1
+       fi
+       if [ -n "$interrupted" ]
+       then
+               echo $"Interrupted by user"
+               exit 1
+       fi
+       [ -z "$opt_quiet" ] && echo
+done
+
+patch="$(top_patch)"
+if [ -z "$patch" ]
+then
+       echo $"No patches applied"
+else
+       echo $"Now at patch $patch"
+fi
+### Local Variables:
+### mode: shell-script
+### End:
+# vim:filetype=sh
diff --git a/lustre/kernel_patches/quilt/quilt/previous.in b/lustre/kernel_patches/quilt/quilt/previous.in
new file mode 100755 (executable)
index 0000000..36bfb30
--- /dev/null
@@ -0,0 +1,82 @@
+#! @BASH@
+
+#  This script is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License version 2 as
+#  published by the Free Software Foundation.
+#
+#  See the COPYING and AUTHORS files for more details.
+
+# Read in library functions
+if [ "$(type -t patch_file_name)" != function ]
+then
+       if ! [ -r @SCRIPTS@/patchfns ]
+       then
+               echo "Cannot read library @SCRIPTS@/patchfns" >&2
+               exit 1
+       fi
+       . @SCRIPTS@/patchfns
+fi
+
+usage()
+{
+       echo $"Usage: quilt previous [-n] [patch]"
+       if [ x$1 = x-h ]
+       then
+               echo $"
+
+Print the name of the previous patch before the specified or topmost
+patch in the series file.
+
+-n     Print patch file names instead of patch names.
+
+"
+               exit 0
+       else
+               exit 1
+       fi
+}
+
+options=`getopt -o nh -- "$@"`
+
+if [ $? -ne 0 ]
+then
+       usage
+fi
+
+eval set -- "$options"
+
+while true
+do
+       case "$1" in
+       -n)
+               opt_filenames=1
+               shift ;;
+       -h)
+               usage -h ;;
+       --)
+               shift
+               break ;;
+       esac
+done
+
+if [ $# -gt 1 ]
+then
+       usage
+elif [ $# -eq 1 ]
+then
+       patch=$(stripit $1)
+else
+       patch=$(top_patch)
+fi
+
+previous=$(applied_before "$patch" | tail -n 1)
+if [ -n "$previous" ]
+then
+       [ -n "$opt_filenames" ] && previous=$(patch_file_name $previous)
+       echo "$previous"
+fi
+
+### Local Variables:
+### mode: shell-script
+### End:
+# vim:filetype=sh
diff --git a/lustre/kernel_patches/quilt/quilt/push.in b/lustre/kernel_patches/quilt/quilt/push.in
new file mode 100755 (executable)
index 0000000..a4d1a12
--- /dev/null
@@ -0,0 +1,217 @@
+#! @BASH@
+#  This script is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License version 2 as
+#  published by the Free Software Foundation.
+#
+#  See the COPYING and AUTHORS files for more details.
+
+# Read in library functions
+if [ "$(type -t patch_file_name)" != function ]
+then
+       if ! [ -r @SCRIPTS@/patchfns ]
+       then
+               echo "Cannot read library @SCRIPTS@/patchfns" >&2
+               exit 1
+       fi
+       . @SCRIPTS@/patchfns
+fi
+
+usage()
+{
+       echo $"Usage: quilt push [-afqv] [--leave-rejects] [num|patch]"
+       if [ x$1 = x-h ]
+       then
+               echo $"
+
+Apply patch(es) from the series file.  A number of patches to apply, or
+a patch name can be specified.  If a patch name is given, apply all
+patches up to and including the named patch.  If neither a number nor a
+patch name is specified, apply the next patch from the series file.
+
+-a     Apply all patches in the series file.
+
+-f     Force apply, even if the patch has rejects.
+
+-q     Quiet operation.
+
+-v     Verbose operation.
+
+--leave-rejects
+       Leave around the reject files patch produced, even if the patch
+       is not actually applied.
+
+--interactive
+       Allow the patch utility to ask how to deal with conflicts. If
+       this option is not given, the option -f will be passed to the 
+       patch program.
+
+"
+               exit 0
+       else
+               exit 1
+       fi
+}
+
+list_patches()
+{
+       local top=$(top_patch) n=0 patch
+       if [ -n "$top" ]
+       then
+               patches_after $top
+       else
+               cat_series
+       fi \
+       | if [ -n "$opt_all" ]
+       then
+               cat
+       else
+               while read patch
+               do
+                       if [ -n "$number" ]
+                       then
+                               if [ $n -eq $number ]
+                               then
+                                       break
+                               fi
+                               n=$[$n+1]
+                       fi
+                       echo $patch
+                       if [ $patch = "$stop_at_patch" ]
+                       then
+                               break
+                       fi
+               done
+               if [ -n "$stop_at_patch" -a "$patch" != "$stop_at_patch" ]
+               then
+                       echo $"Patch $stop_at_patch not found in file series" >&2
+                       return 1
+               fi
+       fi
+}
+
+options=`getopt -o fqvah --long leave-rejects,interactive -- "$@"`
+
+if [ $? -ne 0 ]
+then
+        usage
+fi
+
+eval set -- "$options"
+
+while true
+do
+        case "$1" in
+        -f)
+                opt_force=1
+               shift ;;
+        -q)
+                opt_quiet=1
+               shift ;;
+       -v)
+               opt_verbose=1
+               shift ;;
+       -a)
+               opt_all=1
+               shift ;;
+       -h)
+               usage -h ;;
+       --leave-rejects)
+               opt_leave_rejects=1
+               shift ;;
+       --interactive)
+               opt_interactive=1
+               shift ;;
+        --)
+                shift
+               break ;;
+        esac
+done
+
+if [ $# -gt 1 -o \( -n "$opt_all" -a $# -ne 0 \) ]
+then
+        usage
+fi
+
+if [ $# -eq 1 ]
+then
+       if is_numeric $1
+       then
+               number=$1
+       else
+               stop_at_patch=$(stripit $1)
+       fi
+else
+       [ -z "$opt_all" ] && number=1
+fi
+
+[ -n "$opt_force" ] &&
+       apatch_options="$apatch_options -f"
+[ -n "$opt_quiet" ] &&
+       apatch_options="$apatch_options -q"
+[ -n "$opt_verbose" ] &&
+       apatch_options="$apatch_options -v"
+[ -n "$opt_leave_rejects" ] &&
+       apatch_options="$apatch_options --leave-rejects"
+[ -n "$opt_interactive" ] &&
+       apatch_options="$apatch_options --interactive"
+
+if [ -n "$stop_at_patch" ]
+then
+       if is_applied $stop_at_patch
+       then
+               echo $"Patch $stop_at_patch is already applied."
+               exit 1
+       fi
+fi
+if ! patches=$(list_patches) 2>&1
+then
+       exit 1
+elif [ -z "$patches" ]
+then
+       top=$(top_patch)
+       top_patch_file=$(patch_file_name $top)
+
+       if [ -z "$top_patch_file" ]
+       then
+               echo "Now the top patch $top are not in series files anymore"
+               echo "Can not decide your next patches from the seriesi!"
+               echo "please pop -f the top file and check your series file again"
+               exit 1
+       fi
+
+       if [ -z "$top" ]
+       then
+               echo $"No patch applied"
+       else
+               echo $"File series fully applied, ends at patch $top"
+       fi
+       exit 0
+fi
+
+trap "interrupted=1" SIGINT
+
+for patch in $patches
+do
+       if ! @SCRIPTS@/apatch $apatch_options $patch
+       then
+               exit 1
+       fi
+       if [ -n "$interrupted" ]
+       then
+               echo $"Interrupted by user"
+               exit 1
+       fi
+       [ -z "$opt_quiet" ] && echo
+done
+
+patch="$(top_patch)"
+if [ -z "$patch" ]
+then
+       echo $"No patches applied"
+else
+       echo $"Now at patch $patch"
+fi
+### Local Variables:
+### mode: shell-script
+### End:
+# vim:filetype=sh
diff --git a/lustre/kernel_patches/quilt/quilt/refresh.in b/lustre/kernel_patches/quilt/quilt/refresh.in
new file mode 100755 (executable)
index 0000000..25fca13
--- /dev/null
@@ -0,0 +1,206 @@
+#! @BASH@
+
+#  This script is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License version 2 as
+#  published by the Free Software Foundation.
+#
+#  See the COPYING and AUTHORS files for more details.
+
+# Read in library functions
+if [ "$(type -t patch_file_name)" != function ]
+then
+       if ! [ -r @SCRIPTS@/patchfns ]
+       then
+               echo "Cannot read library @SCRIPTS@/patchfns" >&2
+               exit 1
+       fi
+       . @SCRIPTS@/patchfns
+fi
+
+usage()
+{
+       local redirect
+       if [ x$1 != x-h ]
+       then
+               redirect='>&2'
+       fi
+       echo $"Usage: quilt refresh [-p n] [-f] [patch]" $redirect
+       
+       if [ x$1 = x-h ]
+       then
+               echo $"
+
+Refreshes the specified patch, or the topmost patch by default.
+Documentation that comes before the actual patch in the patch file is
+retained.
+
+It is possible to refresh patches that are not on top.  If any patches
+on top of the patch to refresh modify the same files, the script aborts
+by default.  Patches can still be refreshed with -f.  In that case this
+script will print a warning for each shadowed file, changes by more
+recent patches will be ignored, and only changes in files that have not
+been modified by any more recent patches will end up in the specified
+patch.
+
+-p n   Create a -p n style patch (-p0 or -p1 supported).
+       
+-f     Force refresh, even if more recent patches modify
+       some of the same files.
+
+"
+               exit 0
+       else
+               exit 1
+       fi
+}
+
+die ()
+{
+       local status=$1
+       [ -n "$tmpfile" ] && rm -f $tmpfile
+       [ -n "$tmpfile2" ] && rm -f $tmpfile2
+       exit $status
+}
+
+options=`getopt -o p:fh -- "$@"`
+
+if [ $? -ne 0 ]
+then
+       usage
+fi
+
+eval set -- "$options"
+
+while true
+do
+       case "$1" in
+       -p)
+               opt_strip_level=$2
+               shift 2 ;;
+       -f)
+               opt_force=1
+               shift ;;
+       -h)
+               usage -h ;;
+       --)
+               shift
+               break ;;
+       esac
+done
+
+if [ $# -eq 1 ]
+then
+       opt_patch=$1
+elif [ $# -gt 1 ]
+then
+       usage
+fi
+
+if [ -n "$opt_patch" ]
+then
+       patch=$(stripit $opt_patch)
+else
+       patch=$(top_patch)
+       if [ -z "$patch" ]
+       then
+               echo $"No patch seem to be applied" >&2
+               exit 1
+       fi
+fi
+
+if ! is_applied "$patch"
+then
+       echo $"Patch $patch is not applied" >&2
+       exit 1
+fi
+
+if [ -z "$opt_strip_level" ]
+then
+       opt_strip_level=$(patch_strip_level $patch)
+fi
+if [ $opt_strip_level -gt 1 ]
+then
+       echo $"Cannot refresh patches with -p$opt_strip_level, please specify -p0 or -p1 instead" >&2
+       exit 1
+fi
+
+trap "die 1" SIGTERM
+
+tmpfile=$(gen_tempfile)
+
+for file in $(files_in_patch $patch)
+do
+       old_file=$(backup_file_name $patch $file)
+       next_patch=$(next_patch_for_file $patch $file)
+       if [ -z "$next_patch" ]
+       then
+               new_file=$file
+       else
+               new_file=$(backup_file_name $next_patch $file)
+               files_were_shadowed=1
+       fi
+       if ! diff_file $file $old_file $new_file >> $tmpfile
+       then
+               echo $"Diff failed, aborting." >&2
+               die 1
+       fi
+
+       if [ -n "$files_were_shadowed" -a -z "$opt_force" ]
+       then
+               echo $"More recent patches modify files in $patch. Enforce refresh with -f." >&2
+               die 1
+       fi
+done
+
+if ! [ -s $tmpfile ]
+then
+       echo $"Nothing in patch $patch" >&2
+       die 1
+fi
+
+patch_file=$(patch_file_name $patch)
+
+trap "" SIGINT
+
+if [ -e $patch_file ] && grep -q '^%patch$' $patch_file
+then
+       if [ -x "@DIFFSTAT@" ]
+       then
+               @DIFFSTAT@ $tmpfile 2>/dev/null \
+               | @SCRIPTS@/parse-patch -u diffstat $patch_file
+       fi
+       cat $tmpfile \
+       | @SCRIPTS@/parse-patch -u patch $patch_file
+else
+       if ! tmpfile2=$(gen_tempfile)
+       then
+               die 1
+       fi
+
+       mkdir -p $(dirname $patch_file)
+
+       if ! cat_file $patch_file \
+            | patch_description > $tmpfile2 || \
+          ! cat $tmpfile >> $tmpfile2 || \
+          ! cat $tmpfile2 \
+            | cat_to_file $patch_file
+       then
+               die 1
+       fi
+fi
+if [ $? -ne 0 ]
+then
+       die 1
+fi
+
+rm -f $(pc_file_name $patch)~refresh
+echo $"Refreshed patch $patch"
+if ! change_db_strip_level -p$opt_strip_level $patch
+then
+       die 1
+fi
+die 0
+### Local Variables:
+### mode: shell-script
+### End:
+# vim:filetype=sh
diff --git a/lustre/kernel_patches/quilt/quilt/remove.in b/lustre/kernel_patches/quilt/quilt/remove.in
new file mode 100755 (executable)
index 0000000..d48300b
--- /dev/null
@@ -0,0 +1,122 @@
+#! @BASH@
+
+#  This script is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License version 2 as
+#  published by the Free Software Foundation.
+#
+#  See the COPYING and AUTHORS files for more details.
+
+# Read in library functions
+if [ "$(type -t patch_file_name)" != function ]
+then
+       if ! [ -r @SCRIPTS@/patchfns ]
+       then
+               echo "Cannot read library @SCRIPTS@/patchfns" >&2
+               exit 1
+       fi
+       . @SCRIPTS@/patchfns
+fi
+
+usage()
+{
+       echo $"Usage: quilt remove [-p patch] {file} ..."
+       if [ x$1 = x-h ]
+       then
+               echo $"
+
+Remove one or more files from the topmost or named patch.  Files that
+are modified by patches on top of the specified patch cannot be removed.
+
+-p patch
+       Patch to remove files from.
+
+"
+               exit 0
+       else
+               exit 1
+       fi
+}
+
+options=`getopt -o p:h -- "$@"`
+
+if [ $? -ne 0 ]
+then
+       usage
+fi
+
+eval set -- "$options"
+
+while true
+do
+       case "$1" in
+       -p)
+               opt_patch=$2
+               shift 2 ;;
+       -h)
+               usage -h ;;
+       --)
+               shift
+               break ;;
+       esac
+done
+
+if [ $# -lt 1 ]
+then
+       usage
+fi
+
+patch=$(stripit $opt_patch)
+if [ -z "$patch" ]
+then
+       patch=$(top_patch)
+fi
+if [ -z "$patch" ]
+then
+       echo $"No patch applied"
+fi
+
+if ! is_applied $patch
+then
+       echo $"Patch $patch is not applied"
+       exit 1
+fi
+
+status=0
+for file in $*
+do
+       if ! file_in_patch $file $patch
+       then
+               echo $"File $file is not in patch $patch"
+               status=1
+               continue
+       fi
+
+       next_patch=$(next_patch_for_file $patch $file)
+       if [ -n "$next_patch" ]
+       then
+               echo $"File $file modified by patch $next_patch"
+               status=1
+               continue
+       fi
+
+       # Restore file from backup
+       if ! @LIB@/backup-files -s -B .pc/$patch/ -r $file
+       then
+               echo $"Failed to remove file $file from patch $patch"
+               status=1
+               continue
+       fi
+       
+       pc_file=$(pc_file_name $patch)
+       tmpfile=$(gen_tempfile)
+       grep -v -E '^'"$(quote_re $file)"'$' $pc_file > $tmpfile
+       mv -f $tmpfile $pc_file
+       rm -f $tmpfile
+
+       echo $"File $file removed from patch $patch"
+done
+exit $status
+### Local Variables:
+### mode: shell-script
+### End:
+# vim:filetype=sh
diff --git a/lustre/kernel_patches/quilt/quilt/series.in b/lustre/kernel_patches/quilt/quilt/series.in
new file mode 100755 (executable)
index 0000000..bd26c82
--- /dev/null
@@ -0,0 +1,98 @@
+#! @BASH@
+
+#  This script is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License version 2 as
+#  published by the Free Software Foundation.
+#
+#  See the COPYING and AUTHORS files for more details.
+
+# Read in library functions
+if [ "$(type -t patch_file_name)" != function ]
+then
+       if ! [ -r @SCRIPTS@/patchfns ]
+       then
+               echo "Cannot read library @SCRIPTS@/patchfns" >&2
+               exit 1
+       fi
+       . @SCRIPTS@/patchfns
+fi
+
+usage()
+{
+       echo $"Usage: quilt series [-v]"
+       if [ x$1 = x-h ]
+       then
+               echo $"
+
+Print the names of all patches in the series file.
+
+-n     Print patch file names instead patch names.
+
+-v     Verbose, more user friendly output.
+
+"
+               exit 0
+       else
+               exit 1
+       fi
+}
+
+cat_patches()
+{
+       local prefix=$1
+       shift
+       local patch
+
+       for patch in "$@"
+       do
+               [ -n "$opt_filenames" ] && patch=$(patch_file_name $patch)
+               echo "$prefix$patch"
+       done
+}
+
+options=`getopt -o nvh -- "$@"`
+
+if [ $? -ne 0 ]
+then
+       usage
+fi
+
+eval set -- "$options"
+
+opt_what=here
+
+while true
+do
+       case "$1" in
+       -n)
+               opt_filenames=1
+               shift ;;
+       -v)
+               opt_verbose=1
+               shift ;;
+       -h)
+               usage -h ;;
+       --)
+               shift
+               break ;;
+       esac
+done
+
+if [ $# -ne 0 ]
+then
+       usage
+fi
+
+if [ -n "$opt_verbose" ]
+then
+       top=$(top_patch)
+       cat_patches "+ " $(patches_before $top)
+       [ -n "$top" ] && cat_patches "= " $top
+       cat_patches "  " $(patches_after $top)
+else
+       cat_series
+fi
+### Local Variables:
+### mode: shell-script
+### End:
+# vim:filetype=sh
diff --git a/lustre/kernel_patches/quilt/quilt/setup.in b/lustre/kernel_patches/quilt/quilt/setup.in
new file mode 100755 (executable)
index 0000000..2b15041
--- /dev/null
@@ -0,0 +1,136 @@
+#! @BASH@
+
+#  This script is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License version 2 as
+#  published by the Free Software Foundation.
+#
+#  See the COPYING and AUTHORS files for more details.
+
+# Read in library functions
+if [ "$(type -t patch_file_name)" != function ]
+then
+       if ! [ -r @SCRIPTS@/patchfns ]
+       then
+               echo "Cannot read library @SCRIPTS@/patchfns" >&2
+               exit 1
+       fi
+       . @SCRIPTS@/patchfns
+fi
+
+usage()
+{
+       echo $"Usage: quilt setup [-d sourcedir] {seriesfile|specfile}"
+       if [ x$1 = x-h ]
+       then
+               echo $"
+
+Initializes a source tree from a patch series file.  The patch series
+file must contain the name of the relevant tar archive, in addition to
+the list of patches.
+
+"
+               exit 0
+       else
+               exit 1
+       fi
+}
+
+parse_series()
+{
+       local series="$1"
+
+       perl -e '
+               while(<>) {
+                       if (/^#\s*Sourcedir:\s*(\S+)/) {
+                               print "SOURCEDIR $1\n";
+                       } elsif (/^#\s*[Ss]ource:\s*(\S+)\s*(-C\s*(\S+))?/) {
+                               print "SOURCE $1 ", ($3 ? $3 : "."), "\n";
+                       } elsif (/^#\s*[Pp]atchdir:\s*(\S+)/) {
+                               print "PATCHDIR $1\n";
+                       } elsif (/^([^#\s]+)/) {
+                               print "PATCH $1\n";
+                       }
+               }
+       ' $series
+       echo "SERIES $series"
+}
+
+options=`getopt -o d:h -- "$@"`
+
+if [ $? -ne 0 ]
+then
+       usage
+fi
+
+eval set -- "$options"
+
+while true
+do
+       case "$1" in
+       -d)
+               opt_source=$2
+               shift 2 ;;
+       -h)
+               usage -h ;;
+       --)
+               shift
+               break ;;
+       esac
+done
+
+if [ $# -ne 1 ]
+then
+       usage
+fi
+
+case "$1" in
+*.spec)
+       spec_file="$1"
+       tmpfile=$(gen_tempfile)
+       series_file=$tmpfile
+       if ! @SCRIPTS@/spec2series "$spec_file" > $tmpfile
+       then
+               exit 1
+       fi
+       ;;
+*)
+       series_file=$1
+       if ! [ -e "$series_file" ]
+       then
+               echo $"Series file $series_file not found"
+               exit 1
+       fi
+       ;;
+esac
+
+if [ -n "$opt_source" ]
+then
+       source="$opt_source"
+elif [ -n "$spec_file" ]
+then
+       source="$(dirname "$spec_file")"
+else
+       source="$(dirname "$series_file")"
+fi
+
+packagedir=.
+
+echo $"create link patch $packagedir/patches to $source"
+ln -s "$source" "${packagedir}/patches" 
+rm -rf "${packagedir}/patches/series"
+echo $"creat link of $series_file"
+ln -s "$series_file" "${packagedir}/patches/series"    
+
+if [ -n "$tmpfile" ]
+then
+       rm -f $tmpfile
+fi
+
+if [ "$packagedir" != "." ]
+then
+       echo $"Directory $packagedir set up."
+fi
+### Local Variables:
+### mode: shell-script
+### End:
+# vim:filetype=sh
diff --git a/lustre/kernel_patches/quilt/quilt/top.in b/lustre/kernel_patches/quilt/quilt/top.in
new file mode 100755 (executable)
index 0000000..904ea0e
--- /dev/null
@@ -0,0 +1,71 @@
+#! @BASH@
+
+#  This script is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License version 2 as
+#  published by the Free Software Foundation.
+#
+#  See the COPYING and AUTHORS files for more details.
+
+# Read in library functions
+if [ "$(type -t patch_file_name)" != function ]
+then
+       if ! [ -r @SCRIPTS@/patchfns ]
+       then
+               echo "Cannot read library @SCRIPTS@/patchfns" >&2
+               exit 1
+       fi
+       . @SCRIPTS@/patchfns
+fi
+
+usage()
+{
+       echo $"Usage: quilt top"
+       if [ x$1 = x-h ]
+       then
+               echo $"
+
+Print the name of the topmost patch on the current stack of applied
+patches.
+
+"
+               exit 0
+       else
+               exit 1
+       fi
+}
+
+options=`getopt -o nh -- "$@"`
+
+if [ $? -ne 0 ]
+then
+       usage
+fi
+
+eval set -- "$options"
+
+while true
+do
+       case "$1" in
+       -n)
+               opt_filenames=1
+               shift ;;
+       -h)
+               usage -h ;;
+       --)
+               shift
+               break ;;
+       esac
+done
+
+if [ $# -ne 0 ]
+then
+       usage
+fi
+
+top=$(top_patch)
+[ -n "$opt_filenames" ] && top=$(patch_file_name $top)
+echo "$top"
+### Local Variables:
+### mode: shell-script
+### End:
+# vim:filetype=sh
diff --git a/lustre/kernel_patches/quilt/quilt/unapplied.in b/lustre/kernel_patches/quilt/quilt/unapplied.in
new file mode 100755 (executable)
index 0000000..854ff40
--- /dev/null
@@ -0,0 +1,86 @@
+#! @BASH@
+
+#  This script is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License version 2 as
+#  published by the Free Software Foundation.
+#
+#  See the COPYING and AUTHORS files for more details.
+
+# Read in library functions
+if [ "$(type -t patch_file_name)" != function ]
+then
+       if ! [ -r @SCRIPTS@/patchfns ]
+       then
+               echo "Cannot read library @SCRIPTS@/patchfns" >&2
+               exit 1
+       fi
+       . @SCRIPTS@/patchfns
+fi
+
+usage()
+{
+       echo $"Usage: quilt unapplied [patch]"
+       if [ x$1 = x-h ]
+       then
+               echo $"
+
+Print a list of patches that are not applied, or all patches that follow
+the specified patch in the series file.
+
+-n     Print patch file names instead of patch names.
+
+"
+               exit 0
+       else
+               exit 1
+       fi
+}
+
+options=`getopt -o nh -- "$@"`
+
+if [ $? -ne 0 ]
+then
+       usage
+fi
+
+eval set -- "$options"
+
+while true
+do
+       case "$1" in
+       -n)
+               opt_filenames=1
+               shift ;;
+       -h)
+               usage -h ;;
+       --)
+               shift
+               break ;;
+       esac
+done
+
+if [ $# -gt 1 ]
+then
+       usage
+elif [ $# -eq 1 ]
+then
+       patch=$(stripit $1)
+else
+       patch=$(top_patch)
+fi
+
+if [ -z "$patch" ]
+then
+       cat_series
+else
+       patches_after $patch
+fi \
+| while read patch
+do
+       [ -n "$opt_filenames" ] && patch=$(patch_file_name $patch)
+       echo "$patch"
+done
+### Local Variables:
+### mode: shell-script
+### End:
+# vim:filetype=sh
diff --git a/lustre/kernel_patches/quilt/scripts/apatch.in b/lustre/kernel_patches/quilt/scripts/apatch.in
new file mode 100755 (executable)
index 0000000..973988a
--- /dev/null
@@ -0,0 +1,194 @@
+#! @BASH@
+
+#  This script is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License version 2 as
+#  published by the Free Software Foundation.
+#
+#  See the COPYING and AUTHORS files for more details.
+
+# Read in library functions
+if [ "$(type -t patch_file_name)" != function ]
+then
+       if ! [ -r @SCRIPTS@/patchfns ]
+       then
+               echo "Cannot read library @SCRIPTS@/patchfns" >&2
+               exit 1
+       fi
+       . @SCRIPTS@/patchfns
+fi
+
+usage()
+{
+       echo $"Usage: $0 [-fqv] patchname"
+       exit 1
+}
+
+rollback_patch()
+{
+       local patch=$1 pc_file=$(pc_file_name $patch)
+       @LIB@/backup-files $silent_unless_verbose \
+                          -f $pc_file -B .pc/$patch/ -r
+       if [ -z "$opt_leave_rejects" ]
+       then
+               rm -f $(files_in_patch $patch | @SED@ -e 's/$/\.rej/')
+       fi
+}
+
+interrupt()
+{
+       rollback_patch $1
+       echo $"Interrupted by user; patch $patch was not applied."
+       exit 1
+}
+
+apply_patch()
+{
+       local patch=$1
+       local patch_file=$(patch_file_name $patch)
+
+       if ! [ -s $patch_file ]
+       then
+               echo $"Patch file $patch_file appears to be empty"
+               return 0
+       fi
+       
+       if [ "x${patch_file:(-3)}" = "x.gz" ]
+       then
+               gzip -cd $patch_file \
+               | @PATCH@ $(patch_args $patch) --no-backup-if-mismatch \
+                       -E $silent $force_apply
+       elif [ "x${patch_file:(-4)}" = "x.bz2" ]
+       then
+               bzip2 -cd $patch_file \
+               | @PATCH@ $(patch_args $patch) --no-backup-if-mismatch \
+                       -E $silent $force_apply
+       else
+               @PATCH@ $(patch_args $patch) --no-backup-if-mismatch \
+                       -E $silent -i $patch_file $force_apply
+       fi
+}
+
+apatch()
+{
+       local patch=$(stripit $1)
+       local pc_file=$(pc_file_name $patch)
+       local file status
+
+       trap "" SIGINT
+       if ! refresh_file_list $patch
+       then
+               echo $"refresh_file_list failed"
+               return 1
+       fi
+
+       echo $"Applying $patch"
+       if ! [ -e $pc_file ]
+       then
+               echo $"Patch $patch appears to be empty, applied"
+               add_to_db $patch
+               return 0
+       fi
+       
+       status=$?
+       if [ $status -eq 2 ]
+       then
+               [ -z "$opt_quiet" ] && echo $"Recreated file list for $patch"
+       elif [ $status -ne 0 ]
+       then
+               return 1
+       fi
+
+       if ! @LIB@/backup-files $silent_unless_verbose \
+                               -f $pc_file -B .pc/$patch/
+       then
+               exit 1
+       fi
+       
+       trap "interrupt $patch" SIGINT
+
+       apply_patch $patch
+       status=$?
+
+       trap "" SIGINT
+
+       # Remember date/time of applying so that pop can
+       # avoid reverse applying the patch in the usual cases.
+       touch $pc_file
+
+       if [ $status -eq 0 -o -n "$opt_force" ]
+       then
+               add_to_db $patch
+               if [ $status -eq 0 ]
+               then
+                       rm -f $pc_file~refresh
+               else
+                       touch $pc_file~refresh
+                       echo $"Applied $patch (forced; needs refresh)"
+               fi
+       else
+               rollback_patch $patch
+               echo $"Patch $patch does not apply (enforce with -f)"
+               status=1
+       fi
+       trap - SIGINT
+       return $status
+}
+
+options=`getopt -o fqvh --long leave-rejects,interactive -- "$@"`
+
+if [ $? -ne 0 ]
+then
+       usage
+fi
+
+eval set -- "$options"
+
+while true
+do
+       case "$1" in
+       -f)
+               opt_force=1
+               shift ;;
+       -q)
+               opt_quiet=1
+               shift ;;
+       -v)
+               opt_verbose=1
+               shift ;;
+       --leave-rejects)
+               opt_leave_rejects=1
+               shift ;;
+       --interactive)
+               opt_interactive=1
+               shift ;;
+       -h)
+               usage -h ;;
+       --)
+               shift
+               break ;;
+       esac
+done
+
+if [ $# -ne 1 ]
+then
+       usage
+fi
+
+[ -n "$opt_quiet" ] && silent=-s
+[ -z "$opt_verbose" ] && silent_unless_verbose=-s
+[ -z "$opt_interactive" ] && force_apply=-f
+
+patch=$(stripit $1)
+
+top=$(top_patch)
+if [ -n "$top" -a -e $(pc_file_name $top)~refresh ]
+then
+       echo $"The topmost patch $top needs to be refreshed first."
+       exit 1
+fi
+
+apatch $patch
+### Local Variables:
+### mode: shell-script
+### End:
+# vim:filetype=sh
diff --git a/lustre/kernel_patches/quilt/scripts/parse-patch.in b/lustre/kernel_patches/quilt/scripts/parse-patch.in
new file mode 100755 (executable)
index 0000000..56c3c55
--- /dev/null
@@ -0,0 +1,129 @@
+#!@PERL@ -w
+
+#  This script is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License version 2 as
+#  published by the Free Software Foundation.
+#
+#  See the COPYING and AUTHORS files for more details.
+
+# Extract or update a section from a combined patch + documentation +
+# meta information file.
+
+use FileHandle;
+use Getopt::Long;
+use File::Temp qw(tempfile);
+use strict;
+
+my $select;
+my $update;
+
+if (!GetOptions("s|select=s" => \$select,
+               "u|update=s" => \$update) ||
+    (!defined $select && !defined $update)) {
+       print STDERR "USAGE: $0 {-s|-u} section file [< replacement]\n";
+       exit 1;
+}
+
+foreach my $arg (@ARGV) {
+       my $fh;
+
+       if (! -e $arg) {
+               $fh = new FileHandle("/dev/null");
+       } elsif ($arg =~ /\.gz$/) {
+               $fh = new FileHandle("gzip -cd $arg |");
+       } elsif ($arg =~ /\.bz2$/) {
+               $fh = new FileHandle("bzip2 -cd $arg |");
+       } else {
+               $fh = new FileHandle("< $arg");
+       }
+
+       unless ($fh) {
+               print STDERR "$arg: $!\n";
+               next;
+       }
+
+       if (defined $select) {
+               my $section = "head";
+               my $newline = "";
+               while (<$fh>) {
+                       if (/^%(.*)/) {
+                               last if $section eq $select;
+                               $section = $1;
+                               next;
+                       }
+                       if ($section eq $select) {
+                               print $newline;
+                               if ($_ eq "\n") {
+                                       $newline = $_;
+                               } else {
+                                       $newline="";
+                                       print;
+                               }
+                       }
+               }
+       } elsif (defined $update) {
+               my ($fh2, $tempname) = tempfile("$arg.XXXXXX");
+               if ($arg =~ /\.gz$/) {
+                       $fh2->close();
+                       if (! -e $tempname) {
+                               die "File $tempname disappeared!\n";
+                       }
+                       $fh2 = new FileHandle("| gzip -c > $tempname");
+               } elsif ($arg =~ /\.bz2$/) {
+                       $fh2->close();
+                       if (! -e $tempname) {
+                               die "File $tempname disappeared!\n";
+                       }
+                       $fh2 = new FileHandle("| bzip2 -c > $tempname");
+               }
+               unless ($fh2) {
+                       die "$tempname: $!\n";
+               }
+
+               # Copy things before updated section
+               my $last_was_newline=1; # start first section in first line
+               while (<$fh>) {
+                       if (/^%(.*)/ && $1 eq $update) {
+                               last;
+                       }
+                       $last_was_newline = ($_ eq "\n");
+                       print $fh2 $_;
+               }
+               print $fh2 "\n"
+                       unless ($last_was_newline);
+
+               # Create/replace updated section
+               print $fh2 "%$update\n";
+               while (<STDIN>) {
+                       print $fh2 $_;
+               }
+               print $fh2 "\n";
+
+               # Skip obsolete section
+               while (<$fh>) {
+                       if (/^%(.*)/) {
+                               print $fh2 $_;
+                               last;
+                       }
+               }
+               # Copy things after updated section
+               while (<$fh>) {
+                       print $fh2 $_;
+               }
+               unless (close $fh2) {
+                       die "$arg.patch: $!\n";
+               }
+
+               if (-e $arg) {
+                       unlink "$arg~";
+                       unless (rename $arg, "$arg~") {
+                               die "Failed to rename $arg to $arg~: $!\n";
+                       }
+               }
+               unless (rename $tempname, $arg) {
+                       rename("$arg~", $arg);
+                       die "Failed to rename $arg.parse to $arg: $!\n";
+               }
+       }
+       close $fh;
+}
diff --git a/lustre/kernel_patches/quilt/scripts/patchfns.in b/lustre/kernel_patches/quilt/scripts/patchfns.in
new file mode 100644 (file)
index 0000000..66ae4a8
--- /dev/null
@@ -0,0 +1,724 @@
+# This file contains the common functions used in all quilt script
+# It is meant to be sourced by bash scripts.
+
+#  This script is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License version 2 as
+#  published by the Free Software Foundation.
+#
+#  See the COPYING and AUTHORS files for more details.
+
+export TEXTDOMAIN=quilt
+               
+
+if [ -e $HOME/.quiltrc ]
+then
+       . $HOME/.quiltrc
+fi
+
+if [ -n "$PATCHSCRIPTS" ]
+then
+       P=$PATCHSCRIPTS/
+else
+       unset P
+fi
+
+if [ -e .pc/series ]
+then
+       SERIES=.pc/series
+elif [ -e series ]
+then
+       SERIES=series
+else
+       SERIES=${P}patches/series
+fi
+
+DB=".pc/applied-patches"
+DB_FILE=".pc/applied-patches-file"
+
+# Quote a string for use in a basic regular expression.
+quote_bre()
+{
+       echo "$1" | @SED@ -e 's:\([][^$/.*\\]\):\\\1:g'
+}
+
+# Quote a string for use in an extended regular expression.
+quote_re()
+{
+       echo "$1" | @SED@ -e 's:\([][?{(|)}^$/.+*\\]\):\\\1:g'
+}
+
+basename()
+{
+        local path="${1//\/\//}"
+        path="${path%%/}"
+       echo "${path##*/}"
+}
+
+dirname()
+{
+        local path="${1//\/\//}"
+        path="${path%%/}"
+       local basename="${path##*/}"
+       path="${path:0:${#path}-${#basename}}"
+       [ x"$path" != x"/" ] && path="${path%/}"
+       echo "${path:-.}"
+}
+
+patch_file_name()
+{
+       local patch=$1
+
+       if [ -e $SERIES ]
+       then
+               @AWK@ '/^'"$(quote_re $patch)"'(|\.patch|\.diff?)(|\.gz|\.bz2)([ \t]|$)/ \
+                       { printf "'"$P"'patches/%s\n", $1
+                         exit
+                       }
+               ' $SERIES
+       fi
+}
+applied_patch_file_name()
+{
+       local patch=$1
+
+       if [ -e $DB_FILE ]
+       then
+               /bin/gawk '/^'"$(quote_re $patch)"'(|\.patch|\.diff?)(|\.gz|\.bz2)([ \t]|$)/ \
+                       { printf "'"$P"'patches/%s\n", $1
+                         exit
+                       }
+               ' $DB_FILE
+       fi
+}
+# The -pN option and possibly others that should be passed to patch.
+patch_args()
+{
+       local patch=$1
+
+       if [ -e $SERIES ]
+       then
+               @AWK@ '
+               /^'"$(quote_re $patch)"'(|\.patch|\.diff?)(|\.gz|\.bz2)([ \t]|$)/ \
+                       { if (NF >= 2)
+                               for (i=2; i <= NF; i++)
+                                       print $i
+                         else
+                               print "-p1" ;
+                         exit
+                       }
+               ' $SERIES
+       fi
+}
+
+patch_strip_level()
+{
+       local patch=$1 i
+       for i in $(patch_args $patch)
+       do
+               case $i in
+               -p)
+                       echo $2
+                       return ;;
+               -p*)
+                       echo ${i:2}
+                       return ;;
+               esac
+       done
+       echo "1"
+}
+
+change_db_strip_level()
+{
+       local level=$1 patch=$2
+
+       if [ x$level != x-p1 ]
+       then
+               level="$level"
+       else
+               level=""
+       fi
+
+       if [ -e $SERIES ]
+       then
+               local tmpfile=$(gen_tempfile)
+               @AWK@ '
+               /^'"$(quote_re $patch)"'(\.patch|\.diff?)(|\.gz|\.bz2)([ \t]|$)/ \
+                       { for(i=2; i<=NF; i++)
+                               if ($i ~ /^-p/) {
+                                       $i="'"$level"'"
+                                       break
+                               }
+                         if (i > NF)
+                                $i="'"$level"'"
+                       }
+                       { print }
+               ' $SERIES > $tmpfile
+               if cmp $SERIES $tmpfile >/dev/null 2>/dev/null
+               then
+                       rm -f $tmpfile
+               else
+                       mv -f $tmpfile $SERIES
+               fi
+       else
+               return 1
+       fi
+}
+
+patch_in_series()
+{
+       local patch=$1
+
+       if ! [ -e $SERIES ]
+       then
+               return 1
+       else
+               grep -q -E '^'"$(quote_re $patch)"'(|\.patch|\.diff?)(|\.gz|\.bz2)([ \t]|$)' $SERIES
+       fi
+}
+
+# Insert new patch after topmost patch
+insert_in_series()
+{
+       local patch=$1 patch_args=$2
+       local top=$(top_patch) tmpfile
+
+       if [ -n "$patch_args" ]
+       then
+               patch_args=" $patch_args"
+       fi
+
+       tmpfile=$(gen_tempfile) || return 1
+       mkdir -p $(dirname $SERIES)
+       if [ -n "$top" ]
+       then
+               @AWK@ '
+                               { print }
+               /^'"$(quote_re $top)"'(|\.patch|\.diff?)(|\.gz|\.bz2)([ \t]|$)/ \
+                               { print "'"$patch$patch_args"'" }
+               ' $SERIES > $tmpfile
+               status=$?
+               if [ $status -ne 0 ]
+               then
+                       rm -f $tmpfile
+                       return 1
+               fi
+       else
+               echo $patch$patch_args > $tmpfile
+               if [ -e $SERIES ]
+               then
+                       cat $SERIES >> $tmpfile
+               fi
+       fi
+       mv -f $tmpfile $SERIES
+}
+
+remove_from_series()
+{
+       local patch=$1
+
+       tmpfile=$(gen_tempfile) || return 1
+       @AWK@ '
+       ! /^'"$(quote_re $patch)"'(|\.patch|\.diff?)(|\.gz|\.bz2)([ \t]|$)/ \
+                               { print }
+       ' $SERIES > $tmpfile
+       if [ $? -eq 0 ]
+       then
+               mv -f $tmpfile $SERIES
+       else
+               rm -f $tmpfile
+               return 1
+       fi
+}
+
+pc_file_name()
+{
+       while [ $# -gt 0 ]
+       do
+               echo ".pc/$1/.pc"
+               shift
+       done
+
+}
+
+backup_file_name()
+{
+       local patch=$1
+       while [ $# -gt 1 ]
+       do
+               echo ".pc/$patch/$2"
+               shift
+       done
+}
+
+cat_series()
+{
+       if [ -e $SERIES ]
+       then
+               @SED@ -e '/^#/d' -e 's/^[ '$'\t'']*//' -e 's/[ '$'\t''].*//' \
+                     -e 's/\.gz$//' -e 's/\.bz2$//' \
+                     -e 's/\.patch$//' -e 's/\.diff\?$//' $SERIES
+       else
+               return 1
+       fi
+}
+
+top_patch()
+{
+       [ -e $DB ] && tail -n 1 $DB
+}
+
+is_numeric()
+{
+       echo $1 | grep -q '^[0-9]*$'
+}
+
+is_applied_last()
+{
+       local patch=$1
+       [ "$(top_patch)" == $patch ]
+}
+
+is_applied()
+{
+       local patch=$1
+       [ -e $DB ] || return 1
+       grep -q -E "^$(quote_re $patch)\$" $DB
+}
+
+applied_patches()
+{
+       [ -e $DB ] || return 1
+       cat $DB
+}
+
+applied_before()
+{
+       local patch=$1
+
+       if [ -n "$patch" ]
+       then
+               @AWK@ '
+               $0 == "'"$patch"'"      { exit }
+                                       { print }
+               ' $DB
+       fi
+}
+               
+patches_before()
+{
+       local patch=$1
+
+       if [ -n "$patch" ]
+       then
+               cat_series \
+               | @AWK@ '
+               $0 == "'"$patch"'"      { exit }
+                                       { print }
+               '
+       fi
+}
+
+patches_after()
+{
+       local patch=$1
+       if [ -n "$patch" ]
+       then
+               cat_series \
+               | @AWK@ '
+               seen                    { print }
+               $0 == "'"$patch"'"      { seen=1 }
+               '
+       else
+               cat_series
+       fi
+}
+
+# List all patches that have been applied on top of patch $1
+patches_on_top_of()
+{
+       local patch=$1
+       [ -e $DB ] || return
+       @AWK@ '
+       $0 == "'"$patch"'"      { seen=1 ; next }
+       seen                    { print }
+       ' $DB
+}
+
+# Print the name of the patch that modified the file $2 next after
+# patch $1, or print nothing if patch $1 is on top.
+next_patch_for_file()
+{
+       local patch=$1 file=$2
+       local patches_on_top=$(patches_on_top_of $patch)
+
+       if [ -n "$patches_on_top" ]
+       then
+               grep -l -E "^$(quote_re $file)\$" \
+                    $(pc_file_name $patches_on_top) \
+               | head -n 1 \
+               | @SED@ -e 's:^\.pc/::' -e 's:/\.pc$::'
+       fi
+
+       #modified_files $file -- $patches_on_top \
+       #| cut -d $'\t' -f2 \
+       #| cut -d ' ' -f1
+}
+
+# Create a list of files and the patches that modify them.
+refresh_patches_per_file()
+{
+       local pc_files=$(pc_file_name $(cat_series))
+       local ex_pc_files pc_file
+
+       if [ -e .pc/patches-per-file ]
+       then
+               local needs_refresh
+               for pc_file in pc_files
+               do
+                       if [ .pc/patches-per-file -ot $pc_file ]
+                       then
+                               needs_refresh=1
+                               break
+                       fi
+               done
+               if [ -z "$needs_refresh" ]
+               then
+                       return 0
+               fi
+       fi
+
+       for pc_file in $pc_files
+       do
+               if [ -e $pc_file ]
+               then
+                       ex_pc_files[${#ex_pc_files[@]}]=$pc_file
+               fi
+       done
+
+       if [ ${#ex_pc_files[@]} -eq 0 ]
+       then
+               rm -f .pc/patches-per-file
+               return 0
+       fi
+
+       @AWK@ '
+       ARGIND!=saved   { sub(/^.pc\//, "", FILENAME)
+                         sub(/\/\.pc/, "", FILENAME)
+                         saved=ARGIND
+                       }
+                       { if (files[$0])
+                               files[$0]=files[$0] " " FILENAME
+                         else
+                               files[$0]=FILENAME
+                       }
+       END             { for (file in files)
+                               printf "%s\t%s\n", file, files[file]
+                       }
+       ' "${ex_pc_files[@]}" > .pc/patches-per-file
+}
+
+# For a lists of patches and a list of files, compute which patches
+# modify which files. Invoked as
+#      modified_files file ... [-- patch ...]
+#
+modified_files()
+{
+       if ! refresh_patches_per_file
+       then
+               return 1
+       fi
+
+       @AWK@ '
+       BEGIN           { no_files=1
+                         no_patches=1
+                         for (i=1; i<ARGC; i++) {
+                               if (ARGV[i]=="--")
+                                       break
+                               files[ARGV[i]]=1
+                               no_files=0
+                         }
+                         for (i++; i<ARGC; i++) {
+                                patches[ARGV[i]]=1
+                                no_patches=0
+                         }
+                         split("", ARGV) # read from standard input
+                       }
+       no_files || files[$1] {
+                         if (no_patches) {
+                                 print
+                                 next
+                         }
+                         for (i=2; i<=NF; i++)
+                               if ($i in patches) {
+                                       printf "%s\t%s", $1, $i
+                                       for (i++; i<=NF; i++)
+                                               if ($i in patches)
+                                                        printf " %s", $i
+                                       printf "\n"
+                               }
+                       }
+       ' "$@" < .pc/patches-per-file
+}
+
+add_to_db()
+{
+       local file_name=$(patch_file_name $1)
+       file_name=`basename $(patch_file_name $1)`
+       echo $1 >> $DB
+       echo $file_name >> $DB_FILE
+}
+
+remove_from_db()
+{
+       local patch=$1
+       local tmpfile tmpfile2
+       local patch_file=$(applied_patch_file_name $1)
+       tmpfile2=$(gen_tempfile)
+       if tmpfile=$(gen_tempfile)
+       then
+               grep -v -E "^$(quote_re $patch)\$" $DB > $tmpfile
+               grep -v -E "^$(quote_re $patch_file)\$" $DB > $tmpfile2
+               mv -f $tmpfile $DB
+               mv -f $tmpfile2 $DB_FILE
+               rm -f $tmpfile
+               rm -f $tmpfile2
+               [ -s $DB ] || rm -f $DB
+               [ -s $DB_FILE ] || rm -f $DB_FILE
+       fi
+}
+
+stripit()
+{
+       if [ -n "$1" ]
+       then
+               echo $1 |
+               @SED@ -e 's/^\(\.\/\)*//' \
+                     -e 's/^'"$(quote_bre $P)"'patches\///' \
+                     -e 's/\.gz$//' -e 's/\.bz2$//' \
+                     -e 's/\.patch$//' -e 's/\.diff\?$//'
+       fi
+}
+
+file_in_patch()
+{
+       local file=$1 patch=$2
+       files_in_patch $patch \
+       | grep -q -E "^$(quote_re $file)\$"
+}
+
+files_in_patch()
+{
+       local pc_file=$(pc_file_name $1)
+       if [ -e "$pc_file" ]
+       then
+               cat $pc_file
+       fi
+}
+
+touched_by_patch()
+{
+       local strip=$1 patch=$2
+       cat_file $(patch_file_name $patch) \
+       |  @AWK@ '
+       /^\+\+\+[ \t]/ {
+               sub(/^\+\+\+[ \t]/, "")
+               sub(/[ \t].*/, "")
+               sub(/^\/dev\/null/, "")
+               for (i=0; i<'$strip'; i++)
+                       sub(/^[^\/]*\//, "")
+               print
+       }'
+}
+
+refresh_file_list()
+{
+       local patch=$1
+       local pc_file=$(pc_file_name $patch)
+       local patch_file=$(patch_file_name $patch)
+       
+       if ! [ -e "$patch_file" ]
+       then
+               return 0
+       fi
+       if [ ! -e $pc_file -o \
+            $pc_file -ot $patch_file -o \
+            $pc_file -ot $SERIES ]
+       then
+               local tmpfile status
+               if ! mkdir -p $(dirname $pc_file) || \
+                  ! tmpfile=$(gen_tempfile)
+               then
+                       return 1
+               fi
+
+               # Do not reorder files in the file list...
+
+               if [ -e $pc_file ]
+               then
+                       cat $pc_file >> $tmpfile
+               fi
+               if ! touched_by_patch $(patch_strip_level $patch) \
+                       $patch >> $tmpfile
+               then
+                       return 1
+               fi
+               @AWK@ ' { if (seen[$0]) next
+                         seen[$0]=1
+                         print
+                       }' $tmpfile > $pc_file
+               rm $tmpfile
+               return 0
+       fi
+}
+
+fix_diff_header()
+{
+       local from=$1 to=$2
+       @SED@ -e 's/^--- [^ '$'\t'']*/--- '"$(quote_bre $from)"'/' \
+             -e 's/^+++ [^ '$'\t'']*/+++ '"$(quote_bre $to)"'/'
+}
+
+diff_file()
+{
+       local file=$1 old_file=$2 new_file=$3
+       local old_hdr new_hdr line
+
+       if [ ! -e "$old_file" -a ! -e "$new_file" ]
+       then
+               return 0
+       fi
+       if [ $opt_strip_level -eq 0 ]
+       then
+               old_hdr=$file.orig
+               new_hdr=$file
+       else
+               local dir=$(basename $PWD)
+               old_hdr=$dir.orig/$file
+               new_hdr=$dir/$file
+       fi
+
+       @DIFF@ -Nu $QUILT_DIFF_OPTS $old_file $new_file |
+       if read line
+       then
+               echo "Index: $new_hdr"
+               echo "==================================================================="
+               (echo "$line" ; cat) \
+               | fix_diff_header $old_hdr $new_hdr
+       fi
+}
+
+cat_file()
+{
+       local filename
+       
+       for filename in "$@"
+       do
+               if [ -e "$filename" ]
+               then
+                       case "$filename" in
+                       *.gz|*.tgz)
+                               gzip -cd "$filename" ;;
+                       *.bz2)
+                               bzip2 -cd "$filename" ;;
+                       *)
+                               cat "$filename" ;;
+                       esac
+               fi
+       done
+}
+
+cat_to_file()
+{
+       local filename="$1"
+
+       if [ -z "$filename" ]
+       then
+               cat
+       else
+               case "$filename" in
+               *.gz|*.tgz)
+                       gzip -c > "$filename" ;;
+               *.bz2)
+                       bzip2 -c > "$filename" ;;
+               *)
+                       cat > "$filename" ;;
+               esac
+       fi
+}
+
+patch_description()
+{
+       local patch_file=$1
+
+       if [ -e "$patch_file" -o -z "$patch_file" ]
+       then
+               @AWK@ '
+               $1 == "---"     { exit }
+               /^Index:[ \t]|^diff[ \t]|^==*$/ \
+                               { eat = eat $0
+                                 next }
+               eat             { print eat
+                                 eat="" }
+                               { print }
+               ' $patch_file
+       fi
+}
+
+in_array()
+{
+       local a=$1
+       while [ $# -gt 1 ]
+       do
+               shift
+               [ "$a" = "$1" ] && return 0
+       done
+       return 1
+}
+
+gen_tempfile()
+{
+       # This is a substitute for the mktemp executable.
+       internal_mktemp()
+       {
+               local try n
+               if [ x"$1" = x"-d" ]
+               then
+                       for ((n=0 ; $n<100 ; n++))
+                       do
+                               try=${2%XXXXXX}$RANDOM
+                               mkdir -m 700 $try 2>/dev/null \
+                               && break
+                       done
+               else
+                       local user_mask=$(umask)
+                       umask 077
+                       set -o noclobber
+                       for ((n=0 ; $n<100 ; n++))
+                       do
+                               try=${1%XXXXXX}$RANDOM
+                               echo -n "" 2> /dev/null > $try \
+                               && break
+                       done
+                       set +o noclobber
+                       umask $user_mask
+               fi
+               if [ $n -lt 100 ]
+               then
+                       echo $try
+               else
+                       return 1
+               fi
+       }
+
+       local dir
+       if [ x"$1" = x"-d" ]
+       then
+               dir=-d
+               shift
+       fi
+       @MKTEMP@ $dir ${1:-${TMPDIR:-/tmp}/quilt}.XXXXXX
+}
+### Local Variables:
+### mode: shell-script
+### End:
+# vim:filetype=sh
diff --git a/lustre/kernel_patches/quilt/scripts/rpatch.in b/lustre/kernel_patches/quilt/scripts/rpatch.in
new file mode 100755 (executable)
index 0000000..aa8abcb
--- /dev/null
@@ -0,0 +1,253 @@
+#! @BASH@
+
+#  This script is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License version 2 as
+#  published by the Free Software Foundation.
+#
+#  See the COPYING and AUTHORS files for more details.
+
+# Read in library functions
+if [ "$(type -t patch_file_name)" != function ]
+then
+       if ! [ -r @SCRIPTS@/patchfns ]
+       then
+               echo "Cannot read library @SCRIPTS@/patchfns" >&2
+               exit 1
+       fi
+       . @SCRIPTS@/patchfns
+fi
+
+usage()
+{
+       echo $"Usage: $0 [-fRq] patchname"
+       exit 1
+}
+
+verify_removal()
+{
+       local patch=$1
+       local bup file status=0
+       local dir=$(basename $PWD) suffix=${patch//\//_}
+
+       # Check if all changes of the patch are undone
+       for file in $(files_in_patch $patch)
+       do
+               bup=$(backup_file_name $patch $file)
+               if ! [ -s $file -o -s $bup ] || \
+                  cmp $file $bup > /dev/null 2> /dev/null
+               then
+                       continue
+               fi
+
+               if [ $status -eq 0 ]
+               then
+                       echo $"Patch does not remove changes:"
+               fi
+
+               @DIFF@ -Nu $QUILT_DIFF_OPTS $bup $file \
+               | @SED@ -e 's:^--- [^ '$'\t'']*:--- '"$dir/$file.orig"':' \
+                     -e 's:^+++ [^ '$'\t'']*:+++ '"$dir/$file"':'
+
+               status=1
+       done
+       return $status
+}
+
+files_may_have_changed()
+{
+       local patch=$1 file
+       local patch_file=$(applied_patch_file_name $patch)
+       local pc_file=$(pc_file_name $patch)
+
+       if ! [ -e $pc_file ]
+       then
+               return 1
+       fi
+       
+       local apply_ts=$(date -r $pc_file '+%s') ts
+
+       if [ -e "$patch_file" -a $pc_file -ot "$patch_file" ]
+       then
+               return 0
+       fi
+       
+       for file in $(files_in_patch $patch)
+       do
+               if ! [ -e $file ]
+               then
+                       return 0  # file is missing
+               fi
+               
+               ts=$(date -r $file '+%s')
+               if [ $? -ne 0 -o $ts -gt $apply_ts ]
+               then
+                       return 0  # file has changed
+               fi
+       done
+       return 1
+}
+
+rollback_patch()
+{
+       local patch=$1 pc_file=$(pc_file_name $patch)
+       @LIB@/backup-files $silent_unless_verbose \
+                          -f $pc_file -z ~rpatch -r
+       rm -f $(files_in_patch $patch | @SED@ -e 's/$/\.rej/')
+}
+
+interrupt()
+{
+       local patch=$1
+       rollback_patch $patch
+       echo $"Interrupted by user; patch $patch was not removed."
+       exit 1
+}
+
+reverse_patch()
+{
+       local patch=$1
+       local patch_file=$(patch_file_name $patch)
+
+       if ! [ -s $patch_file ]
+       then
+               echo $"Patch file $patch_file appears to be empty"
+               return 0
+       fi
+       
+       if [ "x${patch_file:(-3)}" = "x.gz" ]
+       then
+               gzip -cd $patch_file \
+               | @PATCH@ $(patch_args $patch) --no-backup-if-mismatch \
+                       -R -E $silent
+       elif [ "x${patch_file:(-4)}" = "x.bz2" ]
+       then
+               bzip2 -cd $patch_file \
+               | @PATCH@ $(patch_args $patch) --no-backup-if-mismatch \
+                       -R -E $silent
+       else
+               @PATCH@ $(patch_args $patch) --no-backup-if-mismatch \
+                       -R -E $silent -i $patch_file
+       fi
+}
+
+rpatch()
+{
+       local patch=$1 pc_file=$(pc_file_name $patch)
+
+       local patch_file=$(patch_file_name $patch)
+       if  [  $opt_force != 1 ] && [ -z "$patch_file" ]
+       then
+               echo "can not find the $patch in your series file, the series file may changed"
+               echo "please use -f option"
+               return 0
+       fi
+       if ! [ -e $pc_file ]
+       then
+               echo $"Patch $patch appears to be empty, removed"
+               remove_from_db $patch
+               return 0
+       fi
+
+       echo $"Removing $patch"
+       trap "" SIGINT
+       if [ -n "$opt_force" ] || \
+          ( [ -z "$opt_remove" ] && ! files_may_have_changed $patch )
+       then
+               # Optimize: Force remove if the patch has not been
+               # modified since it was applied. (Forced remove is
+               # faster!)
+
+               @LIB@/backup-files $silent -f $pc_file -B .pc/$patch/ -r
+               status=$?
+               remove_from_db $patch
+               rm -f $pc_file~refresh
+               if [ $status != 0 ]
+               then
+                       exit $status
+               fi
+       else
+               if ! @LIB@/backup-files $silent_unless_verbose \
+                                       -f $pc_file -z ~rpatch
+               then
+                       echo $"Failed to create temporary files" >&2
+                       return 1
+               fi
+               
+               trap "interrupt $patch" SIGINT
+
+               reverse_patch $patch
+               status=$?
+
+               trap "" SIGINT
+
+               if [ $status -eq 0 ] && verify_removal $patch
+               then 
+                       @LIB@/backup-files $silent_unless_verbose \
+                                       -f $pc_file -z ~rpatch -x
+                       @LIB@/backup-files $silent_unless_verbose \
+                                       -f $pc_file -B .pc/$patch/ -x
+
+                       remove_from_db $patch
+               else
+                       rollback_patch $patch
+                       echo $"Patch $patch does not remove (enforce with -f)"
+                       return 1
+               fi
+       fi
+       trap - SIGINT
+}
+
+options=`getopt -o fRqvh -- "$@"`
+
+if [ $? -ne 0 ]
+then
+       usage
+fi
+opt_force=0
+eval set -- "$options"
+
+while true
+do
+       case "$1" in
+       -f)
+               opt_force=1
+               shift ;;
+       -R)
+               opt_remove=1  # remove properly with patch -R; no tricks
+               unset opt_force
+               shift ;;
+       -q)
+               opt_quiet=1 
+               shift ;;
+       -v)
+               opt_verbose=1
+               shift ;;
+       -h)
+               usage -h ;;
+       --)
+               shift
+               break ;;
+       esac
+done
+
+if [ $# -ne 1 ]
+then
+       usage
+fi
+
+patch=$(stripit $1)
+[ -n "$opt_quiet" ] && silent=-s
+[ -z "$opt_verbose" ] && silent_unless_verbose=-s
+
+top=$(top_patch)
+if [ -n "$top" -a -e $(pc_file_name $top)~refresh -a -z "$opt_force" ]
+then
+       echo $"The topmost patch $top needs to be refreshed first."
+       exit 1
+fi
+
+rpatch "$patch" || exit 1
+### Local Variables:
+### mode: shell-script
+### End:
+# vim:filetype=sh
diff --git a/lustre/kernel_patches/quilt/scripts/spec2series.in b/lustre/kernel_patches/quilt/scripts/spec2series.in
new file mode 100755 (executable)
index 0000000..8d1c0aa
--- /dev/null
@@ -0,0 +1,227 @@
+#! @BASH@
+
+#  This script is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License version 2 as
+#  published by the Free Software Foundation.
+#
+#  See the COPYING and AUTHORS files for more details.
+
+# defaults
+debug=0
+specfile=""
+outfile=""
+
+function usage() {
+cat <<EOF
+Usage: quilt spec2series [ options ] specfile
+
+-h     print this text
+-d     debug mode (prints lots additional info
+       as comments into the output file)
+-o <file>
+       specify output file, stdout if unspecified
+
+EOF
+}
+
+# parse args
+while test "$1" != ""; do
+       case "$1" in
+               -h | --help)
+                       usage; exit 0
+                       ;;
+               -d | --debug)
+                       debug=1; shift
+                       ;;
+               -o | --outfile)
+                       outfile="$2"; shift; shift
+                       ;;
+               *)
+                       specfile="$1"
+                       break;
+                       ;;
+       esac
+done
+
+if test ! -f "$specfile"; then
+       usage
+       exit 1
+fi
+
+# get absolute patch for specfile location
+specdir=`dirname $specfile`
+specfile=`basename $specfile`
+case "$specdir" in
+       .)      specdir="`pwd`"
+               ;;
+       /*)     # nothing
+               ;;
+       *)      specdir="`pwd`/$specdir"
+               ;;
+esac
+
+# create tmp work dir
+WORK="${TMPDIR-/tmp}/rpmlog-$$"
+mkdir -p "$WORK" || exit 1
+trap 'rm -rf "$WORK"' EXIT
+mkdir -p "$WORK/build"
+mkdir -p "$WORK/bin"
+
+# create md5 sums, also for uncompressed files
+echo -n "### md5: " >&2
+(cd $specdir; for file in /dev/null *; do
+       case "$file" in
+               ready | bigpack | MD5SUMS | MD5SUMS.meta | *.spec | *.changes)
+                       continue
+                       ;;
+       esac
+       type="`file -b $file | cut -d" " -f1`"
+       case "$type" in
+               compress*)
+                       echo -n "z" >&2
+                       set -- `zcat $file | md5sum`
+                       echo "$1 zcat  ${file}"
+                       ;;
+               gzip)
+                       echo -n "g" >&2
+                       set -- `zcat $file | md5sum`
+                       echo "$1 zcat  ${file}"
+                       ;;
+               bzip2)
+                       echo -n "b" >&2
+                       set -- `bzcat $file | md5sum`
+                       echo "$1 bzcat ${file}"
+                       ;;
+       esac
+       echo -n "." >&2
+       set -- `md5sum < $file`
+       echo "$1 cat   ${file}"
+done) > $WORK/md5sum
+echo $" done" >&2
+
+# prepare rpm dir fixups and hooks
+RPM="rpm --rcfile=/usr/lib/rpm/rpmrc:$WORK/rpmrc"
+PATH="$WORK/bin:$PATH"
+grep ^macrofiles /usr/lib/rpm/rpmrc                    \
+       | @SED@ -e "/macrofiles/s|$|:$WORK/rpmmacros|"  \
+       > $WORK/rpmrc
+cat <<-EOF > "$WORK/rpmmacros"
+       %_sourcedir     $specdir
+       %_specdir       $specdir
+       %_builddir      $WORK/build
+EOF
+
+# wrapper script for patch and tar
+cat <<-'EOF' > "$WORK/bin/patch"
+       #!/bin/sh
+
+       # save stuff for log
+       unpackcmd=`basename $0`
+       unpackdir=`pwd`
+       unpackargs="$*"
+       uncompress="false"
+       unpackfile="[oops]"
+
+       # sort of progress bar
+       case $unpackcmd in
+               tar)    echo -n "t" >&2;;
+               patch)  echo -n "p" >&2;;
+               *)      echo -n "?" >&2;;
+       esac
+
+       # find real binary
+       realcmd=""
+       test -x "/bin/$unpackcmd"       && realcmd="/bin/$unpackcmd"
+       test -x "/usr/bin/$unpackcmd"   && realcmd="/usr/bin/$unpackcmd"
+       test "$realcmd" = ""            && exit 1
+
+       # put data into tmpfile, exec real cmd, return on failure
+       WORK=`dirname $RPM_BUILD_DIR`
+       cat > "$WORK/data"
+       if test -x /bin/$unpackcmd; then
+               cmddir="/bin"
+       fi
+       $realcmd $* < "$WORK/data"
+       retval="$?"
+       test "$retval" != "0" && exit $retval
+
+       # find original data file by md5sum
+       set -- `md5sum < "$WORK/data"`
+       unpackfile="[$1]"
+       set -- `cat "$WORK/md5sum"`
+       while test "$1" != ""; do
+               if test "[$1]" = "$unpackfile"; then
+                       uncompress="$2"
+                       unpackfile="$3"
+                       break
+               fi
+               shift
+       done
+
+       # print results
+       unpackdir=`echo $unpackdir | @SED@ -e "s|$RPM_BUILD_DIR|BUILD|"`
+       echo -n "# log: [$unpackdir] $uncompress $unpackfile" >>$WORK/cmdlog
+       echo    " | $unpackcmd $unpackargs"                   >>$WORK/cmdlog
+       if test "$unpackcmd" = "patch" -a \
+           -f "$RPM_SOURCE_DIR/$unpackfile"; then
+               patchdir="${unpackdir#BUILD/}"
+               if test ! -f "$WORK/patchdir"; then
+                       echo -n $patchdir > $WORK/patchdir
+               fi
+               if test "`cat $WORK/patchdir`" = "$patchdir"; then
+                       level=`echo $unpackargs | tr " " "\n" | grep ^-p`
+                       echo "$unpackfile $level" >> $WORK/patchlog
+               fi
+       fi
+       if test "$unpackcmd" = "tar" -a \
+           -f "$RPM_SOURCE_DIR/$unpackfile"; then
+               echo -n "# Source: $unpackfile" >>$WORK/tarlog
+               if test "$unpackdir" != "BUILD"; then
+                       echo -n " -C ${unpackdir#BUILD/}" >>$WORK/tarlog
+               fi
+               echo "" >>$WORK/tarlog
+       fi
+EOF
+chmod 755 "$WORK/bin/patch"
+ln -s patch "$WORK/bin/tar"
+
+# let rpm do all the dirty specfile stuff ...
+echo -n "### rpm: " >&2
+touch $WORK/patchlog
+$RPM --nodeps --quiet -bp "$specdir/$specfile" </dev/null
+echo $" done" >&2
+
+# print results saved by the wrapper script
+(
+       # header
+       echo "# Patch series file for quilt, created by $0"
+       echo "#"
+       echo "# Sourcedir: $specdir"
+       echo "# Specfile: $specfile"
+       if test -f $WORK/patchdir; then
+               echo "# Patchdir: `cat $WORK/patchdir`"
+       fi
+       echo "#"
+
+       # additional info for trouble shooting
+       if test "$debug" = "1"; then
+               cat $WORK/md5sum | @SED@ -e 's/^/# md5: /'
+               echo "#"
+
+               test -f $WORK/cmdlog && cat $WORK/cmdlog && echo "#"
+       fi
+
+       # list tarballs + patches
+       test -f $WORK/tarlog   && cat $WORK/tarlog && echo "#"
+       test -f $WORK/patchlog && cat $WORK/patchlog
+)|(
+       if test "$outfile" != ""; then
+               cat > "$outfile"
+       else
+               cat
+       fi
+)
+### Local Variables:
+### mode: shell-script
+### End:
+# vim:filetype=sh