Subject: "cp -R" (on 1.6.2) blows up on identical symlinks!?!?
To: NetBSD Userlevel Technical Discussion List <tech-userlevel@NetBSD.ORG>
From: Greg A. Woods <woods@weird.com>
List: tech-userlevel
Date: 05/20/2004 20:44:08
I was trying to avoid having to de-install p5-perl-headers so I thought
I'd try forcing the install only to be tripped up by this:

/bin/cp -R /var/package-obj/devel/p5-perl-headers/work/h2ph/* /usr/pkg/lib/perl5/site_perl/5.6.1/alpha-netbsd
cp: cannot overwrite directory /usr/pkg/lib/perl5/site_perl/5.6.1/alpha-netbsd/machine with non-directory /var/package-obj/devel/p5-perl-headers/work/h2ph/machine

The trick here is that it's not a directory that's being overwritten --
it's a symlink to a directory:

$ ls -ld /var/package-obj/devel/p5-perl-headers/work/h2ph/machine 
lrwxr-xr-x  1 woods  wheel  5 May 20 20:21 /var/package-obj/devel/p5-perl-headers/work/h2ph/machine -> alpha

and it has the exact same target as the existing symlink:

$ ls -ld /usr/pkg/lib/perl5/site_perl/5.6.1/alpha-netbsd/machine  
lrwxr-xr-x  1 root  wheel  5 Feb 26 15:41 /usr/pkg/lib/perl5/site_perl/5.6.1/alpha-netbsd/machine -> alpha


This seems rather surprising at best, and perhaps undesirable as well.

Is this a bug?  Should '-P' have been used?  Would '-P' help?

I think '-P' should be used:

       * If the -R option was specified:

            * If none of the options -H, -L, nor -P were specified, it
              is unspecified which of -H, -L, or -P will be used as a
              default.

and if it works as SuSv3 says here then it should help too:

            * If the -P option was specified, cp shall copy any symbolic
              link specified as a source_file operand and any symbolic
              links encountered during traversal of a file hierarchy,
              and shall not follow any symbolic links.

unfortunately it doesn't seem to help:

/bin/cp -RP /var/package-obj/devel/p5-perl-headers/work/h2ph/* /usr/pkg/lib/perl5/site_perl/5.6.1/alpha-netbsd
cp: cannot overwrite directory /usr/pkg/lib/perl5/site_perl/5.6.1/alpha-netbsd/machine with non-directory /var/package-obj/devel/p5-perl-headers/work/h2ph/machine

Should I send-pr something about this?

-- 
						Greg A. Woods

+1 416 218-0098                  VE3TCP            RoboHack <woods@robohack.ca>
Planix, Inc. <woods@planix.com>          Secrets of the Weird <woods@weird.com>