3 * Changes in version 2.4.1
5 *** Fix precedence warning with Perl 5.40.
7 Perl 5.40.0 extended the scope of the "Possible precedence issue
8 with control flow operator" warnings to include ternary operators,
9 which reintroduced this warning when running Stow on Perl >= 5.40.0.
10 This has now been fixed.
12 *** =--dotfiles= option now works correctly with ignore lists
14 If the =--dotfiles= option was enabled, files in the package such
15 as =dot-gitignore= would be translated to =.gitignore= prior to
16 stowing, and consequently ignored by the default ignore list.
17 However any file named =dot-*= in a package is obviously intended
18 to be stowed as a dot file, so should not be ignored.
20 To fix this, Stow now ignores based on the name in the package,
21 not the potentially translated name used for stowing, and
22 similarly for unstowing.
24 *** Use shell-like parsing for =.stowrc= arguments
26 If a file path or regex in =.stowrc= has a space, the option
27 previously broke because it would have been treated as two options
28 instead of one. Now it's possible to include options using
29 shell-like quoting, e.g.:
31 --target="$HOME/dir with space in/file with space in"
34 *** Make dependency on LaTeX optional
36 Previously, the installation instructions always built a PDF
37 version of the manual, which required having LaTeX installed.
38 However LaTeX is a large program which can be awkward to install,
39 so this has now been made optional, and by default the PDF manual
40 is not part of the build. It can still be built via =make pdf=,
41 and this is documented.
43 *** Fix Docker builds.
45 Fix the return error 100 that was happening when trying to run
46 the build script with docker.
48 *** Various maintainer tweaks
50 Further improved the release process and its documentation in
51 various minor ways. Perl 5.40 has been added to the test matrix.
53 * Changes in version 2.4.0
55 *** --dotfiles now works with directories
57 A long-standing bug preventing the --dotfiles option from working
58 correctly with directories has been fixed.
60 It should also works in combination with the --compat option.
62 *** Eliminated a spurious warning on unstowing
64 2.3.1 introduced a benign but annoying warning when unstowing
65 in certain circumstances. It looked like:
67 BUG in find_stowed_path? Absolute/relative mismatch between Stow dir X and path Y
69 This was caused by erroneous logic, and has now been fixed.
71 *** Unstowing logic has been improved in other cases
73 Several other improvements have been made internally to the
74 unstowing logic. These changes should all be either invisible
75 (except for changes to debug output) or improvements, but if you
76 encounter any unexpected behaviour, please report it as directed
79 *** Improved debug output
81 Extra output resulting from use of the -v / --verbose flag
82 now appears in a more logical and understandable way.
86 Users are not substantially affected by these changes.
88 ***** Added some more information from the web page to the README
90 ***** Made some improvements to the documentation
92 ***** Improve readability of source code
94 Quite a few extra details have been added in comments to clarify
95 how the code works. Many variable names have also been
96 improved. The comments of many Stow class methods have been
97 converted into Perl POD format.
99 ***** Added a =CONTRIBUTING.md= file
101 ***** Add a =watch= target to =Makefile=
103 =make watch= provides easy continual pre-processing during
104 development, which reduces the risk of debugging the wrong code.
106 ***** Removed texinfo.tex from the distribution
108 This eliminates existing and future bit-rot.
110 ***** Updated aclocal.m4 from 1.15.1 to 1.16.5
112 This mostly just updates copyright notices to 2021, and URLs to https.
114 ***** Replace broken gmane links with links to lists.gnu.org
116 [[https://lars.ingebrigtsen.no/2020/01/06/whatever-happened-to-news-gmane-org/][gmane has been dead for quite a while.]]
118 ***** Improve support for navigating / editing source via emacs
120 ******* Support source navigation in emacs via [[https://github.com/jacktasia/dumb-jump][dumb-jump]].
122 ******* Configure cperl-mode to match existing coding style.
124 *** Various maintainer tweaks
126 Further improved the release process and its documentation in
129 * Changes in version 2.3.1
131 *** Remove dependencies on Hash::Merge and Clone::Choose
133 stow 2.3.0 added external runtime dependencies on Hash::Merge and
134 Clone::Choose. Historically stow hasn't had runtime dependencies
135 other than Perl itself, which is a useful property if you're
136 managing the installation of Perl using stow; the bootstrapping
137 instructions in stow's manual would need updating to describe how
138 to install these two modules (and any dependencies they have now
139 or in the future) as well.
141 However, Hash::Merge is much more general than stow actually
142 needs, so replace the merge() call with a few lines of equivalent
143 code -- this avoids the external dependencies, and is clearer than
146 Many thanks to Adam Sampson for this patch!
148 https://lists.gnu.org/archive/html/bug-stow/2019-06/msg00001.html
150 *** Fix an issue with the test suite
152 t/cli.t was not testing with the right Perl executable, as
155 https://rt.cpan.org/Ticket/Display.html?id=129944
157 Thanks to Slaven Rezic for spotting this and reporting it!
159 *** Various maintainer tweaks
161 Improved the release process and its documentation in various
164 * Changes in version 2.3.0
166 *** New features / changes in behaviour
168 ***** New --dotfiles option
170 Enable special handling for "dotfiles" (files or folders whose name
171 begins with a period) in the package directory. If this option is
172 enabled, Stow will add a preprocessing step for each file or folder
173 whose name begins with "dot-", and replace the "dot-" prefix in the
174 name by a period ("."). This is useful when Stow is used to manage
175 collections of dotfiles, to avoid having a package directory full
178 For example, suppose we have a package containing two files,
179 stow/dot-bashrc and stow/dot-emacs.d/init.el. With this option,
180 Stow will create symlinks from .bashrc to stow/dot-bashrc and from
181 .emacs.d/init.el to stow/dot-emacs.d/init.el. Any other files,
182 whose name does not begin with "dot-", will be processed as usual.
184 Thanks to Joris Vankerschaver for this feature!
186 ***** Shell-like expansion in .stowrc files
188 For options within .stowrc files which describe file paths, "~" can
189 be included to expand to the current value of $HOME, and
190 environment variables can be referenced e.g. via "$FOO" or
191 "${FOO}". To prevent expansion, escape with a backslash.
193 Thanks a lot to Charles LeDoux for his diligent work on this
196 ***** chkstow now honours the $STOW_DIR environment variable
198 The stow script already honoured the $STOW_DIR environment
199 variable. Now chkstow does too, for consistency.
201 ***** Stow now has a non-zero exit code if option parsing failed
203 Thanks to Brice Waegeneire for reporting this.
205 *** License upgraded from GPL version 2 to version 3
207 Copyright and license notices were also added to the headers of
208 various files in accordance with GNU guidelines.
210 *** Documentation fixes and enhancements
212 ***** Remove dependency on unmaintained texi2html
214 The dependency on the ancient and unmaintained texi2html for
215 building the single-page HTML version of the manual has been
216 removed, since it was difficult to get running on most distros
219 Instead use the more modern "makeinfo --html --no-split" approach.
220 Rules have been kept for posterity in the Makefile for the old
221 approach and also an "in-between" approach based on texi2any;
222 however these are not triggered by default. Run
224 make manual-single-html-all
226 to compare the three versions.
228 ***** Fixed naming of man page
230 The title of the generated man page was previously ending up as
233 IO::FILE=IO(0XA719C0)(1)
235 Thanks to @Corin-EU on GitHub highlighting this and proposing a
238 ***** Convert README and INSTALL to Markdown
240 They are now named README.md and INSTALL.md, and render nicely
241 when viewed via git hosting services which support Markdown.
243 ***** Update documentation to reflect more modern use cases
245 The README.md, stow(8) man page, and info manual have been updated
246 to de-emphasise the package management use, since these days almost
247 everyone prefers to use modern package managers such as rpm / dpkg
248 / Nix for (system-wide) package management.
250 To compensate, more popular modern use cases for Stow have been
251 added, such as management of dotfiles and software compiled in the
252 user's $HOME directory.
254 ***** Miscellaneous documentation fixes
256 - Various typos were fixed.
258 - The documentation for --verbose was updated to indicate that
259 verbosity levels now go up to 5.
261 - Erroneous glob examples in the --ignore documentation were fixed.
263 - The abbreviation "regex" was removed from the info manual for
266 - INSTALL.md now also documents how to build directly from git.
268 *** Fixes for bugs, tests, and other technical debt
270 ***** Add Docker files for convenient testing across multiple Perl versions
272 This is the first release which has been tested across 5 different
273 versions of Perl prior to release! The versions are:
281 Thanks to Charles LeDoux for this!
283 ***** Set up continuous testing via Travis CI
285 This means that the test suite will be automatically run on any
286 pull requests submitted to GitHub, as well as "make distcheck"
287 and "./Build distcheck".
289 ***** Add Coveralls integration with GitHub
291 This means that test coverage analysis will be automatically be run
292 on any pull requests submitted to GitHub.
294 ***** Miscellaneous improvements to the test suite
296 These include proper testing of the distinct impact of ~/.stowrc
297 and .stowrc in the directory from which Stow is invoked.
299 ***** Fix for test suite on Cygwin
301 Thanks to Lucas Theisen for this fix!
303 ***** aclocal.m4 was updated using aclocal 1.15.1.
305 ***** Miscellaneous fixes to the build and distribution process
307 ***** Improve handling of directories with unusual names
309 Various fixes for corner cases where directories are named "0"
310 or begin with a space character, or where STOW_DIR is empty.
312 Thanks to Cuong Manh Le for highlighting some of the issues and
315 * Changes in version 2.2.2
317 *** @VERSION@ substitution was set up for the Stow::Util module.
319 * Changes in version 2.2.1
321 Version 2.2.1 was not released since it was rejected by pause.perl.org
322 due to Stow::Util missing $VERSION.
324 *** Small improvements to documentation
326 ***** The README has been revamped.
328 ***** Some index points have been added to the manual.
330 ***** Some typos were fixed.
332 ***** @VERSION@ substitution was fixed in the stow(8) man page.
334 *** Fix Perl warnings
336 Stow no longer emits "v-string in use/require non-portable" and
337 "Possible precedence issue with control flow operator" warnings
338 with newer Perl versions. See https://savannah.gnu.org/bugs/?36478
339 and http://lists.gnu.org/archive/html/bug-stow/2014-06/msg00000.html
342 *** Fix "Undefined subroutine &main::error" error
344 See https://rt.cpan.org/Public/Bug/Display.html?id=75349 for details.
346 *** Failed system calls now include error description
348 This should make errors easier to understand.
350 *** Default ignore list now ignores top-level README.*, LICENSE.*, and COPYING
352 These files are by definition specific to a given package, so if
353 they exist in the top-level directory, they should not be stowed.
355 *** Correctly handle the stow/target directories as non-canonical paths
357 Fix the case discovered by Hiroyuki Iwatsuki where stowing fails if
358 the stow / target directories are non-canonical paths. For
359 example, on FreeBSD /home is a symlink pointing to 'usr/home', so
360 running with the stow directory as /home/user/local/stow and the
361 target directory as /home/user/local previously resulted in the
362 stow directory path being calculated as
363 ../../../usr/home/user/local/stow relative to the target.
365 See https://lists.gnu.org/archive/html/bug-stow/2013-04/msg00000.html for details.
367 *** Fix stowing of relative links when --no-folding is used.
369 With a tree like this:
375 | |-- itk-current -> itk4.0.0
380 |-- itk4.0.0 -> ../../stow/pkg/lib/itk4.0.0
383 stowing pkg with the --no-folding option resulted in itk-current
390 | `-- libitk4.0.0.so -> ../../../stow/pkg/lib/itk-current/libitk4.0.0.so
392 | `-- libitk4.0.0.so -> ../../../stow/pkg/lib/itk4.0.0/libitk4.0.0.so
395 This commit fixes it so that it gets stowed as a symlink:
401 |-- itk-current -> ../../stow/pkg/lib/itk-current
404 Thanks to Gabriele Balducci for reporting this problem:
406 https://lists.gnu.org/archive/html/help-stow/2014-09/msg00000.html
408 *** Internal code cleanups
410 ***** aclocal was updated.
412 ***** automake files were removed.
414 ***** Trailing whitespace was removed.
416 ***** Comments were added.
418 ***** Debug messages were improved.
420 * Changes in version 2.2.0
422 *** New --no-folding option
424 Disables folding of newly stowed directories when stowing, and
425 refolding of newly foldable directories when unstowing.
427 *** Remove -a option (--adopt still available)
429 As --adopt is the only option which allows stow to modify files, it
430 is considered potentially dangerous (especially for stow package
431 directories which are not managed by a version control system).
432 Therefore it seems prudent to require a bit more effort from the
433 user to enable this option, minimising the change of enabling it
436 *** Improve error message when stow package is not found.
438 The error message displayed a path to the missing stow package
439 which was relative to the target directory rather than the cwd,
440 which was confusing for the user.
442 *** Test suite improvements
444 The test suite has been tightened up slightly.
446 *** Documentation improvements
448 Various fixes and cosmetic improvements have been made in the manual.
450 *** Remove "There are no outstanding operations to perform" warning.
452 * Changes in version 2.1.3
454 *** New --adopt / -a option
456 This allows plain files in the target to be "adopted" into the
457 package being stowed. See the manual has more details.
459 *** ./configure now checks for Perl modules required by the test suite.
461 * Changes in version 2.1.2
463 Many thanks to Stefano Lattarini for help with numerous autoconf and
464 automake issues which are addressed in this release.
466 *** Significantly improve the handling of --with-pmdir.
468 ***** Calculation of the default value for --with-pmdir is now done safely in Perl.
470 Previously non-POSIX-compliant shells could cause issues.
472 ***** The output of ./configure and make are now much more helpful.
474 ***** The Makefile will now check whether pmdir is in Perl's built-in @INC.
476 If not, it will insert a
480 line into the generated stow script to ensure that it can always
481 locate the Perl modules without needing to manually set PERL5LIB.
483 ***** Updated INSTALL and HOWTO-RELEASE accordingly.
485 *** ./configure now aborts if Perl isn't found.
487 *** Ensured the ChangeLog is up-to-date when making a new distribution.
489 *** Fixed bug with `make clean' removing files which the user may not be able to rebuild.
491 * Changes in version 2.1.1
493 *** Fixed bug where ./configure --with-pmdir=X was ineffectual.
495 *** Calculated the correct default value for pmdir based on the local Perl installation.
497 *** Fixed some automake issues (thanks to Stefano Lattarini for spotting these!)
499 *** Improved various bits of documentation.
501 * Changes in version 2.1.0
503 *** Major refactoring of code into separate Stow and Stow::Util Perl modules.
505 *** Added support for ignore list files.
507 *** Added support for CPAN-style installation and distribution via Module::Build.
509 *** Introduced `make test' target and significantly tightened up test suite.
511 *** Very large number of code and documentation fixes (over 80 commits since version 2.0.1).
513 *** The '--conflicts' option has been removed.
515 Stow will always show conflicts if they are found during the scanning
518 *** Improved debugging output.
520 *** Converted man page to POD format.
522 *** Include PDF, and both split- and single-page HTML versions of manual in the distribution.
524 *** Fixed code style consistency issues.
526 *** Running configure from outside the source tree now works.
528 *** `make distcheck' now works.
530 * Changes in version 2.0.1
532 *** Defer operations until all potential conflicts have been assessed.
534 We do this by traversing the installation image(s) and recording the
535 actions that need to be performed. Redundant actions are factored out,
536 e.g., we don't want to create a link that we will later remove in order to
537 create a directory. Benefits of this approach:
539 1. Get to see _all_ the conflicts that are blocking an installation:
540 you don't have to deal with them one at a time.
541 2. No operations are be performed if _any_ conflicts are detected:
542 a failed stow will not leave you with a partially installed
544 3. Minimises the set of operations that need to be performed.
545 4. Operations are executed as a batch which is much faster
546 This can be an advantage when upgrading packages on a live system
547 where you want to minimise the amount of time when the package is
550 *** The above fixes the false conflict problem mentioned in the info file.
552 *** It also fixes the two bugs mentioned in the man page.
554 *** Multiple stow directories will now cooperate in folding/unfolding.
556 *** Conflict messages are more uniform and informative.
558 *** Verbosity and tracing is more extensive and uniform.
560 *** Implemented option parsing via Getopt::Long.
562 *** Default command line arguments set via '.stowrc' and '~/.stowrc' files.
564 Contents of these files are parsed as though they occurred first on
567 *** Support multiple actions per invocation.
569 In order for this to work, we had to add a new (optional) command line arg
570 (-S) to specify packages to stow. For example, to update an installation
571 of emacs you can now do
573 stow -D emacs-21.3 -S emacs-21.4a
575 which will replace emacs-21.3 with emacs-21.4a.
576 You can mix and match any number of actions, e.g.,
578 stow -S p1 p2 -D p3 p4 -S p5 -R p6
580 will unstow p3, p4 and p6, then stow p1, p2, p5 and p6.
582 *** New (repeatable) command line arg: --ignore='<regex>'
584 This suppresses operating on a file matching the regex (suffix),
587 --ignore='~' --ignore='\.#.*'
589 will ignore emacs and CVS backup files (suitable for ~/.stowrc file).
591 (I opted for Perl regular expressions because they are more
592 powerful and easier to implement).
594 *** New (repeatable) command line arg: --defer='<regex>'
596 This defers stowing a file matching the regex (prefix) if that file
597 is already stowed to a different package, e.g.,
599 --defer='man' --defer='info'
601 will cause stow to skip over pre-existing man and info pages.
603 Equivalently, you could use --defer='man|info' since the argument
604 is just a Perl regex.
606 *** New (repeatable) command line arg: --override='<regex>'
608 This forces a file matching the regex (prefix) to be stowed even if
609 the file is already stowed to a different package, e.g.
611 --override='man' --override='info'
613 will unstow any pre-existing man and info pages that would conflict
614 with the file we are trying to stow.
616 Equivalently, you could use --override='man|info' since the
617 argument is just a Perl regex.
619 *** The above gives the ability to manage packages with common content.
621 For example, man pages that are shared by a number of CPAN
622 packages. Using multiple stow directories and .stowrc files can
623 also simplify things. In our setup we use the standard
624 /usr/local/stow directory for packages to be installed in
625 /usr/local. Since we install a large number of extra Perl packages
626 (currently about 300) we use an additional stow directory:
627 /usr/local/stow/perl-5.8.8-extras. Both stow directories contain a
628 '.stow' file so that they collaborate appropriately. I then use
629 the following .stowrc file in /usr/local/stow/perl-5.8.8-extras
631 --dir=/usr/local/stow/perl-5.8.8-extras
635 --ignore='perllocal\.pod'
636 --ignore='\.packlist'
639 When I stow packages from there, they automatically override any
640 man pages and binaries that may already have been stowed by another
641 package or by the core perl-5.8.8 installation. For example, if
642 you want to upgrade the Test-Simple package, you need to override
643 all the man pages that would have been installed by the core
644 package. If you are upgrading CPAN, you will also have to override
645 the pre-existing cpan executable.
647 *** By default, search less aggressively for invalid symlinks when unstowing.
649 That is, we only search for bad symlinks in the directories
650 explicitly mentioned in the installation image, and do not dig down
651 into other subdirs. Digging down into other directories can be
652 very time consuming if you have a really big tree (like with a
653 couple of Oracle installations lying around). In general the old
654 behaviour is only necessary when you have really stuffed up your
655 installation by deleting a directory that has already been stowed.
656 Doing that on a live system is somewhat crazy and hopefully rare.
657 We provide an option '-p|--compat' to enable the old behaviour for
658 those needing to patch up mistakes.
660 *** New chkstow utility for checking the integrity of the target directory.
662 *** Implement a test suite and support code.
664 This was built before implementing any of the extra features so I
665 could more easily check for equivalent functionality. The initial
666 code base had to be refactored substantially to allow for testing.
667 The test suite is not exhaustive, but it should provide enough to
668 check for regressions.
670 * Changes in version 1.3.3
672 *** Now requires Perl 5.005 or later
674 *** Initially empty directories are not removed anymore
676 *** Removed buggy fastcwd (we use POSIX::getcwd instead)
678 *** Fixed bug when the common Parent of Target dir and Stow dir was "/"
680 *** Fixed bug when handling directories named "0"
682 *** Stow now only warns the user if a directory is unreadable during unstowing.
684 * Changes in version 1.3:
686 *** Added --restow option.
688 *** Fixed handling of slashes in package names.
690 *** Expanded configure-time search for Perl binary.
692 * Changes in version 1.2:
694 *** Dependency on `pwd' removed.
696 *** Perl 4 compatibility fixes.
698 *** Manual expanded even more.
700 * Changes in version 1.1:
702 *** Long and short options now accepted.
706 *** `make clean' removes stow (which is generated from stow.in).
708 * Initial public release (v1.0) of Stow.
710 * emacs local variables
713 org-export-with-toc: nil
714 org-export-with-author: nil
715 org-toc-odd-levels-only: t
716 org-blank-before-new-entry: ((heading . auto) (plain-list-item . auto))