Re: Fun with Moves and Copy

>>>Using the term "move" for a "merge" is rather bogus, but with the
>>>prefacing statement, the user will know what they meant.

>>>Here I'll disagree strongly.  A "move" (i.e. "rename") command is
essential.
>>>A merge command is useful, but not a replacement for move.


Ahhh....

The spec makes more sense when read that "Move" is a "Rename".  But then
what is a "Copy"????  Is it a rename or a Copy??  This is confusing.

I feel that Move and Copy should be made to be "Merge" type functions.  The
overwrite flag allows for the "Rename", its simply a Move with overwrite set
to "F".  In this case, if a file exists, it tells you it cannot rename to a
file that already exists...

I see a few possibilities in desired functionality.

1)  A person wants to "Rename" a file or directory.  The Webdav client
issues a "Move" with the overwrite flag set to "F".  This will cause the
"Rename" to succeed if no file exists, or to fail if the file does exist.
At this point the user can do a delete to get rid of the older file or dir,
or simply not do the move.  (A Webdav client could also implement the delete
then move if that IS the desired functionality, but the server won't do this
on its own).

2)  The person wants to "Move/Merge" files.  Webdav client issues the "Move"
with overwrite to "F".  If the file exists, an error is returned.  This
gives the client the chance to ask the user if she wants to
"Overwrite/Merge" the files into the existing directory (or replace the
existing file if this is at the file level).  Then the overwrite = "T" will
do the merge.

3)  The person wants to "Copy/Merge".  This works just like number 2, except
for copies of the files are made at the destination instead of "Moving" the
originals.

4)  The person wants to "Move/Replace" the existing files.  If the Webdav
client supports this, it can simply do a "Move" with overwrite to "F".  When
the Webdav client gets the error, it can issue the "DELETE", then do the
"MOVE".  No functionality lost.  Or the Webdav client can make the User
issue the delete, this way the user won't loose any files unknowingly.  The
Webdav client also has time to respond to an error during the "Delete"
phase, it could decide not to do the move and give a valid response to the
user.

5)  "Copy/Replace" see number 4.

In this way the Spec will be able to do what it does today, AND have the
merge functionality.  This means that we won't need another method type put
into HTTP.  A client can then implement #1-5 above by simply issuing Webdav
commands.

If we stick with the spec, there will be long-term confusion and problems
with permissions and locking on the "Delete" phase of Move/Copy.  I believe
it far safer (and more understandable to the user) to have Move/Copy do
merges.    I also believe that the use-case of merge will be used far more
than the complete replace.

If the move is accross servers http://foo/bar to http://foobar/fee/bar the
only way the server can do this is by doing a "Head" or "Propfind" or
sometyhing to the other server to see if the file exists (and erroring if
the
overwrite = "F").  Then follow it up by a "Put".  The server could do a
"Delete" if the overwrite = "T", but this is not necessary, I think it
should simply do a "Merge" by doing the "Put".  If the user or Webdav client
wants to do a replace, have IT do the "Delete" to the other server, foobar,
itself.....

The only drawback is that replace now takes 2 Webdav calls instead of just
1.  Not too terrible, and the user (or Webdav client) is in charge of the
whole thing :)



Kevin

Received on Monday, 19 April 1999 13:14:13 UTC