[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