bug#47151: closed (Re: bug#47151: cp --recursive funky behaviour)

2022-02-21 Thread Paul Eggert

On 2/21/22 10:49, Tomas wrote:


I found this, I am not sure whether it's the right specs.

https://pubs.opengroup.org/onlinepubs/9699919799.2018edition/


Yes, or more precisely for 'cp':

https://pubs.opengroup.org/onlinepubs/9699919799/utilities/cp.html


"2) f) The files in the directory source_file shall be copied to the directory 
dest_file, taking the four steps (1 to 4)
listed here with the files as source_files."

Is this the relevant part? It seems to me that this would support copying src/a 
and src/b (the files in the directory source_file) to dest/a and dest/b (copied 
to the directory dest_file) rather than to dest/src/a and dest/src/b (which 
would be copying the directory, not the files in the directory). But maybe I'm 
missing a part of the spec or am interpreting it differently.


Yes, I think the part you're missing is below. Your first "cp -r src 
dest" uses the 3rd paragraph quoted below; your second "cp -r src dst" 
uses the 2nd paragraph.


=

The third synopsis form is denoted by two or more operands where the -R 
option is specified. The cp utility shall copy each file in the file 
hierarchy rooted in each source_file to a destination path named as follows:


If target exists and names an existing directory, the name of the 
corresponding destination path for each file in the file hierarchy shall 
be the concatenation of target, a single  character if target did 
not end in a , and the pathname of the file relative to the 
directory containing source_file.


If target does not exist and two operands are specified, the name 
of the corresponding destination path for source_file shall be target; 
the name of the corresponding destination path for all other files in 
the file hierarchy shall be the concatenation of target, a  
character, and the pathname of the file relative to source_file.


=





bug#47151: closed (Re: bug#47151: cp --recursive funky behaviour)

2022-02-21 Thread Tomas
Hello.

Interesting, so cp complies to the posix specifications.

I found this, I am not sure whether it's the right specs.

https://pubs.opengroup.org/onlinepubs/9699919799.2018edition/
"2) f) The files in the directory source_file shall be copied to the directory 
dest_file, taking the four steps (1 to 4)
listed here with the files as source_files."

Is this the relevant part? It seems to me that this would support copying src/a 
and src/b (the files in the directory source_file) to dest/a and dest/b (copied 
to the directory dest_file) rather than to dest/src/a and dest/src/b (which 
would be copying the directory, not the files in the directory). But maybe I'm 
missing a part of the spec or am interpreting it differently.

Regards, Tomas.










 Activado lun, 21 feb 2022 06:55:03 -0300 GNU bug Tracking System 
 escribió 



Your bug report 
 
#47151: cp --recursive funky behaviour 
 
which was filed against the coreutils package, has been closed. 
 
The explanation is attached below, along with your original report. 
If you require more details, please reply to 47...@debbugs.gnu.org. 
 
-- 
47151: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=47151 
GNU Bug Tracking System 
Contact help-debb...@gnu.org with problems 


= Forwarded message =

Subject: Re: bug#47151: cp --recursive funky behaviour
From: "Paul Eggert"
Date: Mon, 21 Feb 2022 01:54:02 -0800
To: "Tomas"
Cc: <47151-d...@debbugs.gnu.org>

- Contents -

On 3/14/21 17:47, Tomas wrote: 
> cd /tmp 
> mkdir src 
> touch src/a 
> cp -r src dest 
> 
> #damn, I forgot a file 
> touch src/b 
> cp -r src dest 
> ls dest 
> # a dest 
 
cp has behaved that way for ages, and is required to behave that way by 
POSIX, so this is not a bug. To sidestep the issue, you can use the -T 
option of GNU cp. Closing the bug report. 
 


== End of Forwarded Mail ==



= Forwarded message =

Subject: cp --recursive funky behaviour
From: "Tomas"
Date: Sun, 14 Mar 2021 21:47:05 -0300
To: "bug-coreutils"

- Contents -

cd /tmp
mkdir src
touch src/a
cp -r src dest

#damn, I forgot a file
touch src/b
cp -r src dest
ls dest
# a dest













== End of Forwarded Mail ==