[darwinbuild-changes] [646] branches/PR-7250612/darwinup/File.cpp
source_changes at macosforge.org
source_changes at macosforge.org
Mon Dec 7 13:52:12 PST 2009
Revision: 646
http://trac.macosforge.org/projects/darwinbuild/changeset/646
Author: wsiegrist at apple.com
Date: 2009-12-07 13:52:12 -0800 (Mon, 07 Dec 2009)
Log Message:
-----------
Look for force option, add more debugging output.
Modified Paths:
--------------
branches/PR-7250612/darwinup/File.cpp
Modified: branches/PR-7250612/darwinup/File.cpp
===================================================================
--- branches/PR-7250612/darwinup/File.cpp 2009-12-07 21:34:08 UTC (rev 645)
+++ branches/PR-7250612/darwinup/File.cpp 2009-12-07 21:52:12 UTC (rev 646)
@@ -133,6 +133,7 @@
}
int File::install(const char* prefix, const char* dest) {
+ extern uint32_t force;
int res = 0;
Archive* archive = this->archive();
assert(archive != NULL);
@@ -157,22 +158,31 @@
// the file wasn't found, try to do on-demand
// expansion of the archive that contains it.
if (is_directory(dirpath) == 0) {
+ IF_DEBUG("[install] File::install on-demand archive expansion");
res = archive->expand_directory(prefix);
if (res == 0) res = this->install(prefix, dest);
} else {
// archive was already expanded, so
// the file is truly missing (worry).
+ IF_DEBUG("[install] File::install missing file in archive");
fprintf(stderr, "%s:%d: %s: %s (%d)\n", __FILE__, __LINE__, srcpath, strerror(errno), errno);
}
- //} else if (errno == ENOTDIR) {
+ } else if (force && errno == ENOTDIR) {
// a) some part of destination path does not exist
// b) from is a directory, but to is not
- //} else if (errno == EISDIR) {
+ IF_DEBUG("[install] File::install ENOTDIR\n");
+ } else if (force && errno == EISDIR) {
// to is a directory, but from is not
- //} else if (errno == ENOTEMPTY) {
+ IF_DEBUG("[install] File::install EISDIR\n");
+ } else if (force && errno == ENOTEMPTY) {
// to is a directory and is not empty
+ IF_DEBUG("[install] File::install ENOTEMPTY\n");
} else {
+ if (!force) {
+ fprintf(stderr, "ERROR: darwinup cannot handle what you are trying to do. You can use the force option to allow more potentially-unsafe operations.\n");
+ }
fprintf(stderr, "%s:%d: %s: %s (%d)\n", __FILE__, __LINE__, dstpath, strerror(errno), errno);
+ fprintf(stderr, "ERROR: fatal error during File::install. Cannot continue.\n");
}
} else {
IF_DEBUG("[install] rename(%s, %s)\n", srcpath, dstpath);
@@ -286,7 +296,7 @@
// existing one, since that would move the entire
// sub-tree, and lead to a lot of ENOENT errors.
int res = 0;
-
+ extern uint32_t force;
char* dstpath;
join_path(&dstpath, dest, this->path());
@@ -297,10 +307,23 @@
IF_DEBUG("[install] mkdir(%s, %04o)\n", dstpath, mode);
if (res == 0) res = mkdir(dstpath, mode);
if (res && errno == EEXIST) res = 0;
- if (res != 0) fprintf(stderr, "ERROR: %s:%d: %s: %s (%d)\n", __FILE__, __LINE__, dstpath, strerror(errno), errno);
- if (res == 0) res = chown(dstpath, uid, gid);
- if (res != 0) fprintf(stderr, "ERROR: %s:%d: %s: %s (%d)\n", __FILE__, __LINE__, dstpath, strerror(errno), errno);
+ if (force && res == -1 && errno == ENOTDIR) {
+ // some part of destination path is not a directory
+ IF_DEBUG("[install] Directory::install ENOTDIR1\n");
+ } else if (res == -1) {
+ fprintf(stderr, "ERROR: %s:%d: %s: %s (%d)\n", __FILE__, __LINE__, dstpath, strerror(errno), errno);
+ fprintf(stderr, "ERROR: unable to create %s \n", dstpath);
+ }
+
+ if (res == 0) {
+ res = chown(dstpath, uid, gid);
+ if (res != 0) {
+ fprintf(stderr, "ERROR: %s:%d: %s: %s (%d)\n", __FILE__, __LINE__, dstpath, strerror(errno), errno);
+ fprintf(stderr, "ERROR: unable to change ownership of %s \n", dstpath);
+ }
+ }
+
free(dstpath);
return res;
}
@@ -377,12 +400,20 @@
File* file = NULL;
struct stat sb;
int res = 0;
+ extern uint32_t force;
res = lstat(path, &sb);
if (res == -1 && errno == ENOENT) {
+ // destination does not have a matching node
return NULL;
- } else if (res == -1) {
+ } else if (force && res == -1 && errno == ENOTDIR) {
+ // some part of destination path does not exist
+ IF_DEBUG("[ ] FileFactory ENOTDIR\n");
+ return NULL;
+ }
+ if (res == -1) {
fprintf(stderr, "%s:%d: %s: %s (%d)\n", __FILE__, __LINE__, path, strerror(errno), errno);
+ fprintf(stderr, "ERROR: unable to stat %s \n", path);
return NULL;
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/darwinbuild-changes/attachments/20091207/78370cfe/attachment-0001.html>
More information about the darwinbuild-changes
mailing list