I am submitting this case for myself. This case proposes to integrate quilt into SFW. Timeout is set for October 30th, 2008.
Manpages and the FOSS checklist are in the case materials directory. This project requests a minor release binding. Dean 1. Background People familiar with Mercurial Queues (mq) will recognize quilt, as it was the inspriation for mq. I've stayed with quilt over the years because I use it for workareas managed by mercurial, teamware, git, cvs, bk--even workareas not managed by any SCM at all. ``[Quilt allows] you to manage a series of patches by keeping track of the changes each patch makes. Patches can be applied, un-applied, refreshed, etc. 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. Quilt was originally based on Andrew Morton's patch scripts published on the linux kernel mailing list a while ago, but were heavily modified since then.'' [1] Quilt is externally maintained Free Open Source Software (FOSS). Sun's role with this project is to port and monitor the open source project. For additional information about the project or originating community, see [1]. Quilt is licensed under the GPLv2 license. See OSR #9963 [2] for more information. This project will port version 0.47, the version which was current at the time of the OSR. 2. Architecture The manpage gives a nice architectural overview, so I will quote it here: "With quilt, all work occurs within a single directory tree. Commands can be invoked from anywhere within the source tree. They are of the form quilt cmd similar to CVS commands. They can be abbreviated as long as the specified part of the command is unique. All commands print some help text with quilt cmd -h. "Quilt manages a stack of patches. Patches are applied incrementally on top of the base tree plus all preceding patches. They can be pushed on top of the stack (quilt push), and popped off the stack (quilt pop). Commands are available for querying the contents of the series file (quilt series, see below), the contents of the stack (quilt applied, quilt previous, quilt top), and the patches that are not applied at a particular moment (quilt next, quilt unapplied). By default, most commands apply to the topmost patch on the stack. "Patch files are located in the patches sub-directory of the source tree. The QUILT_PATCHES environment variable can be used to override this location. The patches directory may contain sub-directories. It may also be a symbolic link instead of a directory. "A file called series contains a list of patch file names that defines the order in which patches are applied. Unless there are means by which series files can be generated automatically, it is usually provided along with a set of patches. In this file, each patch file name is on a separate line. Patch files are identified by pathnames that are relative to the patches directory; patches may be in sub-directories below this directory. Lines in the series file that start with a hash character (#) are ignored. You can also add a comment after each patch file name, introduced by a space followed by a hash character. When quilt adds, removes, or renames patches, it automatically updates the series file. Users of quilt can modify series files while some patches are applied, as long as the applied patches remain in their original order. "Different series files can be used to assemble patches in different ways, corresponding for example to different development branches. "Before a patch is applied (or "pushed on the stack"), copies of all files the patch modifies are saved to the .pc/patch directory. The patch is added to the list of currently applied patches (.pc/applied- patches). Later when a patch is regenerated (quilt refresh), the backup copies in .pc/patch are compared with the current versions of the files in the source tree using GNU diff. "Documentation related to a patch can be put at the beginning of a patch file. Quilt is careful to preserve all text that precedes the actual patch when doing a refresh. (This is limited to patches in unified for- mat; see diff documentation). "The series file is looked up in the .pc directory, in the root of the source tree, and in the patches directory. The first series file that is found is used. This may also be a symbolic link, or a file with multiple hard links. Usually, only one series file is used for a set of patches, so the patches sub-directory is a convenient location. "The .pc directory and its sub-directories cannot be relocated, but it can be a symbolic link. While patches are applied to the source tree, this directory is essential for many operations, including taking patches off the stack (quilt pop), and refreshing patches (quilt refresh). Files in the .pc directory are automatically removed when they are no longer needed, so there is no need to clean up manually." 3. More Technical Details Before quilt applies (pushes) a patch it uses the backup-files tool to copy the pre-patched version of the to-be-patched files into the .pc directory. The backup-files tool verifies a variety of conditions on which quilt relies. This tool is also used when removing (popping) a patch, to restore a file to its pre-patched condition. The guards tool is used when constructing a series file based on specified conditions. From it's manpage: "[Guards] 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 configuration file is processed separately." 4. Interfaces & Dependencies Exported Interfaces: Interface Name Classification Comments --------------------------- ------------------- -------------------- SUNWquiltu Uncommitted Package name SUNWquiltr Uncommitted Package name quilt Uncommitted Commandline syntax guards Uncommitted Commandline syntax /etc/quilt.quiltrc Uncommitted Config file /etc/bash_completion.d/quilt Uncommitted BASH cmd completion file /usr/bin/quilt Uncommitted Executable location /usr/bin/guards Uncommitted Executable location /usr/share/doc/quilt-0.47 Uncommitted Directory /usr/share/doc/quilt-0.47/README Uncommitted Doc /usr/share/doc/quilt-0.47/README.MAIL Uncommitted Doc /usr/share/doc/quilt-0.47/quilt.pdf Uncommitted Doc /usr/share/emacs/site-lisp/quilt.el Uncommitted Emacs mode /usr/share/quilt/* Project Private Quilt functions. Each quilt function has its own script. /usr/share/quilt/scripts/* Project Private Scripts location. Private utils used by the quilt functions. /usr/share/quilt/wrapper/* Project Private Command Wrappers /usr/share/quilt/compat/* Project Private Compatibility Wrappers /usr/lib/quilt/backup-files Project Private Tool to backup and restore patched files. /usr/share/locale/de/LC_MESSAGES/quilt.mo Uncommitted /usr/share/locale/fr/LC_MESSAGES/quilt.mo Uncommitted /usr/share/locale/ja/LC_MESSAGES/quilt.mo Uncommitted Imported Interfaces Interface Name Classification Comments --------------------------- ------------------- -------------------- bash Evolving PSARC/2001/799 GNU zip Evolving PSARC/2001/799 GNU zcat Evolving PSARC/2001/799 bzip2 Evolving PSARC/2001/799 GNU patch Evolving PSARC/2001/799 perl Evolving PSARC/2003/661 diffstat Uncommitted PSARC/2008/114 GNU diff Uncommitted PSARC/2007/189 GNU grep Uncommitted PSARC/2007/568 GNU cp Uncommitted PSARC/2007/048 GNU date Uncommitted PSARC/2007/048 GNU tail Uncommitted PSARC/2007/048 GNU tr Uncommitted PSARC/2007/048 GNU sed Uncommitted PSARC/2008/254 GNU awk Uncommitted PSARC/2008/594 GNU msgfmt Uncommitted PSARC/2007/635 GNU xgettext Uncommitted PSARC/2007/635 5. References [1] http://savannah.nongnu.org/projects/quilt [2] https://opensourcereview.central.sun.com/app?action=ViewReq&traq_num=9963 [3] quilt.1 [4] guards.1 6. Resources and Schedule 6.4. Steering Committee requested information 6.4.1. Consolidation C-team Name: SFW 6.5. ARC review type: FastTrack 6.6. ARC Exposure: open