[tahoe-lafs-trac-stream] [Tahoe-LAFS] #2329: cp -r stops with an exception
Tahoe-LAFS
trac at tahoe-lafs.org
Thu Jan 29 12:12:52 UTC 2015
#2329: cp -r stops with an exception
-------------------------+-------------------------------------------------
Reporter: zooko | Owner: warner
Type: defect | Status: assigned
Priority: major | Milestone: 1.10.1
Component: code- | Version: 1.10.0
frontend-cli | Keywords: regression tahoe-cp review-needed
Resolution: | release-blocker
Launchpad Bug: |
-------------------------+-------------------------------------------------
Comment (by zooko):
My original comment:20 was badly misformatted which hid some of the
structure of my proposed rules. Here it is again, unchanged except for
proper formatting.
Here's my attempt to fill out the table from comment:17 for a certain rule
that I have in my mind right now (written below).
* "Rule comment:20"
* (F1) `cp -r PARENTCAP/dir local/` -> `local/dir/file.txt`
* (F2) `cp -r PARENTCAP/dir local/missing` ->
`local/missing/dir/file.txt`
* (G1) `cp -r DIRCAP local/` -> `local/file.txt`
* (G2) `cp -r DIRCAP local/missing` -> `local/missing/file.txt`
* (H1) `cp -r DIRCAP_ALIAS: local/` -> `local/file.txt`
* (H2) `cp -r DIRCAP_ALIAS: local/missing` -> `local/missing/file.txt`
* (I1) `cp -r DIRCAP/file.txt local/` -> `local/file.txt`
* (I2) `cp -r DIRCAP/file.txt local/missing` -> `local/missing`
* (J1) `cp -r FILECAP local/` -> "error, you must specify a destination
filename"
* (J2) `cp -r FILECAP local/missing` -> `local/missing`
"Rule comment:20" is:
.1. If the source is a directory:
.a. If the target is the name of a locally existing file, then "error:
there is already a local file present under the name $TARGET".
.b. If the target is the name of something not locally existing, then
mkdir it and then use it as "target directory".
.c. If the target is the name of a locally existing directory, then
proceed to use it as "target directory".
.d. Check whether the source directory has a name (as in F1, F2) or has
no name (as in G1, G2, H1, H2). If it has a name then we say that the
source means the bag itself — the directory, and if it has no name then we
say that the source means the contents of the bag — the contents of the
directory.
.i. Now if the source is the bag itself, then mkdir a new directory
inside "target directory", named by the name of the source directory, and
copy the contents of the bag into "target directory"/"source directory
name"/ (which are cases F1 and F2).
.ii. Else (the source was the contents of the bag instead of the bag
itself) copy the contents of the bag into "target directory"/ (which are
cases G1, G2, H1, and H2).
.2. If the source is a file, then check if the target is an existing
directory.
.a. If the source is a nameless file (as in J1, J2) *and* target is an
existing directory (as in J1), then "error, you must specify a destination
filename".
.b. Else, if the source is a nameless file and the target is not an
existing directory, then use the target as the local filename (which is
case J2).
.c. Else, if the source is a named file and the target is an existing
directory, then use the source filename within the target existing
directory (which is case I1).
.d. Else, if the source is a named file and the target is not an
existing directory, then use the target as the local filename (which is
case I2).
--
Ticket URL: <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2329#comment:27>
Tahoe-LAFS <https://Tahoe-LAFS.org>
secure decentralized storage
More information about the tahoe-lafs-trac-stream
mailing list