History of For each File releases


This document is a record of changes that have occurred with each release of For each File. You can find announcements for new releases at freshmeat.

Table of Contents

Version 2.2 (2006-01-25)
Version 2.1 (2006-01-01)
Version 2.0 (2005-12-18)
Version 1.7.3 (2004-09-16)
Version 1.7.3-rc2 (2004-08-16)
Version 1.7.2 (2004-07-31)
Version 1.7.1 (2004-07-16)
Version 1.7.0 (2004-07-09)
Version 1.6.9 (2004-06-21)
Version 1.6.8 (2004-06-18)
Version 1.6.7 (2004-04-13)
Version 1.6.6 (2004-04-05)
Version 1.6.5 (2004-04-01)
Version 1.6.4 (2004-03-24)
Version 1.6.3 (2004-03-21)
Version 1.6.2 (2004-03-14)
Version 1.6.1 (2004-03-13)
Version 1.6 (2004-03-11)
Version 1.5 (2004-02-03)
Version 1.4 (2004-01-25)
Version 1.3 (2003-08-30)

Version 2.2 (2006-01-25)

  • In extract.ff, a defect which prevents the output directory from being relocated to its proper location has been fixed.

  • The "dev" and "user" mailing lists have been replaced with a new "friends" mailing list to better suit the size of the user community.

  • In the user's manual, information about verifying the integrity of downloaded release packages, using GNU Privacy Guard, has been added.

    Also, an example about global text substitution has been added.

Version 2.1 (2006-01-01)

  • Moved project hosting from SourceForge to Gna!.

  • Added information about Gna! services, and "contributing", "getting help", and "examples of useage" sections to the user's manual.

    Added information about package structure to README file.

  • Fixed removal of empty output directory and logic for adjusting of output directory in extract.ff.

Version 2.0 (2005-12-18)

  • For each File has been made into a GNU BASH shell-function (compare with shell-script). This is a major architectural change as a user can now invoke For each File from within any GNU BASH function.

    The source code has been stripped down, revised, and beautified such that it is now more light-weight, intuitive to use, and easier to edit and improve.

  • A comprehensive user's manual, written in Docbook-XML and complete with explanations and examples, has been added. This manual is accessible in, among other formats, both XHTML and UNIX-style manpage form.

  • Full support for file names with spaces, new-lines, Unicode, non-printable and other weird characters has been added. This was previously a major limitation of For each File in previous revision.

  • A new function-based approach to L10N has been implemented. As a result of this, and massive reduction and simplification of the text messages shown to the user, all of the old translation catalogs have been discarded.

  • All command-line options have been made into extended globs (see "extglob" in the "Pattern Matching" section of the GNU BASH manual for more information) which can be configured to better suit different human languages via L10N.

  • For each File now has only one software dependency: GNU BASH. However, some example scripts still need GNU coreutils.

  • The names of control functions and their parameters have been changed:


  • The $p variable now denotes the prefix of object, and a new variable $s denotes the suffix of an object.

  • Many new script-accessible functions have been introduced into For each File (see the source file $FF_HOME/ff.bash). In particular, the ff_import lets you import libraries by specifying only their name; For each File takes care of the rest.

  • Many changes in terminology and naming conventions have been made. For example, "targets" are now known as "objects" and all For each File construct names begin with "ff" instead of "__ff".

  • All of the old example scripts have been discarded except ff.id3_report (which has been updated into id3ToXml.ff) and ff.untar (which has been updated into extract.ff).

    extract.ff has taken a new approach to file archive extraction that works in all cases. Also, it now supports many kinds of file archives, not just tarballs.

  • All of the old libraries have been discarded except util.lib (which has been updated into util.bash) and id3tag.lib (which has been updated into id3.bash).

    A defect, causing incorrect detection of ID3v1 versus ID3v1.1 tags, in id3.bash has been fixed.

  • The For each Line script has been removed.

Version 1.7.3 (2004-09-16)

  • The example scripts directory has been renamed as ./examples/.

  • Korean language support is not available in this release because my translation software has ceased to function properly. Please feel free to contribute Korean localization which you can adapt from the translation catalogs of previous releases of this software.

  • Manuals, which can be viewed by specifying: --args --help , have been added to some of the example scripts.

  • util.lib has been added which now contains functions for querying the user.

Version 1.7.3-rc2 (2004-08-16)

  • The tools' start-up time has been made the same for all language codes.

  • Command-line arguments can now be passed to a user's script via the --args option.

    • ff.untar and ff.mp3_catalog now support command-line options and have their own help manuals.

  • id3tag.lib, a library for reading ID3v1 and ID3v1.1 tags, has been added.

    • ff.mp3_catalog now uses the new id3tag.lib library instead of the mp3info program, and the new --args option instead of querying the user.

  • A new example script, named ff.id3_report, has been added.

  • The short options -h and -v have been removed as their longer counterparts are more common.

  • The language code can now be specified via the --lang option.

  • Piped targets which contain new-line characters in their names are now supported via the --pipe-delim option.

  • The preset scripting variables have been renamed to better reflect their contents as follows:


Version 1.7.2 (2004-07-31)

  • The recursive mode for For each File has been completely rewritten and no longer requires GNU find.

    • New-line characters in the names of targets specified on the command-line are supported.

    • The --dereference option has been removed because it was implemented by directly using GNU find.

    • An --ignore-links option has been added because the recursive mode traverses symbolic links to directories by default.

  • This package has been made more portable and robust, thanks to an extensive review by Stephane Chazelas.

    • The DocFmt.lib library attempts to use tput to change on-screen formatting instead of solely relying on ANSI escape sequences.

    • Several mistakes and defects in the code, documentation, manuals, and example scripts have been fixed.

  • The parsing of preset variables has been made more fault tolerant.

    • $w has been removed because $PWD can be used in its place.

    • A defect, which causes the value of $d to be empty when it should be /, has been fixed.

    • A defect, which causes the values of $fn and $f to be empty when / is specified as the target, has been fixed.

  • Control functions written in the form function main { ... } are supported.

  • The shell options "extglob" and "nullglob" are enabled by default.

  • A mechanism to stop the command line parser has been added.

  • The example script ff.untar now correctly determines the type of tar-ball and if the tar-ball extracts into its own directory.

  • A new $t preset variable has been added which holds the original name of a target.

  • The performance of hash-table implementation of gettext.lib has been significantly improved.

  • The tool manuals are cached so that subsequent display queries are executed faster.

  • The incorrect order of some translations in the translation catalogs has been fixed.

Version 1.7.1 (2004-07-16)

  • The German translation catalogs have been updated by Michael Wiedmann.

  • A defect causing illegal options to be treated as targets has been fixed.

  • In fl.xgettext, the option for producing raw output has been removed.

  • The --pipe option has been greatly optimized by eliminating a temporary buffer in which piped data was stored.

  • The validation of control functions in user commands has been hardened.

  • The code, documentation, FAQ, and example scripts have been revised according to suggestions by Stephane Chazelas.

  • Trivial and obsolete example scripts have been removed from the package.

  • The installation script has been removed from the package due to portability concerns.

Version 1.7.0 (2004-07-09)

  • A defect causing segmentation faults upon parsing shell-sensitive characters in target names has been fixed.

  • In fl.xgettext, a defect causing segmentation faults when parsing input files encoded in UTF-8 has been fixed.

  • The example script ff.translate_url has been updated to be more fault tolerant to responses given by the user.

  • Overall start-up time has been improved.

  • The example scripts ff.vars and fl.vars display the invocation of control functions.

Version 1.6.9 (2004-06-21)

  • Corrupted Unicode characters in the translations have been fixed.

  • The package documentation has been updated and converted to HTML to preserve formatting across translations.

  • The gettext emulation library has been optimized by using a hash-table implementation.

  • Shell commands are read from the user's terminal when not specified on the command-line.

  • The --mask option has been added for file-name filtering in recursive mode.

Version 1.6.8 (2004-06-18)

  • Completely redesigned the command-line interface and added new options.

  • Translated the documentation into various languages.

  • Added library for parsing command-line options.

  • Removed the preset variable $n from the For each File tool.

  • Optimized several bottle-neck areas to increase performance.

  • Added GNU GPL notices in all source files of this package.

  • Updated and added to the example scripts.

  • Updated the installation script and localized it.

  • Added example script which fetches translations for on-line documents.

Version 1.6.7 (2004-04-13)

  • Added support for internationalization/localization through a gettext emulation library.

  • Removed installation script as it was unnecessary.

  • Modularized the package tree and source code.

Version 1.6.6 (2004-04-05)

  • Fixed bug where the argument of the -s option was evaluated as a target.

  • Errors about undefined user functions have been fixed by Andy Kirkpatrick.

  • Added an un-installation feature to the install script.

  • Added command line option to display program version.

Version 1.6.5 (2004-04-01)

  • Fixed bug where targets given on command line were being misinterpreted.

  • Updated documentation and examples.

Version 1.6.4 (2004-03-24)

  • Added command line option which allows the user to bypass the size limit of the shell's argument buffer.

  • Added begin_file() and end_file() control functions to the For each File tool.

  • Updated documentation and examples.

Version 1.6.3 (2004-03-21)

  • Modularized and optimized the code (~951% speed-up).

  • Added begin() and end() control functions, which are similar to the BEGIN and END control blocks of the awk tool.

  • Added more command line options.

  • Updated installation script, documentation, and examples.

Version 1.6.2 (2004-03-14)

  • Fixed inconsistency in scripting variables between non/recursive modes.

  • Fixed several bugs in example scripts.

  • Removed obsolete scripting variable: $p.

  • Added new scripting variables $w and $fn.

  • Updated help and source documentation.

Version 1.6.1 (2004-03-13)

  • Added new scripting variable: $p.

  • Added MP3 cataloging and ID3 tagging example scripts.

  • Added installation script.

  • Updated documentation.

Version 1.6 (2004-03-11)

  • Fixed special characters handling in file names.

  • Added new For each Line tool.

  • Updated documentation.

Version 1.5 (2004-02-03)

  • Implemented sub-directory recursing in an iterative fashion.

  • User scripts are evaluated directly by the GNU BASH shell, via the eval command.

Version 1.4 (2004-01-25)

  • Implemented solution for handling fragmented file-names.

  • Removed obsolete ffr tool. Use ff -r instead.

  • Added command line options, documentation, and help message.

Version 1.3 (2003-08-30)

  • Imported code into CVS.

  • Command-line arguments are now handled iteratively.