Bump version to 2.4.1 for development of next release
[gnu-stow.git] / NEWS
blob490cb6c91e98a4b94494dbd0d52b71da53810d04
1 News file for Stow.
3 * Changes in version 2.4.0
5 *** --dotfiles now works with directories
7     A long-standing bug preventing the --dotfiles option from working
8     correctly with directories has been fixed.
10     It should also works in combination with the --compat option.
12 *** Eliminated a spurious warning on unstowing
14     2.3.1 introduced a benign but annoying warning when unstowing
15     in certain circumstances.  It looked like:
17       BUG in find_stowed_path? Absolute/relative mismatch between Stow dir X and path Y
19     This was caused by erroneous logic, and has now been fixed.
21 *** Unstowing logic has been improved in other cases
23     Several other improvements have been made internally to the
24     unstowing logic.  These changes should all be either invisible
25     (except for changes to debug output) or improvements, but if you
26     encounter any unexpected behaviour, please report it as directed
27     in the manual.
29 *** Improved debug output
31     Extra output resulting from use of the -v / --verbose flag
32     now appears in a more logical and understandable way.
34 *** Janitorial tasks
36     Users are not substantially affected by these changes.
38 ***** Added some more information from the web page to the README
40 ***** Made some improvements to the documentation
42 ***** Improve readability of source code
44       Quite a few extra details have been added in comments to clarify
45       how the code works.  Many variable names have also been
46       improved.  The comments of many Stow class methods have been
47       converted into Perl POD format.
49 ***** Added a =CONTRIBUTING.md= file
51 ***** Add a =watch= target to =Makefile=
53       =make watch= provides easy continual pre-processing during
54       development, which reduces the risk of debugging the wrong code.
56 ***** Removed texinfo.tex from the distribution
58       This eliminates existing and future bit-rot.
60 ***** Updated aclocal.m4 from 1.15.1 to 1.16.5
62       This mostly just updates copyright notices to 2021, and URLs to https.
64 ***** Replace broken gmane links with links to lists.gnu.org
66       [[https://lars.ingebrigtsen.no/2020/01/06/whatever-happened-to-news-gmane-org/][gmane has been dead for quite a while.]]
68 ***** Improve support for navigating / editing source via emacs
70 ******* Support source navigation in emacs via [[https://github.com/jacktasia/dumb-jump][dumb-jump]].
72 ******* Configure cperl-mode to match existing coding style.
74 *** Various maintainer tweaks
76     Further improved the release process and its documentation in
77     various minor ways.
79 * Changes in version 2.3.1
81 *** Remove dependencies on Hash::Merge and Clone::Choose
83     stow 2.3.0 added external runtime dependencies on Hash::Merge and
84     Clone::Choose. Historically stow hasn't had runtime dependencies
85     other than Perl itself, which is a useful property if you're
86     managing the installation of Perl using stow; the bootstrapping
87     instructions in stow's manual would need updating to describe how
88     to install these two modules (and any dependencies they have now
89     or in the future) as well.
91     However, Hash::Merge is much more general than stow actually
92     needs, so replace the merge() call with a few lines of equivalent
93     code -- this avoids the external dependencies, and is clearer than
94     the merge() call.
96     Many thanks to Adam Sampson for this patch!
98     https://lists.gnu.org/archive/html/bug-stow/2019-06/msg00001.html
100 *** Fix an issue with the test suite
102     t/cli.t was not testing with the right Perl executable, as
103     reported here:
105         https://rt.cpan.org/Ticket/Display.html?id=129944
107     Thanks to Slaven Rezic for spotting this and reporting it!
109 *** Various maintainer tweaks
111     Improved the release process and its documentation in various
112     minor ways.
114 * Changes in version 2.3.0
116 *** New features / changes in behaviour
118 ***** New --dotfiles option
120       Enable special handling for "dotfiles" (files or folders whose name
121       begins with a period) in the package directory. If this option is
122       enabled, Stow will add a preprocessing step for each file or folder
123       whose name begins with "dot-", and replace the "dot-" prefix in the
124       name by a period (".").  This is useful when Stow is used to manage
125       collections of dotfiles, to avoid having a package directory full
126       of hidden files.
128       For example, suppose we have a package containing two files,
129       stow/dot-bashrc and stow/dot-emacs.d/init.el.  With this option,
130       Stow will create symlinks from .bashrc to stow/dot-bashrc and from
131       .emacs.d/init.el to stow/dot-emacs.d/init.el.  Any other files,
132       whose name does not begin with "dot-", will be processed as usual.
134       Thanks to Joris Vankerschaver for this feature!
136 ***** Shell-like expansion in .stowrc files
138       For options within .stowrc files which describe file paths, "~" can
139       be included to expand to the current value of $HOME, and
140       environment variables can be referenced e.g. via "$FOO" or
141       "${FOO}".  To prevent expansion, escape with a backslash.
143       Thanks a lot to Charles LeDoux for his diligent work on this
144       feature!
146 ***** chkstow now honours the $STOW_DIR environment variable
148       The stow script already honoured the $STOW_DIR environment
149       variable.  Now chkstow does too, for consistency.
151 ***** Stow now has a non-zero exit code if option parsing failed
153       Thanks to Brice Waegeneire for reporting this.
155 *** License upgraded from GPL version 2 to version 3
157     Copyright and license notices were also added to the headers of
158     various files in accordance with GNU guidelines.
160 *** Documentation fixes and enhancements
162 ***** Remove dependency on unmaintained texi2html
164       The dependency on the ancient and unmaintained texi2html for
165       building the single-page HTML version of the manual has been
166       removed, since it was difficult to get running on most distros
167       other than openSUSE.
169       Instead use the more modern "makeinfo --html --no-split" approach.
170       Rules have been kept for posterity in the Makefile for the old
171       approach and also an "in-between" approach based on texi2any;
172       however these are not triggered by default.  Run
174          make manual-single-html-all
176       to compare the three versions.
178 ***** Fixed naming of man page
180       The title of the generated man page was previously ending up as
181       something like:
183          IO::FILE=IO(0XA719C0)(1)
185       Thanks to @Corin-EU on GitHub highlighting this and proposing a
186       fix.
188 ***** Convert README and INSTALL to Markdown
190       They are now named README.md and INSTALL.md, and render nicely
191       when viewed via git hosting services which support Markdown.
193 ***** Update documentation to reflect more modern use cases
195       The README.md, stow(8) man page, and info manual have been updated
196       to de-emphasise the package management use, since these days almost
197       everyone prefers to use modern package managers such as rpm / dpkg
198       / Nix for (system-wide) package management.
200       To compensate, more popular modern use cases for Stow have been
201       added, such as management of dotfiles and software compiled in the
202       user's $HOME directory.
204 ***** Miscellaneous documentation fixes
206       - Various typos were fixed.
208       - The documentation for --verbose was updated to indicate that
209         verbosity levels now go up to 5.
211       - Erroneous glob examples in the --ignore documentation were fixed.
213       - The abbreviation "regex" was removed from the info manual for
214         consistency.
216       - INSTALL.md now also documents how to build directly from git.
218 *** Fixes for bugs, tests, and other technical debt
220 ***** Add Docker files for convenient testing across multiple Perl versions
222       This is the first release which has been tested across 5 different
223       versions of Perl prior to release!  The versions are:
225            perl-5.22.2
226            perl-5.20.3
227            perl-5.18.4
228            perl-5.16.3
229            perl-5.14.4
231       Thanks to Charles LeDoux for this!
233 ***** Set up continuous testing via Travis CI
235       This means that the test suite will be automatically run on any
236       pull requests submitted to GitHub, as well as "make distcheck"
237       and "./Build distcheck".
239 ***** Add Coveralls integration with GitHub
241       This means that test coverage analysis will be automatically be run
242       on any pull requests submitted to GitHub.
244 ***** Miscellaneous improvements to the test suite
246       These include proper testing of the distinct impact of ~/.stowrc
247       and .stowrc in the directory from which Stow is invoked.
249 ***** Fix for test suite on Cygwin
251       Thanks to Lucas Theisen for this fix!
253 ***** aclocal.m4 was updated using aclocal 1.15.1.
255 ***** Miscellaneous fixes to the build and distribution process
257 ***** Improve handling of directories with unusual names
259       Various fixes for corner cases where directories are named "0"
260       or begin with a space character, or where STOW_DIR is empty.
262       Thanks to Cuong Manh Le for highlighting some of the issues and
263       proposing fixes!
265 * Changes in version 2.2.2
267 *** @VERSION@ substitution was set up for the Stow::Util module.
269 * Changes in version 2.2.1
271 Version 2.2.1 was not released since it was rejected by pause.perl.org
272 due to Stow::Util missing $VERSION.
274 *** Small improvements to documentation
276 ***** The README has been revamped.
278 ***** Some index points have been added to the manual.
280 ***** Some typos were fixed.
282 ***** @VERSION@ substitution was fixed in the stow(8) man page.
284 *** Fix Perl warnings
286     Stow no longer emits "v-string in use/require non-portable" and
287     "Possible precedence issue with control flow operator" warnings
288     with newer Perl versions.  See https://savannah.gnu.org/bugs/?36478
289     and http://lists.gnu.org/archive/html/bug-stow/2014-06/msg00000.html
290     for full details.
292 *** Fix "Undefined subroutine &main::error" error
294     See https://rt.cpan.org/Public/Bug/Display.html?id=75349 for details.
296 *** Failed system calls now include error description
298     This should make errors easier to understand.
300 *** Default ignore list now ignores top-level README.*, LICENSE.*, and COPYING
302     These files are by definition specific to a given package, so if
303     they exist in the top-level directory, they should not be stowed.
305 *** Correctly handle the stow/target directories as non-canonical paths
307     Fix the case discovered by Hiroyuki Iwatsuki where stowing fails if
308     the stow / target directories are non-canonical paths.  For
309     example, on FreeBSD /home is a symlink pointing to 'usr/home', so
310     running with the stow directory as /home/user/local/stow and the
311     target directory as /home/user/local previously resulted in the
312     stow directory path being calculated as
313     ../../../usr/home/user/local/stow relative to the target.
315     See https://lists.gnu.org/archive/html/bug-stow/2013-04/msg00000.html for details.
317 *** Fix stowing of relative links when --no-folding is used.
319     With a tree like this:
321         .
322         |-- stow
323         |   `-- pkg
324         |       `-- lib
325         |           |-- itk-current -> itk4.0.0
326         |           `-- itk4.0.0
327         |               `-- libitk4.0.0.so
328         `-- target
329             `-- lib
330                 |-- itk4.0.0 -> ../../stow/pkg/lib/itk4.0.0
331                 `-- libfoo-1.2.3.so
333     stowing pkg with the --no-folding option resulted in itk-current
334     being "unpacked":
336         .
337         `-- target
338             `-- lib
339                 |-- itk-current
340                 |   `-- libitk4.0.0.so -> ../../../stow/pkg/lib/itk-current/libitk4.0.0.so
341                 |-- itk4.0.0
342                 |   `-- libitk4.0.0.so -> ../../../stow/pkg/lib/itk4.0.0/libitk4.0.0.so
343                 `-- libfoo-1.2.3.so
345     This commit fixes it so that it gets stowed as a symlink:
347       .
348       `-- target
349           `-- lib
350               ...
351               |-- itk-current -> ../../stow/pkg/lib/itk-current
352               ...
354     Thanks to Gabriele Balducci for reporting this problem:
356         https://lists.gnu.org/archive/html/help-stow/2014-09/msg00000.html
358 *** Internal code cleanups
360 ***** aclocal was updated.
362 ***** automake files were removed.
364 ***** Trailing whitespace was removed.
366 ***** Comments were added.
368 ***** Debug messages were improved.
370 * Changes in version 2.2.0
372 *** New --no-folding option
374     Disables folding of newly stowed directories when stowing, and
375     refolding of newly foldable directories when unstowing.
377 *** Remove -a option (--adopt still available)
379     As --adopt is the only option which allows stow to modify files, it
380     is considered potentially dangerous (especially for stow package
381     directories which are not managed by a version control system).
382     Therefore it seems prudent to require a bit more effort from the
383     user to enable this option, minimising the change of enabling it
384     via a typo.
386 *** Improve error message when stow package is not found.
388     The error message displayed a path to the missing stow package
389     which was relative to the target directory rather than the cwd,
390     which was confusing for the user.
392 *** Test suite improvements
394     The test suite has been tightened up slightly.
396 *** Documentation improvements
398     Various fixes and cosmetic improvements have been made in the manual.
400 *** Remove "There are no outstanding operations to perform" warning.
402 * Changes in version 2.1.3
404 *** New --adopt / -a option
406     This allows plain files in the target to be "adopted" into the
407     package being stowed.  See the manual has more details.
409 *** ./configure now checks for Perl modules required by the test suite.
411 * Changes in version 2.1.2
413   Many thanks to Stefano Lattarini for help with numerous autoconf and
414   automake issues which are addressed in this release.
416 *** Significantly improve the handling of --with-pmdir.
418 ***** Calculation of the default value for --with-pmdir is now done safely in Perl.
420       Previously non-POSIX-compliant shells could cause issues.
422 ***** The output of ./configure and make are now much more helpful.
424 ***** The Makefile will now check whether pmdir is in Perl's built-in @INC.
426       If not, it will insert a
428         use lib "...";
430       line into the generated stow script to ensure that it can always
431       locate the Perl modules without needing to manually set PERL5LIB.
433 ***** Updated INSTALL and HOWTO-RELEASE accordingly.
435 *** ./configure now aborts if Perl isn't found.
437 *** Ensured the ChangeLog is up-to-date when making a new distribution.
439 *** Fixed bug with `make clean' removing files which the user may not be able to rebuild.
441 * Changes in version 2.1.1
443 *** Fixed bug where ./configure --with-pmdir=X was ineffectual.
445 *** Calculated the correct default value for pmdir based on the local Perl installation.
447 *** Fixed some automake issues (thanks to Stefano Lattarini for spotting these!)
449 *** Improved various bits of documentation.
451 * Changes in version 2.1.0
453 *** Major refactoring of code into separate Stow and Stow::Util Perl modules.
455 *** Added support for ignore list files.
457 *** Added support for CPAN-style installation and distribution via Module::Build.
459 *** Introduced `make test' target and significantly tightened up test suite.
461 *** Very large number of code and documentation fixes (over 80 commits since version 2.0.1).
463 *** The '--conflicts' option has been removed.
465     Stow will always show conflicts if they are found during the scanning
466     phase.
468 *** Improved debugging output.
470 *** Converted man page to POD format.
472 *** Include PDF, and both split- and single-page HTML versions of manual in the distribution.
474 *** Fixed code style consistency issues.
476 *** Running configure from outside the source tree now works.
478 *** `make distcheck' now works.
480 * Changes in version 2.0.1
482 *** Defer operations until all potential conflicts have been assessed.
484     We do this by traversing the installation image(s) and recording the
485     actions that need to be performed.  Redundant actions are factored out,
486     e.g., we don't want to create a link that we will later remove in order to
487     create a directory.  Benefits of this approach:
489       1. Get to see _all_ the conflicts that are blocking an installation:
490          you don't have to deal with them one at a time.
491       2. No operations are be performed if _any_ conflicts are detected:
492          a failed stow will not leave you with a partially installed
493          package.
494       3. Minimises the set of operations that need to be performed.
495       4. Operations are executed as a batch which is much faster
496          This can be an advantage when upgrading packages on a live system
497          where you want to minimise the amount of time when the package is
498          unavailable.
500 *** The above fixes the false conflict problem mentioned in the info file.
502 *** It also fixes the two bugs mentioned in the man page.
504 *** Multiple stow directories will now cooperate in folding/unfolding.
506 *** Conflict messages are more uniform and informative.
508 *** Verbosity and tracing is more extensive and uniform.
510 *** Implemented option parsing via Getopt::Long.
512 *** Default command line arguments set via '.stowrc' and '~/.stowrc' files.
514     Contents of these files are parsed as though they occurred first on
515     the command line.
517 *** Support multiple actions per invocation.
519     In order for this to work, we had to add a new (optional) command line arg
520     (-S) to specify packages to stow.  For example, to update an installation
521     of emacs you can now do
523             stow -D emacs-21.3 -S emacs-21.4a
525     which will replace emacs-21.3 with emacs-21.4a.
526     You can mix and match any number of actions, e.g.,
528             stow -S p1 p2 -D p3 p4 -S p5 -R p6
530     will unstow p3, p4 and p6, then stow p1, p2, p5 and p6.
532 *** New (repeatable) command line arg: --ignore='<regex>'
534     This suppresses operating on a file matching the regex (suffix),
535     e.g.
537             --ignore='~' --ignore='\.#.*'
539     will ignore emacs and CVS backup files (suitable for ~/.stowrc file).
541     (I opted for Perl regular expressions because they are more
542     powerful and easier to implement).
544 *** New (repeatable) command line arg: --defer='<regex>'
546     This defers stowing a file matching the regex (prefix) if that file
547     is already stowed to a different package, e.g.,
549             --defer='man' --defer='info'
551     will cause stow to skip over pre-existing man and info pages.
553     Equivalently, you could use --defer='man|info' since the argument
554     is just a Perl regex.
556 *** New (repeatable) command line arg: --override='<regex>'
558     This forces a file matching the regex (prefix) to be stowed even if
559     the file is already stowed to a different package, e.g.
561             --override='man' --override='info'
563     will unstow any pre-existing man and info pages that would conflict
564     with the file we are trying to stow.
566     Equivalently, you could use --override='man|info' since the
567     argument is just a Perl regex.
569 *** The above gives the ability to manage packages with common content.
571     For example, man pages that are shared by a number of CPAN
572     packages.  Using multiple stow directories and .stowrc files can
573     also simplify things.  In our setup we use the standard
574     /usr/local/stow directory for packages to be installed in
575     /usr/local.  Since we install a large number of extra Perl packages
576     (currently about 300) we use an additional stow directory:
577     /usr/local/stow/perl-5.8.8-extras.  Both stow directories contain a
578     '.stow' file so that they collaborate appropriately.  I then use
579     the following .stowrc file in /usr/local/stow/perl-5.8.8-extras
581          --dir=/usr/local/stow/perl-5.8.8-extras
582          --target=/usr/local
583          --override=bin
584          --override=man
585          --ignore='perllocal\.pod'
586          --ignore='\.packlist'
587          --ignore='\.bs'
589     When I stow packages from there, they automatically override any
590     man pages and binaries that may already have been stowed by another
591     package or by the core perl-5.8.8 installation.  For example, if
592     you want to upgrade the Test-Simple package, you need to override
593     all the man pages that would have been installed by the core
594     package.  If you are upgrading CPAN, you will also have to override
595     the pre-existing cpan executable.
597 *** By default, search less aggressively for invalid symlinks when unstowing.
599     That is, we only search for bad symlinks in the directories
600     explicitly mentioned in the installation image, and do not dig down
601     into other subdirs.  Digging down into other directories can be
602     very time consuming if you have a really big tree (like with a
603     couple of Oracle installations lying around). In general the old
604     behaviour is only necessary when you have really stuffed up your
605     installation by deleting a directory that has already been stowed.
606     Doing that on a live system is somewhat crazy and hopefully rare.
607     We provide an option '-p|--compat' to enable the old behaviour for
608     those needing to patch up mistakes.
610 *** New chkstow utility for checking the integrity of the target directory.
612 *** Implement a test suite and support code.
614     This was built before implementing any of the extra features so I
615     could more easily check for equivalent functionality.  The initial
616     code base had to be refactored substantially to allow for testing.
617     The test suite is not exhaustive, but it should provide enough to
618     check for regressions.
620 * Changes in version 1.3.3
622 *** Now requires Perl 5.005 or later
624 *** Initially empty directories are not removed anymore
626 *** Removed buggy fastcwd (we use POSIX::getcwd instead)
628 *** Fixed bug when the common Parent of Target dir and Stow dir was "/"
630 *** Fixed bug when handling directories named "0"
632 *** Stow now only warns the user if a directory is unreadable during unstowing.
634 * Changes in version 1.3:
636 *** Added --restow option.
638 *** Fixed handling of slashes in package names.
640 *** Expanded configure-time search for Perl binary.
642 * Changes in version 1.2:
644 *** Dependency on `pwd' removed.
646 *** Perl 4 compatibility fixes.
648 *** Manual expanded even more.
650 * Changes in version 1.1:
652 *** Long and short options now accepted.
654 *** Manual expanded.
656 *** `make clean' removes stow (which is generated from stow.in).
658 * Initial public release (v1.0) of Stow.
660 * emacs local variables
661   Local Variables:
662   mode: org
663   org-export-with-toc: nil
664   org-export-with-author: nil
665   org-toc-odd-levels-only: t
666   org-blank-before-new-entry: ((heading . auto) (plain-list-item . auto))
667   End: