Skip to content
Snippets Groups Projects
  • Adam Williamson's avatar
    415411a3
    google: delete original after successful rename · 415411a3
    Adam Williamson authored
    In GDrive, filenames aren't unique, and directories are just
    special files - so you can have multiple files with the same
    name, multiple directories with the same name, and even files
    with the same names as directories.
    
    OC doesn't handle this at all, though, and just wants to act
    as if file and directory names *are* unique. So when renaming,
    we must check if there's an existing object with the same
    file or directory name before we commit the rename, and
    explicitly delete it if the rename is successful. (Other
    providers like dropbox do the same for files, but intentionally
    don't do it for directories; we really need to do it for
    directories too.)
    
    A good way to observe this is to run the storage unit tests
    and look at the state of the Drive afterwards. Without this
    commit, there will be several copies of all the test files
    and directories. After this commit, there's just one of each.
    
    We can't just say "hey, Drive lets us do this, what's the
    problem?" because we don't handle multiple-objects, same-name
    cases - getDriveFile() just bails and prints an error if it
    searches for the file or directory with a given name and gets
    multiple results.
    415411a3
    History
    google: delete original after successful rename
    Adam Williamson authored
    In GDrive, filenames aren't unique, and directories are just
    special files - so you can have multiple files with the same
    name, multiple directories with the same name, and even files
    with the same names as directories.
    
    OC doesn't handle this at all, though, and just wants to act
    as if file and directory names *are* unique. So when renaming,
    we must check if there's an existing object with the same
    file or directory name before we commit the rename, and
    explicitly delete it if the rename is successful. (Other
    providers like dropbox do the same for files, but intentionally
    don't do it for directories; we really need to do it for
    directories too.)
    
    A good way to observe this is to run the storage unit tests
    and look at the state of the Drive afterwards. Without this
    commit, there will be several copies of all the test files
    and directories. After this commit, there's just one of each.
    
    We can't just say "hey, Drive lets us do this, what's the
    problem?" because we don't handle multiple-objects, same-name
    cases - getDriveFile() just bails and prints an error if it
    searches for the file or directory with a given name and gets
    multiple results.