mirror of
https://github.com/s3fs-fuse/s3fs-fuse.git
synced 2024-12-23 17:28:56 +00:00
Renaming directories currently have an issue. If you
rename (mv) a directory, its contents "disappear". To get the contents back, just re-create the directory. This issue has led to more than one support issues. This patch disallows renaming of directories and returns a operation not supported message, e.g. % mv dir1 dir2 mv: cannot move `dir1' to `dir2': Operation not supported Another observation is that when a directory was renamed it loses its directory status and becomes a normal file. This is a first step to allow for supporting directory renames. git-svn-id: http://s3fs.googlecode.com/svn/trunk@260 df820570-a93a-0410-bd06-b72b767a4274
This commit is contained in:
parent
58be75f036
commit
b7fc931962
27
src/s3fs.cpp
27
src/s3fs.cpp
@ -1022,7 +1022,7 @@ static int s3fs_rmdir(const char *path) {
|
|||||||
|
|
||||||
VERIFY(my_curl_easy_perform(curl.get()));
|
VERIFY(my_curl_easy_perform(curl.get()));
|
||||||
|
|
||||||
cout << endl << responseText << endl;
|
// cout << endl << responseText << endl;
|
||||||
if (responseText.find ("<CommonPrefixes>") != std::string::npos ||
|
if (responseText.find ("<CommonPrefixes>") != std::string::npos ||
|
||||||
responseText.find ("<ETag>") != std::string::npos ) {
|
responseText.find ("<ETag>") != std::string::npos ) {
|
||||||
// directory is not empty
|
// directory is not empty
|
||||||
@ -1077,6 +1077,29 @@ static int s3fs_symlink(const char *from, const char *to) {
|
|||||||
static int s3fs_rename(const char *from, const char *to) {
|
static int s3fs_rename(const char *from, const char *to) {
|
||||||
cout << "rename[from=" << from << "][to=" << to << "]" << endl;
|
cout << "rename[from=" << from << "][to=" << to << "]" << endl;
|
||||||
|
|
||||||
|
// renaming (moving) directories is not supported at this time
|
||||||
|
// if the first argument is a directory, report the limitation
|
||||||
|
// and do nothing, this prevents the directory's children
|
||||||
|
// from just disappearing
|
||||||
|
//
|
||||||
|
// TODO: support directory renaming
|
||||||
|
|
||||||
|
struct stat buf;
|
||||||
|
int result;
|
||||||
|
string fullpath;
|
||||||
|
|
||||||
|
fullpath = mountpoint;
|
||||||
|
fullpath.append(from);
|
||||||
|
|
||||||
|
result = stat(fullpath.c_str(), &buf);
|
||||||
|
if (result == -1) {
|
||||||
|
syslog(LOG_ERR, "###file: %s code:%d error:%s", from, result, strerror(errno));
|
||||||
|
} else {
|
||||||
|
if (S_ISDIR( buf.st_mode )) {
|
||||||
|
return -ENOTSUP;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// preserve meta headers across rename
|
// preserve meta headers across rename
|
||||||
headers_t meta;
|
headers_t meta;
|
||||||
VERIFY(get_headers(from, meta));
|
VERIFY(get_headers(from, meta));
|
||||||
@ -1086,7 +1109,7 @@ static int s3fs_rename(const char *from, const char *to) {
|
|||||||
meta["Content-Type"] = lookupMimeType(to);
|
meta["Content-Type"] = lookupMimeType(to);
|
||||||
meta["x-amz-metadata-directive"] = "REPLACE";
|
meta["x-amz-metadata-directive"] = "REPLACE";
|
||||||
|
|
||||||
int result = put_headers(to, meta);
|
result = put_headers(to, meta);
|
||||||
if (result != 0)
|
if (result != 0)
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user