From 71148d75b33e6bc780ba50d068afb081e1b322d9 Mon Sep 17 00:00:00 2001 From: wangdi Date: Fri, 25 Jul 2003 09:29:51 +0000 Subject: [PATCH] add quilt --- lustre/kernel_patches/quilt/AUTHORS | 32 + lustre/kernel_patches/quilt/BUGS | 16 + lustre/kernel_patches/quilt/COPYING | 340 ++++++++ lustre/kernel_patches/quilt/Makefile.in | 228 ++++++ lustre/kernel_patches/quilt/README | 1 + lustre/kernel_patches/quilt/TODO | 128 +++ lustre/kernel_patches/quilt/bash_completion | 157 ++++ lustre/kernel_patches/quilt/bin/guards.1 | 174 ++++ lustre/kernel_patches/quilt/bin/guards.in | 246 ++++++ lustre/kernel_patches/quilt/bin/quilt.in | 92 +++ lustre/kernel_patches/quilt/config/install-sh | 276 +++++++ lustre/kernel_patches/quilt/configure.ac | 235 ++++++ lustre/kernel_patches/quilt/doc/README.in | 115 +++ lustre/kernel_patches/quilt/doc/docco.txt | 717 ++++++++++++++++ lustre/kernel_patches/quilt/lib/backup-files.c | 302 +++++++ lustre/kernel_patches/quilt/po/Makefile | 35 + lustre/kernel_patches/quilt/po/de.po | 903 ++++++++++++++++++++ lustre/kernel_patches/quilt/po/fr.po | 907 +++++++++++++++++++++ lustre/kernel_patches/quilt/po/quilt.pot | 657 +++++++++++++++ lustre/kernel_patches/quilt/quilt.changes | 237 ++++++ lustre/kernel_patches/quilt/quilt.spec.in | 58 ++ lustre/kernel_patches/quilt/quilt/add.in | 130 +++ lustre/kernel_patches/quilt/quilt/applied.in | 86 ++ lustre/kernel_patches/quilt/quilt/delete.in | 95 +++ lustre/kernel_patches/quilt/quilt/diff.in | 307 +++++++ lustre/kernel_patches/quilt/quilt/files.in | 115 +++ lustre/kernel_patches/quilt/quilt/fork.in | 98 +++ lustre/kernel_patches/quilt/quilt/import.in | 204 +++++ lustre/kernel_patches/quilt/quilt/new.in | 85 ++ lustre/kernel_patches/quilt/quilt/next.in | 83 ++ lustre/kernel_patches/quilt/quilt/patches.in | 113 +++ lustre/kernel_patches/quilt/quilt/pop.in | 186 +++++ lustre/kernel_patches/quilt/quilt/previous.in | 82 ++ lustre/kernel_patches/quilt/quilt/push.in | 217 +++++ lustre/kernel_patches/quilt/quilt/refresh.in | 206 +++++ lustre/kernel_patches/quilt/quilt/remove.in | 122 +++ lustre/kernel_patches/quilt/quilt/series.in | 98 +++ lustre/kernel_patches/quilt/quilt/setup.in | 136 +++ lustre/kernel_patches/quilt/quilt/top.in | 71 ++ lustre/kernel_patches/quilt/quilt/unapplied.in | 86 ++ lustre/kernel_patches/quilt/scripts/apatch.in | 194 +++++ lustre/kernel_patches/quilt/scripts/parse-patch.in | 129 +++ lustre/kernel_patches/quilt/scripts/patchfns.in | 724 ++++++++++++++++ lustre/kernel_patches/quilt/scripts/rpatch.in | 253 ++++++ lustre/kernel_patches/quilt/scripts/spec2series.in | 227 ++++++ 45 files changed, 9903 insertions(+) create mode 100644 lustre/kernel_patches/quilt/AUTHORS create mode 100644 lustre/kernel_patches/quilt/BUGS create mode 100644 lustre/kernel_patches/quilt/COPYING create mode 100644 lustre/kernel_patches/quilt/Makefile.in create mode 100644 lustre/kernel_patches/quilt/README create mode 100644 lustre/kernel_patches/quilt/TODO create mode 100644 lustre/kernel_patches/quilt/bash_completion create mode 100644 lustre/kernel_patches/quilt/bin/guards.1 create mode 100755 lustre/kernel_patches/quilt/bin/guards.in create mode 100755 lustre/kernel_patches/quilt/bin/quilt.in create mode 100644 lustre/kernel_patches/quilt/config/install-sh create mode 100644 lustre/kernel_patches/quilt/configure.ac create mode 100644 lustre/kernel_patches/quilt/doc/README.in create mode 100644 lustre/kernel_patches/quilt/doc/docco.txt create mode 100644 lustre/kernel_patches/quilt/lib/backup-files.c create mode 100644 lustre/kernel_patches/quilt/po/Makefile create mode 100644 lustre/kernel_patches/quilt/po/de.po create mode 100644 lustre/kernel_patches/quilt/po/fr.po create mode 100644 lustre/kernel_patches/quilt/po/quilt.pot create mode 100644 lustre/kernel_patches/quilt/quilt.changes create mode 100644 lustre/kernel_patches/quilt/quilt.spec.in create mode 100755 lustre/kernel_patches/quilt/quilt/add.in create mode 100755 lustre/kernel_patches/quilt/quilt/applied.in create mode 100755 lustre/kernel_patches/quilt/quilt/delete.in create mode 100755 lustre/kernel_patches/quilt/quilt/diff.in create mode 100755 lustre/kernel_patches/quilt/quilt/files.in create mode 100755 lustre/kernel_patches/quilt/quilt/fork.in create mode 100755 lustre/kernel_patches/quilt/quilt/import.in create mode 100755 lustre/kernel_patches/quilt/quilt/new.in create mode 100755 lustre/kernel_patches/quilt/quilt/next.in create mode 100755 lustre/kernel_patches/quilt/quilt/patches.in create mode 100755 lustre/kernel_patches/quilt/quilt/pop.in create mode 100755 lustre/kernel_patches/quilt/quilt/previous.in create mode 100755 lustre/kernel_patches/quilt/quilt/push.in create mode 100755 lustre/kernel_patches/quilt/quilt/refresh.in create mode 100755 lustre/kernel_patches/quilt/quilt/remove.in create mode 100755 lustre/kernel_patches/quilt/quilt/series.in create mode 100755 lustre/kernel_patches/quilt/quilt/setup.in create mode 100755 lustre/kernel_patches/quilt/quilt/top.in create mode 100755 lustre/kernel_patches/quilt/quilt/unapplied.in create mode 100755 lustre/kernel_patches/quilt/scripts/apatch.in create mode 100755 lustre/kernel_patches/quilt/scripts/parse-patch.in create mode 100644 lustre/kernel_patches/quilt/scripts/patchfns.in create mode 100755 lustre/kernel_patches/quilt/scripts/rpatch.in create mode 100755 lustre/kernel_patches/quilt/scripts/spec2series.in diff --git a/lustre/kernel_patches/quilt/AUTHORS b/lustre/kernel_patches/quilt/AUTHORS new file mode 100644 index 0000000..745db37 --- /dev/null +++ b/lustre/kernel_patches/quilt/AUTHORS @@ -0,0 +1,32 @@ +At the begining was the void. Then Andrew Morton begun +a collection of small scripts for patch management. The contributions +came from Stephen Cameron , Matt Reppert + and Jeremy Fitzhardinge . + +Then, Andreas Gruenbacher came to cleanup, reorganize, +document and speed up the code. He did also package it to rpm. + +Finally, Martin Quinson did a debian +package and came with several little patches. + + +Andrew Morton + Collection of scripts for patch management (patch-scripts). + +Stephen Cameron + Contributed pstatus. + +Matt Reppert +Jeremy Fitzhardinge + Contributions to Andrew's scripts. + +Andreas Gruenbacher + Clean up, reorganize, speedups, documentation. + Package up as RPM. + +Gerd Knorr + Contributed spec2series. + +Martin Quinson + 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 index 0000000..0e30f43 --- /dev/null +++ b/lustre/kernel_patches/quilt/BUGS @@ -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 index 0000000..d60c31a --- /dev/null +++ b/lustre/kernel_patches/quilt/COPYING @@ -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. + + 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.) + +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. + + 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. + + 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 + + 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. + + + Copyright (C) + + 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. + + , 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 index 0000000..6904a7c --- /dev/null +++ b/lustre/kernel_patches/quilt/Makefile.in @@ -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 index 0000000..2a4d1b3 --- /dev/null +++ b/lustre/kernel_patches/quilt/README @@ -0,0 +1 @@ +README.in - diff --git a/lustre/kernel_patches/quilt/TODO b/lustre/kernel_patches/quilt/TODO new file mode 100644 index 0000000..20c4be0 --- /dev/null +++ b/lustre/kernel_patches/quilt/TODO @@ -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 + + +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 + #include + + #include + + #include + #include + diff --git a/lustre/kernel_patches/quilt/bash_completion b/lustre/kernel_patches/quilt/bash_completion new file mode 100644 index 0000000..b26d8d4 --- /dev/null +++ b/lustre/kernel_patches/quilt/bash_completion @@ -0,0 +1,157 @@ +#-*- mode: shell-script;-*- + +# Programmed completion for bash to use quilt +# Copyright 2003 Martin Quinson + +# 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 index 0000000..c0fa589 --- /dev/null +++ b/lustre/kernel_patches/quilt/bin/guards.1 @@ -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 (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 index 0000000..181268d --- /dev/null +++ b/lustre/kernel_patches/quilt/bin/guards.in @@ -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 [--prefix=F] [--path=F] + [--default=I<0>|I<1>] [--check] [--config=F] + I ... + +=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 Include the file(s) on this line if the symbol I is defined. + +-I Exclude the file(s) on this line if the symbol I is defined. + ++!I Include the file(s) on this line if the symbol I is not defined. + +-!I Exclude the file(s) on this line if the symbol I 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 (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 index 0000000..872bfe9 --- /dev/null +++ b/lustre/kernel_patches/quilt/bin/quilt.in @@ -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 index 0000000..36f96f3 --- /dev/null +++ b/lustre/kernel_patches/quilt/config/install-sh @@ -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 index 0000000..2b1a90c --- /dev/null +++ b/lustre/kernel_patches/quilt/configure.ac @@ -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 index 0000000..83f252c --- /dev/null +++ b/lustre/kernel_patches/quilt/doc/README.in @@ -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 index 0000000..1860f13 --- /dev/null +++ b/lustre/kernel_patches/quilt/doc/docco.txt @@ -0,0 +1,717 @@ +Patch management scripts +Andrew Morton +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 + +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: + + + DESC + some short description + EDESC + + The long description + + + 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 > 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 + + 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 + + refpatch + + +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 + + refpatch + pushpatch p11 + + + (See why ccache is looking good?) + +or + +2: + + + poppatch p6 + 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 + + + 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 index 0000000..36996c7 --- /dev/null +++ b/lustre/kernel_patches/quilt/lib/backup-files.c @@ -0,0 +1,302 @@ +/* + File: backup-files.c + + Copyright (C) 2003 Andreas Gruenbacher + 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 +#include +#include +#include +#include +#include +#include + +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 index 0000000..1840713 --- /dev/null +++ b/lustre/kernel_patches/quilt/po/Makefile @@ -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 index 0000000..9b60350 --- /dev/null +++ b/lustre/kernel_patches/quilt/po/de.po @@ -0,0 +1,903 @@ +# German quilt translation +# Copyright (C) 2003 Free Software Foundation, Inc. +# Andreas Gruenbacher , 2003. +# +msgid "" +msgstr "" +"Project-Id-Version: quilt 0.21\n" +"PO-Revision-Date: 2003-02-15 22:15 +0100\n" +"Last-Translator: Andreas Gruenbacher \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 index 0000000..c84de81 --- /dev/null +++ b/lustre/kernel_patches/quilt/po/fr.po @@ -0,0 +1,907 @@ +# quilt french translation +# Copyright (C) 2003 Free Software Foundation, Inc. +# Martin Quinson , 2003. +# +msgid "" +msgstr "" +"Project-Id-Version: quilt 0.22\n" +"PO-Revision-Date: 2003-06-25 15:40+0200\n" +"Last-Translator: Martin Quinson \n" +"Language-Team: French \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 index 0000000..c917b0b --- /dev/null +++ b/lustre/kernel_patches/quilt/po/quilt.pot @@ -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 index 0000000..de3dde6 --- /dev/null +++ b/lustre/kernel_patches/quilt/quilt.changes @@ -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 '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 index 0000000..5174fea --- /dev/null +++ b/lustre/kernel_patches/quilt/quilt.spec.in @@ -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 + Andreas Gruenbacher + +%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 index 0000000..5b1d932 --- /dev/null +++ b/lustre/kernel_patches/quilt/quilt/add.in @@ -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 index 0000000..4bffbd4 --- /dev/null +++ b/lustre/kernel_patches/quilt/quilt/applied.in @@ -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 index 0000000..cd4bdf8 --- /dev/null +++ b/lustre/kernel_patches/quilt/quilt/delete.in @@ -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 index 0000000..8d721ec --- /dev/null +++ b/lustre/kernel_patches/quilt/quilt/diff.in @@ -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 index 0000000..796b9e2 --- /dev/null +++ b/lustre/kernel_patches/quilt/quilt/files.in @@ -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 index 0000000..822036c --- /dev/null +++ b/lustre/kernel_patches/quilt/quilt/fork.in @@ -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 index 0000000..63b7470 --- /dev/null +++ b/lustre/kernel_patches/quilt/quilt/import.in @@ -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 index 0000000..bba2929 --- /dev/null +++ b/lustre/kernel_patches/quilt/quilt/new.in @@ -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 index 0000000..9e2ca64 --- /dev/null +++ b/lustre/kernel_patches/quilt/quilt/next.in @@ -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 index 0000000..fd1b1fa --- /dev/null +++ b/lustre/kernel_patches/quilt/quilt/patches.in @@ -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 index 0000000..ecd6719 --- /dev/null +++ b/lustre/kernel_patches/quilt/quilt/pop.in @@ -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 index 0000000..36bfb30 --- /dev/null +++ b/lustre/kernel_patches/quilt/quilt/previous.in @@ -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 index 0000000..a4d1a12 --- /dev/null +++ b/lustre/kernel_patches/quilt/quilt/push.in @@ -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 index 0000000..25fca13 --- /dev/null +++ b/lustre/kernel_patches/quilt/quilt/refresh.in @@ -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 index 0000000..d48300b --- /dev/null +++ b/lustre/kernel_patches/quilt/quilt/remove.in @@ -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 index 0000000..bd26c82 --- /dev/null +++ b/lustre/kernel_patches/quilt/quilt/series.in @@ -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 index 0000000..2b15041 --- /dev/null +++ b/lustre/kernel_patches/quilt/quilt/setup.in @@ -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 index 0000000..904ea0e --- /dev/null +++ b/lustre/kernel_patches/quilt/quilt/top.in @@ -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 index 0000000..854ff40 --- /dev/null +++ b/lustre/kernel_patches/quilt/quilt/unapplied.in @@ -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 index 0000000..973988a --- /dev/null +++ b/lustre/kernel_patches/quilt/scripts/apatch.in @@ -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 index 0000000..56c3c55 --- /dev/null +++ b/lustre/kernel_patches/quilt/scripts/parse-patch.in @@ -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 () { + 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 index 0000000..66ae4a8 --- /dev/null +++ b/lustre/kernel_patches/quilt/scripts/patchfns.in @@ -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> $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 index 0000000..aa8abcb --- /dev/null +++ b/lustre/kernel_patches/quilt/scripts/rpatch.in @@ -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 index 0000000..8d1c0aa --- /dev/null +++ b/lustre/kernel_patches/quilt/scripts/spec2series.in @@ -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 < + 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" &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 -- 1.8.3.1