Grafted root commit from savannah git master:
[gnu-stow.git] / NEWS
blob1d663f8843485448c678fc89ef6893a499d32bf1
1 News file for Stow.
3 *  Changes in version 2.0.1:
4 ** Defer operations until all potential conflicts have been assessed.
6 We do this by traversing the installation image(s) and recording the
7 actions that need to be performed.  Redundant actions are factored out,
8 e.g., we don't want to create a link that we will later remove in order to
9 create a directory.  Benefits of this approach
11     1. Get to see _all_ the conflicts that are blocking an installation: 
12        you don't have to deal with them one at a time.
13     2. No operations are be performed if _any_ conflicts are detected:
14        a failed stow will not leave you with a partially installed 
15        package.
16     3. Minimises the set of operations that need to be performed.
17     4. Operations are executed as a batch which is much faster
18        This can be an advantage when upgrading packages on a live system
19        where you want to minimise the amount of time when the package is
20        unavailable.
22 ** The above fixes the false conflict problem mentioned in the info file. 
24 ** It also fixes the two bugs mentioned in the man page.
26 ** Multiple stow directories will now cooperate in folding/unfolding.
28 ** Conflict messages are more uniform and informative. 
30 ** Verbosity and tracing is more extensive and uniform.
32 ** Implemented option parsing via Getopt::Long.
34 ** Default command line arguments set via '.stowrc' and '~/.stowrc' files.
36 Contents of these files are parsed as though they occurred first on the
37 command line.
39 ** Support multiple actions per invocation.
41 In order for this to work, we had to add a new (optional) command line arg
42 (-S) to specify packages to stow.  For example, to update an installation
43 of emacs you can now do
45         stow -D emacs-21.3 -S emacs-21.4a
47 which will replace emacs-21.3 with emacs-21.4a.
48 You can mix and match any number of actions, e.g.,
50         stow -S p1 p2 -D p3 p4 -S p5 -R p6
52 will unstow p3, p4 and p6, then stow p1, p2, p5 and p6.
54 * New (repeatable) command line arg: --ignore='<regex>'
56 This suppresses operating on a file matching the regex (suffix), e.g.,
58         --ignore='~' --ignore='\.#.*'
60 will ignore emacs and CVS backup files (suitable for ~/.stowrc file).
62 (I opted for Perl regular expressions because they are more powerful and
63 easier to implement).
65 ** New (repeatable) command line arg: --defer='<regex>'
67 This defers stowing a file matching the regex (prefix) if that file is
68 already stowed to a different package, e.g.,
70         --defer='man' --defer='info'
72 will cause stow to skip over pre-existing man and info pages.
74 Equivalently, you could use --defer='man|info' since the argument is just
75 a Perl regex.
77 ** New (repeatable) command line arg: --override='<regex>'
79 This forces a file matching the regex (prefix) to be stowed even if the
80 file is already stowed to a different package, e.g.,
82         --override='man' --override='info'
84 will unstow any pre-existing man and info pages that would conflict with
85 the file we are trying to stow.
87 Equivalently, you could use --override='man|info' since the argument is
88 just a Perl regex.
90 ** The above gives the ability to manage packages with common content.
92 For example, man pages that are shared by a number of CPAN packages.
93 Using multiple stow directories and .stowrc files can also simplify
94 things.  In our setup we use the standard /usr/local/stow directory for
95 packages to be installed in /usr/local.  Since we install a large number
96 of extra Perl packages (currently about 300) we use an additional stow
97 directory: /usr/local/stow/perl-5.8.8-extras.  Both stow directories
98 contain a '.stow' file so that they collaborate appropriately.  I then use
99 the following .stowrc file in /usr/local/stow/perl-5.8.8-extras
100   
101         --dir=/usr/local/stow/perl-5.8.8-extras
102         --target=/usr/local
103         --override=bin
104         --override=man
105         --ignore='perllocal\.pod'
106         --ignore='\.packlist'
107         --ignore='\.bs'
109 When I stow packages from there, they automatically override any man pages
110 and binaries that may already have been stowed by another package or by
111 the core perl-5.8.8 installation.  For example, if you want to upgrade the
112 Test-Simple package, you need to override all the man pages that would
113 have been installed by the core package.  If you are upgrading CPAN, you
114 will also have to override the pre-existing cpan executable.
116 ** By default, search less aggressively for invalid symlinks when unstowing.
118 That is, we only search for bad symlinks in the directories explicitly
119 mentioned in the installation image, and do not dig down into other
120 subdirs.  Digging down into other directories can be very time consuming
121 if you have a really big tree (like with a couple of Oracle installations
122 lying around). In general the old behaviour is only necessary when you
123 have really stuffed up your installation by deleting a directory that has
124 already been stowed.  Doing that on a live system is somewhat crazy and
125 hopefully rare.  We provide an option '-p|--compat' to enable the old
126 behaviour for those needing to patch up mistakes.
128 ** Implement a test suite and support code.  
130 This was built before implementing any of the extra features so I could
131 more easily check for equivalent functionality.  The initial code base had
132 to be refactored substantially to allow for testing.  The test suite is
133 not exhaustive, but it should provide enough to check for regressions.
136 *  Changes in version 1.3.3:
137 **     Now requires Perl 5.005 or later
138 **     Initially empty directories are not removed anymore
139 **     Removed buggy fastcwd (we use POSIX::getcwd instead)
140 **     Fixed bug when the common Parent of Target dir and Stow dir was "/"
141 **     Fixed bug when handling directories named "0"
142 **     Stow now only warns the user if a directory is unreadable during unstowing.
144 *   Changes in version 1.3:
145 **     Added --restow option.
146 **     Fixed handling of slashes in package names.
147 **     Expanded configure-time search for Perl binary.
149 *   Changes in version 1.2:
150 **     Dependency on `pwd' removed.
151 **     Perl 4 compatibility fixes.
152 **     Manual expanded even more.
154 *   Changes in version 1.1:
155 **     Long and short options now accepted.
156 **     Manual expanded.
157 **     `make clean' removes stow (which is generated from stow.in).
159 *   Initial public release (v1.0) of Stow.