News file for Stow.

* Changes in version 2.2.1

** Small improvements to documentation

*** The README has been revamped.

*** Some index points have been added to the manual.

*** Some typos were fixed.

*** @VERSION@ substitution was fixed in the stow(8) man page.

** Fix Perl warnings

   Stow no longer emits "v-string in use/require non-portable" and
   "Possible precedence issue with control flow operator" warnings
   with newer Perl versions.  See https://savannah.gnu.org/bugs/?36478
   and http://lists.gnu.org/archive/html/bug-stow/2014-06/msg00000.html
   for full details.

** Fix "Undefined subroutine &main::error" error

   See https://rt.cpan.org/Public/Bug/Display.html?id=75349 for details.

** Failed system calls now include error description

   This should make errors easier to understand.

** Default ignore list now ignores top-level README.*, LICENSE.*, and COPYING

   These files are by definition specific to a given package, so if
   they exist in the top-level directory, they should not be stowed.

** Correctly handle the stow/target directories as non-canonical paths

   Fix the case discovered by Hiroyuki Iwatsuki where stowing fails if
   the stow / target directories are non-canonical paths.  For
   example, on FreeBSD /home is a symlink pointing to 'usr/home', so
   running with the stow directory as /home/user/local/stow and the
   target directory as /home/user/local previously resulted in the
   stow directory path being calculated as
   ../../../usr/home/user/local/stow relative to the target.

   See http://article.gmane.org/gmane.comp.gnu.stow.bugs/8820 for details.

** Fix stowing of relative links when --no-folding is used.

   With a tree like this:

       .
       |-- stow
       |   `-- pkg
       |       `-- lib
       |           |-- itk-current -> itk4.0.0
       |           `-- itk4.0.0
       |               `-- libitk4.0.0.so
       `-- target
           `-- lib
               |-- itk4.0.0 -> ../../stow/pkg/lib/itk4.0.0
               `-- libfoo-1.2.3.so

   stowing pkg with the --no-folding option resulted in itk-current
   being "unpacked":

       .
       `-- target
           `-- lib
               |-- itk-current
               |   `-- libitk4.0.0.so -> ../../../stow/pkg/lib/itk-current/libitk4.0.0.so
               |-- itk4.0.0
               |   `-- libitk4.0.0.so -> ../../../stow/pkg/lib/itk4.0.0/libitk4.0.0.so
               `-- libfoo-1.2.3.so

   This commit fixes it so that it gets stowed as a symlink:

     .
     `-- target
         `-- lib
             ...
             |-- itk-current -> ../../stow/pkg/lib/itk-current
             ...

   Thanks to Gabriele Balducci for reporting this problem:

       http://thread.gmane.org/gmane.comp.gnu.stow.general/6676

** Internal code cleanups

*** aclocal was updated.

*** automake files were removed.

*** Trailing whitespace was removed.

*** Comments were added.

*** Debug messages were improved.

* Changes in version 2.2.0

** New --no-folding option

   Disables folding of newly stowed directories when stowing, and
   refolding of newly foldable directories when unstowing.

** Remove -a option (--adopt still available)

   As --adopt is the only option which allows stow to modify files, it
   is considered potentially dangerous (especially for stow package
   directories which are not managed by a version control system).
   Therefore it seems prudent to require a bit more effort from the
   user to enable this option, minimising the change of enabling it
   via a typo.

** Improve error message when stow package is not found.

   The error message displayed a path to the missing stow package
   which was relative to the target directory rather than the cwd,
   which was confusing for the user.

** Test suite improvements

   The test suite has been tightened up slightly.

** Documentation improvements

   Various fixes and cosmetic improvements have been made in the manual.

** Remove "There are no outstanding operations to perform" warning.

* Changes in version 2.1.3

** New --adopt / -a option

   This allows plain files in the target to be "adopted" into the
   package being stowed.  See the manual has more details.

** ./configure now checks for Perl modules required by the test suite.

* Changes in version 2.1.2

  Many thanks to Stefano Lattarini for help with numerous autoconf and
  automake issues which are addressed in this release.

** Significantly improve the handling of --with-pmdir.

*** Calculation of the default value for --with-pmdir is now done safely in Perl.

    Previously non-POSIX-compliant shells could cause issues.

*** The output of ./configure and make are now much more helpful.

*** The Makefile will now check whether pmdir is in Perl's built-in @INC.

    If not, it will insert a

      use lib "...";

    line into the generated stow script to ensure that it can always
    locate the Perl modules without needing to manually set PERL5LIB.

*** Updated INSTALL and HOWTO-RELEASE accordingly.

** ./configure now aborts if Perl isn't found.

** Ensured the ChangeLog is up-to-date when making a new distribution.

** Fixed bug with `make clean' removing files which the user may not be able to rebuild.

* Changes in version 2.1.1

** Fixed bug where ./configure --with-pmdir=X was ineffectual.

** Calculated the correct default value for pmdir based on the local Perl installation.

** Fixed some automake issues (thanks to Stefano Lattarini for spotting these!)

** Improved various bits of documentation.

* Changes in version 2.1.0

** Major refactoring of code into separate Stow and Stow::Util Perl modules.

** Added support for ignore list files.

** Added support for CPAN-style installation and distribution via Module::Build.

** Introduced `make test' target and significantly tightened up test suite.

** Very large number of code and documentation fixes (over 80 commits since version 2.0.1).

** The '--conflicts' option has been removed.

   Stow will always show conflicts if they are found during the scanning
   phase.

** Improved debugging output.

** Converted man page to POD format.

** Include PDF, and both split- and single-page HTML versions of manual in the distribution.

** Fixed code style consistency issues.

** Running configure from outside the source tree now works.

** `make distcheck' now works.

* Changes in version 2.0.1

** Defer operations until all potential conflicts have been assessed.

   We do this by traversing the installation image(s) and recording the
   actions that need to be performed.  Redundant actions are factored out,
   e.g., we don't want to create a link that we will later remove in order to
   create a directory.  Benefits of this approach:

     1. Get to see _all_ the conflicts that are blocking an installation:
        you don't have to deal with them one at a time.
     2. No operations are be performed if _any_ conflicts are detected:
        a failed stow will not leave you with a partially installed
        package.
     3. Minimises the set of operations that need to be performed.
     4. Operations are executed as a batch which is much faster
        This can be an advantage when upgrading packages on a live system
        where you want to minimise the amount of time when the package is
        unavailable.

** The above fixes the false conflict problem mentioned in the info file.

** It also fixes the two bugs mentioned in the man page.

** Multiple stow directories will now cooperate in folding/unfolding.

** Conflict messages are more uniform and informative.

** Verbosity and tracing is more extensive and uniform.

** Implemented option parsing via Getopt::Long.

** Default command line arguments set via '.stowrc' and '~/.stowrc' files.

   Contents of these files are parsed as though they occurred first on
   the command line.

** Support multiple actions per invocation.

   In order for this to work, we had to add a new (optional) command line arg
   (-S) to specify packages to stow.  For example, to update an installation
   of emacs you can now do

           stow -D emacs-21.3 -S emacs-21.4a

   which will replace emacs-21.3 with emacs-21.4a.
   You can mix and match any number of actions, e.g.,

           stow -S p1 p2 -D p3 p4 -S p5 -R p6

   will unstow p3, p4 and p6, then stow p1, p2, p5 and p6.

** New (repeatable) command line arg: --ignore='<regex>'

   This suppresses operating on a file matching the regex (suffix),
   e.g.

           --ignore='~' --ignore='\.#.*'

   will ignore emacs and CVS backup files (suitable for ~/.stowrc file).

   (I opted for Perl regular expressions because they are more
   powerful and easier to implement).

** New (repeatable) command line arg: --defer='<regex>'

   This defers stowing a file matching the regex (prefix) if that file
   is already stowed to a different package, e.g.,

           --defer='man' --defer='info'

   will cause stow to skip over pre-existing man and info pages.

   Equivalently, you could use --defer='man|info' since the argument
   is just a Perl regex.

** New (repeatable) command line arg: --override='<regex>'

   This forces a file matching the regex (prefix) to be stowed even if
   the file is already stowed to a different package, e.g.

           --override='man' --override='info'

   will unstow any pre-existing man and info pages that would conflict
   with the file we are trying to stow.

   Equivalently, you could use --override='man|info' since the
   argument is just a Perl regex.

** The above gives the ability to manage packages with common content.

   For example, man pages that are shared by a number of CPAN
   packages.  Using multiple stow directories and .stowrc files can
   also simplify things.  In our setup we use the standard
   /usr/local/stow directory for packages to be installed in
   /usr/local.  Since we install a large number of extra Perl packages
   (currently about 300) we use an additional stow directory:
   /usr/local/stow/perl-5.8.8-extras.  Both stow directories contain a
   '.stow' file so that they collaborate appropriately.  I then use
   the following .stowrc file in /usr/local/stow/perl-5.8.8-extras

        --dir=/usr/local/stow/perl-5.8.8-extras
        --target=/usr/local
        --override=bin
        --override=man
        --ignore='perllocal\.pod'
        --ignore='\.packlist'
        --ignore='\.bs'

   When I stow packages from there, they automatically override any
   man pages and binaries that may already have been stowed by another
   package or by the core perl-5.8.8 installation.  For example, if
   you want to upgrade the Test-Simple package, you need to override
   all the man pages that would have been installed by the core
   package.  If you are upgrading CPAN, you will also have to override
   the pre-existing cpan executable.

** By default, search less aggressively for invalid symlinks when unstowing.

   That is, we only search for bad symlinks in the directories
   explicitly mentioned in the installation image, and do not dig down
   into other subdirs.  Digging down into other directories can be
   very time consuming if you have a really big tree (like with a
   couple of Oracle installations lying around). In general the old
   behaviour is only necessary when you have really stuffed up your
   installation by deleting a directory that has already been stowed.
   Doing that on a live system is somewhat crazy and hopefully rare.
   We provide an option '-p|--compat' to enable the old behaviour for
   those needing to patch up mistakes.

** New chkstow utility for checking the integrity of the target directory.

** Implement a test suite and support code.

   This was built before implementing any of the extra features so I
   could more easily check for equivalent functionality.  The initial
   code base had to be refactored substantially to allow for testing.
   The test suite is not exhaustive, but it should provide enough to
   check for regressions.

* Changes in version 1.3.3

** Now requires Perl 5.005 or later

** Initially empty directories are not removed anymore

** Removed buggy fastcwd (we use POSIX::getcwd instead)

** Fixed bug when the common Parent of Target dir and Stow dir was "/"

** Fixed bug when handling directories named "0"

** Stow now only warns the user if a directory is unreadable during unstowing.

* Changes in version 1.3:

** Added --restow option.

** Fixed handling of slashes in package names.

** Expanded configure-time search for Perl binary.

* Changes in version 1.2:

** Dependency on `pwd' removed.

** Perl 4 compatibility fixes.

** Manual expanded even more.

* Changes in version 1.1:

** Long and short options now accepted.

** Manual expanded.

** `make clean' removes stow (which is generated from stow.in).

* Initial public release (v1.0) of Stow.

* emacs local variables
  Local Variables:
  mode: org
  End:
