diff --git a/.stow-rename b/.stow-rename
deleted file mode 100644
index 8431b0a..0000000
--- a/.stow-rename
+++ /dev/null
@@ -1 +0,0 @@
-local => .local
diff --git a/local/bin/chkstow b/dot-local/bin/chkstow
similarity index 73%
rename from local/bin/chkstow
rename to dot-local/bin/chkstow
index b3a55b0..2d1df26 100755
--- a/local/bin/chkstow
+++ b/dot-local/bin/chkstow
@@ -1,4 +1,19 @@
-#!/usr/bin/perl
+#!/usr/local/bin/perl
+#
+# This file is part of GNU Stow.
+#
+# GNU Stow is free software: you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# GNU Stow is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see https://www.gnu.org/licenses/.
use strict;
use warnings;
@@ -8,7 +23,7 @@ require 5.006_001;
use File::Find;
use Getopt::Long;
-my $DEFAULT_TARGET = '/usr/local/';
+my $DEFAULT_TARGET = $ENV{STOW_DIR} || '/usr/local/';
our $Wanted = \&bad_links;
our %Package = ();
@@ -93,7 +108,7 @@ sub aliens {
!-l && !-d && print "Unstowed file: $File::Find::name\n";
}
-# just list the packages in the the target directory
+# just list the packages in the target directory
# FIXME: what if the stow dir is not called 'stow'?
sub list {
if (-l) {
diff --git a/local/bin/stow b/dot-local/bin/stow
similarity index 67%
rename from local/bin/stow
rename to dot-local/bin/stow
index 7acad8b..a7e9c7a 100755
--- a/local/bin/stow
+++ b/dot-local/bin/stow
@@ -1,27 +1,29 @@
-#!/usr/bin/perl
+#!/usr/local/bin/perl
-# GNU Stow - manage the installation of multiple software packages
+# GNU Stow - manage farms of symbolic links
# Copyright (C) 1993, 1994, 1995, 1996 by Bob Glickstein
# Copyright (C) 2000, 2001 Guillaume Morin
# Copyright (C) 2007 Kahlil Hodgson
# Copyright (C) 2011 Adam Spiers
#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
+# This file is part of GNU Stow.
+#
+# GNU Stow is free software: you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
-# This program is distributed in the hope that it will be useful, but
+# GNU Stow is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
-# along with this program; if not, see .
+# along with this program. If not, see https://www.gnu.org/licenses/.
=head1 NAME
-stow - software package installation manager
+stow - manage farms of symbolic links
=head1 SYNOPSIS
@@ -29,33 +31,34 @@ stow [ options ] package ...
=head1 DESCRIPTION
-This manual page describes GNU Stow 2.2.2, a program for managing
-the installation of software packages. This is not the definitive
-documentation for stow; for that, see the info manual.
+This manual page describes GNU Stow 2.3.2-fixbug56727. This is not the
+definitive documentation for Stow; for that, see the accompanying info
+manual, e.g. by typing C.
-Stow is a tool for managing the installation of multiple software
-packages in the same run-time directory tree. One historical
-difficulty of this task has been the need to administer, upgrade,
-install, and remove files in independent packages without confusing
-them with other files sharing the same filesystem space. For instance,
-it is common to install Perl and Emacs in F. When one
-does so, one winds up (as of Perl 4.036 and Emacs 19.22) with the
-following files in F: F; F;
-F; F; F; F; and F. Now
-suppose it's time to uninstall Perl. Which man pages get removed?
-Obviously F is one of them, but it should not be the
-administrator's responsibility to memorize the ownership of individual
-files by separate packages.
+Stow is a symlink farm manager which takes distinct sets of software
+and/or data located in separate directories on the filesystem, and
+makes them all appear to be installed in a single directory tree.
-The approach used by Stow is to install each package into its own
-tree, then use symbolic links to make it appear as though the files
-are installed in the common tree. Administration can be performed in
-the package's private tree in isolation from clutter from other
-packages. Stow can then be used to update the symbolic links. The
-structure of each private tree should reflect the desired structure in
-the common tree; i.e. (in the typical case) there should be a F
-directory containing executables, a F directory containing
-section 1 man pages, and so on.
+Originally Stow was born to address the need to administer, upgrade,
+install, and remove files in independent software packages without
+confusing them with other files sharing the same file system space.
+For instance, many years ago it used to be common to compile programs
+such as Perl and Emacs from source. By using Stow, F
+could contain symlinks to files within F,
+F etc., and likewise recursively for any
+other subdirectories such as F<.../share>, F<.../man>, and so on.
+
+While this is useful for keeping track of system-wide and per-user
+installations of software built from source, in more recent times
+software packages are often managed by more sophisticated package
+management software such as rpm, dpkg, and Nix / GNU Guix, or
+language-native package managers such as Ruby's gem, Python's pip,
+Javascript's npm, and so on.
+
+However Stow is still used not only for software package management,
+but also for other purposes, such as facilitating a more controlled
+approach to management of configuration files in the user's home
+directory, especially when coupled with version control systems.
Stow was inspired by Carnegie Mellon's Depot program, but is
substantially simpler and safer. Whereas Depot required database files
@@ -66,6 +69,9 @@ will never delete any files, directories, or links that appear in a
Stow directory (e.g., F), so it's always
possible to rebuild the target tree (e.g., F).
+Stow is implemented as a combination of a Perl script providing a CLI
+interface, and a backend Perl module which does most of the work.
+
=head1 TERMINOLOGY
A "package" is a related collection of files and directories that
@@ -129,6 +135,8 @@ C<-D>).
=item --no
+=item --simulate
+
Do not perform any operations that modify the filesystem; merely show
what would happen.
@@ -152,7 +160,7 @@ directory.
=item --verbose[=N]
Send verbose output to standard error describing what Stow is
-doing. Verbosity levels are 0, 1, 2, 3, and 4; 0 is the default.
+doing. Verbosity levels are from 0 to 5; 0 is the default.
Using C<-v> or C<--verbose> increases the verbosity by one; using
`--verbose=N' sets it to N.
@@ -214,6 +222,22 @@ stowed to another package.
Force stowing files beginning with this Perl regex if the file is
already stowed to another package.
+=item --dotfiles
+
+Enable special handling for "dotfiles" (files or folders whose name
+begins with a period) in the package directory. If this option is
+enabled, Stow will add a preprocessing step for each file or folder
+whose name begins with "dot-", and replace the "dot-" prefix in the
+name by a period (.). This is useful when Stow is used to manage
+collections of dotfiles, to avoid having a package directory full of
+hidden files.
+
+For example, suppose we have a package containing two files,
+F and F. With this option,
+Stow will create symlinks from F<.bashrc> to F and
+from F<.emacs.d/init.el> to F. Any other
+files, whose name does not begin with "dot-", will be processed as usual.
+
=item -V
=item --version
@@ -323,6 +347,28 @@ Stow will re-fold the tree by removing the symlinks to the surviving
package, removing the directory, then linking the directory back to
the surviving package.
+=head1 RESOURCE FILES
+
+F searches for default command line options at F<.stowrc> (current
+directory) and F<~/.stowrc> (home directory) in that order. If both
+locations are present, the files are effectively appended together.
+
+The effect of options in the resource file is similar to simply prepending
+the options to the command line. For options that provide a single value,
+such as F<--target> or F<--dir>, the command line option will overwrite any
+options in the resource file. For options that can be given more than once,
+F<--ignore> for example, command line options and resource options are
+appended together.
+
+Environment variables and the tilde character (F<~>) will be expanded for
+options that take a file path.
+
+The options F<-D>, F<-R>, F<-S>, and any packages listed in the resource
+file are ignored.
+
+See the info manual for more information on how stow handles resource
+file.
+
=head1 SEE ALSO
The full documentation for F is maintained as a Texinfo manual.
@@ -412,11 +458,10 @@ use warnings;
require 5.006_001;
use POSIX qw(getcwd);
-use Getopt::Long;
+use Getopt::Long qw(GetOptionsFromArray);
+use Scalar::Util qw(reftype);
-use Cwd qw(abs_path);
-use File::Basename qw(dirname);
-use lib dirname(dirname(abs_path($0))) . '/share/perl';
+use FindBin; use lib "$FindBin::Bin/../lib/perl";
use Stow;
use Stow::Util qw(parent error);
@@ -463,27 +508,75 @@ sub main {
#===== SUBROUTINE ===========================================================
# Name : process_options()
-# Purpose : parse command line options
+# Purpose : Parse and process command line and .stowrc file options
# Parameters: none
# Returns : (\%options, \@pkgs_to_unstow, \@pkgs_to_stow)
-# Throws : a fatal error if a bad command line option is given
+# Throws : a fatal error if a bad option is given
# Comments : checks @ARGV for valid package names
#============================================================================
sub process_options {
+ # Get cli options.
+ my ($cli_options,
+ $pkgs_to_unstow,
+ $pkgs_to_stow) = parse_options(@ARGV);
+
+ # Get the .stowrc options.
+ # Note that rc_pkgs_to_unstow and rc_pkgs_to_stow are ignored.
+ my ($rc_options,
+ $rc_pkgs_to_unstow,
+ $rc_pkgs_to_stow) = get_config_file_options();
+
+ # Merge .stowrc and command line options.
+ # Preference is given to cli options.
+ my %options = %$rc_options;
+ foreach my $option (keys %$cli_options) {
+ my $rc_value = $rc_options->{$option};
+ my $cli_value = $cli_options->{$option};
+ my $type = reftype($cli_value);
+
+ if (defined $type && $type eq 'ARRAY' && defined $rc_value) {
+ # rc options come first in merged arrays.
+ $options{$option} = [@{$rc_value}, @{$cli_value}];
+ } else {
+ # cli options overwrite conflicting rc options.
+ $options{$option} = $cli_value;
+ }
+ }
+
+ # Run checks on the merged options.
+ sanitize_path_options(\%options);
+ check_packages($pkgs_to_unstow, $pkgs_to_stow);
+
+ # Return merged and processed options.
+ return (\%options, $pkgs_to_unstow, $pkgs_to_stow);
+}
+
+#===== SUBROUTINE ===========================================================
+# Name : parse_options()
+# Purpose : parse command line options
+# Parameters: @arg_array => array of options to parse
+# Example: parse_options(@ARGV)
+# Returns : (\%options, \@pkgs_to_unstow, \@pkgs_to_stow)
+# Throws : a fatal error if a bad command line option is given
+# Comments : Used for parsing both command line options and rc file. Used
+# for parsing only. Sanity checks and post-processing belong in
+# process_options().
+#============================================================================
+sub parse_options {
my %options = ();
my @pkgs_to_unstow = ();
my @pkgs_to_stow = ();
my $action = 'stow';
- unshift @ARGV, get_config_file_options();
- #$,="\n"; print @ARGV,"\n"; # for debugging rc file
+ #$,="\n"; print @_,"\n"; # for debugging rc file
Getopt::Long::config('no_ignore_case', 'bundling', 'permute');
- GetOptions(
+ GetOptionsFromArray(
+ \@_,
\%options,
'verbose|v:+', 'help|h', 'simulate|n|no',
'version|V', 'compat|p', 'dir|d=s', 'target|t=s',
- 'adopt', 'no-folding',
+ 'adopt', 'no-folding', 'dotfiles',
# clean and pre-compile any regex's at parse time
'ignore=s' =>
@@ -525,31 +618,27 @@ sub process_options {
push @pkgs_to_stow, $_[0];
}
},
- ) or usage();
+ ) or usage('');
usage() if $options{help};
version() if $options{version};
- sanitize_path_options(\%options);
- check_packages(\@pkgs_to_unstow, \@pkgs_to_stow);
-
return (\%options, \@pkgs_to_unstow, \@pkgs_to_stow);
}
sub sanitize_path_options {
my ($options) = @_;
- if (exists $options->{dir}) {
- $options->{dir} =~ s/\A +//;
- $options->{dir} =~ s/ +\z//;
- }
- else {
- $options->{dir} = exists $ENV{STOW_DIR} ? $ENV{STOW_DIR} : getcwd();
+ unless (exists $options->{dir}) {
+ $options->{dir} = length $ENV{STOW_DIR} ? $ENV{STOW_DIR} : getcwd();
}
+ usage("--dir value '$options->{dir}' is not a valid directory")
+ unless -d $options->{dir};
+
if (exists $options->{target}) {
- $options->{target} =~ s/\A +//;
- $options->{target} =~ s/ +\z//;
+ usage("--target value '$options->{target}' is not a valid directory")
+ unless -d $options->{target};
}
else {
$options->{target} = parent($options->{dir}) || '.';
@@ -572,22 +661,25 @@ sub check_packages {
}
}
-
#===== SUBROUTINE ============================================================
# Name : get_config_file_options()
# Purpose : search for default settings in any .stowrc files
# Parameters: none
-# Returns : a list of default options
-# Throws : no exceptions
-# Comments : prepends the contents of '~/.stowrc' and '.stowrc' to the command
-# : line so they get parsed just like normal arguments. (This was
-# : hacked in so that Emil and I could set different preferences).
+# Returns : (\%rc_options, \@rc_pkgs_to_unstow, \@rc_pkgs_to_stow)
+# Throws : a fatal error if a bad option is given
+# Comments : Parses the contents of '~/.stowrc' and '.stowrc' with the same
+# parser as the command line options. Additionally expands any
+# environment variables or ~ character in --target or --dir
+# options.
#=============================================================================
sub get_config_file_options {
my @defaults = ();
- for my $file ("$ENV{HOME}/.stowrc", '.stowrc') {
+ my @dirlist = ('.stowrc');
+ if (defined($ENV{HOME})) {
+ unshift(@dirlist, "$ENV{HOME}/.stowrc");
+ }
+ for my $file (@dirlist) {
if (-r $file) {
- warn "Loading defaults from $file\n";
open my $FILE, '<', $file
or die "Could not open $file for reading\n";
while (my $line = <$FILE>){
@@ -597,9 +689,102 @@ sub get_config_file_options {
close $FILE or die "Could not close open file: $file\n";
}
}
- return @defaults;
+
+ # Parse the options
+ my ($rc_options, $rc_pkgs_to_unstow, $rc_pkgs_to_stow) = parse_options(@defaults);
+
+ # Expand environment variables and glob characters.
+ if (exists $rc_options->{target}) {
+ $rc_options->{target} =
+ expand_filepath($rc_options->{target}, '--target option');
+ }
+ if (exists $rc_options->{dir}) {
+ $rc_options->{dir} =
+ expand_filepath($rc_options->{dir}, '--dir option');
+ }
+
+ return ($rc_options, $rc_pkgs_to_unstow, $rc_pkgs_to_stow);
}
+#===== SUBROUTINE ============================================================
+# Name : expand_filepath()
+# Purpose : Handles expansions that need to be applied to
+# : file paths. Currently expands environment
+# : variables and the tilde.
+# Parameters: $path => string to perform expansion on.
+# : $source => where the string came from
+# Returns : String with replacements performed.
+# Throws : n/a
+# Comments : n/a
+#=============================================================================
+sub expand_filepath {
+ my ($path, $source) = @_;
+
+ $path = expand_environment($path, $source);
+ $path = expand_tilde($path);
+
+ return $path;
+}
+
+#===== SUBROUTINE ============================================================
+# Name : expand_environment()
+# Purpose : Expands evironment variables.
+# Parameters: $path => string to perform expansion on.
+# : $source => where the string came from
+# Returns : String with replacements performed.
+# Throws : n/a
+# Comments : Variable replacement mostly based on SO answer
+# : http://stackoverflow.com/a/24675093/558820
+#=============================================================================
+sub expand_environment {
+ my ($path, $source) = @_;
+ # Replace non-escaped $VAR and ${VAR} with $ENV{VAR}
+ # If $ENV{VAR} does not exist, perl will raise a warning
+ # and then happily treat it as an empty string.
+ $path =~ s/(? string to perform expansion on.
+# Returns : String with replacements performed.
+# Throws : n/a
+# Comments : http://docstore.mik.ua/orelly/perl4/cook/ch07_04.htm
+#=============================================================================
+sub expand_tilde {
+ my ($path) = @_;
+ # Replace tilde with home path.
+ $path =~ s{ ^ ~ ( [^/]* ) }
+ { $1
+ ? (getpwnam($1))[7]
+ : ( $ENV{HOME} || $ENV{LOGDIR}
+ || (getpwuid($<))[7]
+ )
+ }ex;
+ # Replace espaced tilde with regular tilde.
+ $path =~ s/\\~/~/g;
+ return $path
+}
+
+
#===== SUBROUTINE ===========================================================
# Name : usage()
# Purpose : print program usage message and exit
@@ -612,7 +797,7 @@ sub usage {
my ($msg) = @_;
if ($msg) {
- print "$ProgramName: $msg\n\n";
+ warn "$ProgramName: $msg\n\n";
}
print <<"EOT";
@@ -638,10 +823,12 @@ OPTIONS:
if the file is already stowed to another package
--adopt (Use with care!) Import existing files into stow package
from target. Please read docs before using.
+ --dotfiles Enables special handling for dotfiles that are
+ Stow packages that start with "dot-" and not "."
-p, --compat Use legacy algorithm for unstowing
-n, --no, --simulate Do not actually make any filesystem changes
- -v, --verbose[=N] Increase verbosity (levels are 0,1,2,3;
+ -v, --verbose[=N] Increase verbosity (levels are from 0 to 5;
-v or --verbose adds 1; --verbose=N sets level)
-V, --version Show stow version number
-h, --help Show this help
diff --git a/local/share/perl/Stow.pm b/dot-local/lib/perl/Stow.pm
similarity index 92%
rename from local/share/perl/Stow.pm
rename to dot-local/lib/perl/Stow.pm
index b7ee6ad..96bfd1a 100644
--- a/local/share/perl/Stow.pm
+++ b/dot-local/lib/perl/Stow.pm
@@ -1,10 +1,25 @@
#!/usr/bin/perl
+#
+# This file is part of GNU Stow.
+#
+# GNU Stow is free software: you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# GNU Stow is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see https://www.gnu.org/licenses/.
package Stow;
=head1 NAME
-Stow - manage the installation of multiple software packages
+Stow - manage farms of symbolic links
=head1 SYNOPSIS
@@ -41,15 +56,13 @@ use File::Spec;
use POSIX qw(getcwd);
use Stow::Util qw(set_debug_level debug error set_test_mode
- join_paths restore_cwd canon_path parent);
+ join_paths restore_cwd canon_path parent adjust_dotfile);
our $ProgramName = 'stow';
-our $VERSION = '2.2.2';
+our $VERSION = '2.3.2-fixbug56727';
our $LOCAL_IGNORE_FILE = '.stow-local-ignore';
our $GLOBAL_IGNORE_FILE = '.stow-global-ignore';
-our $NO_FOLDING_FILE = '.stow-no-folding';
-our $RENAME_FILE = '.stow-rename';
our @default_global_ignore_regexps =
__PACKAGE__->get_default_global_ignore_regexps();
@@ -62,6 +75,7 @@ our %DEFAULT_OPTIONS = (
paranoid => 0,
compat => 0,
test_mode => 0,
+ dotfiles => 0,
adopt => 0,
'no-folding' => 0,
ignore => [],
@@ -207,9 +221,6 @@ sub init_state {
# Store command line packages to unstow (-D and -R)
$self->{pkgs_to_delete} = [];
- # Store .stow-rename info indexed by package name.
- $self->{pkg_renames} = {};
-
# The following structures are used by the abstractions that allow us to
# defer operating on the filesystem until after all potential conflicts have
# been assessed.
@@ -273,6 +284,7 @@ sub plan_unstow {
$self->{stow_path},
$package,
'.',
+ $path,
);
}
debug(2, "Planning unstow of package $package... done");
@@ -305,6 +317,7 @@ sub plan_stow {
$package,
'.',
$path, # source from target
+ 0,
);
debug(2, "Planning stow of package $package... done");
$self->{action_count}++;
@@ -343,7 +356,9 @@ sub within_target_do {
# Parameters: $stow_path => relative path from current (i.e. target) directory
# : to the stow dir containing the package to be stowed
# : $package => the package whose contents are being stowed
-# : $target => subpath relative to package and target directories
+# : $target => subpath relative to package directory which needs
+# : stowing as a symlink at subpath relative to target
+# : directory.
# : $source => relative path from the (sub)dir of target
# : to symlink source
# Returns : n/a
@@ -354,14 +369,12 @@ sub within_target_do {
#============================================================================
sub stow_contents {
my $self = shift;
- my ($stow_path, $package, $target, $source) = @_;
-
- $target = $source;
- $target =~ s/^(\.\.\/)*\Q$stow_path\E\/\Q$package\E\/?//;
- $target = '.' unless $target;
-
- my $path = join_paths($stow_path, $package, $target);
+ my ($stow_path, $package, $target, $source, $level) = @_;
+ # Remove leading $level times .. from $source
+ my $n = 0;
+ my $path = join '/', map { (++$n <= $level) ? ( ) : $_ } (split m{/+}, $source);
+
return if $self->should_skip_target_which_is_stow_dir($target);
my $cwd = getcwd();
@@ -370,11 +383,10 @@ sub stow_contents {
debug(3, $msg);
debug(4, " => $source");
- my $dest = $self->renamed($package, $target);
error("stow_contents() called with non-directory path: $path")
unless -d $path;
- error("stow_contents() called with non-directory target: $dest")
- unless $self->is_a_node($dest);
+ error("stow_contents() called with non-directory target: $target")
+ unless $self->is_a_node($target);
opendir my $DIR, $path
or error("cannot read directory: $path ($!)");
@@ -387,11 +399,19 @@ sub stow_contents {
next NODE if $node eq '..';
my $node_target = join_paths($target, $node);
next NODE if $self->ignore($stow_path, $package, $node_target);
+
+ if ($self->{dotfiles}) {
+ my $adj_node_target = adjust_dotfile($node_target);
+ debug(4, " Adjusting: $node_target => $adj_node_target");
+ $node_target = $adj_node_target;
+ }
+
$self->stow_node(
$stow_path,
$package,
$node_target, # target
join_paths($source, $node), # source
+ $level
);
}
}
@@ -402,7 +422,9 @@ sub stow_contents {
# Parameters: $stow_path => relative path from current (i.e. target) directory
# : to the stow dir containing the node to be stowed
# : $package => the package containing the node being stowed
-# : $target => subpath relative to package and target directories
+# : $target => subpath relative to package directory of node which
+# : needs stowing as a symlink at subpath relative to
+# : target directory.
# : $source => relative path to symlink source from the dir of target
# Returns : n/a
# Throws : fatal exception if a conflict arises
@@ -412,7 +434,7 @@ sub stow_contents {
#============================================================================
sub stow_node {
my $self = shift;
- my ($stow_path, $package, $target, $source) = @_;
+ my ($stow_path, $package, $target, $source, $level) = @_;
my $path = join_paths($stow_path, $package, $target);
@@ -434,14 +456,13 @@ sub stow_node {
}
# Does the target already exist?
- my $dest = $self->renamed($package, $target);
- if ($self->is_a_link($dest)) {
+ if ($self->is_a_link($target)) {
# Where is the link pointing?
- my $existing_source = $self->read_a_link($dest);
+ my $existing_source = $self->read_a_link($target);
if (not $existing_source) {
- error("Could not read link: $dest");
+ error("Could not read link: $target");
}
- debug(4, " Evaluate existing link: $dest => $existing_source");
+ debug(4, " Evaluate existing link: $target => $existing_source");
# Does it point to a node under any stow directory?
my ($existing_path, $existing_stow_path, $existing_package) =
@@ -450,7 +471,7 @@ sub stow_node {
$self->conflict(
'stow',
$package,
- "existing target is not owned by stow: $dest"
+ "existing target is not owned by stow: $target"
);
return; # XXX #
}
@@ -468,27 +489,29 @@ sub stow_node {
$self->do_unlink($target);
$self->do_link($source, $target);
}
- elsif ($self->is_a_dir(join_paths(parent($dest), $existing_source)) &&
- $self->is_a_dir(join_paths(parent($dest), $source)) ) {
+ elsif ($self->is_a_dir(join_paths(parent($target), $existing_source)) &&
+ $self->is_a_dir(join_paths(parent($target), $source)) ) {
# If the existing link points to a directory,
# and the proposed new link points to a directory,
# then we can unfold (split open) the tree at that point
- debug(2, "--- Unfolding $dest which was already owned by $existing_package");
- $self->do_unlink($dest);
- $self->do_mkdir($dest);
+ debug(2, "--- Unfolding $target which was already owned by $existing_package");
+ $self->do_unlink($target);
+ $self->do_mkdir($target);
$self->stow_contents(
$existing_stow_path,
$existing_package,
$target,
join_paths('..', $existing_source),
+ $level + 1,
);
$self->stow_contents(
$self->{stow_path},
$package,
$target,
join_paths('..', $source),
+ $level + 1,
);
}
else {
@@ -496,52 +519,54 @@ sub stow_node {
'stow',
$package,
"existing target is stowed to a different package: "
- . "$dest => $existing_source"
+ . "$target => $existing_source"
);
}
}
else {
# The existing link is invalid, so replace it with a good link
- debug(2, "--- replacing invalid link: $dest");
- $self->do_unlink($dest);
- $self->do_link($source, $dest);
+ debug(2, "--- replacing invalid link: $path");
+ $self->do_unlink($target);
+ $self->do_link($source, $target);
}
}
- elsif ($self->is_a_node($dest)) {
- debug(4, " Evaluate existing node: $dest");
- if ($self->is_a_dir($dest)) {
+ elsif ($self->is_a_node($target)) {
+ debug(4, " Evaluate existing node: $target");
+ if ($self->is_a_dir($target)) {
$self->stow_contents(
$self->{stow_path},
$package,
$target,
join_paths('..', $source),
+ $level + 1,
);
}
else {
if ($self->{adopt}) {
- $self->do_mv($dest, $path);
- $self->do_link($source, $dest);
+ $self->do_mv($target, $path);
+ $self->do_link($source, $target);
}
else {
$self->conflict(
'stow',
$package,
- "existing target is neither a link nor a directory: $dest"
+ "existing target is neither a link nor a directory: $target"
);
}
}
}
elsif ($self->{'no-folding'} && -d $path && ! -l $path) {
- $self->do_mkdir($dest);
+ $self->do_mkdir($target);
$self->stow_contents(
$self->{stow_path},
$package,
$target,
join_paths('..', $source),
+ $level + 1,
);
}
else {
- $self->do_link($source, $dest);
+ $self->do_link($source, $target);
}
return;
}
@@ -570,7 +595,7 @@ sub should_skip_target_which_is_stow_dir {
return 1;
}
- debug (4, "$target not protected");
+ debug(4, "$target not protected");
return 0;
}
@@ -724,10 +749,7 @@ sub unstow_node_orig {
#============================================================================
sub unstow_contents {
my $self = shift;
- my ($stow_path, $package, $target) = @_;
-
- my $path = join_paths($stow_path, $package, $target);
- my $dest = $self->renamed($package, $target);
+ my ($stow_path, $package, $target, $path) = @_;
return if $self->should_skip_target_which_is_stow_dir($target);
@@ -742,8 +764,8 @@ sub unstow_contents {
# When called at the top level, $target should exist. And
# unstow_node() should only call this via mutual recursion if
# $target exists.
- error("unstow_contents() called with invalid target: $dest")
- unless $self->is_a_node($dest);
+ error("unstow_contents() called with invalid target: $target")
+ unless $self->is_a_node($target);
opendir my $DIR, $path
or error("cannot read directory: $path ($!)");
@@ -756,7 +778,14 @@ sub unstow_contents {
next NODE if $node eq '..';
my $node_target = join_paths($target, $node);
next NODE if $self->ignore($stow_path, $package, $node_target);
- $self->unstow_node($stow_path, $package, $node_target);
+
+ if ($self->{dotfiles}) {
+ my $adj_node_target = adjust_dotfile($node_target);
+ debug(4, " Adjusting: $node_target => $adj_node_target");
+ $node_target = $adj_node_target;
+ }
+
+ $self->unstow_node($stow_path, $package, $node_target, join_paths($path, $node));
}
if (-d $target) {
$self->cleanup_invalid_links($target);
@@ -776,26 +805,25 @@ sub unstow_contents {
#============================================================================
sub unstow_node {
my $self = shift;
- my ($stow_path, $package, $target) = @_;
+ my ($stow_path, $package, $target, $source) = @_;
my $path = join_paths($stow_path, $package, $target);
- my $dest = $self->renamed($package, $target);
debug(3, "Unstowing $path");
- debug(4, " target is $dest");
+ debug(4, " target is $target");
# Does the target exist?
- if ($self->is_a_link($dest)) {
- debug(4, " Evaluate existing link: $dest");
+ if ($self->is_a_link($target)) {
+ debug(4, " Evaluate existing link: $target");
# Where is the link pointing?
- my $existing_source = $self->read_a_link($dest);
+ my $existing_source = $self->read_a_link($target);
if (not $existing_source) {
- error("Could not read link: $dest");
+ error("Could not read link: $target");
}
if ($existing_source =~ m{\A/}) {
- warn "Ignoring an absolute symlink: $dest => $existing_source\n";
+ warn "Ignoring an absolute symlink: $target => $existing_source\n";
return; # XXX #
}
@@ -806,7 +834,7 @@ sub unstow_node {
$self->conflict(
'unstow',
$package,
- "existing target is not owned by stow: $dest => $existing_source"
+ "existing target is not owned by stow: $target => $existing_source"
);
return; # XXX #
}
@@ -814,8 +842,14 @@ sub unstow_node {
# Does the existing $target actually point to anything?
if (-e $existing_path) {
# Does link points to the right place?
+
+ # Adjust for dotfile if necessary.
+ if ($self->{dotfiles}) {
+ $existing_path = adjust_dotfile($existing_path);
+ }
+
if ($existing_path eq $path) {
- $self->do_unlink($dest);
+ $self->do_unlink($target);
}
# XXX we quietly ignore links that are stowed to a different
@@ -838,30 +872,30 @@ sub unstow_node {
#}
}
else {
- debug(2, "--- removing invalid link into a stow directory: $dest");
- $self->do_unlink($dest);
+ debug(2, "--- removing invalid link into a stow directory: $path");
+ $self->do_unlink($target);
}
}
- elsif (-e $dest) {
- debug(4, " Evaluate existing node: $dest");
- if (-d $dest) {
- $self->unstow_contents($stow_path, $package, $target);
+ elsif (-e $target) {
+ debug(4, " Evaluate existing node: $target");
+ if (-d $target) {
+ $self->unstow_contents($stow_path, $package, $target, $source);
# This action may have made the parent directory foldable
- if (my $parent = $self->foldable($dest)) {
- $self->fold_tree($dest, $parent);
+ if (my $parent = $self->foldable($target)) {
+ $self->fold_tree($target, $parent);
}
}
else {
$self->conflict(
'unstow',
$package,
- "existing target is neither a link nor a directory: $dest",
+ "existing target is neither a link nor a directory: $target",
);
}
}
else {
- debug(2, "$dest did not exist to be unstowed");
+ debug(2, "$target did not exist to be unstowed");
}
return;
}
@@ -889,18 +923,20 @@ sub path_owned_by_package {
# Name : find_stowed_path()
# Purpose : determine whether the given link points to a member of a
# : stowed package
-# Parameters: $target => path to a symbolic link under current directory
+# Parameters: $target => path to a symbolic link under current directory.
+# : Must share a common prefix with $self->{stow_path}
# : $source => where that link points to (needed because link
# : might not exist yet due to two-phase approach,
-# : so we can't just call readlink())
+# : so we can't just call readlink()). This must be
+# : expressed relative to (the directory containing)
+# : $target.
# Returns : ($path, $stow_path, $package) where $path and $stow_path are
# : relative from the current (i.e. target) directory. $path
# : is the full relative path, $stow_path is the relative path
# : to the stow directory, and $package is the name of the package.
# : or ('', '', '') if link is not owned by stow
# Throws : n/a
-# Comments : Needs
-# : Allow for stow dir not being under target dir.
+# Comments : Allow for stow dir not being under target dir.
# : We could put more logic under here for multiple stow dirs.
#============================================================================
sub find_stowed_path {
@@ -932,6 +968,12 @@ sub find_stowed_path {
# If no .stow file was found, we need to find out whether it's
# owned by the current stow directory, in which case $path will be
# a prefix of $self->{stow_path}.
+ if (substr($path, 0, 1) eq '/' xor substr($self->{stow_path}, 0, 1) eq '/')
+ {
+ warn "BUG in find_stowed_path? Absolute/relative mismatch between " .
+ "Stow dir $self->{stow_path} and path $path";
+ }
+
my @stow_path = split m{/+}, $self->{stow_path};
# Strip off common prefixes until one is empty
@@ -948,7 +990,7 @@ sub find_stowed_path {
}
my $package = shift @path;
-
+
debug(4, " yes - by $package in " . join_paths(@path));
return ($path, $self->{stow_path}, $package);
}
@@ -1326,11 +1368,6 @@ sub get_ignore_regexps_from_fh {
# because this is the only place stow looks for them.
$regexps{"^/\Q$LOCAL_IGNORE_FILE\E\$"}++;
- # Also ignore the files .stow-no-folding and .stow-rename, for the same
- # reason.
- $regexps{"^/\Q$NO_FOLDING_FILE\E\$"}++;
- $regexps{"^/\Q$RENAME_FILE\E\$"}++;
-
return $self->compile_ignore_regexps(%regexps);
}
@@ -1620,46 +1657,6 @@ sub is_a_link {
return 0;
}
-sub renamed {
- my $self = shift;
- my ($package, $path) = @_;
- return $self->do_rename($self->read_rename_file($package), $path);
-}
-
-sub read_rename_file {
- my $self = shift;
- my ($package) = @_;
- return $self->{pkg_renames}{$package} if defined $self->{pkg_renames}{$package};
- my %renames = ();
- $self->{pkg_renames}{$package} = \%renames;
-
- my $file = join_paths($self->{stow_path}, $package, $RENAME_FILE);
- return \%renames if (not -f $file);
-
- open my $fh, $file or die "Could not open file $!";
- while (<$fh>) {
- chomp;
- %renames = (%renames, split/\s*=>\s*/);
- }
- close $fh;
- return \%renames;
-}
-
-sub do_rename {
- my $self = shift;
- my ($renames, $path) = @_;
- my %renames = %{ $renames };
-
- return $renames{$path} if $renames{$path};
- foreach my $dir (keys %renames) {
- if (0 == index $path, $dir) {
- $path =~ s/^\Q$dir\E/$renames{$dir}/;
- }
- }
-
- return $path;
-}
-
#===== METHOD ===============================================================
# Name : is_a_dir()
# Purpose : determine if the given path is a current or planned directory
diff --git a/local/share/perl/Stow/Util.pm b/dot-local/lib/perl/Stow/Util.pm
similarity index 81%
rename from local/share/perl/Stow/Util.pm
rename to dot-local/lib/perl/Stow/Util.pm
index c22d7b8..5cd98d4 100644
--- a/local/share/perl/Stow/Util.pm
+++ b/dot-local/lib/perl/Stow/Util.pm
@@ -1,3 +1,18 @@
+# This file is part of GNU Stow.
+#
+# GNU Stow is free software: you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# GNU Stow is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see https://www.gnu.org/licenses/.
+
package Stow::Util;
=head1 NAME
@@ -22,11 +37,11 @@ use POSIX qw(getcwd);
use base qw(Exporter);
our @EXPORT_OK = qw(
error debug set_debug_level set_test_mode
- join_paths parent canon_path restore_cwd
+ join_paths parent canon_path restore_cwd adjust_dotfile
);
our $ProgramName = 'stow';
-our $VERSION = '2.2.2';
+our $VERSION = '2.3.2-fixbug56727';
#############################################################################
#
@@ -193,6 +208,20 @@ sub restore_cwd {
chdir($prev) or error("Your current directory $prev seems to have vanished");
}
+sub adjust_dotfile {
+ my ($target) = @_;
+
+ my @result = ();
+ for my $part (split m{/+}, $target) {
+ if (($part ne "dot-") && ($part ne "dot-.")) {
+ $part =~ s/^dot-/./;
+ }
+ push @result, $part;
+ }
+
+ return join '/', @result;
+}
+
=head1 BUGS
=head1 SEE ALSO
diff --git a/dot-local/share/doc/stow/ChangeLog b/dot-local/share/doc/stow/ChangeLog
new file mode 100644
index 0000000..1d83673
--- /dev/null
+++ b/dot-local/share/doc/stow/ChangeLog
@@ -0,0 +1,3685 @@
+Mon Oct 23 12:49:55 2023 +1100 Danielle McLean
+
+ * Merge branch 'bug-56727' Merge in fixed --dotfiles support. We need
+ it.
+
+
+Thu Apr 15 12:18:10 2021 +0100 Adam Spiers
+
+ * Merge pull request #86 from gutierri/patch-manpage add option
+ --simulate on manpage
+
+Wed Apr 14 22:08:38 2021 -0300 Gutierri Barboza
+
+ * add option --simulate on manpage
+
+ M bin/stow.in
+
+Wed Apr 14 11:03:00 2021 +0100 Adam Spiers
+
+ * Merge pull request #85 from gutierri/patch-usage-dotfiles add
+ --dotfiles sub usage
+
+Tue Apr 13 22:09:38 2021 -0300 Gutierri Barboza
+
+ * add --dotfiles sub usage
+
+ M bin/stow.in
+
+Sun Nov 1 12:24:52 2020 +0000 Adam Spiers
+
+ * Merge pull request #71 from egli/master Mention the dotfiles option in
+ the manual
+
+Wed May 27 17:51:37 2020 +0200 Christian Egli
+
+ * Mention the dotfiles option in the manual This should have been part
+ of 182acbbb64425bf95008cb6d42d266f6185032c9 when the option was
+ first added.
+
+ This commit basically just copies the help text from stow.in into
+ the texinfo manual.
+
+
+ M doc/stow.texi
+
+Mon May 25 22:26:31 2020 +0200 ATuinDev <1757663+AitorATuin@users.noreply.github.com>
+
+ * Fix missing variable
+
+ M lib/Stow.pm.in
+
+Mon May 25 22:23:23 2020 +0200 ATuinDev <1757663+AitorATuin@users.noreply.github.com>
+
+ * Add more tests for testing directories in dotfiles.t
+
+ M t/dotfiles.t
+
+Mon May 25 22:21:31 2020 +0200 ATuinDev <1757663+AitorATuin@users.noreply.github.com>
+
+ * Add $level variable in stow_contents and stow_node This variables is
+ used to keep track of the current level in the source.
+
+
+ M lib/Stow.pm.in
+
+Sun May 24 18:12:49 2020 +0200 ATuinDev <1757663+AitorATuin@users.noreply.github.com>
+
+ * Fixes Bug #56727 Problem was that when running
+ stow_contents/unstow_contents recursively from
+ stow_node/unstow_node the information for the source path (without
+ the dot- to
+ . transformation) was lost.
+
+ In the case of stow_contents the solution is just to remove the
+ leading dots (..) from the $source path (since the $source path is
+ passed as an argument to the function)
+
+ In the case of unstow_contents the solution is the same as for
+ stow_contents but the arguments was now passed so I added it to
+ the function.
+
+
+ M lib/Stow.pm.in
+
+Sun Jul 28 14:54:36 2019 +0100 Adam Spiers
+
+ * HOWTO-RELEASE: explicitly push to master This avoids errors like
+
+ fatal: You are pushing to remote 'savannah', which is not the
+ upstream of
+ your current branch 'master', without telling me what to push
+ to update which remote branch.
+
+
+ M doc/HOWTO-RELEASE
+
+Sun Jul 28 14:52:53 2019 +0100 Adam Spiers
+
+ * Bump version to 2.3.2 for development of next release
+
+ M META.json
+ M META.yml
+ M configure.ac
+
+Sun Jul 28 14:52:16 2019 +0100 Adam Spiers
+
+ * HOWTO-RELEASE: fix final step of bumping to next release version
+
+ M doc/HOWTO-RELEASE
+
+Sun Jul 28 14:29:06 2019 +0100 Adam Spiers
+
+ * NEWS: disable org-export-with-toc 2.3.0 was a big release with lots of
+ stuff, but most releases will be smaller, so default to not having
+ a ToC.
+
+
+ M NEWS
+
+Sun Jul 28 14:28:41 2019 +0100 Adam Spiers
+
+ * NEWS: don't export with author name Avoid extra noise when exporting
+ to text for a release announcement.
+
+
+ M NEWS
+
+Sun Jul 28 13:58:00 2019 +0100 Adam Spiers
+
+ * HOWTO-RELEASE: explain how to confirm PAUSE acceptance of upload
+
+ M doc/HOWTO-RELEASE
+
+Sun Jul 28 13:28:46 2019 +0100 Adam Spiers
+
+ * HOWTO-RELEASE: do ./Build dist earlier docker builds break ./Build
+ dist, so do it earlier.
+
+
+ M doc/HOWTO-RELEASE
+
+Sun Jul 28 13:15:11 2019 +0100 Adam Spiers
+
+ * Make sure release process starts from a clean slate
+
+ M doc/HOWTO-RELEASE
+
+Sun Jul 28 13:10:49 2019 +0100 Adam Spiers
+
+ * Prepare NEWS for 2.3.1 release
+
+ M NEWS
+
+Sun Jul 28 12:57:27 2019 +0100 Adam Spiers
+
+ * fix cross-references under --no-folding section of manual Under emacs,
+ this was previously rendered as
+
+ '--no-folding'
+
+ This disables any further *note tree folding:: or *note
+ tree
+ refolding::. If a new subdirectory is encountered whilst
+ stowing a
+
+ which looks awkward. Similarly under info(1):
+
+ '--no-folding'
+
+ This disables any further *note tree folding:: or *note
+ tree
+ refolding::. If a new subdirectory is encountered whilst
+ stowing a
+
+ The new way is undesirably repetitive, but at least grammatically
+ correct. I don't think there's a better solution with texinfo :-/
+
+
+ M doc/stow.texi
+
+Sun Jul 28 12:55:22 2019 +0100 Adam Spiers
+
+ * HOWTO-RELEASE: add suggested commands for updating home page
+
+ M doc/HOWTO-RELEASE
+
+Sun Jul 28 13:03:54 2019 +0100 Adam Spiers
+
+ * cli.t: test with the right Perl executable (#62) cli.t: test with the
+ right Perl executable
+
+Tue Jul 16 19:24:19 2019 +0100 Adam Spiers
+
+ * HOWTO-RELEASE: update news section of online home page
+
+ M doc/HOWTO-RELEASE
+
+Tue Jul 16 19:21:04 2019 +0100 Adam Spiers
+
+ * HOWTO-RELEASE: update online docs *after* uploading release It doesn't
+ make sense to have docs online relating to a release which isn't
+ yet available; it's less confusing to have a small time window in
+ which the online docs are out of date.
+
+
+ M doc/HOWTO-RELEASE
+
+Mon Jul 15 16:10:21 2019 -0400 Adam Spiers
+
+ * cli.t: test with the right Perl executable t/cli.t calls scripts which
+ run with the first perl found in the user's PATH (usually the
+ system perl), not with the perl used for the build, as reported
+ here:
+
+ https://rt.cpan.org/Ticket/Display.html?id=129944
+
+ Thanks to Slaven Rezic for spotting this and reporting it!
+
+
+ M THANKS
+ M t/cli.t
+
+Sat Jun 29 13:48:59 2019 +0100 Adam Spiers
+
+ * Remove dependencies on Hash::Merge and Clone::Choose (#60) Remove
+ dependencies on Hash::Merge and Clone::Choose
+
+Sat Jun 29 13:04:30 2019 +0100 Adam Spiers
+
+ * Remove dependencies on Hash::Merge and Clone::Choose stow 2.3.0 added
+ external runtime dependencies on Hash::Merge and Clone::Choose.
+ Historically stow hasn't had runtime dependencies other than Perl
+ itself, which is a useful property if you're managing the
+ installation of Perl using stow; the bootstrapping instructions in
+ stow's manual would need updating to describe how to install these
+ two modules (and any dependencies they have now or in the future)
+ as well.
+
+ However, Hash::Merge is much more general than stow actually
+ needs, so replace the merge() call with a few lines of equivalent
+ code -- this avoids the external dependencies, and is clearer than
+ the merge() call.
+
+ Many thanks to Adam Sampson for this patch:
+
+ https://lists.gnu.org/archive/html/bug-stow/2019-06/msg00001.html
+
+
+ M Build.PL
+ M META.json
+ M META.yml
+ M NEWS
+ M bin/stow.in
+ M t/rc_options.t
+
+Sat Jun 29 13:40:45 2019 +0100 Adam Spiers
+
+ * Bump version to 2.3.1 for development of next release
+
+ M META.json
+ M META.yml
+ M NEWS
+ M configure.ac
+ M doc/HOWTO-RELEASE
+
+Sat Jun 29 13:03:11 2019 +0100 Adam Spiers
+
+ * Maintainer tweaks (#59) Maintainer tweaks
+
+Sat Jun 29 01:30:36 2019 +0100 Adam Spiers
+
+ * Add GPL v3 upgrade to NEWS for 2.3.0 release Forgot to do this prior
+ to the release :-( But at least it will be mentioned in the
+ announcement on the mailing lists.
+
+
+ M NEWS
+
+Sat Jun 29 01:12:36 2019 +0100 Adam Spiers
+
+ * Make NEWS export to text better Run org-convert-to-odd-levels on NEWS
+ and set local variables so that sections can easily be exported
+ for release announcements.
+
+
+ M NEWS
+ M doc/HOWTO-RELEASE
+
+Fri Jun 28 23:48:37 2019 +0100 Adam Spiers
+
+ * Set DISTCLEANFILES to clean up more Docker generates a whole bunch of
+ files as root.
+
+
+ M Makefile.am
+
+Sat Jun 29 00:55:51 2019 +0100 Adam Spiers
+
+ * HOWTO-RELEASE: Fix cvs commit command for docs
+
+ M doc/HOWTO-RELEASE
+
+Sat Jun 29 00:36:00 2019 +0100 Adam Spiers
+
+ * HOWTO-RELEASE: Fix git tag command
+
+ M doc/HOWTO-RELEASE
+
+Fri Jun 28 23:54:30 2019 +0100 Adam Spiers
+
+ * Split perlbrew install-multiple into separate RUN cmd This allows
+ changing which Perls are used etc. without re-bootstrapping
+ perlbrew.
+
+
+ M docker/Dockerfile
+
+Fri Jun 28 21:57:08 2019 +0100 Adam Spiers
+
+ * Use Clone backend for Hash::Merge, not Storable (#58) Use Clone
+ backend for Hash::Merge, not Storable
+
+Fri Jun 28 21:11:58 2019 +0100 Adam Spiers
+
+ * Use Clone backend for Hash::Merge, not Storable Need to avoid Storable
+ backend, since it can't deal with regexps:
+
+ https://rt.perl.org/Public/Bug/Display.html?id=50608
+
+ This should fix the Docker builds.
+
+
+ M Build.PL
+ M META.json
+ M META.yml
+ M bin/stow.in
+
+Fri Jun 28 21:20:22 2019 +0100 Adam Spiers
+
+ * make maintainer-clean remove cover_db/
+
+ M Makefile.am
+
+Fri Jun 28 20:46:15 2019 +0100 Adam Spiers
+
+ * Make testing within Docker containers easier (#56) Make testing within
+ Docker containers easier
+
+Fri Jun 28 20:10:45 2019 +0100 Adam Spiers
+
+ * Make testing within Docker containers easier
+
+ M docker/run-stow-tests.sh
+ M test-docker.sh
+
+Fri Jun 28 20:33:30 2019 +0100 Adam Spiers
+
+ * Merge pull request #57 from aspiers/strict-tests Allow make to fail if
+ missing modules for test dependencies
+
+Fri Jun 28 20:21:41 2019 +0100 Adam Spiers
+
+ * Allow make to fail if missing modules for test dependencies e.g. make
+ STRICT_TESTS=1
+
+ However we don't need this in .travis.yml as explained in the
+ comments.
+
+
+ M .travis.yml
+ M configure.ac
+
+Fri Jun 28 17:48:04 2019 +0100 Adam Spiers
+
+ * Dockerfile: fix Debian jessie sources (#55) Dockerfile: fix Debian
+ jessie sources
+
+Fri Jun 28 17:12:18 2019 +0100 Adam Spiers
+
+ * Dockerfile: fix Debian jessie sources
+ https://superuser.com/questions/1423486/issue-with-fetching-http-deb-debian-org-debian-dists-jessie-updates-inrelease
+
+
+ M docker/Dockerfile
+
+Fri Jun 28 17:14:23 2019 +0100 Adam Spiers
+
+ * Make docker scripts use get-version (#54) Make docker scripts use
+ get-version
+
+Fri Jun 28 17:10:42 2019 +0100 Adam Spiers
+
+ * rebuild META.* in preparation for 2.3.0 release (#53) rebuild META.*
+ in preparation for 2.3.0 release
+
+Fri Jun 28 17:08:48 2019 +0100 Adam Spiers
+
+ * Make docker scripts use get-version
+
+ M build-docker.sh
+ M test-docker.sh
+
+Fri Jun 28 17:04:40 2019 +0100 Adam Spiers
+
+ * rebuild META.* in preparation for 2.3.0 release
+
+ M META.json
+ M META.yml
+
+Fri Jun 28 16:48:59 2019 +0100 Adam Spiers
+
+ * Various improvements to tests (#52) Various improvements to tests
+
+Fri Jun 28 09:56:46 2019 +0100 Adam Spiers
+
+ * Add separate tests for .stowrc from $HOME and $PWD
+ .stowrc can be obtained from $HOME and/or the current working
+ directory; however only the $HOME case was tested before, because
+ during tests Stow was being run from $HOME.
+
+ So switch $TEST_DIR to an absolute path, create a new run_from/
+ subdirectory, and chdir to that before invoking any Stow code.
+ This allows us to test the behaviour of .stowrc in $HOME and
+ run_from/ separately.
+
+
+ M NEWS
+ M bin/stow.in
+ M t/rc_options.t
+ M t/testutil.pm
+
+Fri Jun 28 15:23:52 2019 +0100 Adam Spiers
+
+ * Split up is_deeply() assertions in find_stowed_path.t This makes the
+ tests and any failures more readable.
+
+
+ M t/find_stowed_path.t
+
+Fri Jun 28 15:22:44 2019 +0100 Adam Spiers
+
+ * Check that find_stowed_path $path matches relative/absolute with
+ target Watch out for a corner case probably only relevant in
+ tests.
+
+
+ M lib/Stow.pm.in
+
+Fri Jun 28 15:22:29 2019 +0100 Adam Spiers
+
+ * Improve comments on function parameters for clarity
+
+ M lib/Stow.pm.in
+
+Fri Jun 28 10:32:18 2019 +0100 Adam Spiers
+
+ * Add examples of how to enable debugging in tests
+
+ M t/find_stowed_path.t
+ M t/stow.t
+
+Fri Jun 28 01:02:48 2019 +0100 Adam Spiers
+
+ * Replace testutil::make_dir with File::Path::make_path No need for a
+ custom function here.
+
+
+ M t/chkstow.t
+ M t/cleanup_invalid_links.t
+ M t/cli_options.t
+ M t/dotfiles.t
+ M t/examples.t
+ M t/find_stowed_path.t
+ M t/foldable.t
+ M t/ignore.t
+ M t/stow.t
+ M t/testutil.pm
+ M t/unstow.t
+ M t/unstow_orig.t
+
+Fri Jun 28 00:53:12 2019 +0100 Adam Spiers
+
+ * Rename $OUT_DIR to $TEST_DIR This is a more accurate reflection of
+ what it is.
+
+
+ M t/chkstow.t
+ M t/cleanup_invalid_links.t
+ M t/cli_options.t
+ M t/defer.t
+ M t/dotfiles.t
+ M t/examples.t
+ M t/find_stowed_path.t
+ M t/foldable.t
+ M t/ignore.t
+ M t/rc_options.t
+ M t/stow.t
+ M t/testutil.pm
+ M t/unstow.t
+ M t/unstow_orig.t
+
+Fri Jun 28 00:41:55 2019 +0100 Adam Spiers
+
+ * Avoid dereferencing $ENV{HOME} if it is undefined (#32) Avoid
+ dereferencing $ENV{HOME} if it is undefined
+
+Thu Jun 27 20:49:44 2019 +0100 Adam Spiers
+
+ * Improve the history of individual contributions and repositories (#49)
+ Improve the history of individual contributions and repositories
+
+Thu Jun 27 20:49:18 2019 +0100 Adam Spiers
+
+ * Upgrade to GPL v3 and add headers to files (#50)
+ Upgrade to GPL v3 and add headers to files
+
+Thu Jun 27 20:28:17 2019 +0100 Adam Spiers
+
+ * Improve the history of individual contributions and repositories The
+ source code has been through a rather complicated journey, and
+ it's occasionally useful to understand this history from CVS to a
+ private Subversion repository to its current location in git. So
+ document this more thoroughly, and ensure that everyone involved
+ is in the THANKS file.
+
+
+ M AUTHORS
+ M README.md
+ M THANKS
+
+Thu Jun 27 20:39:16 2019 +0100 Adam Spiers
+
+ * Change -w to "use warnings;" in tools/get-version This is more
+ idiomatic and consistent with everywhere else.
+
+
+ M tools/get-version
+
+Thu Jun 27 20:37:50 2019 +0100 Adam Spiers
+
+ * Change #!/usr/local/bin/perl to #!/usr/bin/perl in t/*.t This doesn't
+ really matter, since these are not executed directly, but it's
+ more consistent with everything else and modern systems.
+
+
+ M t/chkstow.t
+ M t/cleanup_invalid_links.t
+ M t/cli.t
+ M t/cli_options.t
+ M t/defer.t
+ M t/dotfiles.t
+ M t/examples.t
+ M t/find_stowed_path.t
+ M t/foldable.t
+ M t/ignore.t
+ M t/join_paths.t
+ M t/parent.t
+ M t/rc_options.t
+ M t/stow.t
+ M t/unstow.t
+ M t/unstow_orig.t
+
+Thu Jun 27 14:02:19 2019 +0100 Adam Spiers
+
+ * Upgrade to GPL v3 and add headers to files (#44) Following advice from
+ maintainers@gnu.org, bring Stow in line with other GNU projects by
+ upgrading it from GPL v2 to v3
+
+
+ https://www.gnu.org/prep/maintain/html_node/Licensing-of-GNU-Packages.html#Licensing-of-GNU-Packages
+
+ as obtained in plain text and texinfo formats from
+
+ https://www.gnu.org/licenses/
+
+ and adding appropriate headers:
+
+
+ https://www.gnu.org/prep/maintain/html_node/License-Notices-for-Code.html#License-Notices-for-Code
+
+ Fixes #44: https://github.com/aspiers/stow/issues/44
+
+
+ M Build.PL
+ M COPYING
+ M INSTALL.md
+ M Makefile.am
+ M README.md
+ M TODO
+ M bin/chkstow.in
+ M bin/stow.in
+ M configure.ac
+ M doc/stow.texi
+ M docker/Dockerfile
+ M docker/bootstrap-perls.sh
+ M docker/run-stow-tests.sh
+ M lib/Stow.pm.in
+ M lib/Stow/Util.pm.in
+ M t/chkstow.t
+ M t/cleanup_invalid_links.t
+ M t/cli.t
+ M t/cli_options.t
+ M t/defer.t
+ M t/dotfiles.t
+ M t/examples.t
+ M t/find_stowed_path.t
+ M t/foldable.t
+ M t/ignore.t
+ M t/join_paths.t
+ M t/parent.t
+ M t/rc_options.t
+ M t/stow.t
+ M t/testutil.pm
+ M t/unstow.t
+ M t/unstow_orig.t
+
+Thu Jun 27 14:14:23 2019 +0100 Adam Spiers
+
+ * Fix Travis failure after merging #42 (#46) Fix Travis failure after
+ merging #42
+
+Thu Jun 27 14:06:19 2019 +0100 Adam Spiers
+
+ * remove trailing whitespace from lines (#45) remove trailing whitespace
+ from lines
+
+Thu Jun 27 13:55:35 2019 +0100 Adam Spiers
+
+ * Fix Travis failure after merging #42 Something weird happened with
+ https://travis-ci.org/aspiers/stow/jobs/551290921 after merging
+ #42, as shown below. Maybe removing texi2html from the list of
+ packages for Travis to install will help.
+
+ --- Installing APT Packages 15.50s$ travis_apt_get_update 0.11s$
+ sudo -E apt-get -yq --no-install-suggests --no-install-recommends
+ $(travis_apt_get_options) install texinfo texlive texi2html
+ Reading package lists... Building dependency tree... Reading state
+ information... Package texinfo is not available, but is referred
+ to by another package. This may mean that the package is missing,
+ has been obsoleted, or is only available from another source
+ However the following packages replace it:
+ info install-info E: Package 'texinfo' has no installation
+ candidate E: Unable to locate package texi2html
+ apt-get.diagnostics apt-get install failed
+ $ cat ${TRAVIS_HOME}/apt-get-update.log Get:2
+ http://dl.hhvm.com/ubuntu trusty InRelease [3,106 B] Get:3
+ http://security.ubuntu.com/ubuntu trusty-security InRelease [65.9
+ kB] Get:4 http://ppa.launchpad.net/chris-lea/redis-server/ubuntu
+ trusty InRelease [15.4 kB] Ign:5
+ http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.4
+ InRelease Get:6 http://repo.mongodb.org/apt/ubuntu
+ trusty/mongodb-org/3.4 Release [2,495 B] Get:7
+ http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.4
+ Release.gpg [801 B] Get:8 http://dl.hhvm.com/ubuntu trusty/main
+ amd64 Packages [1,812 B] Get:9 http://security.ubuntu.com/ubuntu
+ trusty-security/main Sources [220 kB] Get:10
+ http://security.ubuntu.com/ubuntu trusty-security/restricted
+ Sources [5,050 B] Get:11 http://security.ubuntu.com/ubuntu
+ trusty-security/universe Sources [126 kB] Get:12
+ http://security.ubuntu.com/ubuntu trusty-security/multiverse
+ Sources [3,070 B] Get:13 http://security.ubuntu.com/ubuntu
+ trusty-security/main amd64 Packages [1,032 kB] Get:14
+ http://security.ubuntu.com/ubuntu trusty-security/main i386
+ Packages [934 kB] Get:15 http://security.ubuntu.com/ubuntu
+ trusty-security/main Translation-en [541 kB] Get:16
+ http://security.ubuntu.com/ubuntu trusty-security/restricted amd64
+ Packages [18.1 kB] Get:17 http://security.ubuntu.com/ubuntu
+ trusty-security/restricted i386 Packages [17.8 kB] Get:18
+ http://security.ubuntu.com/ubuntu trusty-security/restricted
+ Translation-en [3,272 B] Get:19 http://security.ubuntu.com/ubuntu
+ trusty-security/universe amd64 Packages [377 kB] Get:20
+ http://security.ubuntu.com/ubuntu trusty-security/universe i386
+ Packages [355 kB] Get:21 http://security.ubuntu.com/ubuntu
+ trusty-security/universe Translation-en [203 kB] Get:22
+ http://security.ubuntu.com/ubuntu trusty-security/multiverse amd64
+ Packages [4,730 B] Get:23 http://security.ubuntu.com/ubuntu
+ trusty-security/multiverse i386 Packages [4,887 B] Get:24
+ http://security.ubuntu.com/ubuntu trusty-security/multiverse
+ Translation-en [2,426 B] Get:25
+ https://download.docker.com/linux/ubuntu trusty InRelease [37.1
+ kB] Get:26 http://repo.mongodb.org/apt/ubuntu
+ trusty/mongodb-org/3.4/multiverse amd64 Packages [14.1 kB] Get:27
+ https://download.docker.com/linux/ubuntu trusty/stable amd64
+ Packages [5,763 B] Get:28 https://download.docker.com/linux/ubuntu
+ trusty/edge amd64 Packages [6,911 B] Ign:29
+ http://ppa.launchpad.net/couchdb/stable/ubuntu trusty InRelease
+ Get:30 http://ppa.launchpad.net/git-core/ppa/ubuntu trusty
+ InRelease [20.8 kB] Get:31 http://ppa.launchpad.net/hvr/ghc/ubuntu
+ trusty InRelease [15.4 kB] Get:32
+ http://ppa.launchpad.net/pollinate/ppa/ubuntu trusty InRelease
+ [15.4 kB] Get:33 http://ppa.launchpad.net/webupd8team/java/ubuntu
+ trusty InRelease [15.5 kB] Get:34
+ http://ppa.launchpad.net/chris-lea/redis-server/ubuntu trusty/main
+ amd64 Packages [1,843 B] Get:35
+ http://ppa.launchpad.net/chris-lea/redis-server/ubuntu trusty/main
+ i386 Packages [1,842 B] Get:36
+ http://ppa.launchpad.net/chris-lea/redis-server/ubuntu trusty/main
+ Translation-en [990 B] Get:37
+ http://ppa.launchpad.net/couchdb/stable/ubuntu trusty Release
+ [15.1 kB] Get:38 http://ppa.launchpad.net/couchdb/stable/ubuntu
+ trusty Release.gpg [316 B] Ign:39
+ http://dl.google.com/linux/chrome/deb stable InRelease Get:40
+ http://dl.google.com/linux/chrome/deb stable Release [943 B]
+ Get:41 http://dl.google.com/linux/chrome/deb stable Release.gpg
+ [819 B] Get:42 http://ppa.launchpad.net/git-core/ppa/ubuntu
+ trusty/main amd64 Packages [3,494 B] Get:43
+ http://ppa.launchpad.net/git-core/ppa/ubuntu trusty/main i386
+ Packages [3,496 B] Get:44
+ http://ppa.launchpad.net/git-core/ppa/ubuntu trusty/main
+ Translation-en [2,368 B] Get:45
+ http://ppa.launchpad.net/hvr/ghc/ubuntu trusty/main amd64 Packages
+ [18.5 kB] Get:46 http://ppa.launchpad.net/hvr/ghc/ubuntu
+ trusty/main i386 Packages [15.7 kB] Get:47
+ http://ppa.launchpad.net/hvr/ghc/ubuntu trusty/main Translation-en
+ [1,107 B] Get:48 http://ppa.launchpad.net/pollinate/ppa/ubuntu
+ trusty/main amd64 Packages [430 B] Get:49
+ http://ppa.launchpad.net/pollinate/ppa/ubuntu trusty/main i386
+ Packages [430 B] Get:50
+ http://ppa.launchpad.net/pollinate/ppa/ubuntu trusty/main
+ Translation-en [374 B] Get:51
+ http://ppa.launchpad.net/webupd8team/java/ubuntu trusty/main amd64
+ Packages [20 B] Get:52
+ http://ppa.launchpad.net/webupd8team/java/ubuntu trusty/main i386
+ Packages [20 B] Get:53
+ http://ppa.launchpad.net/webupd8team/java/ubuntu trusty/main
+ Translation-en [20 B] Get:54
+ http://ppa.launchpad.net/couchdb/stable/ubuntu trusty/main amd64
+ Packages [985 B] Get:55
+ http://ppa.launchpad.net/couchdb/stable/ubuntu trusty/main i386
+ Packages [985 B] Get:56
+ http://ppa.launchpad.net/couchdb/stable/ubuntu trusty/main
+ Translation-en [644 B] Get:57
+ http://dl.google.com/linux/chrome/deb stable/main amd64 Packages
+ [1,107 B] Err:58
+ https://packagecloud.io/computology/apt-backport/ubuntu trusty
+ InRelease
+ Failed to connect to packagecloud.io port 443: Connection timed
+ out Err:59 http://us-east-1.ec2.archive.ubuntu.com/ubuntu trusty
+ InRelease
+ Could not connect to apt.cache.travis-ci.com:80 (34.96.81.152),
+ connection timed out Err:60
+ http://us-east-1.ec2.archive.ubuntu.com/ubuntu trusty-updates
+ InRelease
+ Unable to connect to apt.cache.travis-ci.com:http: Err:61
+ http://toolbelt.heroku.com/ubuntu ./ InRelease
+ Could not connect to apt.cache.travis-ci.com:80 (34.96.81.152),
+ connection timed out Err:62
+ http://us-east-1.ec2.archive.ubuntu.com/ubuntu trusty-backports
+ InRelease
+ Unable to connect to apt.cache.travis-ci.com:http: Err:63
+ http://apt.postgresql.org/pub/repos/apt trusty-pgdg InRelease
+ Could not connect to apt.cache.travis-ci.com:80 (34.96.81.152),
+ connection timed out Err:1 http://dl.bintray.com/apache/cassandra
+ 39x InRelease
+ Could not connect to apt.cache.travis-ci.com:80 (34.96.81.152),
+ connection timed out Get:64
+ https://packagecloud.io/github/git-lfs/ubuntu trusty InRelease
+ [23.2 kB] Ign:64 https://packagecloud.io/github/git-lfs/ubuntu
+ trusty InRelease Get:65
+ https://packagecloud.io/rabbitmq/rabbitmq-server/ubuntu trusty
+ InRelease [23.7 kB] Get:66
+ https://packagecloud.io/github/git-lfs/ubuntu trusty/main Sources
+ [20 B] Get:67 https://packagecloud.io/github/git-lfs/ubuntu
+ trusty/main amd64 Packages [8,003 B] Get:68
+ https://packagecloud.io/github/git-lfs/ubuntu trusty/main i386
+ Packages [7,761 B] Get:69
+ https://packagecloud.io/rabbitmq/rabbitmq-server/ubuntu
+ trusty/main Sources [20 B] Get:70
+ https://packagecloud.io/rabbitmq/rabbitmq-server/ubuntu
+ trusty/main amd64 Packages [7,866 B] Get:71
+ https://packagecloud.io/rabbitmq/rabbitmq-server/ubuntu
+ trusty/main i386 Packages [7,866 B] Fetched 4,218 kB in 15s (279
+ kB/s) Reading package lists... W:
+ http://ppa.launchpad.net/couchdb/stable/ubuntu/dists/trusty/Release.gpg:
+ Signature by key 15866BAFD9BCC4F3C1E0DFC7D69548E1C17EAB57 uses
+ weak digest algorithm (SHA1) W: GPG error:
+ https://packagecloud.io/github/git-lfs/ubuntu trusty InRelease:
+ The following signatures couldn't be verified because the public
+ key is not available: NO_PUBKEY 6B05F25D762E3157 W: The repository
+ 'https://packagecloud.io/github/git-lfs/ubuntu trusty InRelease'
+ is not signed. W: There is no public key available for the
+ following key IDs: 6B05F25D762E3157 W: Failed to fetch
+ http://us-east-1.ec2.archive.ubuntu.com/ubuntu/dists/trusty/InRelease
+ Could not connect to apt.cache.travis-ci.com:80 (34.96.81.152),
+ connection timed out W: Failed to fetch
+ http://us-east-1.ec2.archive.ubuntu.com/ubuntu/dists/trusty-updates/InRelease
+ Unable to connect to apt.cache.travis-ci.com:http: W: Failed to
+ fetch
+ http://us-east-1.ec2.archive.ubuntu.com/ubuntu/dists/trusty-backports/InRelease
+ Unable to connect to apt.cache.travis-ci.com:http: W: Failed to
+ fetch
+ http://www.apache.org/dist/cassandra/debian/dists/39x/InRelease
+ Could not connect to apt.cache.travis-ci.com:80 (34.96.81.152),
+ connection timed out W: Failed to fetch
+ https://packagecloud.io/computology/apt-backport/ubuntu/dists/trusty/InRelease
+ Failed to connect to packagecloud.io port 443: Connection timed
+ out W: Failed to fetch
+ http://toolbelt.heroku.com/ubuntu/./InRelease Could not connect
+ to apt.cache.travis-ci.com:80 (34.96.81.152), connection timed out
+ W: Failed to fetch
+ http://apt.postgresql.org/pub/repos/apt/dists/trusty-pgdg/InRelease
+ Could not connect to apt.cache.travis-ci.com:80 (34.96.81.152),
+ connection timed out W: Some index files failed to download. They
+ have been ignored, or old ones used instead. The command "sudo -E
+ apt-get -yq --no-install-suggests --no-install-recommends
+ $(travis_apt_get_options) install texinfo texlive texi2html"
+ failed and exited with 100 during . Your build has been stopped.
+
+
+ M .travis.yml
+
+Wed Jun 26 13:25:53 2019 +0100 Adam Spiers
+
+ * remove trailing whitespace from lines
+
+ M doc/stow.texi
+
+Thu Jun 27 13:27:12 2019 +0100 Adam Spiers
+
+ * Update maintainership to reflect reality (#41) Update maintainership
+ to reflect reality
+
+Wed Jun 26 14:08:48 2019 +0100 Adam Spiers
+
+ * switch from unmaintained texi2html to makeinfo --html --no-split (#42)
+ switch from unmaintained texi2html to makeinfo --html --no-split
+
+Wed Jun 26 13:26:08 2019 +0100 Adam Spiers
+
+ * Update maintainership to reflect reality Troy hasn't been active on
+ the project for many years.
+
+ https://lists.gnu.org/archive/html/stow-devel/2011-11/msg00009.html
+
+
+ M AUTHORS
+ M THANKS
+
+Wed Jun 26 13:37:07 2019 +0100 Adam Spiers
+
+ * Switch to makeinfo --html --no-split for single-page HTML manual (#21)
+ Remove the dependency on the ancient and unmaintained texi2html,
+ which was difficult to get running on most distros other than
+ openSUSE.
+
+ There are two more modern alternative approaches which can replace
+ this:
+
+ - Use texi2any
+ - Use makeinfo --html --no-split
+
+ The latter seems to be the standard way these days, so we switch
+ to that; however we keep Makefile rules for all three, and a phony
+ meta-rule 'manual-single-html-all' to allow quick comparison
+ between them. Make tweaks accordingly to minimise the differences
+ and improve the output.
+
+ The rules for the older two approaches do not get triggered by
+ default.
+
+ Fixes #21: https://github.com/aspiers/stow/issues/21
+
+
+ M .gitignore
+ M MANIFEST.SKIP
+ M Makefile.am
+ M NEWS
+
+Wed Jun 26 13:34:09 2019 +0100 Adam Spiers
+
+ * Include the preamble in online versions of the manual This is more
+ inline with the suggestion in the texinfo manual:
+
+ https://www.gnu.org/software/texinfo/manual/texinfo/html_node/_0040top-Command.html
+
+ and also the preamble is useful in all cases.
+
+
+ M doc/stow.texi
+
+Wed Jun 26 13:33:48 2019 +0100 Adam Spiers
+
+ * Add Guillaume and myself to the list of @authors
+
+ M doc/stow.texi
+
+Wed Jun 26 13:25:53 2019 +0100 Adam Spiers
+
+ * remove trailing whitespace from lines
+
+ M AUTHORS
+
+Tue Jun 25 20:33:48 2019 +0100 Adam Spiers
+
+ * add tools/get-version to MANIFEST Forgot to do this, and it broke
+ ./Build.PL distcheck.
+
+
+ M MANIFEST
+
+Tue Jun 25 20:10:43 2019 +0100 Adam Spiers
+
+ * Merge remote-tracking branch 'bricewge/fix-34'
+
+Tue Jun 25 20:04:11 2019 +0100 Adam Spiers
+
+ * Add some polish to the release process
+
+ M doc/HOWTO-RELEASE
+ A tools/get-version
+
+Tue Jun 25 19:49:46 2019 +0100 Adam Spiers
+
+ * Perform shell expansion on the contents of .stowrc (#40) Perform shell
+ expansion on the contents of .stowrc
+
+Thu Jul 14 14:48:40 2016 -0500 Charles LeDoux
+
+ * Add function to expand ~ in .stowrc files (#14) Add a new
+ expand_tilde() function that performs tilde expansion of strings,
+ and corresponding unit tests:
+
+ * A ~ at the beginning of a path is expanded to the user's
+ home
+ directory.
+ * Literal '~' can be provided with '\~'
+
+ Combine this with expand_environment() in a new expand_filepath()
+ function which applies all (both) required expansion functions to
+ a string, and use that in get_config_file_options() to expand
+ .stowrc options.
+
+ Add more tests to check that tilde expanded in correct places,
+ i.e.:
+
+ * expanded for --target and --dir
+ * not expanded for --ignore, --defer, or --override
+
+ Update documentation on stowrc files according to this
+ functionality change.
+
+ Fixes #14: https://github.com/aspiers/stow/issues/14
+
+
+ M NEWS
+ M bin/stow.in
+ M doc/stow.texi
+ M t/rc_options.t
+
+Thu Jul 14 11:37:42 2016 -0500 Charles LeDoux
+
+ * Apply environment expansion to options in .stowrc files Expand
+ environment variables used in stowrc, as requested in
+
+ https://savannah.gnu.org/bugs/?41826
+
+ This is achieved by creating a new function expand_environment()
+ that replaces any substring of the form '$VAR' or '${VAR}' with
+ contents of environment variable $VAR. Literal '$' can be given
+ by '\$'.
+
+ N.B. The function is only applied to the --target and --dir
+ options, and only for options specified in .stowrc; cli options
+ are left untouched.
+
+ Undefined variables are expanded to the empty string, as they
+ would be in normal shell parameter expansion.
+
+ Unit tests added accordingly:
+
+ - Test expand_environment():
+ * Expand $HOME
+ * Expand ${HOME}
+ * Expand ${WITH SPACE}
+ * Expand '\$HOME'. Expected is '$HOME'
+ * Expand ${UNDEFINED}. Expected is ''.
+
+ - Test that it's applied to the correct options.
+
+ - Test that CLI options are not expanded.
+
+
+ M bin/stow.in
+ M t/cli_options.t
+ M t/rc_options.t
+
+Fri Jul 1 20:07:28 2016 -0500 Charles LeDoux
+
+ * Parse cli and stowrc files separately Why:
+
+ * We want to selectively apply expansion to:
+ * Only options from stowrc files.
+ * Only options that take a path.
+ * This requires ability to:
+ * Differentiate cli options from stowrc options
+ * Distinguish between individual stowrc options.
+
+ This change addresses the need by:
+
+ * Options from ARGV and stowrc files are separately parsed,
+ resulting in
+ two options hashes.
+ * Creating an option hash from stowrc files allows modification
+ of
+ specific arguments without having to rely on something like
+ regex
+ parsing of the options.
+
+ * get_config_file_options modified to return options hash.
+ * Uses the same parse_options function that parses ARGV
+
+ * Add Hash:Merge to dependencies in order to merge the two option
+ hashes.
+
+ * process_options() merges the two option hashes.
+ * Get option hash for ARGV
+ * Get option hash from get_config_file_options().
+ * Merge the two hashes with Hash::Merge.
+ * Sanitation and checks are ran on the merged options.
+
+ * The options -S, -D, and -R are ignored in stowrc files.
+ * Due to the way argument parsing happens, the effect of these
+ actions is not carried from stowrc into parsing of cli
+ options.
+ * It doesn't seem to make sense to put these options in stowrc
+ anyway.
+
+
+ M Build.PL
+ M META.json
+ M META.yml
+ M bin/stow.in
+
+Fri Jun 24 16:34:13 2016 -0500 Charles LeDoux
+
+ * Factor out parsing of options Why:
+
+ * Want to be able to selectively apply filepath expansion to:
+ 1. Only options in a stowrc file.
+ 2. Only options that take a file path.
+
+ * Because of need 1, any expansion must be performed on stowrc
+ options
+ before merging with cli options.
+
+ * Because of need 2, stowrc options need to be parsed before
+ expansion
+ in order to know which options need expanding.
+
+ This change addresses the need by:
+
+ * Create parse_options()
+ * Implements option parsing logic previously in
+ process_options()
+ * Takes an array as parameter instead of assuming ARGV
+ * Edit process_options() to still work as expected.
+ * Only change was to call parse_options() instead of directly
+ parsing ARGV
+
+ * By factoring out the option parsing code, we can reuse the
+ existing
+ parsing code for stowrc options.
+ * Allows expansion of only the option itself, i.e expansion on
+ "$HOME/target" rather than "--target=$HOME/target"
+ * Allows easy determination of which options need expansion.
+
+
+ M bin/stow.in
+
+Thu Jul 14 08:55:55 2016 -0500 Charles LeDoux
+
+ * Add test for conflicting stowrc and cli args Why:
+
+ * Want to add feature to stowrc parsing.
+ * Missing regression test for conflicting cli and stowrc options.
+
+ This change addresses the need by:
+
+ * Add missing regression tests to rc_options.t
+ * Two types of tests for the two types of options possible.
+
+ * For scalar options such as --target, cli arguments should
+ overwrite
+ stowrc arguments.
+
+ * For options that result in a list, such as --ignore, the
+ arguments
+ from cli and stowrc files should be merged.
+
+
+ M t/rc_options.t
+
+Fri Jul 1 18:38:25 2016 -0500 Charles LeDoux
+
+ * Add test harness for stowrc files Why:
+
+ * Planning on developing a new feature for parsing of stowrc
+ files.
+ * Need a test harness that performs initialization and clean up
+ * Initialization: Create directory structure that allows
+ creation of
+ stowrc files without worrying about squashing existing files.
+ * Clean up: Remove all files created during testing.
+
+ This change addresses the need by:
+
+ * Add intialization and cleanup harness in t/rc_options.t
+ * Define the location to write stowrc files to in $RC_FILE
+ * Ensures that location $RC_FILE does not already exist.
+ * Calls the init_test_dirs to bootstrap directory tree.
+ * After all tests are run, removes $RC_FILE and the testing
+ directory tree.
+
+ * Add basic test of stowrc parsing to t/rc_options.t
+ * Provides a template of how to create and test a stowrc file.
+
+ * Newly created t/rc_options.t file added to MANIFEST
+
+
+ M MANIFEST
+ A t/rc_options.t
+
+Fri Jun 24 15:06:06 2016 -0500 Charles LeDoux
+
+ * Change init_test_dirs to point $HOME at $OUT_DIRS Why:
+
+ * Want to add a new feature to parsing of stowrc files.
+ * Need ability to write .stowrc files for testing without risk of
+ squashing existing files.
+
+ This change addresses the need by:
+
+ * Reusing logic in init_test_dirs
+ * init_test_dirs already creates new directory structure and
+ overwrites
+ $HOME to point into /tmp.
+ * This commit changes init_test_dirs to point $HOME at the newly
+ created
+ directory structure ($OUT_DIR) instead of /tmp.
+ * Grants ability to write .stowrc to $HOME without fear.
+ * Pointing $HOME at $OUT_DIR instead of /tmp also makes cleanup
+ easier.
+ * Remove $OUT_DIR vs remove specific files in /tmp.
+
+
+ M t/testutil.pm
+
+Tue Jun 25 19:05:38 2019 +0100 Adam Spiers
+
+ * Don't warn when .stowrc is used We fully support and expect some users
+ using .stowrc, so there is no reason to issue a warning when they
+ do.
+
+
+ M bin/stow.in
+
+Tue Jun 25 19:36:49 2019 +0100 Adam Spiers
+
+ * Group news items for 2.3.0 Since 2.3.0 is a long overdue release and
+ has many changes, document them in NEWS in three groups:
+
+ - New features / changes in behaviour
+ - Documentation fixes and enhancements
+ - Fixes for bugs and technical debt
+
+
+ M NEWS
+
+Tue Jun 25 17:48:07 2019 +0100 Adam Spiers
+
+ * Update docs according to recent commits (#39) Update docs according to
+ recent commits
+
+Tue Jun 25 17:21:53 2019 +0100 Adam Spiers
+
+ * Update NEWS and THANKS according to recent commits
+
+ M NEWS
+ M THANKS
+
+Tue Jun 25 17:25:33 2019 +0100 Adam Spiers
+
+ * Synchronise --verbose documentation The man page was updated with
+ regard to higher --verbose levels but not the info manual, so fix
+ that.
+
+
+ M doc/stow.texi
+
+Tue Jun 25 17:05:43 2019 +0100 Adam Spiers
+
+ * Fix old descriptions of Stow (#22) (#38) Fix old descriptions of Stow
+ (#22)
+
+Mon Nov 21 14:56:26 2016 +0000 Adam Spiers
+
+ * Fix old descriptions of Stow (#22) De-emphasise the package management
+ aspects, since these days almost everyone prefers to use modern
+ package managers such as rpm / dpkg / Nix for (system-wide)
+ package management.
+
+ Also include more popular modern use cases for Stow such as
+ management of dotfiles and software compiled in the user's $HOME
+ directory.
+
+ Fixes #22: https://github.com/aspiers/stow/issues/22
+
+
+ M README.md
+ M bin/stow.in
+ M doc/stow.texi
+ M lib/Stow.pm.in
+
+Tue Jun 25 15:55:15 2019 +0100 Adam Spiers
+
+ * Merge pull request #37 from aspiers/invalid-option-exit-code Return
+ non-zero exit code when invalid option is specified (#34)
+
+Tue Jun 25 13:44:35 2019 +0100 Adam Spiers
+
+ * Return non-zero exit code when invalid option is specified (#34) Also
+ add a unit test for this.
+
+ Fixes #34: https://github.com/aspiers/stow/issues/34
+
+
+ M bin/stow.in
+ M t/cli.t
+
+Tue Jun 25 15:41:41 2019 +0100 Adam Spiers
+
+ * Add black box CLI testing and 2 other tweaks (#36) Add black box CLI
+ testing and 2 other tweaks
+
+Tue Jun 25 14:27:56 2019 +0100 Adam Spiers
+
+ * Add cli.t for testing invocation of stow executable Unlike the other
+ tests, this actually treats stow(1) as a black box script, running
+ it directly rather than require-ing it as a library. This allows
+ us to check things like the exit codes returned.
+
+
+ M MANIFEST
+ A t/cli.t
+
+Tue Jun 25 14:30:08 2019 +0100 Adam Spiers
+
+ * Make dotfiles.t executable for consistency with other tests
+
+ M t/dotfiles.t
+
+Tue Jun 25 13:44:17 2019 +0100 Adam Spiers
+
+ * remove duplicate "the" typo
+
+ M bin/chkstow.in
+
+Tue Jun 11 14:13:51 2019 +0200 Brice Waegeneire
+
+ * retrun exit code 1 when unknown option
+
+ M bin/stow.in
+
+Tue Jun 11 10:53:28 2019 +0200 Brice Waegeneire
+
+ * make non docker scripts more portable
+
+ M build-docker.sh
+ M test-docker.sh
+
+Tue Jun 11 10:28:25 2019 +0200 Brice Waegeneire
+
+ * fix dockerfile apt-get lock issue E: Could not open lock file
+ /var/cache/apt/archives/lock - open (2: No such file or directory)
+ E: Unable to lock the download directory
+
+
+ M docker/Dockerfile
+
+Wed Apr 3 09:48:15 2019 -0600 Will Aoki
+
+ * Avoid dereferencing $ENV{HOME} if it is undefined
+
+ M bin/stow.in
+
+Sat Feb 9 17:08:44 2019 +0000 Adam Spiers
+
+ * Merge pull request #30 from aspiers/chkstow-stow-dir make chkstow
+ honour $STOW_DIR environment variable
+
+Sat Feb 9 17:02:47 2019 +0000 Adam Spiers
+
+ * make chkstow honour $STOW_DIR environment variable Thanks to Matan
+ Nassau for reporting this deficiency.
+
+
+ M THANKS
+ M bin/chkstow.in
+
+Sun Feb 11 17:58:33 2018 +0000 Adam Spiers
+
+ * add Jean Louis to THANKS file Forgot to do this in e7e6c7f.
+
+
+ M THANKS
+
+Sun Feb 11 17:55:40 2018 +0000 Adam Spiers
+
+ * avoid "regex" abbreviation for consistency
+
+ M doc/stow.texi
+
+Sun Feb 11 17:47:06 2018 +0000 Adam Spiers
+
+ * fix erroneous glob examples in --ignore documentation Many thanks to
+ Daniel Shahaf for noticing this.
+
+ http://lists.gnu.org/archive/html/bug-stow/2017-07/msg00000.html
+
+
+ M THANKS
+ M doc/stow.texi
+
+Sun Feb 11 11:52:56 2018 +0000 Adam Spiers
+
+ * update aclocal.m4 using aclocal 1.15.1
+
+ M aclocal.m4
+
+Sun Feb 11 11:47:39 2018 +0000 Adam Spiers
+
+ * update the introductory text to clarify Stow's common usage Thanks to
+ Jean Louis for some suggestions on this.
+
+
+ M doc/stow.texi
+
+Sun Mar 19 21:12:46 2017 +0000 Adam Spiers
+
+ * INSTALL.md: document how to build from git (#20) Fixes
+ https://github.com/aspiers/stow/issues/20
+
+
+ M INSTALL.md
+
+Sat Mar 4 14:28:19 2017 +0000 Adam Spiers
+
+ * fix typo in "Deleting Packages" chapter Thanks to Hongyi Zhao for
+ spotting this error and reporting it.
+
+
+ M THANKS
+ M doc/stow.texi
+
+Sun Dec 18 23:16:41 2016 +0000 Adam Spiers
+
+ * clarify that ~/.stowrc args don't get processed by a shell Address
+ confusion reported here:
+
+ http://lists.gnu.org/archive/html/bug-stow/2016-08/msg00000.html
+
+
+ M doc/stow.texi
+
+Sun Dec 18 23:14:39 2016 +0000 Adam Spiers
+
+ * replace a "you" typo with better text The contents are prepended to
+ the arguments; they still come after the stow executable.
+
+
+ M doc/stow.texi
+
+Sun Dec 18 23:10:13 2016 +0000 Adam Spiers
+
+ * fix documentation for --verbose It actually goes up to 5 these days.
+ Thanks to Kristoffer Haugsbakk for spotting that:
+
+ http://lists.gnu.org/archive/html/bug-stow/2016-08/msg00000.html
+
+
+ M THANKS
+ M bin/stow.in
+
+Sun Nov 20 22:02:19 2016 +0000 Adam Spiers
+
+ * Bump version to 2.3.0
+
+ M META.json
+ M META.yml
+ M configure.ac
+
+Sun Nov 20 21:45:17 2016 +0000 Adam Spiers
+
+ * Prepare NEWS file for 2.3.0 release
+
+ M NEWS
+
+Sun Nov 20 22:16:43 2016 +0000 Adam Spiers
+
+ * HOWTO-RELEASE: use Docker to test before releasing Charles LeDoux did
+ some awesome work providing this Docker environment which can test
+ across multiple Perl versions using perlbrew, so it would be crazy
+ not to use it.
+
+
+ M doc/HOWTO-RELEASE
+
+Sun Nov 20 22:57:08 2016 +0000 Adam Spiers
+
+ * ignore cover_db generated by Coveralls
+
+ M .gitignore
+
+Sun Nov 20 22:16:10 2016 +0000 Adam Spiers
+
+ * tag Docker images with the corresponding version number
+
+ M build-docker.sh
+ M test-docker.sh
+
+Sun Nov 20 22:02:00 2016 +0000 Adam Spiers
+
+ * use PAUSE upload for final validation step of release
+
+ M doc/HOWTO-RELEASE
+
+Sun Nov 20 22:00:46 2016 +0000 Adam Spiers
+
+ * make sure release tags are also pushed to GitHub
+
+ M doc/HOWTO-RELEASE
+
+Sun Nov 20 21:58:31 2016 +0000 Adam Spiers
+
+ * further refine the release process Let's try a new approach where we
+ increment the version number immediately after publishing a
+ release, not just before.
+
+ This will mean that anyone who builds from git gets a version of
+ Stow which is higher than the release which was just cut, and this
+ could provide valuable debugging hints in case a bug report does
+ not clearly state whether the problem arose with the latest
+ release or with a build from git.
+
+
+ M doc/HOWTO-RELEASE
+
+Sun Nov 20 21:51:41 2016 +0000 Adam Spiers
+
+ * whitespace cleanups
+
+ M doc/HOWTO-RELEASE
+ M docker/Dockerfile
+ M docker/bootstrap-perls.sh
+ M docker/run-stow-tests.sh
+ M test-docker.sh
+
+Sun Nov 20 21:18:08 2016 +0000 Adam Spiers
+
+ * THANKS: add some recent contributors
+
+ M THANKS
+
+Sun Nov 20 21:17:46 2016 +0000 Adam Spiers
+
+ * THANKS: clarify mention of Bob Glickstein
+
+ M THANKS
+
+Sun Nov 20 20:55:14 2016 +0000 Adam Spiers
+
+ * HOWTO-RELEASE: add a reminder to update THANKS Make sure the
+ maintainer always gives credit to contributors :-)
+
+
+ M doc/HOWTO-RELEASE
+
+Wed Oct 5 17:47:51 2016 +0100 Adam Spiers
+
+ * Merge pull request #17 from jvkersch/enh/dot-files Special processing
+ for dotfiles
+
+Sun Jul 31 21:55:55 2016 +0100 Joris Vankerschaver
+
+ * Special processing for dotfiles
+
+ M MANIFEST
+ M bin/stow.in
+ M lib/Stow.pm.in
+ M lib/Stow/Util.pm.in
+ A t/dotfiles.t
+
+Sun Sep 25 19:32:08 2016 +0100 Adam Spiers
+
+ * Merge pull request #16 from cledoux/feature/docker Added docker files
+ for local testing.
+
+Tue Sep 20 18:27:46 2016 +0100 Adam Spiers
+
+ * fix naming of man page The title of the generated man page was ending
+ up as something like
+
+ IO::FILE=IO(0XA719C0)(1)
+
+ Also, with newer perls (e.g. v5.22.1), pod2man requires --name if
+ used within a pipeline.
+
+ Closes #18.
+
+ https://github.com/aspiers/stow/issues/18
+
+
+ M Makefile.am
+
+Tue Aug 23 10:37:12 2016 +0100 Adam Spiers
+
+ * remove superfluous space in function call Be consistent with style
+ elsewhere.
+
+
+ M lib/Stow.pm.in
+
+Tue May 10 15:00:13 2016 -0500 Charles LeDoux
+
+ * Add docker files for local testing.
+ * Use docker to locally run tests on multiple perl versions
+ * perlbrew used to install multiple perls
+ * perl environments bootstrapped when image built
+ * Based on travis configuration
+ * Adds docker folder to MANIFEST.SKIP
+ * Running image runs all tests.
+ * If exit with no error, then all tests pass.
+ * ./build-docker.sh builds stow testing image.
+ * ./test-docker.sh runs stow testing image.
+ * Assumes built with options in build-docker.sh
+ * *-docker.sh scripts added to MANIFEST.SKIP
+
+
+ M MANIFEST.SKIP
+ A build-docker.sh
+ A docker/Dockerfile
+ A docker/bootstrap-perls.sh
+ A docker/run-stow-tests.sh
+ A test-docker.sh
+
+Sat Feb 27 12:19:57 2016 -0500 Lucas Theisen
+
+ * fixed testutil to support cygwin which reports -z = true on
+ directories
+
+ M t/testutil.pm
+
+Tue Nov 17 17:27:39 2015 +0000 Adam Spiers
+
+ * another attempt to fix automake config d527094b was not the right fix
+ - Util.pm was being installed alongside Stow.pm under $(PMDIR).
+ This should be the correct fix.
+
+
+ M Makefile.am
+
+Tue Nov 17 01:50:27 2015 +0000 Adam Spiers
+
+ * add coveralls badge
+
+ M README.md
+
+Tue Nov 17 01:43:38 2015 +0000 Adam Spiers
+
+ * add coveralls
+
+ M .travis.yml
+
+Mon Nov 16 22:47:34 2015 +0000 Adam Spiers
+
+ * add make distcheck and Module::Build to Travis tests
+
+ M .travis.yml
+ M Makefile.am
+
+Mon Nov 16 22:50:58 2015 +0000 Adam Spiers
+
+ * add .travis.yml to MANIFEST.SKIP
+
+ M MANIFEST.SKIP
+
+Tue Nov 17 01:34:23 2015 +0000 Adam Spiers
+
+ * fix make distcheck Stow/Util.pm was not being installed correctly
+
+
+ M Makefile.am
+
+Mon Nov 16 22:39:53 2015 +0000 Adam Spiers
+
+ * add Travis CI badge to README.md
+
+ M README.md
+
+Mon Nov 16 22:35:56 2015 +0000 Adam Spiers
+
+ * fix breakage caused by converting files to Markdown
+
+ M MANIFEST
+ M Makefile.am
+ M configure.ac
+
+Mon Nov 16 22:21:44 2015 +0000 Adam Spiers
+
+ * convert INSTALL to Markdown
+
+ D INSTALL
+ A INSTALL.md
+ M README.md
+
+Mon Nov 16 22:12:02 2015 +0000 Adam Spiers
+
+ * convert README to Markdown
+
+R076 README README.md
+
+Mon Nov 16 21:56:45 2015 +0000 Adam Spiers
+
+ * switch to Travis CI containers
+
+ M .travis.yml
+
+Fri Nov 13 14:50:19 2015 +0000 Adam Spiers
+
+ * Merge pull request #9 from Gnouc/master Allow directory with trailing
+ and leading spaces
+
+Fri Nov 13 11:57:21 2015 +0700 LE Manh Cuong
+
+ * Allow directory with trailing and leading spaces
+ - The `sanitize_path_options` functions remove all trailing
+ and leading spaces. So any valid directory like ` 123`,
+ `123 ` can not be used
+
+ - Also if there are two directories ` 123` and `123`, and if
+ user pick the ` 123` as option to `-d` or `-t`, then stow pick
+ directory `123` as the argument instead of ` 123` as user want.
+
+ ```
+ STOW_DIR=. stow -n -v3 -t \ 123 456
+ stow dir is /tmp/test
+ stow dir path relative to target 123 is ..
+ cwd now 123
+ cwd restored to /tmp/test
+ cwd now 123
+ Planning stow of package 456...
+ Stowing contents of ../456 (cwd=/tmp/test/123)
+ Planning stow of package 456... done
+ cwd restored to /tmp/test
+ WARNING: in simulation mode so not modifying filesystem.
+ ```
+ - This commit remove the check in `sanitize_path_options`
+ function,
+ and now stow can work with those directories. There have been a
+ check
+ for valid directory, so we are safe.
+
+
+ M bin/stow.in
+ M t/cli_options.t
+
+Fri Nov 13 11:13:06 2015 +0000 Adam Spiers
+
+ * set up Travis CI
+
+ A .travis.yml
+
+Fri Nov 13 12:04:52 2015 +0000 Adam Spiers
+
+ * add IO::Scalar to build_requires
+
+ M Build.PL
+ M META.json
+ M META.yml
+
+Wed Nov 11 12:25:19 2015 +0000 Adam Spiers
+
+ * Do more validation on --dir / --target directories (#7) Previously
+ STOW_DIR=0 would cause the cwd to be used as the STOW_DIR. Make
+ that instead raise an error. Do similar validation on the target
+ directory.
+
+ Closes #7 - https://github.com/aspiers/stow/pull/7
+
+
+ M bin/stow.in
+
+Wed Nov 11 11:22:05 2015 +0000 Adam Spiers
+
+ * Correctly handle empty STOW_DIR (#5, #6) In shell, a variable is often
+ considered unset even if it is set to the empty string. In other
+ words,
+
+ STOW_DIR= stow [args]
+
+ is an idiomatic alternative to writing:
+
+ unset STOW_DIR
+ stow [args]
+
+ and it also has the advantage of temporarily "unsetting" STOW_DIR
+ for a single command.
+
+ Therefore we should treat STOW_DIR being set to the empty string
+ as equivalent to it not being set at all.
+
+ Thanks to Cuong Manh Le for highlighting this issue!
+
+ Fixes #6 - https://github.com/aspiers/stow/issues/6 Closes #5 -
+ https://github.com/aspiers/stow/pull/5
+
+
+ M THANKS
+ M bin/stow.in
+
+Mon Nov 9 12:37:09 2015 +0000 Adam Spiers
+
+ * More fixes to "make distcheck" As with dc6a141d, the dependency of
+ distributed files on non-distributed files was causing this error:
+
+ ERROR: files left in build directory after distclean:
+
+ The automake FAQ explains why this happens:
+
+
+ https://www.gnu.org/software/automake/manual/html_node/Errors-with-distclean.html
+
+ so change the dependency to Makefile.am which is distributed.
+
+
+ M Makefile.am
+
+Mon Nov 9 11:48:55 2015 +0000 Adam Spiers
+
+ * NEWS: Explain why 2.2.1 was not released
+
+ M NEWS
+
+Mon Nov 9 11:46:50 2015 +0000 Adam Spiers
+
+ * Bump version to 2.2.2
+
+ M META.json
+ M META.yml
+ M configure.ac
+
+Mon Nov 9 11:36:11 2015 +0000 Adam Spiers
+
+ * add Stow/Util.pm.in with @VERSION@ substitution This is now necessary
+ in order to prevent pause.perl.org from complaining:
+
+ Status: Decreasing version number
+ =================================
+
+ module : Stow::Util
+ version: undef
+ in file: lib/Stow/Util.pm
+ status : Not indexed because lib/Stow/Util.pm in
+ A/AS/ASPIERS/Stow-v2.2.0.tar.gz has a higher
+ version number
+ (0)
+
+
+ M .gitignore
+ M MANIFEST
+ M META.json
+ M META.yml
+ M Makefile.am
+ M NEWS
+R099 lib/Stow/Util.pm lib/Stow/Util.pm.in
+
+Mon Nov 9 11:05:00 2015 +0000 Adam Spiers
+
+ * HOWTO-RELEASE: remove body indent
+
+ M doc/HOWTO-RELEASE
+
+Mon Nov 9 11:04:21 2015 +0000 Adam Spiers
+
+ * HOWTO-RELEASE: add link to official GNU maintainers guide
+
+ M doc/HOWTO-RELEASE
+
+Mon Nov 9 10:13:34 2015 +0000 Adam Spiers
+
+ * HOWTO-RELEASE: encourage use of SemVer
+
+ M doc/HOWTO-RELEASE
+
+Mon Nov 9 10:11:59 2015 +0000 Adam Spiers
+
+ * HOWTO-RELEASE: encourage GPG-signing of release tags
+
+ M doc/HOWTO-RELEASE
+
+Mon Nov 9 10:10:36 2015 +0000 Adam Spiers
+
+ * HOWTO-RELEASE: use gnulib for gendocs instead of texinfo These days it
+ seems that gendocs can be done entirely from the templates in
+ gnulib, rather than requiring the texinfo repository.
+
+
+ M doc/HOWTO-RELEASE
+
+Mon Nov 9 10:08:31 2015 +0000 Adam Spiers
+
+ * fix make distcheck The dependency of the distributed file stow.8 on
+ the non-distributed file Makefile was causing this error:
+
+ ERROR: files left in build directory after distclean:
+ ./doc/stow.8
+
+ The automake FAQ explains why this happens:
+
+
+ https://www.gnu.org/software/automake/manual/html_node/Errors-with-distclean.html
+
+ so change stow.8 to depend on Makefile.am which is distributed.
+
+
+ M Makefile.am
+
+Mon Nov 9 09:28:11 2015 +0000 Adam Spiers
+
+ * HOWTO-RELEASE: include automake --add-missing This is necessary since
+ automake files were removed from the repository recently.
+
+
+ M doc/HOWTO-RELEASE
+
+Mon Nov 9 09:27:49 2015 +0000 Adam Spiers
+
+ * Update META.{yml,json} Rebuilt with newer Module::Build.
+
+
+ M META.json
+ M META.yml
+
+Mon Nov 9 09:17:34 2015 +0000 Adam Spiers
+
+ * Bump version to 2.2.1
+
+ M configure.ac
+
+Mon Nov 9 09:16:32 2015 +0000 Adam Spiers
+
+ * Prepare NEWS file for 2.2.1 release
+
+ M NEWS
+
+Mon Nov 9 09:15:51 2015 +0000 Adam Spiers
+
+ * Remove trailing whitespace from NEWS file
+
+ M NEWS
+
+Mon Sep 17 16:55:17 2012 +0100 Adam Spiers
+
+ * Add more index entries to the manual.
+
+ M doc/stow.texi
+
+Mon Sep 17 16:55:03 2012 +0100 Adam Spiers
+
+ * Fix a typo in the docs.
+
+ M doc/stow.texi
+
+Sat Feb 7 19:29:43 2015 +0000 Adam Spiers
+
+ * substitute @VERSION@ in stow.8 man page Thanks to Yue Du for spotting
+ this issue and providing the fix.
+
+
+ M Makefile.am
+
+Sat Feb 7 19:24:22 2015 +0000 Adam Spiers
+
+ * remove automake files These should be generated at development /
+ install-time, rather than distributing versions via git which will
+ inevitably age over time.
+
+
+ A automake/.gitignore
+ D automake/install-sh
+ D automake/mdate-sh
+ D automake/missing
+
+Thu Jan 1 19:02:46 2015 +0000 Adam Spiers
+
+ * 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
+
+
+ M lib/Stow.pm.in
+ M t/stow.t
+
+Thu Jan 1 19:02:26 2015 +0000 Adam Spiers
+
+ * improve debug
+
+ M lib/Stow.pm.in
+
+Mon Sep 22 00:36:25 2014 +0100 Adam Spiers
+
+ * make it more obvious when target (sub)directory is skipped This should
+ avoid the sort of confusion seen in:
+
+ https://github.com/aspiers/shell-env/issues/1
+
+
+ M lib/Stow.pm.in
+ M t/stow.t
+ M t/testutil.pm
+ M t/unstow.t
+ M t/unstow_orig.t
+
+Mon Sep 22 00:40:25 2014 +0100 Adam Spiers
+
+ * trim trailing whitespace
+
+ M t/stow.t
+
+Mon Sep 22 00:14:56 2014 +0100 Adam Spiers
+
+ * update aclocal
+
+ M aclocal.m4
+
+Mon Jun 16 10:22:55 2014 +0100 Adam Spiers
+
+ * avoid precedence warning With Perl 5.20, installing a package with
+ stow gives a warning like this:
+
+ Possible precedence issue with control flow operator at
+ /gar/packages/stow-2.2.0/lib/perl5/site_perl/5.20.0/Stow.pm line
+ 1736.
+
+ http://lists.gnu.org/archive/html/bug-stow/2014-06/msg00000.html
+
+ Suggested-by: Adam Sampson
+
+
+ M lib/Stow.pm.in
+
+Wed Apr 24 08:44:32 2013 +0100 Adam Spiers
+
+ * add TODO for install-hooks
+
+ M TODO
+
+Fri Apr 12 17:47:29 2013 +0100 Adam Spiers
+
+ * 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.
+
+ http://article.gmane.org/gmane.comp.gnu.stow.bugs/8820
+
+
+ M lib/Stow.pm.in
+
+Thu Jan 17 12:25:43 2013 +0000 Adam Spiers
+
+ * default-ignore-list: ignore 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.
+
+
+ M default-ignore-list
+
+Mon Jul 9 01:06:13 2012 +0100 Adam Spiers
+
+ * Only include $! in error messages for failed syscalls.
+
+ M lib/Stow.pm.in
+ M lib/Stow/Util.pm
+
+Mon Jul 9 01:05:27 2012 +0100 Adam Spiers
+
+ * Fix RT ticket #75349 https://rt.cpan.org/Ticket/Display.html?id=75349
+
+
+ M bin/stow.in
+
+Wed May 16 11:00:38 2012 +0100 Adam Spiers
+
+ * Bug #36478 - fix Perl warnings from 'require 5.6.1;'
+ https://savannah.gnu.org/bugs/?36478
+
+
+ M bin/chkstow.in
+ M bin/stow.in
+
+Thu Mar 1 11:40:34 2012 +0000 Adam Spiers
+
+ * Revamp README.
+
+ M README
+
+Sun Feb 19 19:15:48 2012 +0000 Adam Spiers
+
+ * Remove accidentally duplicated code.
+
+ M t/examples.t
+
+Sun Feb 19 11:54:53 2012 +0000 Adam Spiers
+
+ * Improve docs for path_owned_by_package()
+
+ M lib/Stow.pm.in
+
+Sun Feb 19 01:42:10 2012 +0000 Adam Spiers
+
+ * Fix typo in manual.
+
+ M doc/stow.texi
+
+Sun Feb 19 01:42:04 2012 +0000 Adam Spiers
+
+ * Add a few more items to index.
+
+ M doc/stow.texi
+
+Sat Feb 18 20:43:20 2012 +0000 Adam Spiers
+
+ * Add boilerplate commit message for web docs update.
+
+ M doc/HOWTO-RELEASE
+
+Sat Feb 18 17:08:19 2012 +0000 Adam Spiers
+
+ * Bump version to 2.2.0
+
+ M META.json
+ M META.yml
+ M NEWS
+ M configure.ac
+
+Sat Feb 18 20:13:32 2012 +0000 Adam Spiers
+
+ * Add --no-folding option.
+
+ M NEWS
+ M bin/stow.in
+ M doc/stow.texi
+ M lib/Stow.pm.in
+ M t/stow.t
+ M t/testutil.pm
+ M t/unstow.t
+
+Sat Feb 18 14:20:07 2012 +0000 Adam Spiers
+
+ * Remove -a option for safety reasons (but keep --adopt).
+
+ M NEWS
+ M bin/stow.in
+ M doc/stow.texi
+
+Sat Feb 18 20:12:14 2012 +0000 Adam Spiers
+
+ * Improve error message when package is not found.
+
+ M NEWS
+ M lib/Stow.pm.in
+
+Sat Feb 18 20:19:05 2012 +0000 Adam Spiers
+
+ * Use make_invalid_link() to reliably setup symlink fixtures.
+
+ M NEWS
+ M t/chkstow.t
+ M t/cleanup_invalid_links.t
+ M t/stow.t
+ M t/testutil.pm
+ M t/unstow.t
+ M t/unstow_orig.t
+
+Sat Feb 18 15:47:36 2012 +0000 Adam Spiers
+
+ * Add documentation improvements to NEWS.
+
+ M NEWS
+
+Sat Feb 18 17:07:15 2012 +0000 Adam Spiers
+
+ * Update TODO
+
+ M TODO
+
+Sat Feb 18 20:32:40 2012 +0000 Adam Spiers
+
+ * Last known bug was fixed a long time ago :-)
+
+ M doc/stow.texi
+
+Sat Feb 18 15:47:19 2012 +0000 Adam Spiers
+
+ * Update structure of manual to match recommended texinfo structure. TOC
+ now appears after title page. Copying information is no longer
+ duplicated.
+
+
+ M doc/stow.texi
+
+Sat Feb 18 15:46:14 2012 +0000 Adam Spiers
+
+ * Fix various formatting issues in the manual.
+
+ M doc/stow.texi
+
+Sat Feb 18 15:45:49 2012 +0000 Adam Spiers
+
+ * Add some more index entries to the manual.
+
+ M doc/stow.texi
+
+Sat Feb 18 15:45:16 2012 +0000 Adam Spiers
+
+ * Add some @sections to the manual to break larger nodes up.
+
+ M doc/stow.texi
+
+Sat Feb 18 15:17:21 2012 +0000 Adam Spiers
+
+ * Use @command / @samp / @env / @var in the manual where appropriate,
+ rather than @code.
+
+ M doc/stow.texi
+
+Sat Feb 18 15:03:52 2012 +0000 Adam Spiers
+
+ * Fix formatting of regexp values in the manual.
+
+ M doc/stow.texi
+
+Sat Feb 18 14:15:14 2012 +0000 Adam Spiers
+
+ * Add --adopt to usage text.
+
+ M bin/stow.in
+
+Sat Feb 18 14:11:33 2012 +0000 Adam Spiers
+
+ * Improve ordering of options in usage text.
+
+ M bin/stow.in
+
+Sat Feb 18 14:08:17 2012 +0000 Adam Spiers
+
+ * Add missing options to pod, and reference to front-end documentation.
+
+ M lib/Stow.pm.in
+
+Sat Feb 18 14:07:45 2012 +0000 Adam Spiers
+
+ * Ignore tmp-testing-trees anywhere.
+
+ M .gitignore
+ M MANIFEST.SKIP
+
+Sat Feb 18 12:28:00 2012 +0000 Adam Spiers
+
+ * Make shared library tests match real-world scenarios. Typically,
+ libfoo.so.X.Y.Z is the file, and libfoo.so is the symlink which
+ points to it.
+
+
+ M t/stow.t
+
+Sat Feb 18 11:53:46 2012 +0000 Adam Spiers
+
+ * Include --simulate in usage text.
+
+ M bin/stow.in
+
+Fri Jan 13 11:34:55 2012 +0000 Adam Spiers
+
+ * Avoid "Use of uninitialized value" warnings from test suite. Happened
+ on some versions of Perl when TEST_VERBOSE not yet. Thanks Adam
+ Sampson!
+
+
+ M lib/Stow.pm.in
+
+Thu Jan 12 17:54:32 2012 +0000 Adam Spiers
+
+ * Remove reference to old FSF address (thank you rpmlint for catching
+ this!)
+
+ M bin/stow.in
+
+Wed Jan 11 14:01:40 2012 +0000 Adam Spiers
+
+ * Remove "There are no outstanding operations to perform" warning. This
+ is more in keeping with the UNIX convention of no output on
+ success, and is also the way Stow v1.x behaved. Thanks to Adam
+ Sampson for the suggestion.
+
+
+ M NEWS
+ M THANKS
+ M lib/Stow.pm.in
+ M t/stow.t
+ M t/unstow.t
+ M t/unstow_orig.t
+
+Tue Jan 10 12:17:58 2012 +0000 Adam Spiers
+
+ * Fix wrong version number in NEWS.
+
+ M NEWS
+
+Mon Jan 9 21:39:35 2012 +0000 Adam Spiers
+
+ * Bump version to 2.1.3
+
+ M META.json
+ M META.yml
+ M NEWS
+ M configure.ac
+
+Mon Jan 9 21:32:31 2012 +0000 Adam Spiers
+
+ * Rename test files to reflect their purpose.
+
+ M MANIFEST
+R099 t/stow_contents.t t/stow.t
+R099 t/unstow_contents.t t/unstow.t
+R099 t/unstow_contents_orig.t t/unstow_orig.t
+
+Mon Jan 9 21:31:46 2012 +0000 Adam Spiers
+
+ * Rename stow.t to be more consistent with its purpose.
+
+ M MANIFEST
+R098 t/stow.t t/cli_options.t
+
+Mon Jan 9 22:10:19 2012 +0000 Adam Spiers
+
+ * perl Build.PL needs a prefix during testing
+
+ M doc/HOWTO-RELEASE
+
+Mon Jan 9 21:25:35 2012 +0000 Adam Spiers
+
+ * Add --adopt / -a option.
+
+ M NEWS
+ M bin/stow.in
+ M doc/stow.texi
+ M lib/Stow.pm.in
+ M lib/Stow/Util.pm
+ M t/stow_contents.t
+ M t/testutil.pm
+
+Mon Jan 9 21:11:58 2012 +0000 Adam Spiers
+
+ * Add stacktrace to internal error report to aid debugging.
+
+ M lib/Stow.pm.in
+
+Mon Jan 9 18:32:06 2012 +0000 Adam Spiers
+
+ * Use get_conflict_count() in tests since get_conflicts() no longer
+ returns a flat structure.
+
+ M t/cleanup_invalid_links.t
+ M t/examples.t
+ M t/stow_contents.t
+ M t/unstow_contents.t
+ M t/unstow_contents_orig.t
+
+Mon Jan 9 17:52:11 2012 +0000 Adam Spiers
+
+ * Link to website to encourage users to report bugs.
+
+ M lib/Stow.pm.in
+
+Mon Jan 9 16:42:40 2012 +0000 Adam Spiers
+
+ * Improve readability of NEWS file when viewed raw.
+
+ M NEWS
+
+Mon Jan 9 16:25:27 2012 +0000 Adam Spiers
+
+ * Improve existing comments.
+
+ M lib/Stow.pm.in
+
+Wed Dec 21 11:45:59 2011 +0000 Adam Spiers
+
+ * Improve the footnote which defines 'subpath'.
+
+ M doc/stow.texi
+
+Wed Dec 21 11:45:43 2011 +0000 Adam Spiers
+
+ * Add another ignore example to the manual and test suite.
+
+ M doc/stow.texi
+ M t/ignore.t
+
+Thu Dec 15 21:14:07 2011 +0000 Adam Spiers
+
+ * Fix some incorrect CPAN meta-data about the project.
+
+ M Build.PL
+ M META.json
+ M META.yml
+
+Tue Dec 13 16:12:29 2011 +0000 Adam Spiers
+
+ * Make configure check for Perl modules required by test suite.
+
+ M NEWS
+ M configure.ac
+
+Sun Dec 11 13:23:37 2011 +0000 Adam Spiers
+
+ * Make stow script return true for t/stow.t According to
+ http://matrix.cpantesters.org/?dist=Stow this only seems to be an
+ issue with Perl <= 5.8.7.
+
+
+ M bin/stow.in
+
+Sun Dec 11 13:12:32 2011 +0000 Adam Spiers
+
+ * Automate check for 'use lib' line in bin/stow.
+
+ M Build.PL
+ M doc/HOWTO-RELEASE
+
+Tue Dec 6 18:30:28 2011 +0000 Adam Spiers
+
+ * Bump version to 2.1.2.
+
+ M META.json
+ M META.yml
+ M configure.ac
+
+Wed Dec 7 20:28:28 2011 +0000 Adam Spiers
+
+ * Significantly improve the handling of --with-pmdir.
+
+ M INSTALL
+ M Makefile.am
+ M NEWS
+ M bin/stow.in
+ M configure.ac
+ M doc/HOWTO-RELEASE
+
+Wed Dec 7 01:20:07 2011 +0000 Adam Spiers
+
+ * Make capitalisation consistent in usage text.
+
+ M bin/stow.in
+
+Wed Dec 7 20:31:18 2011 +0000 Adam Spiers
+
+ * Abort ./configure if we can't find Perl.
+
+ M NEWS
+ M configure.ac
+
+Wed Dec 7 01:23:41 2011 +0000 Adam Spiers
+
+ * Ensure the ChangeLog is up-to-date when making a new distribution.
+ Thanks to Stefano Lattarini for this suggestion.
+
+
+ M Makefile.am
+ M NEWS
+ M doc/HOWTO-RELEASE
+
+Wed Dec 7 00:38:16 2011 +0000 Adam Spiers
+
+ * Use maintainer-clean-local rule, not maintainer-clean.
+
+ M Makefile.am
+
+Tue Dec 6 18:20:03 2011 +0000 Adam Spiers
+
+ * `make clean' shouldn't remove files which the user may not be able to
+ rebuild.
+
+ M Makefile.am
+
+Tue Dec 6 10:35:31 2011 +0000 Adam Spiers
+
+ * Bump version to 2.1.1
+
+ M META.json
+ M META.yml
+ M NEWS
+ M configure.ac
+
+Tue Dec 6 17:33:41 2011 +0000 Adam Spiers
+
+ * Ignore .mrdownload files from my `download' plugin to Joey Hess' mr
+ utility.
+
+ M MANIFEST.SKIP
+
+Tue Dec 6 17:30:58 2011 +0000 Adam Spiers
+
+ * Add a workaround for not being able to ensure that git commit triggers
+ ChangeLog update.
+
+ M doc/HOWTO-RELEASE
+
+Tue Dec 6 17:24:44 2011 +0000 Adam Spiers
+
+ * Show when ChangeLog is rebuilt.
+
+ M Makefile.am
+
+Tue Dec 6 17:22:21 2011 +0000 Adam Spiers
+
+ * Fix release instructions regarding CPAN distribution.
+
+ M doc/HOWTO-RELEASE
+
+Tue Dec 6 17:08:21 2011 +0000 Adam Spiers